При переходе с 1С:Комплексная автоматизация 1 на версию 2 или при работе с "чистой" базой часто возникает задача программного создания документов. В частности, при создании документа Приобретение товаров и услуг необходимо корректно заполнить множество реквизитов, логика получения которых не всегда очевидна. Рассмотрим подробно, откуда система подтягивает значения для ключевых полей и как реализовать их заполнение в коде.
Основная проблема заключается в том, что многие настройки взаимосвязаны и определяются в других объектах системы, таких как договоры, соглашения с поставщиками или даже константы. Разберем по шагам, где искать эти данные и как их использовать.
Прежде чем писать код, особенно в новой или пустой конфигурации, крайне полезно провести небольшой анализ. Это сэкономит много времени на отладке.
Приобретение товаров и услуг через пользовательский интерфейс. После этого можно проанализировать, какие реквизиты и какими значениями заполнились автоматически.Этот предварительный этап даст вам понимание общей логики системы и поможет выявить неочевидные зависимости.
Теперь проанализируем, откуда берутся значения для конкретных реквизитов, которые вызвали вопросы у автора темы на форуме. В КА 2 действует иерархическая система настроек: более частные настройки (в документе) имеют приоритет над более общими (в договоре или соглашении). Подобная логика поиска источников реализована в инструменте, выполняющем перенос данных из 1С:УПП 1.3 в 1С:Комплексную автоматизацию 2.
Закупка под деятельность (ЗакупкаПодДеятельность)
Этот реквизит важен для ведения раздельного учета НДС. Его значение, как правило, определяется в договоре с поставщиком. В карточке договора можно указать, что закупка осуществляется под определенный вид деятельности, облагаемой или не облагаемой НДС. При выборе такого договора в документе, реквизит ЗакупкаПодДеятельность заполнится автоматически. Соответственно, при программном создании документа нужно либо выбрать существующий договор с правильными настройками, либо создать новый и указать в нем нужный вид деятельности.
Налогообложение НДС (НалогообложениеНДС)
Это одно из самых важных полей, и его источник определяется иерархически:
При программном создании документа система попытается заполнить это поле из соглашения или договора, если они указаны. Если логика более сложная (например, при переносе данных), можно использовать код. Вот пример из старых правил обмена, который определяет налогообложение на основе суммы НДС в табличной части:
// Объект - это создаваемый документ "ПриобретениеТоваровУслуг"
Объект.НалогообложениеНДС = ?(Объект.Товары.Итог("СуммаНДС") = 0,
Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС,
Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС);
Более современный и правильный подход — использовать стандартные функции конфигурации, как это делается в актуальных правилах обмена. Это гарантирует, что логика заполнения будет соответствовать той, что заложена разработчиками 1С.
// Пример из правил обмена для версии 2.5.8.191
Если Не ЗначениеЗаполнено(Объект.НалогообложениеНДС) Тогда
// Собираем параметры для функции заполнения на основе данных документа
ПараметрыЗаполнения = Документы.ЗаказКлиента.ПараметрыЗаполненияНалогообложенияНДСПродажи(Объект);
// Вызываем общую процедуру из модуля УчетНДСУП для заполнения реквизита
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(Объект.НалогообложениеНДС, ПараметрыЗаполнения);
КонецЕсли;
Важно: в примере используется функция из общего модуля УчетНДСУП, которая инкапсулирует сложную логику определения налогообложения. Рекомендуется использовать именно такой подход.
Порядок расчетов (ПорядокРасчетов)
Порядок взаиморасчетов с поставщиком — это часть коммерческих условий, и он также определяется в соглашении или договоре. В зависимости от настроек, расчеты могут вестись с разной детализацией: "по договорам", "по заказам", "по накладным" или смешанный вариант "Аванс по заказам, долг по накладным". При программном заполнении документа это поле автоматически установится на основании выбранного договора или соглашения. Ваша задача — правильно указать ссылку на нужный договор/соглашение в документе. Для автоматического выбора нужного договора при создании документов можно использовать расширение для назначения и подстановки основного договора контрагента.
Вариант приемки товаров (ВариантПриемкиТоваров)
Этот реквизит становится видимым и обязательным, если на складе, указанном в документе, используется ордерная схема. Он определяет, как будет происходить приемка на склад. Источник значения также иерархический, что хорошо видно на примере кода из правил обмена:
// Логика определения варианта приемки
Объект.ВариантПриемкиТоваров = ?(ОбъектНайден И ЗначениеЗаполнено(Объект.Ссылка.ВариантПриемкиТоваров),
// 1. Если документ уже был в базе, берем значение из него
Объект.Ссылка.ВариантПриемкиТоваров,
// 2. Иначе, берем из договора, если он указан
?(ЗначениеЗаполнено(Объект.Договор) И ЗначениеЗаполнено(Объект.Договор.ВариантПриемкиТоваров),
Объект.Договор.ВариантПриемкиТоваров,
// 3. Если в договоре не указано, берем из констант (настройка по умолчанию)
Константы.ВариантПриемкиТоваров.Получить()));
Как мы видим, система сначала пытается взять значение из договора, а если там оно не задано, то используется значение по умолчанию из константы ВариантПриемкиТоваров. При программном создании документа стоит придерживаться такой же логики.
Правила или график оплаты (этапы оплаты) — это тоже часть коммерческих договоренностей, и настраиваются они в соглашении с поставщиком. В соглашении можно создать гибкий график, указав для каждого этапа:
При создании документа Приобретение товаров и услуг на основании такого соглашения, этапы оплаты можно заполнить автоматически. В интерфейсе для этого есть кнопка "Заполнить по соглашению". Программно это означает, что после того, как вы заполнили в документе ссылку на Соглашение, вы можете вызвать стандартную процедуру заполнения графика оплат. Обычно такие процедуры находятся в модуле менеджера или модуле формы документа. Изучите код обработки заполнения в типовой конфигурации, чтобы найти нужную процедуру и вызвать ее для вашего программно создаваемого объекта.
Подводя итог, для корректного программного заполнения документа Приобретение товаров и услуг в 1С:КА 2, придерживайтесь следующего алгоритма:
НалогообложениеНДС или этапы оплаты, не пишите логику с нуля. Найдите и вызовите стандартные функции из общих модулей (например, УчетНДСУП) или модулей менеджеров документов. Это сделает ваш код более надежным и устойчивым к обновлениям конфигурации.ПослеЗагрузкиОбъекта) для нужных вам документов.Следуя этим рекомендациям, вы сможете грамотно реализовать программное создание документов, учитывая всю сложную логику взаимосвязей объектов в 1С:Комплексная автоматизация 2.