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