Почему перестал работать скрипт автозаполнения шаблона в 1С:Документооборот 2.1 и как это исправить?

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

При переходе на новые версии программных продуктов «1С» часто возникают ситуации, когда ранее исправно работающие скрипты и механизмы неожиданно дают сбой. Особенно часто с этим сталкиваются администраторы и разработчики системы «1С:Документооборот» при обновлении конфигурации до версии 2.1 КОРП. В этой статье мы подробно рассмотрим проблему, с которой столкнулся автор темы на форуме: после обновления перестал работать скрипт автозаполнения, выводящий адрес организации-получателя для отправки корреспонденции. Мы выясним причины этой ошибки, проанализируем синтаксические и логические опечатки в исходном коде, предоставим полностью рабочий вариант скрипта и расскажем, как пользоваться отладчиком в таких специфических задачах.

Анализ причин сбоя при переходе на 1С:Документооборот 2.1

Выясним, почему именно после обновления конфигурации перестал работать скрипт автозаполнения шаблона. Начиная с версии «1С:Документооборот» 2.1.1, разработчики фирмы «1С» провели глобальный рефакторинг структуры метаданных. Справочник Корреспонденты был переименован в Контрагенты.

Это изменение было продиктовано необходимостью унификации прикладных решений на платформе «1С:Предприятие 8». Во всех современных конфигурациях (таких как «1С:ERP Управление предприятием», «1С:Комплексная автоматизация», «1С:Управление торговлей») традиционно используется понятие «Контрагенты». Приведение «1С:Документооборота» к общему стандарту упрощает интеграцию систем и снижает порог входа для разработчиков.

Однако при обновлении существующей базы данных на версию 2.1 автоматически изменяются только стандартные объекты конфигурации. Все кастомные доработки, написанные в процессе внедрения, требуют ручной проверки и адаптации. Это касается следующих объектов:

В коде скриптов старые обращения к объектам корреспондентов вызывают ошибки выполнения, так как платформа больше не находит метаданные с таким именем.

Разбор ошибок в исходном скрипте автора

Проанализируем исходный код, который предоставил автор темы. Даже если бы мы просто заменили слово «Корреспонденты» на «Контрагенты», данный скрипт все равно завершился бы аварийно по ряду других причин. Неопытные разработчики часто совершают типичные ошибки, которые критичны для компилятора 1С. Рассмотрим их подробнее:

  1. Попытка присвоить цикл переменной.

    Автор пишет в начале кода: РезультатОбработки = Для Сч = 0 По .... Встроенный язык «1С:Предприятия» является процедурным. Конструкция цикла Для ... Цикл не возвращает никакого значения, поэтому ее нельзя присвоить переменной. Подобная запись вызовет синтаксическую ошибку компиляции: "Ожидается символ '='". Присваивать финальный результат переменной РезультатОбработки (которая в правилах автозаполнения является стандартной возвращаемой переменной) нужно строго после завершения цикла.

  2. Отсутствие инициализации переменной.

    Внутри цикла мы видим строчку: Данные = ?(ЗначениеЗаполнено(Строка(Данные)), Строка(Данные) + ... , Строка(Данные)) + .... Здесь происходит накопление текстовой информации в переменную Данные. Однако перед началом цикла эта переменная нигде не объявлена и не инициализирована. На первой итерации цикла, когда программа попытается прочитать текущее значение Данные, система выдаст ошибку "Переменная не определена (Данные)". Перед входом в цикл обязательно нужно явно задать начальное значение переменной: Данные = "";.

  3. Опечатка в имени предопределенного элемента.

    В исходном коде указано: Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресКонтрагены. Здесь допущены сразу две ошибки. Во-первых, пропущена буква «т» в слове "Контрагенты". Во-вторых, в типовых конфигурациях 1С, использующих Библиотеку стандартных подсистем (БСП), предопределенные элементы справочников именуются в единственном числе. Правильное имя предопределенного элемента — ПочтовыйАдресКонтрагента. Любая опечатка в имени предопределенного элемента приведет к ошибке выполнения: "Элемент не найден".

  4. Опечатка в имени функции общего модуля БСП.

    Автор использует вызов: УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта(...). Обратите внимание на окончание в слове "Информация". В БСП этот метод называется ПолучитьКонтактнуюИнформациюОбъекта (с буквой «у» на конце). Несоблюдение точного имени функции гарантированно вызовет ошибку "Метод объекта не обнаружен".

Правильный и оптимизированный вариант скрипта

Исправим все указанные недочеты и напишем чистый, работоспособный код для автозаполнения шаблона. Мы добавим правильную инициализацию переменных, исправим синтаксис цикла и обращение к методам БСП.

Разберем рабочий код по шагам:


// Шаг 1. Инициализируем переменную для сбора текстовых данных
Данные = "";

// Шаг 2. Запускаем цикл по всем получателям документа
Для Сч = 0 По (Файл.ВладелецФайла.Получатели.Количество() - 1) Цикл
    
    // Получаем ссылку на объект получателя (контрагента)
    ПолучательОбъект = Файл.ВладелецФайла.Получатели[Сч].Получатель;
    
    // Шаг 3. Безопасно получаем почтовый адрес контрагента через БСП
    Адрес = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформациюОбъекта(
        ПолучательОбъект, 
        Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресКонтрагента
    );
    
    // Получаем полное наименование контрагента
    ПолучательНаименование = ПолучательОбъект.ПолноеНаименование;
    
    // Шаг 4. Формируем результирующую строку. 
    // Если переменная "Данные" уже содержит текст, добавляем два переноса строк для разделения адресатов.
    Данные = ?(ЗначениеЗаполнено(Данные), Данные + Символы.ПС + Символы.ПС, "") 
             + Строка(ПолучательНаименование) + Символы.ПС + Строка(Адрес);
             
КонецЦикла;

// Шаг 5. Записываем результат в предопределенную переменную автозаполнения шаблона
РезультатОбработки = Данные;

Этот скрипт корректно обходит список получателей, указанных в карточке документа «1С:Документооборот», извлекает их полные наименования и зарегистрированные в системе почтовые адреса, после чего формирует структурированный текст для вставки в файл (например, в формате Microsoft Word или PDF).

Как работает отладчик 1С и как его применить для автозаполнения

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

Посмотрим, как настроить и запустить процесс отладки.

Шаг 1. Запуск сеанса отладки

  1. Откройте информационную базу в режиме «Конфигуратор».
  2. В главном меню выберите пункт Отладка — Начать отладку или просто нажмите клавишу F5 на клавиатуре.
  3. Запустится обычный клиентский сеанс «1С:Предприятие», который будет «привязан» к вашему Конфигуратору.

Шаг 2. Особенности серверной отладки

Автозаполнение шаблонов файлов в «1С:Документооборот» выполняется на стороне сервера приложений «1С:Предприятие» (если база клиент-серверная). По умолчанию отладка на сервере может быть отключена. Чтобы она заработала:

Шаг 3. Как отлаживать динамический код автозаполнения

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

Рассмотрим четыре проверенных практических метода, которые используют опытные специалисты для отладки таких скриптов:

Метод 1: Штатная проверка настройки заполнения

Это самый простой и безопасный способ, не требующий изменения кода. В карточке правила автозаполнения шаблона (в режиме «1С:Предприятие») присутствует кнопка «Проверить настройку заполнения». При её нажатии система предложит выбрать тестовый документ и попытается сформировать файл. Если в вашем скрипте есть опечатка или синтаксическая ошибка, система выведет на экран подробный протокол ошибок с указанием строки и характера сбоя.

Метод 2: Использование внешней обработки

Если логика скрипта сложная и её нужно пройти пошагово:

  1. Создайте новую внешнюю обработку в Конфигураторе.
  2. В модуле формы этой обработки создайте процедуру и скопируйте туда код вашего скрипта.
  3. Вместо неявных контекстных переменных (таких как Файл) жестко пропишите получение конкретного тестового файла из базы данных по его ссылке или GUID.
  4. Поставьте точку останова (клавиша F9) внутри этой процедуры и запустите обработку в режиме предприятия. Теперь вы сможете пошагово анализировать код с помощью клавиш F11 (шаг со входом в процедуру) и F10 (шаг без входа).

Метод 3: Искусственное прерывание через исключение

Если вам нужно срочно узнать, что находится в конкретной переменной во время работы скрипта в реальной базе, можно использовать оператор вызова исключения. Вставьте эту строку в то место кода, где хотите "остановиться":

ВызватьИсключение "Текущее значение адреса: " + Строка(Адрес);

Когда система дойдет до этой строчки, процесс генерации файла прервется, и на экран пользователя будет выведено стандартное окно ошибки с вашим текстом. Таким образом, вы мгновенно увидите содержимое переменной Адрес.

Метод 4: Логирование в Журнал регистрации

Для фонового анализа без прерывания работы пользователей можно записывать промежуточные результаты работы скрипта в системный журнал регистрации. Для этого используйте следующую конструкцию:


ЗаписьЖурналаРегистрации(
    "ТестАвтозаполнения",
    УровеньЖурналаРегистрации.Информация,
    ,
    ,
    "Для получателя " + ПолучательНаименование + " получен адрес: " + Строка(Адрес)
);

После выполнения автозаполнения откройте Журнал регистрации в режиме «1С:Предприятие», установите отбор по событию "ТестАвтозаполнения" и проанализируйте записанные системой данные.

Мы детально разобрали особенности перехода на версию «1С:Документооборот» 2.1 КОРП, устранили все синтаксические и логические недоработки в коде автозаполнения шаблонов и познакомились с инструментами отладки. Надеемся, что эти практические рекомендации помогут вам успешно решать аналогичные интеграционные задачи в вашей повседневной работе с экосистемой «1С».

← На главную