Как программно создать и провести документ «Ввод начальных остатков» в 1С:Управление торговлей 11?

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

Программное создание документов ввода остатков в современных конфигурациях на базе 1С:ERP и 1С:Управление торговлей 11 (УТ 11) — это задача, требующая глубокого понимания структуры метаданных и взаимосвязей между различными объектами системы. В отличие от простых документов, таких как «Приходный кассовый ордер», ввод остатков является универсальным инструментом, поведение которого кардинально меняется в зависимости от выбранного типа операции. В этой статье мы подробно разберем, как преодолеть типичные трудности, возникающие у разработчиков при автоматизации этого процесса.

Разбор архитектуры: Хозяйственная операция и Тип операции

Одной из первых проблем, с которой мы сталкиваемся, является установка типа операции. В старых редакциях УТ 11 использовался реквизит УдалитьТипОперации. Однако в актуальных версиях (начиная с 11.4 и выше) архитектура документа была пересмотрена. Рассмотрим ситуацию подробнее: при программном заполнении новички часто пытаются использовать устаревшие реквизиты, что приводит к ошибкам проведения.

Проанализируем ситуацию: для корректной работы нам необходимо заполнять реквизит ХозяйственнаяОперация. Именно от него зависит, какие проверки будет выполнять система и какие табличные части станут доступными для заполнения. Например, если мы вводим остатки собственных товаров, нам нужно использовать значение ВводОстатковСобственныхТоваров из перечисления ХозяйственныеОперации.

Выясним причину, по которой параметр «тип операции» часто кажется обязательным, но неиспользуемым. На самом деле, система использует его для обратной совместимости, но логика проведения опирается на ХозяйственнаяОперация. Давайте посмотрим на пример правильной инициализации документа:


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

Работа со ставками НДС: Справочник вместо Перечисления

Распространенная ошибка при программном заполнении табличной части Товары — попытка присвоить реквизиту СтавкаНДС значение из перечисления. В платформе 1С 8.3 для конфигураций на управляемом коде ставки НДС давно вынесены в отдельный справочник СтавкиНДС.

Разберем по шагам, как правильно установить ставку НДС. Нам недостаточно просто найти элемент по наименованию "20%", так как в базе может быть несколько элементов с одинаковым названием, но разными параметрами для учета. Рекомендуется использовать экспортные функции типовой конфигурации. Рассмотрим пример получения ссылки на ставку НДС:


// Пример получения ставки НДС через типовой механизм
СтавкаСсылка = УчетНДСПереопределяемый.ПолучитьСтавкуНДС(Перечисления.СтавкиНДС.НДС20);
СтрокаТовара.СтавкаНДС = СтавкаСсылка;

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

Формирование партий и Первичный документ

Самым сложным этапом является работа с партиями, особенно если в организации включен метод оценки стоимости ФИФО (скользящая или взвешенная оценка). Система требует указания документа партии для того, чтобы корректно сформировать стоимость списания в будущем.

Проанализируем структуру: в качестве партии в документе «Ввод начальных остатков» выступает объект Документ.ПервичныйДокумент. Его нельзя просто оставить пустым, если ведется партионный учет. Нам необходимо сначала создать этот объект программно, а затем подставить ссылку на него в документ ввода остатков.

Рассмотрим алгоритм создания первичного документа:

  1. Создаем новый объект Документы.ПервичныйДокумент.
  2. Заполняем его основные реквизиты: Организация, Партнер (поставщик), Дата и Номер (данные из входящего документа от поставщика).
  3. Записываем первичный документ.
  4. Передаем ссылку на него в табличную часть документа ввода остатков в поле ПервичныйДокумент или Партия.

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


ПервичныйДок = Документы.ПервичныйДокумент.СоздатьДокумент();
ПервичныйДок.Дата = ДатаОстатков;
ПервичныйДок.Организация = Объект.Организация;
ПервичныйДок.Партнер = Справочники.Партнеры.НайтиПоНаименованию("Внешний поставщик");
ПервичныйДок.ТипПервичногоДокумента = Перечисления.ТипыПервичныхДокументов.ПриобретениеУПоставщика;
ПервичныйДок.НомерВходящегоДокумента = "П-123";
ПервичныйДок.ДатаВходящегоДокумента = ДатаОстатков;
ПервичныйДок.Записать();

// Теперь подставляем его в основной документ
НоваяСтрока = НовыйДок.Товары.Добавить();
НоваяСтрока.Номенклатура = СсылкаНоменклатура;
НоваяСтрока.Количество = 10;
НоваяСтрока.ПервичныйДокумент = ПервичныйДок.Ссылка;

Скрытые технические реквизиты: Ключи связи и Флаги учета

Часто программисты сталкиваются с тем, что документ визуально заполнен правильно, но при попытке проведения система выдает ошибку о незаполненных полях. Выясним причину: в УТ 11 активно используются технические колонки, такие как КлючСвязи.

Ключ связи необходим для сопоставления данных в различных табличных частях. Например, если в документе есть ТЧ Товары и ТЧ ВидыЗапасов, они должны быть связаны через уникальный целочисленный идентификатор строки. Если вы добавляете строки только в одну ТЧ и не заполняете ключи, проведение не удастся.

Также важно не забывать про флаги отражения в учете. Проанализируем основные реквизиты документа:

  1. ОтражатьВУправленческомУчете — должен быть Истина.
  2. ОтражатьВРегламентированномУчете — если вы хотите, чтобы остатки попали в бухгалтерский учет.
  3. Статус — для некоторых видов операций требуется установка статуса Принят или аналогичного.

Использование стандартного метода «Заполнить»

Чтобы избежать ручного заполнения десятков скрытых параметров, рекомендуется использовать стандартные механизмы конфигурации. После установки основных параметров (организация, склад, хоз. операция) следует вызвать процедуру ОбработкаЗаполнения.

Рассмотрим ситуацию: при интерактивном создании документа 1С выполняет множество фоновых действий. Мы можем имитировать это программно:


ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.ВводОстатковСобственныхТоваров);
НовыйДок.Заполнить(ПараметрыЗаполнения);

Это позволит системе автоматически установить нужные значения по умолчанию для текущей учетной политики организации, что значительно упростит дальнейшее проведение документа.

Завершение и проведение документа

Финальным этапом является запись документа с режимом проведения. Всегда используйте конструкцию Попытка...Исключение, так как документ ввода остатков выполняет сложнейшие проверки при проведении.


Попытка
    НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
    Сообщить("Документ успешно проведен: " + НовыйДок.Ссылка);
Исключение
    Инфо = ИнформацияОбОшибке();
    Сообщить("Ошибка проведения: " + ПодробноеПредставлениеОшибки(Инфо));
КонецПопытки;

Важный совет: Если документ не проводится, лучший способ понять причину — создать аналогичный документ вручную в интерфейсе программы, заполнить его теми же данными и сравнить значения всех реквизитов (включая скрытые) через «Консоль запросов» или «Редактор реквизитов». Это позволит вам увидеть, какие именно поля ваша программа заполняет иначе, чем стандартная форма документа.

Подведем итог: для успешного программного ввода начальных остатков в УТ 11 необходимо четко определить ХозяйственнуюОперацию, использовать справочник СтавкиНДС, предварительно создавать ПервичныйДокумент для партионного учета и следить за заполнением технических ключей связи в табличных частях.

← На главную