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