При работе с торговыми конфигурациями на платформе 1С:Предприятие периодически возникают неожиданные ошибки, вызванные человеческим фактором при выпуске очередных обновлений разработчиками. С одной из таких досадных проблем столкнулись пользователи и администраторы конфигурации «Управление торговлей», редакция 10.3 (начиная с релиза 10.3.54.1 по 10.3.54.3). При попытке фискализации и пробития чека на онлайн-кассе (ККТ) система выдает ошибку, ссылаясь на отсутствие документа АктОбОказанииПроизводственныхУслуг в общем модуле ДенежныеСредстваСервер.
В этой статье мы подробно разберем, почему возникает эта ошибка, в каких ситуациях она проявляется ярче всего, а также рассмотрим три практических способа ее устранения — от простого обновления до быстрого исправления конфигурации вручную.
Для начала проанализируем архитектуру конфигурации и предысторию проблемы. В середине 2019 года вступили в силу новые требования формата фискальных данных (ФФД 1.05), которые обязали пользователей ККТ передавать дополнительные реквизиты при расчетах между организациями и индивидуальными предпринимателями. Кроме того, ужесточились требования к оформлению чеков коррекции.
Фирма 1С была вынуждена в экстренном порядке обновлять механизмы интеграции с кассовым оборудованием во всех актуальных решениях. Поскольку конфигурация «Управление торговлей 10.3» построена на обычных формах и относится к решениям предыдущего поколения, часть нового функционала фискализации переносилась («бэкпортировалась») разработчиками из более комплексных и тяжелых систем, таких как «Управление производственным предприятием 1.3» (УПП) или «Комплексная автоматизация 1.1» (КА).
В ходе этого переноса в общий модуль ДенежныеСредстваСервер (в частности, в процедуру ЗаполнитьПозицииИТаблицуОплатЧека) попал фрагмент кода с запросом, который обращается к метаданным документа АктОбОказанииПроизводственныхУслуг. Однако разработчики забыли учесть важную деталь: в типовой конфигурации «Управление торговлей 10.3» этого документа исторически никогда не существовало — он является частью производственного контура УПП и КА. В результате при выполнении запроса платформа 1С генерирует критическую ошибку, так как не может обнаружить указанный объект метаданных.
Многие пользователи замечали, что при пробитии обычных чеков «день в день» (например, при проведении текущего документа ПриходныйКассовыйОрдер или ОплатаОтПокупателяПлатежнойКартой) ошибка не проявляется. Но стоит попытаться провести документ или пробить чек «задним числом» (например, вчерашней датой), как система тут же аварийно завершает работу.
Выясним причину такого поведения системы. Дело в том, что в алгоритмах 1С реализована автоматическая логика контроля применения контрольно-кассовой техники. Если программа определяет, что фискальный документ оформляется за прошлую дату, она автоматически расценивает эту операцию как «исправление ошибки неприменения ККТ». В этот момент система пытается инициировать процедуру формирования чека коррекции.
Именно в ветке кода, отвечающей за подготовку данных для чека коррекции, и вызывается дефектный запрос процедуры ЗаполнитьПозицииИТаблицуОплатЧека. Обычный чек текущего дня минует эту ветку, поэтому ошибка до поры до времени остается незамеченной.
---
Самый правильный и безопасный способ решения проблемы — это обновление конфигурации до актуального релиза. Разработчики фирмы 1С оперативно признали ошибку и исправили ее в релизе 10.3.54.4 от 12 июля 2019 года, а также во всех последующих выпусках (линейки 10.3.55.х и далее).
Если ваша база данных является полностью типовой и находится на поддержке, выполните следующие шаги:
.dt или копию файла 1Cv8.1CD).10.3.54.4 или более позднего.В обновленных релизах разработчики полностью удалили упоминания несуществующего документа из текста запроса в модуле ДенежныеСредстваСервер, и чеки коррекции начали пробиваться в штатном режиме.
---
Рассмотрим ситуацию, когда база данных «Управление торговлей 10.3» существенно доработана, находится на нетиповой поддержке, а оперативное обновление силами программиста в данный момент невозможно. В таком случае нам поможет создание фиктивного объекта в метаданных.
Поскольку платформа 1С прерывает работу из-за физического отсутствия объекта обращения в структуре метаданных, мы можем вручную создать пустой документ, чтобы удовлетворить требования синтаксического контроля запроса. Разберем этот процесс по шагам:
АктОбОказанииПроизводственныхУслуг. Поля «Синоним» и «Имя объекта» заполнятся автоматически.После проделанных манипуляций платформа больше не будет выдавать ошибку отсутствия объекта. Запрос в общем модуле отработает корректно (просто вернет пустой результат по этой таблице), и чек успешно распечатается.
---
Проанализируем структуру проблемного запроса в общем модуле ДенежныеСредстваСервер. Если вы предпочитаете держать структуру метаданных в чистоте и не хотите плодить неиспользуемые документы-«заглушки», лучшим решением будет точечное исправление дефектного кода.
Посмотрим на пример структуры запроса, который вызывает сбой. В процедуре ЗаполнитьПозицииИТаблицуОплатЧека собираются данные из различных документов реализации с помощью конструкции ОБЪЕДИНИТЬ ВСЕ. Нам необходимо локализовать и удалить ту часть запроса, которая обращается к несуществующему объекту.
Примерный дефектный участок кода выглядит следующим образом:
// ВЫБРАТЬ РАЗЛИЧНЫЕ
// ... (выборка по документам РеализацияТоваровУслуг)
// ОБЪЕДИНИТЬ ВСЕ
// ВЫБРАТЬ
// ... Из Документ.АктОбОказанииПроизводственныхУслуг КАК АктОбОказанииПроизводственныхУслуг
Для исправления ситуации выполним следующие действия:
ДенежныеСредстваСервер и откройте его.ЗаполнитьПозицииИТаблицуОплатЧека.Запрос.Текст).ОБЪЕДИНИТЬ ВСЕ, содержащий обращение к таблице Документ.АктОбОказанииПроизводственныхУслуг.ОБЪЕДИНИТЬ ВСЕ, относящееся к нему).Если база данных работает на платформе версии 8.3.10 и выше, настоятельно рекомендуем выносить подобные исправления в Расширение конфигурации. Это позволит сохранить основную конфигурацию на замке и упростит последующие обновления системы. При использовании расширения вы можете переопределить процедуру общего модуля с помощью аннотации &Вместо.
Мы подробно разобрали техническую ошибку, связанную с «фантомным» документом АктОбОказанииПроизводственныхУслуг в УТ 10.3. Теперь вы знаете, что причиной ее активации является механизм автоматического формирования чеков коррекции при проведении документов задним числом. Используя предложенные инструкции, вы сможете быстро восстановить работоспособность кассового узла наиболее подходящим для вашей системы способом.