Как исправить ошибку при создании документа Отчет о розничных продажах в 1С:УТ 10.3 при закрытии смены

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

При работе в конфигурации «Управление торговлей 10.3» пользователи часто сталкиваются с критической ошибкой при попытке закрытия кассовой смены. Проблема проявляется максимально остро: программа либо аварийно завершает работу (дамп платформы), либо «зависает» намертво при попытке создать документ ОтчетОРозничныхПродажах. Рассмотрим подробнее, почему это происходит и как реанимировать систему.

Анализ проблемы: почему падает СоздатьДокумент()

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

Отчет = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();

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

Проанализируем ситуацию: в последних релизах УТ 10.3 (начиная с 10.3.69.x) разработчики внесли изменения в механизмы интеграции с ЕГАИС и торговым оборудованием. В модуль объекта документа ОтчетОРозничныхПродажах или в связанные с ним процедуры были добавлены вызовы, которые корректно работают на клиенте, но вызывают коллапс при выполнении в серверном контексте или в режиме внешнего соединения.

Причина №1: Некорректный контекст вызова модулей ЕГАИС

Выясним основную причину. Ошибка часто кроется в процедурах, отвечающих за обработку чеков. Посмотрим на пример проблемного кода, который может встречаться в модуле объекта или в обработках закрытия смены (например, в процедуре ПослеПередачиЧекаЕГАИС):


// Ошибочный код без проверки контекста
Текст = МенеджерОборудованияКлиент.СформироватьШаблонИнфоКвитанции(ПараметрыВыполнения, 37);

Проблема заключается в том, что общий модуль МенеджерОборудованияКлиент имеет флаг «Клиент» и недоступен на сервере. Когда платформа пытается скомпилировать модуль объекта документа на стороне сервера (или при определенных настройках прав), она встречает ссылку на несуществующий в этом контексте модуль и «падает».

Решение проблемы через правку кода

Чтобы исправить ситуацию, необходимо локализовать проблемный вызов и обернуть его в директивы препроцессора. Рассмотрим пошагово, что нужно сделать:

  1. Откроем конфигуратор и найдем документ ОтчетОРозничныхПродажах.
  2. Перейдем в Модуль объекта документа.
  3. Выполним проверку синтаксиса (Ctrl + F7), обязательно выбрав режим проверки для Сервера и Тонкого клиента.
  4. Если проверка подсвечивает вызовы к МенеджерОборудованияКлиент или другим модулям с постфиксом Клиент, их необходимо закомментировать или ограничить:

#Если Клиент Тогда
    Текст = МенеджерОборудованияКлиент.СформироватьШаблонИнфоКвитанции(ПараметрыВыполнения, 37);
#КонецЕсли

Также стоит обратить внимание на рекомендации опытных разработчиков: в некоторых случаях помогает откат специфических процедур ЕГАИС к версии релиза 10.3.69.1, где эти механизмы были более стабильны.

Причина №2: Проблемы с платформой и целостностью метаданных

Иногда ошибка проявляется даже при корректном коде. Обратим внимание на версию платформы. Пользователи отмечают, что на старых версиях (например, 8.3.13.1513) платформа ведет себя крайне нестабильно при возникновении исключений в модулях объектов. Проанализируем дополнительные симптомы:

Это явные признаки нарушения логической целостности кэша конфигурации или самих метаданных.

Комплексный алгоритм восстановления работы

Если правка кода не помогла или конфигуратор ведет себя неадекватно, выполним следующие шаги по очистке и обновлению системы:

Шаг 1: Полная очистка серверного и локального кэша

Недостаточно просто удалить базу из списка. Нужно физически удалить содержимое папок %AppData%\1C\1Cv8 и %LocalAppData%\1C\1Cv8. Если используется серверный вариант, необходимо остановить службу 1C:Enterprise Server и очистить папку snccntx в каталоге кластера серверов.

Шаг 2: Тестирование и исправление (ТиИ)

Запустим конфигуратор и выполним Администрирование — Тестирование и исправление. Обязательно выберем пункты «Реиндексация таблиц», «Проверка логической целостности» и «Проверка ссылочной целостности». Это поможет исключить ошибки на уровне базы данных SQL.

Шаг 3: Пересборка конфигурации через CF

Если Конфигуратор зависает при манипуляциях с документом, применим метод «лечения» через файл конфигурации:

  1. Выгрузим конфигурацию в файл (Конфигурация — Сохранить конфигурацию в файл...).
  2. Снимем базу с поддержки (если это допустимо) или загрузим этот же .cf файл поверх текущей конфигурации через Сравнение/Объединение.
  3. В особо тяжелых случаях помогает создание чистой базы и загрузка в нее полученного .cf файла с последующим переносом данных, но обычно достаточно «проливки» конфигурации в текущую базу для перестроения индексов метаданных.

Шаг 4: Обновление платформы

Настоятельно рекомендуется обновить платформу до актуальных релизов (минимум 8.3.18.x или 8.3.21.x). В новых версиях механизмы компиляции работают корректнее, и вместо «падения» системы вы получите внятное сообщение об ошибке, указывающее на конкретную строку кода.

Важный момент: если вы используете торговое оборудование, убедитесь, что драйверы и внешние компоненты также обновлены. Иногда СоздатьДокумент() инициирует проверку оборудования, и если внешняя компонента драйвера несовместима с текущей версией платформы, это вызовет критический сбой.

Подведем итог: чаще всего проблема кроется в смешении контекстов (вызов клиента с сервера) в модуле объекта ОтчетОРозничныхПродажах. Исправив директивы препроцессора и обновив платформу, мы обеспечим стабильную работу программы при закрытии смены.

← На главную