При работе в конфигурации «Управление торговлей 10.3» пользователи часто сталкиваются с критической ошибкой при попытке закрытия кассовой смены. Проблема проявляется максимально остро: программа либо аварийно завершает работу (дамп платформы), либо «зависает» намертво при попытке создать документ ОтчетОРозничныхПродажах. Рассмотрим подробнее, почему это происходит и как реанимировать систему.
Типовой сценарий ошибки выглядит следующим образом: при выполнении штатной процедуры закрытия смены вызывается функция СоздатьОтчетОРозничныхПродажах. Внутри этой функции работа прерывается на строке:
Отчет = Документы.ОтчетОРозничныхПродажах.СоздатьДокумент();
На первый взгляд кажется, что проблема в данных или в повреждении кэша, однако ситуация глубже. Разберем механику работы платформы 1С: при вызове метода СоздатьДокумент() система инициализирует объект и выполняет компиляцию его Модуля объекта. Если в модуле объекта содержатся ошибки компиляции или некорректные вызовы модулей, недоступных в текущем контексте (например, обращение к клиентскому модулю с сервера), платформа может завершить работу с критической ошибкой.
Проанализируем ситуацию: в последних релизах УТ 10.3 (начиная с 10.3.69.x) разработчики внесли изменения в механизмы интеграции с ЕГАИС и торговым оборудованием. В модуль объекта документа ОтчетОРозничныхПродажах или в связанные с ним процедуры были добавлены вызовы, которые корректно работают на клиенте, но вызывают коллапс при выполнении в серверном контексте или в режиме внешнего соединения.
Выясним основную причину. Ошибка часто кроется в процедурах, отвечающих за обработку чеков. Посмотрим на пример проблемного кода, который может встречаться в модуле объекта или в обработках закрытия смены (например, в процедуре ПослеПередачиЧекаЕГАИС):
// Ошибочный код без проверки контекста
Текст = МенеджерОборудованияКлиент.СформироватьШаблонИнфоКвитанции(ПараметрыВыполнения, 37);
Проблема заключается в том, что общий модуль МенеджерОборудованияКлиент имеет флаг «Клиент» и недоступен на сервере. Когда платформа пытается скомпилировать модуль объекта документа на стороне сервера (или при определенных настройках прав), она встречает ссылку на несуществующий в этом контексте модуль и «падает».
Чтобы исправить ситуацию, необходимо локализовать проблемный вызов и обернуть его в директивы препроцессора. Рассмотрим пошагово, что нужно сделать:
ОтчетОРозничныхПродажах.МенеджерОборудованияКлиент или другим модулям с постфиксом Клиент, их необходимо закомментировать или ограничить:
#Если Клиент Тогда
Текст = МенеджерОборудованияКлиент.СформироватьШаблонИнфоКвитанции(ПараметрыВыполнения, 37);
#КонецЕсли
Также стоит обратить внимание на рекомендации опытных разработчиков: в некоторых случаях помогает откат специфических процедур ЕГАИС к версии релиза 10.3.69.1, где эти механизмы были более стабильны.
Иногда ошибка проявляется даже при корректном коде. Обратим внимание на версию платформы. Пользователи отмечают, что на старых версиях (например, 8.3.13.1513) платформа ведет себя крайне нестабильно при возникновении исключений в модулях объектов. Проанализируем дополнительные симптомы:
Запрос.Выполнить()), а через Выбрать() или СоздатьДокумент() — нет.Это явные признаки нарушения логической целостности кэша конфигурации или самих метаданных.
Если правка кода не помогла или конфигуратор ведет себя неадекватно, выполним следующие шаги по очистке и обновлению системы:
Недостаточно просто удалить базу из списка. Нужно физически удалить содержимое папок %AppData%\1C\1Cv8 и %LocalAppData%\1C\1Cv8. Если используется серверный вариант, необходимо остановить службу 1C:Enterprise Server и очистить папку snccntx в каталоге кластера серверов.
Запустим конфигуратор и выполним Администрирование — Тестирование и исправление. Обязательно выберем пункты «Реиндексация таблиц», «Проверка логической целостности» и «Проверка ссылочной целостности». Это поможет исключить ошибки на уровне базы данных SQL.
Если Конфигуратор зависает при манипуляциях с документом, применим метод «лечения» через файл конфигурации:
.cf файл поверх текущей конфигурации через Сравнение/Объединение..cf файла с последующим переносом данных, но обычно достаточно «проливки» конфигурации в текущую базу для перестроения индексов метаданных.Настоятельно рекомендуется обновить платформу до актуальных релизов (минимум 8.3.18.x или 8.3.21.x). В новых версиях механизмы компиляции работают корректнее, и вместо «падения» системы вы получите внятное сообщение об ошибке, указывающее на конкретную строку кода.
Важный момент: если вы используете торговое оборудование, убедитесь, что драйверы и внешние компоненты также обновлены. Иногда СоздатьДокумент() инициирует проверку оборудования, и если внешняя компонента драйвера несовместима с текущей версией платформы, это вызовет критический сбой.
Подведем итог: чаще всего проблема кроется в смешении контекстов (вызов клиента с сервера) в модуле объекта ОтчетОРозничныхПродажах. Исправив директивы препроцессора и обновив платформу, мы обеспечим стабильную работу программы при закрытии смены.