Как программно создать и заполнить Объект расчетов в 1С:КА 2.5 и ERP 2.5

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

При переходе на версии 1С:Комплексная автоматизация 2.5 или 1С:ERP 2.5 разработчики часто сталкиваются с существенным изменением в механизме взаиморасчетов. Если раньше объектом расчетов выступал непосредственно документ (Заказ или Накладная), то в новых редакциях появился отдельный справочник ОбъектыРасчетов. Это «ключ аналитики», который связывает организацию, контрагента, договор и документ-основание.

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

Понимание архитектуры объектов расчетов в версии 2.5

Прежде чем переходить к коду, проанализируем ситуацию: зачем нужен этот справочник? В 1С:КА 2.5 Объект расчетов — это уникальный элемент, который система создает автоматически. Он хранит в себе ссылку на первичный документ, информацию о валюте и деталях договора, позволяя формировать детальный реестр оплат от покупателей. Это позволяет системе быстрее строить отчеты по взаиморасчетам, не обращаясь напрямую к тяжелым таблицам документов.

Рассмотрим важный нюанс, упомянутый в обсуждении: если в договоре установлена детализация «По заказам» (удобнее через анализ дебиторской и кредиторской задолженности по документам), но сам заказ в цепочке отсутствует, система при интерактивном вводе (вручную) делает объектом расчетов саму накладную (например, Приобретение услуг и прочих активов). Наша задача — повторить это поведение программно, чтобы сохранить точность данных для отчета Анализ продаж и оплат по объектам расчётов.

Шаг 1: Программное создание документа-основания

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

Посмотрим на пример заполнения документа ПриобретениеУслугИПрочихАктивов:


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

// Критически важный момент для Объектов Расчетов
НовыйДок.ПорядокРасчетов = СсылкаНаДоговор.ПорядокРасчетов; 

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

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

Шаг 2: Получение или создание объекта расчетов

После того как документ приобретения записан, нам нужно получить ссылку на элемент справочника ОбъектыРасчетов. В конфигурациях ERP и КА предусмотрены специальные серверные методы для этого. Мы можем воспользоваться методом ОбъектыРасчетовСервер.ОбъектРасчетовДокумента().

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


// Получаем ссылку на созданный документ
СсылкаНаПриобретение = НовыйДок.Ссылка;

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

// Обычно метод возвращает ссылку на СправочникСсылка.ОбъектыРасчетов
ОбъектРасчетовСсылка = СтруктураОбъектаРасчетов; 

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

Шаг 3: Привязка объекта расчетов к Заявке на оплату

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

Выясним, как правильно обновить заявку:

  1. Находим нужную заявку или создаем новую.
  2. Устанавливаем значение в поле ОбъектРасчетов.
  3. Вызываем метод синхронизации данных, чтобы заполнить валюты, суммы и другие связанные реквизиты.

Рассмотрим пример кода:


ЗаявкаОбъект = СсылкаНаЗаявку.ПолучитьОбъект();

// Если оплата идет по одной накладной (в шапке)
ЗаявкаОбъект.ОбъектРасчетов = ОбъектРасчетовСсылка;

// Если заявка имеет списочную расшифровку
Для Каждого СтрокаТЧ Из ЗаявкаОбъект.РасшифровкаПлатежа Цикл
    СтрокаТЧ.ОбъектРасчетов = ОбъектРасчетовСсылка;
КонецЦикла;

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

ЗаявкаОбъект.Записать(РежимЗаписиДокумента.Запись);

Почему возникают сложности с детализацией «По заказам»?

Как справедливо заметили участники форума, если в договоре стоит настройка «Детализация расчетов: По заказам» (есть готовый отчет анализа кредиторской задолженности по документам), 1С ожидает, что объектом расчетов будет именно Заказ поставщику, что критично для последующего анализа безналичных платежей по заказам. Однако программная логика 1С:КА 2.5 позволяет «пробросить» накладную в качестве объекта расчетов, если заказа физически нет.

Важный совет: Проверьте реквизит ПорядокРасчетов в вашем документе ПриобретениеУслугИПрочихАктивов. Если вы создаете его программно и не указываете этот реквизит, система может по умолчанию создать объект расчетов, привязанный к Договору, а не к накладной. В результате в Заявке вы увидите Договор, хотя бухгалтерия требует конкретный документ приобретения.

Резюме и рекомендации

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

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

Такой подход гарантирует корректное развернутое сальдо на счетах 60 и 62 и отсутствие ошибок при закрытии месяца в 1С:КА 2.5 — поможет исправление ошибок в аналитике закрытия месяца.

← На главную