В процессе работы с конфигурацией «1С:Управление торговлей 10.3» специалисты нередко сталкиваются с ситуацией, когда в серии номенклатуры задним числом требуется указать или скорректировать номер ГТД либо страну происхождения. При попытке интерактивного или программного сохранения элемента система выдает ошибку: «Существуют документы, проведенные по серии... Реквизиты "Номер ГТД" и "Страна происхождения" не могут быть изменены, элемент не записан». Выясним причину такого поведения платформы, разберем программный способ обхода этой блокировки, а также оценим сопутствующие риски для учета и рассмотрим корректные альтернативные варианты решения.
Проанализируем архитектуру конфигурации. В справочнике СерииНоменклатуры в процедуре ПередЗаписью модуля объекта заложен типовой контроль целостности данных. Если элемент не является новым, при изменении реквизитов НомерГТД или СтранаПроисхождения система выполняет запрос к проведенным документам и регистрам накопления (таким как ТоварыНаСкладах, ТоварыОрганизаций, ПартииТоваровНаСкладах).
Если по данной серии зафиксировано хотя бы одно движение, платформа инициирует отказ от записи. Это сделано намеренно: серия в УТ 10.3 выступает ключевым аналитическим разрезом складского и партионного учета, а также основанием для заполнения печатных форм счетов-фактур и таможенных деклараций.
Для отключения встроенных проверок и событий модуля объекта в платформе 1С предусмотрен специальный механизм обмена данными. Установка свойства ОбменДанными.Загрузка в значение Истина позволяет подавить выполнение кода в процедурах ПередЗаписью и ПриЗаписи.
Посмотрим на пример программного кода внешней обработки для принудительного обновления реквизитов серии:
СерияОбъект = СсылкаНаСерию.ПолучитьОбъект();
СерияОбъект.ОбменДанными.Загрузка = Истина;
СерияОбъект.НомерГТД = НовыйНомерГТД;
СерияОбъект.СтранаПроисхождения = НоваяСтрана;
// При необходимости обновляем наименование серии
СерияОбъект.Наименование = СокрЛП(НовыйНомерГТД) + ", " + СокрЛП(НоваяСтрана);
СерияОбъект.Записать();
Разберем по шагам, что происходит при выполнении этого алгоритма:
ПолучитьОбъект() мы получаем экземпляр справочника для редактирования.ОбменДанными.Загрузка присваиваем значение Истина. Это отключает типовую валидацию на наличие проведенных документов.Наименование, так как типовой алгоритм автоматического формирования наименования серии в обработчиках записи при включенном режиме загрузки выполняться не будет.Записать(), который сохраняет изменения напрямую в базу данных.Использование свойства ОбменДанными.Загрузка = Истина действительно открывает доступ к изменению защищенных реквизитов, однако несет серьезные учетные риски. Проанализируем, к чему приводит подобное вмешательство:
НомерГТД, не изменив строковое поле Наименование, в отчетах и подборе номенклатуры возникнет путаница.Рассмотрим альтернативное решение, которое позволяет избежать изменения данных закрытого периода и не требует программного отключения проверок конфигурации:
СерииНоменклатуры абсолютно новую серию с корректным номером ГТД и страной происхождения.СписаниеТоваров (с указанием старой серии) и ОприходованиеТоваров (с указанием новой серии) по одинаковой себестоимости либо используем документ КорректировкаЗаписейРегистров.Такой подход гарантирует сохранность данных в закрытых периодах, обеспечивает юридическую чистоту ранее выставленных первичных документов и исключает расхождения при последующих обменах данными с регламентированными системами учета.