Почему не создаются движения при программном создании документа Установка цен номенклатуры?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Разберем типичную ситуацию, с которой сталкиваются разработчики при автоматизации работы с ценами в 1С. Часто при программном создании и проведении документа УстановкаЦенНоменклатуры документ успешно записывается в базу, но не формирует никаких движений по регистрам. Это делает его фактически бесполезным, так как цены не вступают в силу. Давайте выясним, почему это происходит и как это исправить.

Основные причины отсутствия движений

При программном заполнении объекта 1С, в отличие от работы через интерфейс, система не выполняет автоматическое дозаполнение реквизитов, которые часто скрыты от пользователя, но критически важны для логики проведения. Рассмотрим по шагам, что нужно проверить в вашем коде.

  1. Статус документа. Современные типовые конфигурации (например, Управление торговлей или ERP) используют перечисления для управления жизненным циклом документа. Если не указать корректный статус, система может считать документ «черновиком» и блокировать его проведение.
  2. Валюты и единицы измерения. В документе УстановкаЦенНоменклатуры регистры цен требуют строгого указания валюты. Без заполнения реквизита валюты запись в регистр будет невозможна.
  3. Заполнение табличных частей. Недостаточно просто заполнить товары; важно соблюсти иерархию связей между табличными частями «Товары» и «ВидыЦен».

Шаг 1: Правильная установка статуса

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

Вместо использования устаревших логических значений, мы должны обратиться к перечислению СтатусыУстановокЦенНоменклатуры. Это позволит документу перейти в состояние, в котором он готов к проведению.


// Вместо старого метода задания статуса:
// ДокУЦ.Согласован = Истина; 

// Используйте современный подход:
РЦена.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;

Шаг 2: Проверка обязательных реквизитов

При заполнении табличных частей важно помнить, что 1С — это строго типизированная система. Если вы работаете с номенклатурой, убедитесь, что заполнены:

Проанализируем пример корректного заполнения:


РЦена = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
РЦена.Дата = ТекущаяДата();
// Добавляем вид цен
СтрокаВид = РЦена.ВидыЦен.Добавить();
СтрокаВид.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("РозничныеМагазина");

// Заполняем товары
Для каждого Стр из ТабДок Цикл
    Если ЗначениеЗаполнено(Стр.Товар) Тогда
        НоваяСтрока = РЦена.Товары.Добавить();
        НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Стр.Товар);
        НоваяСтрока.ВидЦены = СтрокаВид.ВидЦены;
        НоваяСтрока.Цена = Стр.Цена;
        // Важно: если система требует валюту или единицу, добавляем их здесь:
        // НоваяСтрока.Валюта = ...;
    КонецЕсли;
КонецЦикла;

РЦена.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
РЦена.Записать(РежимЗаписиДокумента.Проведение);

Шаг 3: Как убедиться, что документ проведен

Если вы все сделали правильно, но движений по-прежнему нет, разберем методику отладки. Даже если метод Записать(РежимЗаписиДокумента.Проведение) сработал без ошибок, это не гарантирует, что документ стал проведенным. Система может провести проверку внутри модуля объекта и отменить проведение в случае обнаружения пустых данных.

После вызова метода записи обязательно проверьте свойство Проведен:


РЦена.Записать(РежимЗаписиДокумента.Проведение);
Если Не РЦена.Проведен Тогда
    Сообщить("Документ не удалось провести из-за неполных данных!");
КонецЕсли;

Заключение и рекомендации

Работая с документом УстановкаЦенНоменклатуры, всегда учитывайте, что он является сложным объектом с развитой бизнес-логикой. В 90% случаев причиной отсутствия движений является пропуск одного из «скрытых» полей, которые система требует для регистра накопления или сведений ЦеныНоменклатуры. Если программное заполнение вызывает сложности, попробуйте сначала создать документ вручную, провести его и посмотреть в отладчике (через Просмотр значений), какие именно поля были заполнены в табличных частях. Это поможет вам выявить недостающие данные в вашем коде.

← На главную