Видимость закладок Почты и СДЭК в зависимости от способа доставки. Розница 2.3

У клиента нужно в заказе покупателя показывать закладки доставки СДЭК и Почты России в зависимости от присутствия в товарной части услуги соответствующего типа.

Сначала поищем событие изменения табличной части, к которому можно привязаться. Увы, идеального нет, поэтому использую два события формы ОбновитьИтоговыеПоказатели и ОбновитьИтоговыеПоказателиСервер:

&НаСервере
&После("ОбновитьИтоговыеПоказателиСервер")
Процедура дор_ОбновитьИтоговыеПоказателиСервер()
	дор_ВидимостьЗакладок();
КонецПроцедуры

&НаКлиенте
&После("ОбновитьИтоговыеПоказатели")
Процедура дор_ОбновитьИтоговыеПоказатели()
	дор_ВидимостьЗакладок();
КонецПроцедуры

После этого описываю саму процедуру:

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

В процедуре использую для ускорения получения наименований товаров запрос.

Сами закладки создаются расширениями, могут отсутствовать, поэтому в коде есть проверка на их наличие.

Код интересен еще тем, что из одного расширения управляет другими расширениями.

Среда: Розница 2.3.11.37. Объем: 0.5 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *