В процессе работы с конфигурацией 1С:Управление торговлей 11 (а также в комплексных решениях 1С:ERP и 1С:Комплексная автоматизация) можно столкнуться с неочевидной ситуацией: документ Установка цен номенклатуры успешно проводится без сообщений об ошибках, однако записи в регистре сведений ЦеныНоменклатуры отсутствуют. Таблица движений при отладке оказывается абсолютно пустой. Проанализируем, почему возникает такое поведение, разберем скрытые механизмы проведения документа и рассмотрим способы решения проблемы.
Формирование записей по регистру ЦеныНоменклатуры выполняется с помощью пакетного запроса при проведении документа. В типовом алгоритме платформы заложено строгое условие фильтрации строк ценообразования. Позиция номенклатуры может сформировать движения только в том случае, если выполняется одно из условий:
ИспользованиеХарактеристик принимает значение Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать.ИспользованиеХарактеристик не равно значению «Не использовать», но в строке документа явно заполнена характеристика (значение не равно пустой ссылке справочника ХарактеристикиНоменклатуры).Если номенклатура создавалась программно или загружалась из внешнего источника (например, из файлов Excel, XML или через API) без явного указания этого реквизита, в базе данных он остается равным пустой ссылке перечисления или значению NULL. В итоге при проведении документа первое условие запроса дает ложь (значение не равно «Не использовать»), и второе условие также дает ложь (характеристика пустая, так как учет по характеристикам в базе отключен). Строка отсекается на уровне отбора SQL-запроса, и в регистр ничего не записывается.
Разберем по шагам, как исправить карточки номенклатуры, которые уже загружены в программу с незаполненным значением реквизита:
Номенклатура.Использование характеристик Не заполнено (или не равно значению Не использовать).Использование характеристик и установим для него значение Не использовать.Установка цен номенклатуры и выполним его повторное проведение. Движения в регистре будут сформированы корректно.Выясним причину появления пустых реквизитов при разработке процедур импорта. Когда мы создаем новый элемент справочника Номенклатура программно, недостаточно просто присвоить наименование и артикул. Важно вызывать штатные механизмы инициализации объекта либо явно указывать значения ключевых перечислений.
Посмотрим на пример правильного программного создания элемента номенклатуры:
НовыйТовар = Справочники.Номенклатура.СоздатьЭлемент();
НовыйТовар.Заполнить(ВидНоменклатурыТовар);
НовыйТовар.Наименование = "Тестовый товар";
НовыйТовар.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
НовыйТовар.Записать();
Использование метода Заполнить() гарантирует, что типовая конфигурация подставит настройки из вида номенклатуры по умолчанию, а явное присвоение значения реквизиту ИспользованиеХарактеристик исключает сбои в алгоритмах проведения документов ценообразования.
Если реквизит ИспользованиеХарактеристик заполнен правильно, но движений по-прежнему нет, проверим следующие настройки системы:
ВидыЦен проверьте способ задания цены. Если для вида цены указан расчет по формуле или заполнение по данным информационной базы, и при этом снят признак хранения цен в базе, документ не создает физических записей в регистре. Такие цены рассчитываются «на лету» при оформлении документов продажи.Статус документа равен значению Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован, а реквизит Согласован имеет значение Истина. При статусе «Не согласован» движения не формируются.ЦеныНоменклатуры, а в регистр сведений ЦеныНоменклатуры25. Обязательно проверяйте движения через просмотр записей именно того регистра, который активен в функциональных опциях вашей базы.