При импорте или программном создании документов Приходный кассовый ордер (ПКО) в 1С:Бухгалтерии предприятия (редакция 2.0) разработчики часто сталкиваются с тем, что реквизиты субконто (СубконтоКт1, СубконтоКт2) не подставляются в документ или при попытке их заполнения возникают ошибки. Рассмотрим подробнее основные причины возникновения этой проблемы и разберем по шагам рабочие способы её решения.
Одной из частых причин, почему значение не появляется в документе, является возврат пустой ссылки методом поиска по наименованию или коду. Если результат поиска равен пустой ссылке, присвоение реквизиту значения визуально выглядит так, будто код не сработал.
Проанализируем ситуацию с помощью проверки полученного значения перед подстановкой в документ:
Если Контр = Неопределено Тогда
Сообщить("Контрагент не найден (Неопределено)");
ИначеЕсли Контр = Справочники.Контрагенты.ПустаяСсылка() Тогда
Сообщить("Контрагент не найден (ПустаяСсылка)");
Иначе
Сообщить("Найден объект типа: " + ТипЗнч(Контр));
КонецЕсли;
Если в окне сообщений выводится ПустаяСсылка, это означает, что справочник не содержит элемента с точным совпадением наименования (учитывая пробелы или скрытые символы). В таком случае необходимо предварительно создать нужный элемент справочника или скорректировать условия поиска.
При прямой работе с объектом документа типа ДокументОбъект.ПриходныйКассовыйОрдер обращение к реквизитам субконто имеет свои особенности. В конфигурациях на обычных формах (таких как 1С:Бухгалтерия 2.0) присвоение значений выполняют напрямую через объект или обращение к ЭтотОбъект.
Разберем рабочий пример программного заполнения реквизитов расчетов с контрагентом и счетов учета:
Если ПриходныйОрдер.КоррСчет.Код = "62.1" Тогда
НовыйДокСчет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
НовыйДокумент.СчетУчетаРасчетовСКонтрагентом = НовыйДокСчет;
// Ищем контрагента по наименованию
Контр = Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(ПриходныйОрдер.Субконто1.Наименование), Истина);
НовыйДокумент.ЭтотОбъект.СубконтоКт1 = Контр;
// Ищем договор с указанием владельца
ДогНов = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(СокрЛП(ПриходныйОрдер.Субконто2.Наименование), Истина, , Контр);
НовыйДокумент.ЭтотОбъект.СубконтоКт2 = ДогНов;
КонецЕсли;
При программном заполнении субконто типа ДоговорыКонтрагентов важно учитывать подчиненность справочника. Если попытаться записать договор без указания его владельца (контрагента), платформа выведет ошибку: «Значение поля "Владелец" не заполнено или заполнено неверно».
Для предотвращения этой ошибки соблюдаем следующий порядок действий:
Контрагент.НайтиПоНаименованию().Владелец перед вызовом метода Записать().Соблюдение этого порядка гарантирует корректное проведение документа Приходный кассовый ордер и полное заполнение аналитических разрезов бухгалтерского учета.