Как программно создать документ "Комплектация номенклатуры" в 1С:Бухгалтерии 3.0 и правильно заполнить счета учета?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← К списку

При программном создании документов в 1С:Бухгалтерии предприятия 3.0 (БП3), таких как "Комплектация номенклатуры", мы часто сталкиваемся с необходимостью корректного заполнения бухгалтерских счетов учета. Это критически важный шаг, поскольку от правильности определения счетов зависит точность бухгалтерского и налогового учета. В этой статье мы с вами разберем, как эффективно решить эту задачу, используя стандартные механизмы системы, чтобы избежать ошибок и обеспечить гибкость решения.

Выясним, почему прямое присвоение счетов не всегда является лучшим подходом, и рассмотрим различные стандартные методы, которые предоставляет 1С для автоматического и надежного заполнения счетов учета в табличных частях документов.

Почему не стоит присваивать счета учета напрямую?

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


НоваяСтрока.СчетУчета = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");

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

  1. Зависимость от настроек: Счета учета номенклатуры в 1С:БП3 определяются не только видом номенклатуры, но и множеством других факторов: организация, склад, тип операции, налоговая система и даже специфические настройки для конкретной номенклатуры. Прямое присвоение жестко фиксирует счет, игнорируя эти настройки.
  2. Риск ошибок: Если для одной и той же номенклатуры на разных складах или в разных организациях используются разные счета (например, 41.01 для основного склада и 41.02 для розничного), прямое присвоение приведет к некорректному учету.
  3. Сложность поддержки: При изменении учетной политики или настроек в программе, вам придется вручную искать и изменять весь код, где используются прямые присвоения, что крайне неудобно и чревато новыми ошибками.

Вместо этого, рассмотрим подробнее, как использовать встроенные механизмы 1С, которые автоматически учитывают все необходимые настройки.

Универсальный подход: Общий модуль СчетаУчетаВДокументах.ЗаполнитьСтроки()

Один из наиболее распространенных и универсальных способов заполнения счетов учета в табличных частях документов — это использование функции ЗаполнитьСтроки() из общего модуля СчетаУчетаВДокументах. Эта функция является частью стандартного механизма 1С и предназначена для автоматического определения и присвоения счетов.

Разберем по шагам, как использовать эту функцию:

  1. Создание документа: Сначала мы создаем сам объект документа "Комплектация номенклатуры".
  2. Заполнение табличной части: Далее мы заполняем табличные части документа (например, "Комплектующие" и "Продукция") нужной номенклатурой.
  3. Вызов функции ЗаполнитьСтроки(): После заполнения номенклатуры мы вызываем функцию.

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


// Предполагаем, что НовыйДокумент - это уже созданный объект документа КомплектацияНоменклатуры
// и его табличные части (например, Комплектующие и Продукция) уже заполнены номенклатурой.

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

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

// После заполнения счетов можно записывать документ
НовыйДокумент.Записать();

Важный момент: в сообщении с форума был пример для РеализацияТоваровУслуг, где указывалась НовыйДокумент.Ссылка. Если документ еще не записан, его ссылка будет пустой или временной, что может привести к некорректному определению счетов. Всегда передавайте сам объект документа, если он еще не записан.

Наиболее подходящий способ: Функция ЗаполнитьСчетаУчетаВТабличнойЧасти() из модуля менеджера документа

Для документа "Комплектация номенклатуры" существует еще более специализированный и предпочтительный способ — это использование функции ЗаполнитьСчетаУчетаВТабличнойЧасти(), которая находится непосредственно в модуле менеджера этого документа. Эта функция разработана специально для "Комплектации номенклатуры" и учитывает все его особенности.

Мы рекомендуем использовать этот метод, так как он наиболее точно отражает логику работы самого документа.


// Предполагаем, что НовыйДокумент - это уже созданный объект документа КомплектацияНоменклатуры
// и его табличные части (например, Комплектующие и Продукция) уже заполнены номенклатурой.

// Заполнение счетов для табличной части "Комплектующие"
Документы.КомплектацияНоменклатуры.ЗаполнитьСчетаУчетаВТабличнойЧасти(
    НовыйДокумент,        // Объект документа
    "Комплектующие"       // Имя табличной части
);

// Заполнение счетов для табличной части "Продукция"
Документы.КомплектацияНоменклатуры.ЗаполнитьСчетаУчетаВТабличнойЧасти(
    НовыйДокумент,        // Объект документа
    "Продукция"           // Имя табличной части
);

