Динамический список 1с. Программное изменение текста запроса

Динамический список появился на платформе 8, как отдельный тип данных. Основан он на системе компановки данных и из коробки уже предлагает много «вкусностей» — полнотекстовый поиск, сортировку, отбор, поле поиска, условное оформление. В общем при правильном применении можно убить много зайцев, при помощи динамического списка. Чаще всего его применяют для отображения данных из БД.

В одном из своих проектов, я делал подбор товаров в РМК на основе динамического списка. Получилось надо скзать круто, пользователи были очень довольны скоростью работы и возможностями полнотекстового поиска.   Я кажется уже писал об этом в одной из предыдущих записей блога.

Так вот понадобилось мне, программное изменение текста запроса. К счастью решение было найдено довольно быстро  и реализация оказалась довольно простой.  Код приложу ниже. В моем случае я при установке галки на форме, подменял  текст запроса  динамического списка.  Важными замечанием является, что наименования колонок в обоих запросах должны быть полностью идентичными, чтоб сработал метод описанный мною. На форму я вывел  реквизит ОстаткиСклада с типом Булево, и при установке этого значения менял запрос.

&НаСервере
Процедура ОстаткиСкладаПриИзмененииНаСервере()
Если ОстаткиСклада Тогда
ТекстЗапроса =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Характеристика КАК Характеристика,
| СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
|ПОМЕСТИТЬ ОстаткиСклада
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &СкладОптовый) КАК ТоварыНаСкладахОстатки
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура,
| ТоварыНаСкладахОстатки.Характеристика
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ПОМЕСТИТЬ Цены
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &ЦенаОптовая) КАК ЦеныНоменклатурыСрезПоследних
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Номен.Ссылка КАК Номенклатура,
| ОстаткиСклада.Характеристика КАК Характеристика,
| Цены.Цена КАК Цена,
| ОстаткиСклада.КоличествоОстаток КАК Остаток
|ИЗ
| Справочник.Номенклатура КАК Номен
| ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиСклада КАК ОстаткиСклада
| ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены
| ПО (Цены.Характеристика = ОстаткиСклада.Характеристика)
| ПО (ОстаткиСклада.Номенклатура = Номен.Ссылка)";

ОстаткиТоваров.ТекстЗапроса = ТекстЗапроса;
ОстаткиТоваров.Параметры.УстановитьЗначениеПараметра("ЦенаОптовая", Справочники.ВидыЦен.НайтиПоНаименованию("Оптовая"));
ОстаткиТоваров.Параметры.УстановитьЗначениеПараметра("СкладОптовый", Справочники.Склады.НайтиПоНаименованию("Оптовый"));
Элементы.ОстаткиТоваров.Обновить();

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

ОстаткиТоваров.ТекстЗапроса = ТекстЗапроса;
ОстаткиТоваров.Параметры.УстановитьЗначениеПараметра("Розничная", Справочники.ВидыЦен.НайтиПоНаименованию("Розничная"));
ОстаткиТоваров.Параметры.УстановитьЗначениеПараметра("РозничныйСклад", Справочники.Склады.НайтиПоНаименованию("Агасиева 17"));
Элементы.ОстаткиТоваров.Обновить();

КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОстаткиСкладаПриИзменении(Элемент)
ОстаткиСкладаПриИзмененииНаСервере();
Элементы.ОстаткиТоваров.Обновить();
КонецПроцедуры

Приятным бонусом оказалось, что если в поле поиска уже введено значение, и далее нажать галку которая меняет текст запроса, то в динамический список будут выведены записи  с учетом значения  значения поиска. Надеюсь данная запись блога будет кому либо полезна.

Вам также может понравиться

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

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

Яндекс.Метрика