Подсветка акционного товара в "ПодборТоваровВДокументПродажи" через расширение

1. user597882_33v 03.12.23 13:40 Сейчас в теме
Необходимо через расширение реализовать подсветку товара при подборе в документы продажи.
Реализация:
-Создать дополнительный реквизит у номенклатуры "Акция".
-На форме обработки "ПодборТоваровВДокументПродажи" в таблицу динамического списка добавляю скрытую колонку "Акция"
-Добавляю условие для условного форматирования, подсветки товара.
теперь по куду:
1) Добавить доп реквизит и установить его у необходимых товаров, делает пользователь через саму программу.
2) В расширение добавляю "ПодборТоваровВДокументПродажи", в модуле формы дописываю:
&После("ПриСозданииНаСервере")

Процедура ПриСозданииНаСервере2(Отказ, СтандартнаяОбработка)
	
СписокНоменклатура.ТекстЗапроса = СтрЗаменить(СписокНоменклатура.ТекстЗапроса, "ЛОЖЬ КАК СодержитУслуги", "ЛОЖЬ КАК СодержитУслуги," + Символы.ПС + "ДопРеквизит.Значение КАК Значение");
СписокНоменклатура.ТекстЗапроса = СтрЗаменить(СписокНоменклатура.ТекстЗапроса,
											"Справочник.Номенклатура КАК СправочникНоменклатура",
											"Справочник.Номенклатура КАК СправочникНоменклатура
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизит
	|ПО (СправочникНоменклатура.Ссылка = ДопРеквизит.Ссылка)
	|И (ДопРеквизит.Свойство.Заголовок = ""Акция"")");


НовЭлемент = Элементы.Добавить("ВидНоменклатуры", Тип("ПолеФормы"), Элементы.СписокСтандартныйПоискНоменклатура);
НовЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
НовЭлемент.ПутьКДанным = "СписокНоменклатура.Акция";
НовЭлемент.Заголовок = "Акция";
НовЭлемент.ТолькоПросмотр = Ложь;
НовЭлемент.Видимость = Истина;

	
КонецПроцедуры
Показать

Текст запроса изменяю, отрабатывает нормально.
А вот добавить колонку динамического списка Тут проблемма, чтото не пойму откуда взять путь к данным :( ???
НовЭлемент.ПутьКДанным =      ;


Ну и условное форматирование, то же отрабатывает нормально, там пока другое условие, т.к. колонки Акция нет пока:
&После("УстановитьУсловноеОформление")
Процедура УстановитьУсловноеОформление2() 
	
Элемент = УсловноеОформление.Элементы.Добавить();
    
    //выбор элемента
    ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокСтандартныйПоискНоменклатураНаименование.Имя);
        
    ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокРасширенныйПоискНоменклатураНаименование.Имя);
    
    //условие
    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    //ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Элементы.СписокРасширенныйПоискНоменклатураВНаличииОстаток);
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных( "СписокНоменклатура.ВНаличииОстаток" );
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    ОтборЭлемента.ПравоеЗначение = 10;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
КонецПроцедуры
Показать


Или может быть есть более правильное решение такой задачи ? которое работает быстрее?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 03.12.23 16:30 Сейчас в теме
(1)
НовЭлемент.ПутьКДанным =  "Объект.Значение";
Или как там ваш дин. список назван
3. user1880116 03.12.23 20:43 Сейчас в теме
(1)
может быть
ПриПолученииДанныхНаСервере
4. user597882_33v 03.12.23 20:52 Сейчас в теме
Всем спасибо.
Видимо список много раз подменяется, и получается что я текстовую замену делал, а список уже другой.
В обще вот скомпоновал так, работает:

