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