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