Как передать Excel с клиента в типовой отчёт БСП и ничего не сломать

17.07.26

Интеграция - Загрузка и выгрузка в Excel

Любите на каждый чих копировать и брать в расширение типовую форму отчета? Считаете, что СКД годится только для оборотов? Тогда мы идём к вам!

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Как передать Excel с клиента в типовой отчёт БСП и ничего не сломать
.zip 16,38Kb
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Как передать Excel с клиента в типовой отчёт БСП и ничего не сломать

 

Постановка

Есть внешний отчёт, которому нужны данные из файлов Excel на компьютере пользователя. Читать файлы следует на клиенте - клиент у нас на Windows, - а обрабатывать данные, обращаться к справочникам и формировать результат нужно на сервере. Сервер уже как повезёт: Windows ему никто не обещал.

При этом хочется пользоваться всеми прелестями типовой формы отчёта БСП: вариантами, настройками, отборами, расшифровками, фоновым формированием и привычным интерфейсом.

Конечно, мы не варвары, чтобы копировать типовую форму или ломать её. Поэтому воспользуемся возможностями, которые нам любезно предоставила БСП.

 

Подключаемся к типовой форме

В регистрационных сведениях внешнего отчёта устанавливаем:

Параметры.ОпределитьНастройкиФормы = Истина;

После этого БСП вызывает экспортные обработчики отчёта. Через ОпределитьНастройкиФормы() и ПриСозданииФормы() можно добавить собственную команду в стандартную форму, не копируя её.

Наша команда предлагает выбрать каталог, читает Excel на клиенте и записывает подготовленные данные в параметр СКД. Дальше пользователь нажимает обычную кнопку «Сформировать», и отчёт продолжает жить по правилам БСП.

 

Почему не временное хранилище

Первой приходит очевидная мысль: вызвать ПоместитьВоВременноеХранилище() и передать в отчёт адрес. Но адрес временного хранилища нельзя надёжно передать в фоновое задание формирования отчёта: фоновое задание работает уже в другом контексте.

Здесь возникает интересный эффект — с такой реализацией отчёт работает только в режиме отладки! Пока формирование выполняется в текущем сеансе, данные находятся. Как только типовая форма отправляет отчёт в фон, адрес становится бесполезным.

Можно было бы передать ХранилищеЗначения, но, чтобы создать ХранилищеЗначения, нужен сервер. Значит, клиентский модуль должен сделать серверный вызов только ради упаковки уже прочитанных данных. Нам этого не хочется.

Вот так мы и пришли к параметру-строке.

 

Строка, сериализация и сжатие

Алгоритм на клиенте получается простым:

  1. Прочитать Excel.
  2. Собрать массив структур только из переносимых типов: строк, чисел и дат.
  3. Сериализовать массив в JSON.
  4. Сжать JSON в ZIP.
  5. Преобразовать архив в Base64.
  6. Записать полученную строку в скрытый параметр СКД.

Схематично это выглядит так:

СтрокаJSON = СериализоватьВJSON(Данные);
СжатыеДанные = СжатьСтрокуВBase64(СтрокаJSON);
УстановитьПараметрОтчета(ФормаОтчета, "ДанныеФайлов", СжатыеДанные);

Почему не передавать JSON без сжатия? Потому что табличные данные хорошо сжимаются: повторяются имена полей, структура строк и похожие значения. На наших примерах ZIP с последующим Base64 уменьшает передаваемую строку примерно в восемь раз по сравнению с исходным JSON.

Да, Base64 немного увеличивает размер архива, но результат всё равно значительно компактнее несжатого JSON.

 

Чтобы пользователь не нервничал

 

 

Excel читается на клиенте, причём чтение нескольких файлов через COM может занять заметное время. Оставлять пользователя перед неподвижной формой с вопросом «оно работает или уже умерло?» не стоит. Практика показывает, что через несколько минут этот вопрос всё равно зададут программисту.

Писать ради этого ещё одну форму прогресса было бы привычным решением: сначала создать проблему, затем окружить её собственным интерфейсом. К счастью, на этот раз можно остановиться раньше. В составе БСП уже есть общая форма длительной операции:

ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(Неопределено);
ФормаПрогресса = ПолучитьФорму(
	"ОбщаяФорма.ДлительнаяОперация",
	ПараметрыОжидания,
	ФормаОтчета);
