При получении электронных документов (УПД) в конфигурации «1С:Розница 3» пользователи часто сталкиваются с ситуацией, когда дата создаваемого учетного документа поступления устанавливается текущим моментом времени (моментом создания документа в базе), тогда как входящая дата документа от поставщика фиксируется только в соответствующих полях входящего номера и даты. Это приводит к сложностям при последующей синхронизации с бухгалтерской программой: при переносе данных в «1С:Бухгалтерию предприятия» записи книги покупок могут регистрироваться в другом налоговом периоде.
Кроме того, при обработке УПД со статусом 1 в базе всегда формируются два раздельных документа: Приходная накладная и Счет-фактура полученный, а единый флаг «УПД» не активируется. Разберем архитектурные причины такого поведения программы и рассмотрим способы решения возникшей задачи.
Рассмотрим подробнее архитектурные особенности системы и проанализируем логику типового функционала.
Конфигурация «1С:Розница 3» построена на единой технологической платформе с конфигурацией «1С:Управление нашей фирмой» (УНФ). В этой архитектуре заложены строгие правила учета:
Приходная накладная, а учет НДС вынесен в отдельный документ Счет-фактура полученный. Визуальный переключатель «УПД», объединяющий два документа в единую интерфейсную сущность, существует в «1С:Бухгалтерии предприятия», но отсутствует в «1С:Рознице 3». Отключить создание двух связанных документов стандартными настройками невозможно.Тем не менее, когда задержка подписания составляет всего несколько дней на стыке месяцев, бухгалтерии требуется, чтобы первичные документы попали в отчетность датой составления поставщиком. Разберем по шагам, как решить эту задачу с помощью доработки и организационных механизмов.
Выясним причину подстановки дат на программном уровне. За заполнение реквизитов учетных документов при разборе пакетов Библиотеки электронных документов (БЭД) отвечает общий модуль УправлениеНебольшойФирмойЭлектронныеДокументыСервер. Именно в процедурах создания и заполнения накладных и счетов-фактур реквизиту Дата присваивается системное время сеанса.
Для переопределения этого поведения создадим расширение конфигурации со следующими шагами:
УправлениеНебольшойФирмойЭлектронныеДокументыСервер.ЗаполнитьДокументПоступленияТоваровУслуг и ЗаполнитьДокументСчетФактураПолученный с помощью аннотации &ИзменениеИКонтроль или перехватом логики.Дата значением из реквизита ДатаВходящегоДокумента.Посмотрим на пример кода, внедряемого в процедуру заполнения накладной:
// Приравниваем дату проведения документа к входящей дате первичного документа от контрагента
Если ЗначениеЗаполнено(ДокументОбъект.ДатаВходящегоДокумента) Тогда
ДокументОбъект.Дата = ДокументОбъект.ДатаВходящегоДокумента;
КонецЕсли;
Аналогичная вставка требуется и для процедуры заполнения счета-фактуры:
Если ЗначениеЗаполнено(ДокументОбъект.ДатаВходящегоДокумента) Тогда
ДокументОбъект.Дата = ДокументОбъект.ДатаВходящегоДокумента;
КонецЕсли;
Важное предостережение при доработке кода: Обязательно предусмотрите проверку допустимого диапазона дат. Если контрагент пришлет закрывающий документ за давний период (например, более одного месяца назад), попытка записать документ в закрытый период натолкнется на механизм «Даты запрета изменения данных» (БСП). В этом случае процесс загрузки упадет с ошибкой проведения. Рекомендуется дополнить код проверкой давности:
Если ЗначениеЗаполнено(ДокументОбъект.ДатаВходящегоДокумента) Тогда
// Проверяем, что дата входящего документа не старше 30 дней от текущей даты
Если (ТекущаяДатаСеанса() - ДокументОбъект.ДатаВходящегоДокумента) <= (30 * 86400) Тогда
ДокументОбъект.Дата = ДокументОбъект.ДатаВходящегоДокумента;
Иначе
// При превышении лимита сохраняем текущую дату во избежание сбоя даты запрета
ДокументОбъект.Дата = ТекущаяДатаСеанса();
КонецЕсли;
КонецЕсли;
Если вмешиваться в код складской программы нежелательно из-за рисков для партионного учета, проанализируем варианты решения на этапе передачи данных в бухгалтерский контур:
Дата документа заполнялось значением поля ДатаВходящегоДокумента. В этом случае розничный склад сохраняет реальную хронологию движения товаров, а регламентированный учет получает даты поставщика.Формирование записей книги покупок в том налоговом периоде, к которому фактически относится входящий документ (согласно положениям п. 1.1 ст. 172 НК РФ).Если объем входящих документов невелик, а вмешательство в конфигурацию не планируется, перед ежемесячной выгрузкой в бухгалтерию можно применить встроенную обработку Групповое изменение реквизитов:
Приходная накладная и Счет-фактура полученный за завершающийся месяц, поступившие в начале следующего.Дата равным дате из поля Дата входящего документа.Таким образом, для автоматизации процесса наиболее надежным способом является точечное расширение процедур общего модуля УправлениеНебольшойФирмойЭлектронныеДокументыСервер с обязательным контролем предельного срока давности входящей даты.