Как программно заполнить документ 'Приобретение товаров и услуг' в 1С:КА 2?

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

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

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

Шаг 1. Подготовительный анализ системы

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

  1. Создайте эталонный документ вручную. Самый простой и эффективный способ — настроить одну организацию, одного партнера (поставщика) со всеми необходимыми связанными данными (соглашение, договор) и создать один документ Приобретение товаров и услуг через пользовательский интерфейс. После этого можно проанализировать, какие реквизиты и какими значениями заполнились автоматически.
  2. Используйте демо-базу. Если рабочая база абсолютно пуста, разверните демонстрационную базу от 1С. В ней уже есть примеры заполненных данных, и можно подсмотреть, как настроены связи между объектами (партнер, соглашение, договор, склад).
  3. Сравните данные. Если вы пишете обработку для загрузки данных, создайте один документ вручную, а другой — вашей обработкой. Затем выгрузите оба документа, например, в JSON или XML формат, и сравните их. Так вы легко найдете незаполненные или некорректно заполненные реквизиты. При большом объеме операций для контроля результата миграции применяется автоматическая сверка проводок и поиск расхождений между базами.

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

Шаг 2. Определение источников данных для реквизитов

Теперь проанализируем, откуда берутся значения для конкретных реквизитов, которые вызвали вопросы у автора темы на форуме. В КА 2 действует иерархическая система настроек: более частные настройки (в документе) имеют приоритет над более общими (в договоре или соглашении). Подобная логика поиска источников реализована в инструменте, выполняющем перенос данных из 1С:УПП 1.3 в 1С:Комплексную автоматизацию 2.

Закупка под деятельность (ЗакупкаПодДеятельность)

Этот реквизит важен для ведения раздельного учета НДС. Его значение, как правило, определяется в договоре с поставщиком. В карточке договора можно указать, что закупка осуществляется под определенный вид деятельности, облагаемой или не облагаемой НДС. При выборе такого договора в документе, реквизит ЗакупкаПодДеятельность заполнится автоматически. Соответственно, при программном создании документа нужно либо выбрать существующий договор с правильными настройками, либо создать новый и указать в нем нужный вид деятельности.

Налогообложение НДС (НалогообложениеНДС)

Это одно из самых важных полей, и его источник определяется иерархически:

  1. Соглашение с поставщиком: Это основной источник. В типовом или индивидуальном соглашении задаются условия налогообложения, которые будут применяться ко всем документам в его рамках.
  2. Договор с поставщиком: Если в соглашении установлен флаг ведения договоров, то настройки налогообложения могут быть переопределены на уровне договора.
  3. Документ "Приобретение товаров и услуг": Значение можно указать непосредственно в документе, что имеет наивысший приоритет.

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


// Объект - это создаваемый документ "ПриобретениеТоваровУслуг"
Объект.НалогообложениеНДС = ?(Объект.Товары.Итог("СуммаНДС") = 0, 
    Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС, 
    Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС);

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


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

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

Порядок расчетов (ПорядокРасчетов)

Порядок взаиморасчетов с поставщиком — это часть коммерческих условий, и он также определяется в соглашении или договоре. В зависимости от настроек, расчеты могут вестись с разной детализацией: "по договорам", "по заказам", "по накладным" или смешанный вариант "Аванс по заказам, долг по накладным". При программном заполнении документа это поле автоматически установится на основании выбранного договора или соглашения. Ваша задача — правильно указать ссылку на нужный договор/соглашение в документе. Для автоматического выбора нужного договора при создании документов можно использовать расширение для назначения и подстановки основного договора контрагента.

Вариант приемки товаров (ВариантПриемкиТоваров)

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


// Логика определения варианта приемки
Объект.ВариантПриемкиТоваров = ?(ОбъектНайден И ЗначениеЗаполнено(Объект.Ссылка.ВариантПриемкиТоваров), 
    // 1. Если документ уже был в базе, берем значение из него
    Объект.Ссылка.ВариантПриемкиТоваров, 
    // 2. Иначе, берем из договора, если он указан
    ?(ЗначениеЗаполнено(Объект.Договор) И ЗначениеЗаполнено(Объект.Договор.ВариантПриемкиТоваров), 
        Объект.Договор.ВариантПриемкиТоваров, 
        // 3. Если в договоре не указано, берем из констант (настройка по умолчанию)
        Константы.ВариантПриемкиТоваров.Получить()));

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

Шаг 3. Формирование правил оплаты

Правила или график оплаты (этапы оплаты) — это тоже часть коммерческих договоренностей, и настраиваются они в соглашении с поставщиком. В соглашении можно создать гибкий график, указав для каждого этапа:

При создании документа Приобретение товаров и услуг на основании такого соглашения, этапы оплаты можно заполнить автоматически. В интерфейсе для этого есть кнопка "Заполнить по соглашению". Программно это означает, что после того, как вы заполнили в документе ссылку на Соглашение, вы можете вызвать стандартную процедуру заполнения графика оплат. Обычно такие процедуры находятся в модуле менеджера или модуле формы документа. Изучите код обработки заполнения в типовой конфигурации, чтобы найти нужную процедуру и вызвать ее для вашего программно создаваемого объекта.

Итоги и рекомендации

Подводя итог, для корректного программного заполнения документа Приобретение товаров и услуг в 1С:КА 2, придерживайтесь следующего алгоритма:

  1. Определите партнера и организацию. Это базовые реквизиты.
  2. Укажите соглашение и/или договор. Это ключевой шаг, так как большинство связанных настроек (порядок расчетов, налогообложение, правила оплаты) подтянутся именно из этих объектов. Эти же зависимости учитывает перенос данных из 1С:Бухгалтерии 3.0 в 1С:Комплексную автоматизацию 2 при переносе остатков и документов.
  3. Заполните табличные части (товары, услуги).
  4. Используйте типовые процедуры. Для заполнения сложных реквизитов, таких как НалогообложениеНДС или этапы оплаты, не пишите логику с нуля. Найдите и вызовите стандартные функции из общих модулей (например, УчетНДСУП) или модулей менеджеров документов. Это сделает ваш код более надежным и устойчивым к обновлениям конфигурации.
  5. Анализируйте правила обмена. Если вы занимаетесь переносом данных, стандартные правила обмена между конфигурациями — это сокровищница готовых и проверенных решений. Изучайте обработчики событий (например, ПослеЗагрузкиОбъекта) для нужных вам документов.

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

← На главную