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

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

При импорте или программном создании документов Приходный кассовый ордер (ПКО) в 1С:Бухгалтерии предприятия (редакция 2.0) разработчики часто сталкиваются с тем, что реквизиты субконто (СубконтоКт1, СубконтоКт2) не подставляются в документ или при попытке их заполнения возникают ошибки. Рассмотрим подробнее основные причины возникновения этой проблемы и разберем по шагам рабочие способы её решения.

1. Диагностика пустой ссылки при поиске объектов

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

Проанализируем ситуацию с помощью проверки полученного значения перед подстановкой в документ:


Если Контр = Неопределено Тогда
    Сообщить("Контрагент не найден (Неопределено)");
ИначеЕсли Контр = Справочники.Контрагенты.ПустаяСсылка() Тогда
    Сообщить("Контрагент не найден (ПустаяСсылка)");
Иначе
    Сообщить("Найден объект типа: " + ТипЗнч(Контр));
КонецЕсли;

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

2. Корректная запись субконто в объект документа

При прямой работе с объектом документа типа ДокументОбъект.ПриходныйКассовыйОрдер обращение к реквизитам субконто имеет свои особенности. В конфигурациях на обычных формах (таких как 1С:Бухгалтерия 2.0) присвоение значений выполняют напрямую через объект или обращение к ЭтотОбъект.

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


Если ПриходныйОрдер.КоррСчет.Код = "62.1" Тогда
    НовыйДокСчет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
    НовыйДокумент.СчетУчетаРасчетовСКонтрагентом = НовыйДокСчет;
    
    // Ищем контрагента по наименованию
    Контр = Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(ПриходныйОрдер.Субконто1.Наименование), Истина);
    НовыйДокумент.ЭтотОбъект.СубконтоКт1 = Контр;
    
    // Ищем договор с указанием владельца
    ДогНов = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(СокрЛП(ПриходныйОрдер.Субконто2.Наименование), Истина, , Контр);
    НовыйДокумент.ЭтотОбъект.СубконтоКт2 = ДогНов;
КонецЕсли;

3. Особенности подчиненных справочников (ошибка владельца)

При программном заполнении субконто типа ДоговорыКонтрагентов важно учитывать подчиненность справочника. Если попытаться записать договор без указания его владельца (контрагента), платформа выведет ошибку: «Значение поля "Владелец" не заполнено или заполнено неверно».

Для предотвращения этой ошибки соблюдаем следующий порядок действий:

  1. Сначала находим и закладываем ссылку на головной объект — Контрагент.
  2. При поиске договора обязательно передаем ссылку на контрагента в качестве владельца в метод НайтиПоНаименованию().
  3. Если элемент создается программно, явно заполняем реквизит Владелец перед вызовом метода Записать().

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

← На главную