При автоматизации учета и программном создании кассовых документов в конфигурации «1С:Бухгалтерия предприятия 3.0» разработчики часто сталкиваются с ситуацией, когда созданный документ ПоступлениеНаличных (Приходный кассовый ордер) успешно записывается и проводиться, но движения по бухгалтерскому и налоговому учету отсутствуют. Однако если открыть этот же документ в пользовательском режиме и вручную перевыбрать реквизит Склад (который на форме может отображаться или взаимодействовать с реквизитом Контрагент), проводки успешно появляются.
Рассмотрим подробно причины такого поведения системы и разберем, как правильно формировать документ программно, чтобы избежать необходимости ручного перевыбора реквизитов.
Данная проблема обусловлена двумя ключевыми факторами: логикой работы платформы 1С при программном создании объектов и методологическим устройством учета розничных продаж в 1С:Бухгалтерии.
Документы.ПоступлениеНаличных.СоздатьДокумент() события формы (такие как ПриИзменении) не выполняются. В интерактивном режиме при выборе склада форма автоматически рассчитывает и подставляет счета учета и служебную аналитику. При программном заполнении все эти реквизиты остаются пустыми или некорректными.ПоступлениеНаличных с видом операции РозничнаяВыручка напрямую зависит от типа склада в справочнике Склады:
Отчет о розничных продажах. В этом случае ПКО выполняет лишь роль документа для кассовой книги и проводить выручку по бухучету не обязан.Таким образом, для получения проводок необходимо убедиться, что склад относится к НТТ, а также явным образом заполнить все зависимые счетоведческие реквизиты в объекте.
Проанализируем пример кода, в котором явно заполняются счета учета и необходимая аналитика, гарантирующая формирование движения по бухучету.
НовыйПКО = Документы.ПоступлениеНаличных.СоздатьДокумент();
НовыйПКО.Дата = ТекущаяДата();
НовыйПКО.Организация = ОрганизацияСсылка;
НовыйПКО.ВидОперации = Перечисления.ВидыОперацийПоступлениеНаличных.РозничнаяВыручка;
// Указываем склад (должен быть с типом НТТ)
НовыйПКО.Склад = СкладНТТСсылка;
// Заполняем обязательные счета учета и аналитику
НовыйПКО.СчетУчета = ПланыСчетов.Хозрасчетный.КассаОрганизации; // 50.01
НовыйПКО.СчетОперационнойКассы = ПланыСчетов.Хозрасчетный.КассаОбособленныхПодразделений; // 50.02 или необходимый счет расчетов
НовыйПКО.СтатьяДвиженияДенежныхСредств = СтатьяДДСВыручка;
НовыйПКО.СуммаДокумента = 15000;
// При необходимости указываем параметры НДС
НовыйПКО.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
// Записываем и проводим документ
НовыйПКО.Записать(РежимЗаписиДокумента.Проведение);
Важно: Проверьте заполнение реквизитов СчетУчета и СчетОперационнойКассы (или счета учета расчетов в зависимости от учетной политики). Если хотя бы один из них останется незаполненным, проведение документа не создаст проводки.
Чтобы не прописывать счета учета вручную хардкодом, мы можем воспользоваться типовыми модулями конфигурации. В «1С:Бухгалтерии 3.0» предусмотрены сервисные механизмы заполнения счетов по умолчанию на основе учетной политики и регистров сведений.
Рассмотрим, как вызвать процедуру заполнения счетов учета после установки базовых реквизитов документа:
// После заполнения Организации, ВидаОперации и Склада
ЗаполнитьЗначенияСвойств(НовыйПКО, НовыйПКО.ПолучитьДанныеАвтозаполнения());
Или использовать специализированные процедуры модуля формы/менеджера для определения счетов по умолчанию. Это гарантирует подстановку реквизитов в соответствии с настройками конкретной информационной базы.
Если торговая точка является автоматизированной (АТТ), не следует добиваться проводок именно от документа ПКО. В рамках методологии 1С правильным решением будет:
ОтчетОРозничныхПродажах, который спишет товары и сформирует проводки по выручке (Дт 50.02 / 62.Р — Кт 90.01).ПоступлениеНаличных с видом операции РозничнаяВыручка для отражения поступления денег из операционной кассы в основную кассу организации (Дт 50.01 — Кт 50.02).Если при программном создании ПКО в БП 3.0 проводки отсутствуют до ручного перевыбора склада, проверьте два момента: тип торговой точки в справочнике Склады (должен быть НТТ для прямых проводок) и полноту заполнения реквизитов СчетУчета, СчетОперационнойКассы и СтатьяДвиженияДенежныхСредств непосредственно в коде обработки.