ФормаПрогресса.Открыть();

Перед чтением очередного файла обновляем поясняющий текст:

ФормаПрогресса.Элементы.ДекорацияПоясняющийТекстДлительнойОперации.Заголовок =
	СтрШаблон("(%1 / %2) %3", НомерФайла, КоличествоФайлов, ИмяФайла);

Пользователь видит, какой файл сейчас читается и сколько их осталось. После завершения клиентской части форму прогресса закрываем, а обычное формирование отчёта дальше выполняет типовая форма БСП, в том числе в фоне.

 

Что происходит на сервере

В ПриКомпоновкеРезультата() отчёт получает строковый параметр, выполняет обратные действия и восстанавливает массив:

ДвоичныеДанныеАрхива = Base64Значение(СтрокаBase64);
// Распаковка ZIP во временный каталог.
СтрокаJSON = РаспаковатьСтроку(СтрокаBase64);
Данные = ПрочитатьJSON(ЧтениеJSON, Ложь, "Дата", ФорматДатыJSON.ISO);

После этого уже на сервере можно искать контрагентов по ИНН, номенклатуру по артикулу, выполнять запросы и передавать таблицы во внешние наборы данных СКД.

Клиентский модуль при этом не делает серверных вызовов. Он отвечает только за локальные файлы и упаковку данных. Сервер отвечает за базу и формирование отчёта.

 

Что получили

 

 

В результате:

  • типовая форма отчёта осталась типовой;
  • отчет формируется в фоне (кроме клиентской части, конечно);
  • клиент читает Excel без серверных вызовов - пока мы на винде, в нашем распоряжении COM и весь виндовский инструментарий;
  • сервер получает все исходные данные одним параметром;
  • передаваемый объём уменьшается примерно в восемь раз;
  • настройки, варианты, отборы и весь штатный арсенал БСП остаются с нами.

Редкий приятный результат: ещё один механизм не пришлось копировать, переписывать и затем годами сопровождать. Мы воспользовались штатными точками расширения БСП, и типовая форма осталась типовой.

 

PS. Почему не ТабличныйДокумент.Прочитать()?

Потому что исходные файлы были не такими простыми. Иначе этой статьи, к счастью, не понадобилось бы.

PPS. Расширение, отчёт и эта статья написаны целиком с помощью нейронки - с предоставлением ей оригинала, конечно. Самостоятельно догадываться о требованиях она пока умеет примерно как обычный разработчик.

PPPS. Панель разделов скрывается CTRL+SHIFT+~

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 11, релизы 11.5.12.195

Вступайте в нашу телеграмм-группу Инфостарт

отчет excel бсп клиент-сервер ии gpt codex

См. также

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы преобразуете необходимые документы для Wildberries, OZON, ЯндексМаркет, ЛаМода, Мегамаркет, Aliexpress, Детский мир, Магнит Маркет (быв.МагнитЭкспресс), Лемана про, ЭНФАНТА (Акушерство), Летуаль, Твой дом, Золотое Яблоко, Каспи, Авито, Аптеки+ в документы "Отчет комиссионера (агента) о продажах" и другие. Работает в 1С:БП 3.0, 1С:БП 3.0 КОРП, 1С:УТ 11, 1С:УНФ, 1С:ERP.

5490 руб.

12.08.2021    46857    611    71    

223

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

12444 руб.

29.10.2014    234188    757    540    

502

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 14.05.2026, версия 9.3.1 - 10.7.2)

20740 руб.

20.11.2015    176707    427    397    

544

Маркетплейсы Загрузка и выгрузка в Excel Программист Пользователь 1С:Предприятие 8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Загрузка данных отчета о реализации и продаже товаров из сервиса Яндекс.Маркета «Беру» из отчетов Excel для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3; Управление нашей фирмой, редакция 3.0 и Розница, редакция 3.0 в документ «Отчет комиссионера о продажах».

6000 руб.

09.12.2020    30447    301    1    

148
Для отправки сообщения требуется регистрация/авторизация