Как реализовать пакетное обновление внешних отчетов и обработок в нескольких базах 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Вариант 1. Использование расширений конфигурации и специализированных утилит

Один из самых простых и надежных способов — перенос логики внешних отчетов в расширения конфигурации. Рассмотрим, почему это удобно. Во-первых, расширения позволяют централизованно управлять кодом. Во-вторых, современные версии платформы позволяют обновлять расширения «на лету», если они не содержат изменений структуры данных (метаданных).

Проанализируем связку расширений с инструментом «Обновлятор-1С». Этот программный комплекс позволяет выполнять пакетные операции над списком баз. Мы можем подготовить одно расширение, содержащее все необходимые дополнительные отчеты, и через «Обновлятор» запустить задачу «Установить расширение» для всех 20 баз одновременно. Это занимает считанные минуты.

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

Вариант 2. Автоматизация через командную строку и параметр /execute

Разберем классический способ автоматизации через скрипты. Мы можем запустить сеанс 1С в режиме предприятия с параметром /execute, указав путь к специально подготовленной «служебной» обработке. Эта обработка при запуске будет выполнять следующие действия:

  1. Проверять наличие новой версии целевого отчета в сетевом каталоге или по HTTP-ссылке.
  2. Программно обращаться к справочнику ДополнительныеОтчетыИОбработки.
  3. Обновлять двоичные данные файла и версию объекта.
  4. Завершать работу системы командой ЗавершитьРаботуСистемы().

Посмотрим на пример кода, который может использоваться внутри такой «обновляющей» обработки для регистрации объекта в БСП:


// Пример программного обновления внешней обработки в справочнике БСП
ОбъектСправочника = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("МояПечатнаяФорма");
Если Не ОбъектСправочника.Пустая() Тогда
    Объект = ОбъектСправочника.ПолучитьОбъект();
    ДвоичныеДанныеФайла = Новый ДвоичныеДанные("C:\Updates\NewReport.epf");
    Объект.ХранилищеОбработки = Новый ХранилищеЗначения(ДвоичныеДанныеФайла);
    Объект.Версия = "1.0.0.5";
    
    // Вызов метода БСП для корректной регистрации изменений
    ДополнительныеОтчетыИОбработки.ЗаписатьОбъектВТранзакции(Объект);
    Сообщить("Объект успешно обновлен");
КонецЕсли;

Вариант 3. Современный подход с использованием ibcmd и OneScript

Для администраторов и разработчиков, предпочитающих современные методы DevOps, рекомендуется обратить внимание на утилиту ibcmd и интерпретатор OneScript (oscript.io). Выясним, в чем их преимущество.

Утилита ibcmd позволяет взаимодействовать с базой данных без запуска тяжелого графического клиента. С ее помощью можно выполнять импорт и экспорт данных. В свою очередь, OneScript позволяет написать сценарий на языке 1С, который будет перебирать список ваших баз и выполнять в них код через COM-соединение или HTTP-сервисы.

Существуют готовые библиотеки для OneScript, такие как v8runner, которые упрощают запуск задач в нескольких информационных базах. Это позволяет исключить человеческий фактор и автоматизировать добавление отчетов, даже если их еще нет в базе-приемнике.

Вариант 4. Использование HTTP-сервисов для «пуш-уведомлений» об обновлениях

Если ваши базы доступны по сети, проанализируем архитектуру с центральной «эталонной» базой. В каждой базе-клиенте можно опубликовать небольшой HTTP-сервис, принимающий POST-запросы.

Алгоритм работы будет следующим:

  1. Вы загружаете новый отчет в «эталонную» базу.
  2. Центральная база по очереди опрашивает все 20 баз через HTTP-запрос.
  3. В теле запроса передаются двоичные данные файла обработки в формате Base64.
  4. База-приемник принимает файл и программно создает или обновляет элемент в справочнике ДополнительныеОтчетыИОбработки.

Этот метод считается наиболее стабильным в современных реалиях, так как он не зависит от настроек COM-соединения и разрядности сервера 1С (32/64 бит), которые часто становятся причиной ошибок при пакетной обработке баз.

Вариант 5. Программная регистрация через методы БСП

Независимо от выбранного способа доставки файла (будь то скрипт или HTTP), крайне важно правильно зарегистрировать отчет в логике БСП. Рассмотрим, какие методы следует использовать для корректной работы механизмов безопасности и прав доступа.

При программном создании нового элемента справочника необходимо вызвать метод регистрации, чтобы система проставила настройки публикации и создала необходимые записи в регистрах сведений:


// Регистрация объекта через интерфейс БСП
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.ПараметрыРегистрацииДляОбновления() ;
ПараметрыРегистрации.ЗаписатьВТранзакции = Истина;
ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбъект(СсылкаНаОбъект, ПараметрыРегистрации);

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

Резюме и рекомендации

Подводя итоги, выберем оптимальный путь развития:

Помните, что при автоматизации массового обновления всегда следует сначала протестировать скрипт на одной копии базы, чтобы убедиться в корректности заполнения всех реквизитов справочника ДополнительныеОтчетыИОбработки, таких как Размещение и Команды.

← На главную