January 24

Нет слов, одни маты

Случилось тут одно происшествие. Расследование оного привело в состояние шока...

1С. План обмена для нестандартной интеграции. Авторегистрация почему-то отключена. Так решили предыдущие разработчики. Никогда не понимал какой в этом плюс, ну да ладно.

Допустим нам надо массово зарегистрировать изменения для всех чеков. Пишем явно:

ПланыОбмена.ЗарегистрироватьИзменения(Узел, Метаданные.Документы.ЧекККМ);

А как зарегистрировать изменение одного чека? Правильно, где-нибудь в подписке на событие обработки проведения (чтобы не при каждой записи, иначе зачем это все):

ПланыОбмена.ЗарегистрироватьИзменения(Узел, СсылкаНаЧек);

И вот интересно, что будет, если что-нибудь пойдет не так и в переменной окажется Неопределено? То есть, что будет, если:

ПланыОбмена.ЗарегистрироватьИзменения(Узел, Неопределено);

Ничего не произойдет, сработает исключение или еще что-нибудь? Читаем синтаксис помощник, а там... Та-дам!!!

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

Опущу многочисленные возникающие в голове и во рту маты. То есть, можно конечно это восстановить очистив изменения и зарегистрировав за сегодняшний день. А если в плане обмена много документов разных видов? Тут скорее всего понадобятся манипуляции с архивной копией. В общем, глядя на это, захотелось перестать быть программистом. Ну его нафиг. Лучше уж аналитиком каким, сидеть копипастить БТ в ТЗ и спрашивать сроки...

А правильно вот так:

Если СсылкаНаЧек <> Неопределено Тогда
    ПланыОбмена.ЗарегистрироватьИзменения(Узел, СсылкаНаЧек);
КонецЕсли;

←21 | заметка 22