Как исправить ошибку «Документ.АктОбОказанииПроизводственныхУслуг не найден» при пробитии чека в 1С:Управление торговлей 10.3?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с торговыми конфигурациями на платформе 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. Официальное обновление конфигурации (Рекомендуемый)

Самый правильный и безопасный способ решения проблемы — это обновление конфигурации до актуального релиза. Разработчики фирмы 1С оперативно признали ошибку и исправили ее в релизе 10.3.54.4 от 12 июля 2019 года, а также во всех последующих выпусках (линейки 10.3.55.х и далее).

Если ваша база данных является полностью типовой и находится на поддержке, выполните следующие шаги:

  1. Создайте резервную копию информационной базы (выгрузку .dt или копию файла 1Cv8.1CD).
  2. Откройте базу в режиме Конфигуратор.
  3. Перейдите в меню Конфигурация -> Поддержка -> Обновить конфигурацию.
  4. Выберите источник обновления (каталог шаблонов или сайт поддержки пользователей 1С).
  5. Выполните обновление до релиза 10.3.54.4 или более позднего.
  6. Запустите базу в режиме «Предприятие» для выполнения обработчиков обновления.

В обновленных релизах разработчики полностью удалили упоминания несуществующего документа из текста запроса в модуле ДенежныеСредстваСервер, и чеки коррекции начали пробиваться в штатном режиме.

---

Вариант исправления №2. Создание документа-«заглушки» (Быстрый путь для доработанных баз)

Рассмотрим ситуацию, когда база данных «Управление торговлей 10.3» существенно доработана, находится на нетиповой поддержке, а оперативное обновление силами программиста в данный момент невозможно. В таком случае нам поможет создание фиктивного объекта в метаданных.

Поскольку платформа 1С прерывает работу из-за физического отсутствия объекта обращения в структуре метаданных, мы можем вручную создать пустой документ, чтобы удовлетворить требования синтаксического контроля запроса. Разберем этот процесс по шагам:

  1. Запустите 1С в режиме Конфигуратор.
  2. Откройте дерево метаданных (меню Конфигурация -> Открыть конфигурацию).
  3. Если конфигурация находится на поддержке, включите возможность изменения (Конфигурация -> Поддержка -> Настройка поддержки -> Включить возможность изменения). При этом правила поддержки для корня конфигурации можно установить в положение «Сохранять поддержку с возможностью изменения».
  4. Найдите ветку Документы, нажмите правой кнопкой мыши и выберите Добавить.
  5. В поле «Имя» нового документа строго пропишите: АктОбОказанииПроизводственныхУслуг. Поля «Синоним» и «Имя объекта» заполнятся автоматически.
  6. Важно: не нужно создавать для этого документа реквизиты, табличные части, формы или движения. Он должен оставаться абсолютно пустым.
  7. Выполните обновление конфигурации базы данных (клавиша F7) и согласитесь с изменениями структуры.

После проделанных манипуляций платформа больше не будет выдавать ошибку отсутствия объекта. Запрос в общем модуле отработает корректно (просто вернет пустой результат по этой таблице), и чек успешно распечатается.

---

Вариант исправления №3. Корректировка кода в общем модуле (Для разработчиков)

Проанализируем структуру проблемного запроса в общем модуле ДенежныеСредстваСервер. Если вы предпочитаете держать структуру метаданных в чистоте и не хотите плодить неиспользуемые документы-«заглушки», лучшим решением будет точечное исправление дефектного кода.

Посмотрим на пример структуры запроса, который вызывает сбой. В процедуре ЗаполнитьПозицииИТаблицуОплатЧека собираются данные из различных документов реализации с помощью конструкции ОБЪЕДИНИТЬ ВСЕ. Нам необходимо локализовать и удалить ту часть запроса, которая обращается к несуществующему объекту.

Примерный дефектный участок кода выглядит следующим образом:


// ВЫБРАТЬ РАЗЛИЧНЫЕ
// ... (выборка по документам РеализацияТоваровУслуг)
// ОБЪЕДИНИТЬ ВСЕ
// ВЫБРАТЬ
// ... Из Документ.АктОбОказанииПроизводственныхУслуг КАК АктОбОказанииПроизводственныхУслуг

Для исправления ситуации выполним следующие действия:

  1. В конфигураторе найдите общий модуль ДенежныеСредстваСервер и откройте его.
  2. Используя глобальный поиск (клавиши Ctrl + Shift + F), найдите процедуру ЗаполнитьПозицииИТаблицуОплатЧека.
  3. Найдите внутри процедуры объявление текста запроса (переменная Запрос.Текст).
  4. Найдите блок ОБЪЕДИНИТЬ ВСЕ, содержащий обращение к таблице Документ.АктОбОказанииПроизводственныхУслуг.
  5. Аккуратно удалите или закомментируйте весь этот блок (включая ключевое слово ОБЪЕДИНИТЬ ВСЕ, относящееся к нему).
  6. Сохраните изменения и обновите конфигурацию базы данных (F7).

Если база данных работает на платформе версии 8.3.10 и выше, настоятельно рекомендуем выносить подобные исправления в Расширение конфигурации. Это позволит сохранить основную конфигурацию на замке и упростит последующие обновления системы. При использовании расширения вы можете переопределить процедуру общего модуля с помощью аннотации &Вместо.

Резюме

Мы подробно разобрали техническую ошибку, связанную с «фантомным» документом АктОбОказанииПроизводственныхУслуг в УТ 10.3. Теперь вы знаете, что причиной ее активации является механизм автоматического формирования чеков коррекции при проведении документов задним числом. Используя предложенные инструкции, вы сможете быстро восстановить работоспособность кассового узла наиболее подходящим для вашей системы способом.

← На главную