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