// После заполнения счетов можно записывать документ
НовыйДокумент.Записать();

Чтобы лучше понять, как работает эта функция, вы можете открыть конфигуратор и посмотреть ее код в модуле менеджера документа "Комплектация номенклатуры". Это позволит вам повысить общую образованность и глубже разобраться в механизмах 1С.

Гибкий подход: Получение сведений о номенклатуре через БухгалтерскийУчетПереопределяемый.ПолучитьСведенияОНоменклатуре()

Иногда нам может потребоваться более детальный контроль над процессом определения счетов или получение дополнительной информации о номенклатуре. В таких случаях мы можем использовать функцию ПолучитьСведенияОНоменклатуре() из общего модуля БухгалтерскийУчетПереопределяемый.

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


// Предположим, что у нас есть структура параметров для определения счетов
// Например, СтруктураПараметров содержит Дата, Организация, СкладОтправитель

// Определим структуру для получения данных о номенклатуре
ДанныеНоменклатура = Новый Структура(
    "СчетУчета, НовыйСчетУчета, ЕдиницаИзмерения, Коэффициент,
    |СтавкаНДСВРознице, ЦенаВРознице, СуммаВРознице,
    |СтранаВвоза, СтранаПроисхождения, GTIN,
    |НадбавкаИмпортера");

// Определим структуру с данными объекта (документа) для передачи в функцию
ДанныеОбъекта = Новый Структура("Дата, Организация, Склад");
ДанныеОбъекта.Дата = СтруктураПараметров.Дата;
ДанныеОбъекта.Организация = СтруктураПараметров.Организация;
ДанныеОбъекта.Склад = СтруктураПараметров.СкладОтправитель; // Или другой подходящий склад

// Допустим, НоваяСтрока - это строка табличной части документа КомплектацияНоменклатуры
// и в ней уже заполнена Номенклатура.

// Получим сведения о номенклатуре
СведенияОНоменклатуре = БухгалтерскийУчетПереопределяемый.ПолучитьСведенияОНоменклатуре(
                            НоваяСтрока.Номенклатура, // Номенклатура из текущей строки
                            ДанныеОбъекта             // Параметры документа
                        );

// Используем полученные сведения для заполнения счета учета в строке документа
Если СведенияОНоменклатуре.СчетаУчета.СчетУчета <> Неопределено Тогда
    НоваяСтрока.СчетУчета = СведенияОНоменклатуре.СчетаУчета.СчетУчета;
КонецЕсли;

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

Общие принципы определения счетов учета в 1С:БП3

Чтобы наши программные решения работали корректно, нам важно понимать, как вообще определяются счета учета в 1С:БП3. Мы с вами разберем основные принципы:

  1. Настройка основных счетов учета номенклатуры: В 1С:БП3 для каждой номенклатурной позиции или вида номенклатуры можно установить основные счета учета. Это делается через карточку номенклатуры.
    1. Откройте карточку номенклатуры.
    2. Обратите внимание на поле "Вид номенклатуры".
    3. По гиперссылке "Счета учета номенклатуры" (обычно находится в группе "Бухгалтерский учет и налоги") откроется регистр сведений, где можно настроить счета для различных условий: для разных организаций, складов, видов запасов или даже для конкретных договоров.

    Эти настройки позволяют системе автоматически подставлять правильные счета учета при выборе номенклатуры в документах.

  2. Приоритет настроек: Система 1С:БП3 имеет сложную логику определения счетов, где настройки, сделанные для конкретной номенклатуры или условий, имеют более высокий приоритет, чем общие настройки. Стандартные функции, которые мы рассмотрели выше, как раз и учитывают эту приоритетность.
  3. План счетов: Все счета учета берутся из ПланаСчетов.Хозрасчетный. Важно, чтобы используемые счета были актуальны и корректно настроены в плане счетов.

Подведем итоги

При программном создании документа "Комплектация номенклатуры" в 1С:БП3 мы рекомендуем избегать прямого присвоения счетов учета. Вместо этого, используйте встроенные механизмы, которые обеспечивают гибкость, надежность и соответствие учетной политике:

Не забывайте, что корректная настройка счетов учета номенклатуры в справочниках 1С:БП3 является основой для правильной работы всех автоматических механизмов. Используя эти подходы, мы сможем создавать надежные и устойчивые решения для автоматизации учета.

← К списку