Каталог решений - Как не регистрировать стопку документов в планах обмена с включенной авторегистрацией при групповом перепроведении

Как не регистрировать стопку документов в планах обмена с включенной авторегистрацией при групповом перепроведении

Как не регистрировать стопку документов в планах обмена с включенной авторегистрацией при групповом перепроведении

В наличии

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

Категория:

Описание

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

Для начала я вкратце расскажу, как ручная регистрация происходит в типовой конфигурации:

  1. Перед записью документа вызывается событие «МеханизмРегистрацииОбъектовПередЗаписьюДокумента«, которое, собственно, и отвечает за регистрацию. Я пропущу большую часть всех условий, а перейду к сути.
  2. А именно к функции «ОбъектМодифицированДляПланаОбменаПопыткаИсключение«. Функция получает «ТаблицаРеквизитовРегистрации«, которая, по-видимому, берется из правил регистрации объектов. После чего для каждого реквизита или таблицы регистрации идет запрос (ЗАПРОС В ЦИКЛЕ) для значения реквизита до изменений. И идет сравнение с текущим значением реквизита. 
  3. В результате перед записью одного документа выполняется хренова куча кода с хреновой кучей запросов.

Скажу честно, такой подход мне показался не слишком оптимальным, и при этом достаточно МНОГОВРЕМЕНИЗАТРАЧИВАЕМЫМ для моей простой небольшой базы. Поэтому я и решил поискать способ попроще.

  1. Чтобы отменить авторегистрацию, нужно написать где-нибудь:
    Источник.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
  2. Я создал подписку перед записью документа и решил добавить простенькую проверку на модифицированность
    Если Не Источник.Модифицированность() Тогда
        Источник.ОбменДанными.Получатели.АвтоЗаполнение = Ложь; 
    КонецЕсли; 
  3. Каково же было моё удивление, что она не работает))) Причем, даже есть проверять модифицированность в самом начале в модуле объекта. Решением стал вызов подписчика на процедуру «ОбработкаПроверкиЗаполнения«. Но и это не все! если проведение происходит из списка документов, то проверка на модифицированность даёт ЛОЖЬ, а если через форму документа (даже если ты просто нажал ОК) ИСТИНА.

В результате я спокойно при групповом перепроведении перепровожу документы, не опасаясь, что вся эта МАССА полезет обмениваться. 

has been added to your cart:
Оформление заказа