История создания
На одном из проектов стояла задача — внедрить новый механизм работы с подписантами в печатных формах документов. Раньше должности и расшифровки были «зашиты» в коде жёстко, и любое кадровое изменение требовало вмешательства программиста.
Был разработан универсальный механизм правил, который позволил уполномоченным пользователям самостоятельно управлять составом подписантов. Но для его внедрения требовалось внести однотипные изменения в 52 внешние печатные формы.
Стандартный путь: выгрузить каждую форму из справочника ДополнительныеОтчетыИОбработки, открыть в Конфигураторе, найти блок кода, заменить его, сохранить и загрузить обратно. На 52 формы это несколько дней работы с риском пропустить ошибку в одной из форм.
Чтобы закрыть задачу за один рабочий день, был написан инструмент для массовой выгрузки и обратной загрузки файлов по заданным отборам. После внедрения стало понятно, что обработка применима и в других сценариях: миграции между базами, резервное копирование парка ВПФ, массовое обновление.
Возможности обработки
Отборы (работают в комбинации по логике «И»):
- По виду объекта: отчёт, обработка, печатная форма, заполнение объекта
- По назначению: конкретный документ, справочник, регистр
- По группе справочника (с учётом вложенности)
- По маске имени файла:
*— любая последовательность,?— один символ - Флаг «Только опубликованные» — выгружает только объекты с публикацией «Используется»
Новые возможности:
- Сохранение иерархии групп — при экспорте файлы раскладываются по папкам, соответствующим структуре справочника (по флагу «Сохранять иерархию»)
- Раздельные каталоги — отдельные поля для каталога экспорта и каталога импорта
- Рекурсивный поиск — при импорте обработка автоматически находит файлы во всех подкаталогах
Режимы работы:
- Заполнение таблицы: замена списка или добавление к существующим (без дублей)
- Импорт: перезапись хранилища найденного элемента. Если элемент с таким
ИмяФайлаотсутствует — файл пропускается с записью в лог ошибок
Контроль результата:
- Отметка успешно загруженных файлов в колонке «Загружен»
- Подробный лог операций в панели сообщений с разделением на информацию и ошибки
- Кнопка «Сбросить отборы» для быстрой очистки всех фильтров
Требования
- Платформа 8.3, управляемые формы
- Конфигурация на БСП со справочником
ДополнительныеОтчетыИОбработки(БП 3.0, ЗУП 3.1, УТ 11, ERP, УНФ и др.) - Права на изменение справочника дополнительных отчётов и обработок
Как пользоваться
Рисунок 1. Общий вид обработки. В верхней панели расположены отборы и параметры, в табличной части — список найденных отчётов, в нижней панели — результат последней операции
Сценарий 1: Массовая выгрузка
- Откройте обработку.
- В поле «Отбор вид» выберите нужный тип (например, «Печатная форма»).
- При необходимости уточните отбор по «Назначению» (например, «Приём на работу (Документ)») или укажите «Маску имени файла».
Рисунок 2. Гибкая система отборов: по виду объекта («Заполнение объекта»), назначению («Отражение зарплаты в бухучете»), маске имени файла. Всплывающая подсказка показывает синтаксис масок
- Нажмите «Заполнить» — в таблицу попадут все объекты, удовлетворяющие условиям (логика отборов — «И»).
- Выберите «Каталог выгрузки» через диалог выбора папки.
- Нажмите «Выгрузить».
Файлы .epf и .erf сохранятся в указанный каталог с именами, соответствующими реквизиту ИмяФайла справочника. В панели сообщений появится счётчик успешных выгрузок и список ошибок, если они возникли.
Рисунок 3. Результат выгрузки: файлы .erf сохранены в каталог C:\Temp\Файлы, в панели сообщений — «Успешно выгружено обработок: 40»
Сценарий 2: Обратная загрузка
- Внесите правки в выгруженные файлы (через Конфигуратор или внешний редактор).
- Поместите исправленные файлы в каталог, из которого будет выполняться загрузка.
- В обработке укажите этот каталог.
- Нажмите «Загрузить».
Обработка найдёт в каталоге все файлы с расширениями .epf и .erf, для каждого найдёт элемент справочника по реквизиту ИмяФайла, обновит его ХранилищеОбработки и отметит успешные загрузки зелёной галочкой в колонке «Загружен».
Рисунок 4. Результат загрузки: успешно обновлённые файлы отмечены зелёными галочками в колонке «Загружен», в панели сообщений — «Успешно обновлено файлов: 40»
Сценарий 3: Выгрузка с сохранением структуры групп
- Установите флаг «Сохранять иерархию».
- Укажите «Каталог выгрузки».
- Нажмите «Выгрузить» — файлы разложатся по папкам согласно структуре групп справочника.
- Скопируйте полученную папку в другое место для внесения правок.
- После внесения изменений укажите «Каталог загрузки» — путь к папке с изменёнными файлами.
- Нажмите «Загрузить» — обработка найдёт все .epf/.erf файлы рекурсивно и обновит соответствующие элементы справочника.
Как устроено
Заполнение списка
Один пакетный запрос с временной таблицей ВТ_Назначения. Отбор по назначению — через левое соединение с ВТ, в результат выводится объект назначения из первой строки ТЧ (НомерСтроки = 1).
Каждый фильтр (по виду, маске, группе, назначению, публикации) реализован через параметр-переключатель в тексте запроса. Если переключатель выключен — соответствующее условие не срабатывает.
Маска имени файла конвертируется функцией КонвертироватьМаскуДляПодобно: * → %, ? → _. Иерархический отбор — через В ИЕРАРХИИ.
При установленном флаге «Добавлять к существующему» в запрос передаётся массив уже добавленных ссылок — они исключаются условием НЕ Ссылка В (&УжеДобавлены).
Выгрузка
Серверная часть для каждой строки ТЧ:
- Получает объект справочника.
- Извлекает двоичные данные из
ХранилищеОбработки. - Помещает их во временное хранилище.
- Возвращает массив структур
ИмяФайла+АдресВХранилище.
Клиентская часть для каждой структуры вызывает ПолучитьФайл(Адрес, ПолныйПуть, Ложь).
Пустые хранилища и элементы без ИмяФайла пропускаются.
При установленном флаге «Сохранять иерархию» серверная функция формирует для каждого элемента относительный путь на основе структуры групп справочника. Функция ПолучитьПутьГруппы обходит родителей элемента от корня до непосредственного родителя. Имена очищаются функцией ОчиститьИмяДляПути от недопустимых символов файловой системы. Клиентская часть перед сохранением файла создаёт каталог функцией СоздатьКаталог.
Загрузка
Клиент сканирует каталог двумя вызовами НайтиФайлы — отдельно *.epf и *.erf. Каждый файл читается в ДвоичныеДанные и помещается во временное хранилище. Массив структур передаётся на сервер.
Серверная часть для каждого файла:
- Ищет элемент справочника через
НайтиПоРеквизиту("ИмяФайла", ...). - Если элемент не найден — пишет в лог ошибок и переходит к следующему. Новые элементы не создаются.
- Получает двоичные данные из ВХ, записывает:
Объект.ХранилищеОбработки = Новый ХранилищеЗначения(ДвоичныеДанные), затемОбъект.Записать(). - Имя успешного файла добавляется в массив
лУспешныеИмена.
После цикла сервер проходит по ТЧ формы и для строк, чьё ИмяФайла есть в массиве успешных, выставляет Загружен = Истина.
Ограничения
- Не выгружает группы, только элементы
- Файлы ищутся строго по
ИмяФайла. Если реквизит пуст — объект будет пропущен - Требуется доступ к файловой системе клиента
- При импорте новые элементы справочника не создаются — обновляются только существующие
Связанные публикации
Массовая правка модулей внешних обработок через штатный Конфигуратор. 1С 8.3
https://github.com/Vermutz/massovyy-eksport-i-import-dopolnitelnyh-otchetov-i-obrabotok
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.200.23
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.38.18
Вступайте в нашу телеграмм-группу Инфостарт