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