&После("ПриСозданииНаСервере")
Процедура РА_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	СписокНоменклатура.ТекстЗапроса = СтрЗаменить(СписокНоменклатура.ТекстЗапроса,
	"СправочникНоменклатура.Артикул КАК Артикул,",
	"СправочникНоменклатура.Артикул КАК Артикул,
	|ДопРеквизит.Значение КАК Значение,");	
	
	СписокНоменклатура.ТекстЗапроса = СтрЗаменить(СписокНоменклатура.ТекстЗапроса,
	"Справочник.Номенклатура КАК СправочникНоменклатура",
	"Справочник.Номенклатура КАК СправочникНоменклатура
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизит
	|ПО (СправочникНоменклатура.Ссылка = ДопРеквизит.Ссылка)
	|И (ДопРеквизит.Свойство.Заголовок = ""Акция"")");
	

	НовЭлемент = Элементы.Добавить("Акция", Тип("ПолеФормы"), Элементы.СписокСтандартныйПоискНоменклатура);
	НовЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
	НовЭлемент.ПутьКДанным = "СписокНоменклатура.Значение";
	НовЭлемент.Заголовок = "Акция";
	НовЭлемент.ТолькоПросмотр = Ложь;
	НовЭлемент.Видимость = Ложь;
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СписокСтандартныйПоискНоменклатура.Имя);
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СписокНоменклатура.Значение");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
	

	
КонецПроцедуры
Показать
5. user1880116 03.12.23 21:30 Сейчас в теме
(4)
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК ДопРеквизит
|ПО (СправочникНоменклатура.Ссылка = ДопРеквизит.Ссылка)
|И (ДопРеквизит.Свойство.Заголовок = ""Акция"")")
Отличный метод получить сообщение "Обнаружено дублирование ключевых значений в колонке Ссылка"
6. user597882_33v 03.12.23 21:42 Сейчас в теме
(5) А как правильней сделать ?
8. user1880116 03.12.23 21:49 Сейчас в теме
(6) Через ПриПолученииДанныхНаСервере
9. user597882_33v 04.12.23 12:38 Сейчас в теме
(8) К сожалению в этом не силен, не могли бы в двух словах описать логику действий что бы это из расширения реализовать .
10. user1880116 04.12.23 16:17 Сейчас в теме
(9)
не могли бы
ПриПолученииДанныхНаСервере

Синтаксис:
ПриПолученииДанныхНаСервере(<ИмяЭлемента>, <Настройки>, <Строки>)

Параметры:
<ИмяЭлемента>
Тип: Строка.
Содержит имя таблицы формы, из которой вызван обработчик события.
<Настройки>
Тип: НастройкиКомпоновкиДанных.
Содержит копию полных настроек динамического списка.
<Строки>
Тип: СтрокиДинамическогоСписка.
Коллекция содержит данные и оформление всех строк, получаемых в списке, кроме строк группировок.

Описание:
Обработчик события вызывается на сервере после получения данных динамическим списком, только если была получена как минимум одна строка. При этом элемент формы, с которым связано событие, не передается в обработчик.
Обработчик вызывается в режиме совместимости конфигурации Версия8_3_8 и выше.
Если в данном обработчике события изменяются данные строк, то рекомендуется исключать поля, в которых изменяются данные, из списков полей, используемых для группировки, упорядочивания и отбора. Если этого не сделать, группировка, упорядочивание и отбор (включая все виды поиска) будет работать неожиданно для пользователя. Для установки ограничения на использование поля в той или иной операции предназначены методы динамического списка УстановитьОграниченияИспользованияВГруппировке, УстановитьОграниченияИспользованияВПорядке и УстановитьОграниченияИспользованияВОтборе.

Доступность:
Сервер.

Примечание:
Обработчик данного события должен иметь директиву &НаСервереБезКонтекста. Отбор (а также поиск), сортировка, группировка и условное оформление будут применяться к значениям до изменения их обработчиком.

Использование в версии:
Доступен, начиная с версии 8.3.10.
7. user597882_33v 03.12.23 21:45 Сейчас в теме
Еще пишет "Переменная не определена (СписокНоменклатура)" ошибку, хотя работает всё. Как исправить ?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот