Как убрать окно выбора вида операции при открытии документов после обновления нетиповой конфигурации 1С

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Выясняем причину появления окна выбора операции

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

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

Однако при ручном переносе доработок измененной конфигурации часто возникают ситуации, когда:

  1. Были затерты или не перенесены типовые процедуры обновления данных.
  2. Номер версии конфигурации в константе был изменен вручную, из-за чего штатный механизм обновления посчитал, что все процедуры заполнения данных уже выполнены.

Способ 1. Программное заполнение реквизита с отключением обработчиков

Разберем самый быстрый способ решения проблемы — программный обход документов с установкой флага ОбменДанными.Загрузка = Истина. Этот флаг позволяет записать объект без вызова обработчиков событий (ПередЗаписью, ПриЗаписи) и без выполнения проверок заполнения полей или даты запрета изменения данных.

Рассмотрим пример кода внешней обработки, заполняющей реквизит ВидОперации:


Выборка = Документы.СОПеречислениеВФонды.Выбрать();
Пока Выборка.Следующий() Цикл
    Если НЕ ЗначениеЗаполнено(Выборка.ВидОперации) Тогда
        ДокОбъект = Выборка.ПолучитьОбъект();
        ДокОбъект.ВидОперации = Перечисления.ВидыОперацийСОПеречислениеВФонды.ПеречислениеСоцОтчислений;
        ДокОбъект.ОбменДанными.Загрузка = Истина;
        ДокОбъект.Записать();
    КонецЕсли;
КонецЦикла;

Важное предупреждение: использование режима Загрузка = Истина требует осторожности. Если при добавлении нового вида операции в документе появились новые связанные реквизиты или изменения в регистрах учета, простая запись объекта скроет окно выбора, но может оставить незаполненной внутреннюю аналитику. В будущем при попытке перепровести такой документ могут возникнуть ошибки.

Способ 2. Использование штатных сервисных обработок

Если нет необходимости писать код с нуля, можно воспользоваться встроенными сервисно-групповыми инструментами платформы:

  1. Для конфигураций на обычных формах используем обработку «Групповая обработка справочников и документов».
  2. Для конфигураций на управляемых формах используем инструмент «Групповое изменение реквизитов».

Настроим отбор по документам, у которых реквизит ВидОперации не заполнен, и укажем требуемое значение по умолчанию. Обработка массово обновит значение реквизита во всех выбранных документах.

Способ 3. Запуск штатных процедур обновления информационной базы

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

Способ 4. Подстановка значения по умолчанию в форме (без перезаписи документов)

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

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

← На главную