При обновлении конфигураций линейки 1С:Розница или других торговых систем на платформе 1С:Предприятие 8.3 администраторы и разработчики нередко сталкиваются с ситуацией, когда в одном из магазинов блокируется процедура открытия кассовой смены. При этом карточки кассы, кассы ККМ и торговой точки заполнены корректно, а стандартное сообщение об ошибке не дает исчерпывающей информации о корневой причине сбоя. Разберем детально, почему возникает данная проблема, как локализовать ошибку на рабочей серверной базе без прерывания сеансов кассиров и какие шаги необходимы для ее устранения.
Проанализируем ключевые факторы, приводящие к отказу системы при попытке открыть смену:
КассоваяСмена или справочника КассыККМ) может измениться. Если при переходе на новый реквизит в старом свойстве объекта остался признак ПроверкаЗаполнения = ВыдаватьОшибку, платформенная валидация блокирует запись нового документа, так как старый реквизит не инициализируется в экранных формах и коде модулей.КассоваяСмена находится в статусе Закрыта, драйвер торгового оборудования возвращает отказ.В условиях распределенной розничной сети включение режима отладки на рабочем сервере 1С с перезапуском службы может привести к сбросу сеансов кассиров во всех торговых точках. Разберем, как локализовать сбой безопасными методами:
Ошибка и Предупреждение. В окне детального просмотра события содержится полный стек вызовов и представление ошибки с указанием конкретной строки кода и имени реквизита, не прошедшего валидацию.
// Тестовая проверка заполнения документа кассовой смены
НоваяСмена = Документы.КассоваяСмена.СоздатьДокумент();
НоваяСмена.Дата = ТекущаяДатаСеанса();
НоваяСмена.КассаККМ = ВыбраннаяКассаККМ;
НоваяСмена.Организация = ВыбраннаяКассаККМ.Владелец;
НоваяСмена.Магазин = ВыбраннаяКассаККМ.Магазин;
МассивОшибок = Новый Массив;
Если НЕ НоваяСмена.ПроверитьЗаполнение() Тогда
// Платформа выведет системные сообщения с точными именами реквизитов
ВызватьИсключение "Ошибка проверки заполнения реквизитов документа кассовой смены";
КонецЕсли;
ОбработкаПроверкиЗаполнения модуля объекта Документ.КассоваяСмена и пошагово проследить за формированием массива проверяемых реквизитов.В зависимости от источника сбоя применим один из следующих подходов:
Откроем конфигуратор, найдем объект метаданных Документ.КассоваяСмена (или связанный справочник) и найдем устаревший реквизит. В свойствах реквизита изменим параметр Проверка заполнения со значения Выдавать ошибку на Не проверять, либо полностью удалим привязку устаревшего реквизита из типовой логики.
&Вместо("ОбработкаПроверкиЗаполнения")
Процедура Расш1_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Исключаем проблемный или устаревший реквизит из списка обязательных к проверке
ПозицияРеквизита = ПроверяемыеРеквизиты.Найти("Статус");
Если ПозицияРеквизита <> Неопределено Тогда
ПроверяемыеРеквизиты.Удалить(ПозицияРеквизита);
КонецЕсли;
// Вызов стандартной логики
ПродолжитьВызов(Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Выполнено без ошибок.Таким образом, комплексный анализ журнала регистрации и оперативная правка правил валидации реквизитов позволяют быстро восстановить процесс открытия кассовых смен во всех торговых точках сети.