Видимость закладок Почты и СДЭК в зависимости от способа доставки. Розница 2.3
У клиента нужно в заказе покупателя показывать закладки доставки СДЭК и Почты России в зависимости от присутствия в товарной части услуги соответствующего типа.
Сначала поищем событие изменения табличной части, к которому можно привязаться. Увы, идеального нет, поэтому использую два события формы ОбновитьИтоговыеПоказатели и ОбновитьИтоговыеПоказателиСервер:
&НаСервере &После("ОбновитьИтоговыеПоказателиСервер") Процедура дор_ОбновитьИтоговыеПоказателиСервер() дор_ВидимостьЗакладок(); КонецПроцедуры &НаКлиенте &После("ОбновитьИтоговыеПоказатели") Процедура дор_ОбновитьИтоговыеПоказатели() дор_ВидимостьЗакладок(); КонецПроцедуры
После этого описываю саму процедуру:
Процедура дор_ВидимостьЗакладок() ЕстьПочтаРоссии = ложь; ЕстьСДЭК = ложь; //Использую запрос для ускорения получения наименований товаров М = Новый Массив(); Для Каждого Строка ИЗ Объект.Товары Цикл М.Добавить(Строка.Номенклатура); КонецЦикла; З = Новый Запрос( "ВЫБРАТЬ РАЗЛИЧНЫЕ Наименование ИЗ Справочник.Номенклатура ГДЕ Ссылка В (&М)"); З.УстановитьПараметр("М", М); Выборка = З.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ТекНаименование = ВРЕГ(Выборка.Наименование); Если Найти(ТекНаименование, "СДЭК") <> 0 Или Найти(ТекНаименование, "СДЕК") <> 0 Тогда ЕстьСДЭК = истина; Прервать; КонецЕсли; Если Найти(ТекНаименование, "ПОЧТА") <> 0 И Найти(ТекНаименование, "РОССИИ") <> 0 Тогда ЕстьПочтаРоссии = истина; Прервать; КонецЕсли; КонецЦикла; Если Элементы.Найти("Cdek_Страница") <> 0 Тогда Элементы.Cdek_Страница.Видимость = ЕстьСДЭК; КонецЕсли; Если Элементы.Найти("Pochta_Почта") <> 0 Тогда Элементы.Pochta_Почта.Видимость = ЕстьПочтаРоссии; КонецЕсли; КонецПроцедуры
В процедуре использую для ускорения получения наименований товаров запрос.
Сами закладки создаются расширениями, могут отсутствовать, поэтому в коде есть проверка на их наличие.
Код интересен еще тем, что из одного расширения управляет другими расширениями.
Среда: Розница 2.3.11.37. Объем: 0.5 час.
Свежие комментарии