Динамическое заполнение параметров

28.10.10

Разработка - Механизмы платформы 1С

Недавно столкнулся с проблемой.
Была обработка с запросами где было условие типа "Подразделение <> &Подр..."
Клиент расширялся и Подразделение разбилось на несколько...
Надо было исправить...

 

Недавно столкнулся с проблемой.

Была обработка с запросами где было условие типа "Подразделение <> &Подр..."

Клиент расширялся и Подразделение разбилось на несколько...

Надо было исправить...

Решение:

1.//ВЫБИРАЕМ ВСЕ ПОДРАЗДЕЛЕНИЯ ОТНОСЯЩИЕСЯ К ГРУППЕ Которая была разбита

 

ЗапросПодразделения = Новый Запрос;

ЗапросПодразделения.Текст = "

|ВЫБРАТЬ

|ПодразделенияОрганизаций.Ссылка КАК Подр

|ИЗ

|Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций

|ГДЕ

|ПодразделенияОрганизаций.Родитель.Ссылка = &ПодразделениеДоговорников";

 

2.//СТРОИМ ЭЛЕМЕНТ ЗАПРОСА ОТНОСИТЕЛЬНО КОЛИЧЕСТВА ПОДПОДРАЗДЕЛЕНИЙ ДЛЯ КОРНЕВОГО ПОДРАЗДЕЛЕНИЯ"

ТекстЗапроса = "В (";

НомерТекПеременной = 0;

Пока ВыборкаПодрДог.Следующий() Цикл 

Если НомерТекПеременной <> 0 Тогда

ТекстЗапроса = ТекстЗапроса + ", ";

КонецЕсли;

НомерТекПеременной = НомерТекПеременной + 1;

ТекПеременнаяСтрока = "&Подр" + НомерТекПеременной;

ТекстЗапроса = ТекстЗапроса + ТекПеременнаяСтрока;

КонецЦикла;

ТекстЗапроса = ТекстЗапроса + ")";

//ЭЛЕМЕНТ ВИДА ТекстЗапроса = "В (&Подр1, &Подр2, .... )"

3. Меняем условие в исходном запросе

"НЕ ПОДРАЗДЕЛЕНИЕ " + ТекстЗапроса + ")" +"

4. Динамически заполняем параметры

 

//ДИНАМИЧЕСКОЕ ЗАПОЛНЕНИЕ

 

ВыборкаПодрДог.Сбросить();

НомерТекПеременной = 0;

Пока ВыборкаПодрДог.Следующий() Цикл

НомерТекПеременной = НомерТекПеременной + 1;

ТекПеременнаяСтрока = "Подр" + НомерТекПеременной;

Запрос.УстановитьПараметр(ТекПеременнаяСтрока, ВыборкаПодрДог.Подр);

КонецЦикла;

 

Все))
Надеюсь кому то пригодится

 

 

 

 

 

 

 

 

 

 

 

См. также

Механизмы платформы 1С Программист Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    5653    dsdred    40    

91

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    9962    bayselonarrend    21    

161

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    7169    dsdred    18    

81

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    23145    YA_418728146    28    

73

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    25320    SeiOkami    48    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Spartan 366 29.10.10 08:08 Сейчас в теме
(0) Чет как-то сложно все... Может нужно было просто написать НЕ Подразделение В ИЕРАРХИИ(&ГруппаПодразделений), если для всей группы, или НЕ Подразделение В(&СписокПодразделений) и передать в параметр список значений, если для конкретных?
charushkin; kote; mcroom-info; minikos; +4 Ответить
2. tango 546 29.10.10 10:23 Сейчас в теме
"Недавно столкнулся с проблемой", долго плакал. Проблема не выдержала, ушла.
А перенумераторы в портфолио есть?
4. artbear 1566 31.10.10 16:29 Сейчас в теме
3. artbear 1566 31.10.10 16:28 Сейчас в теме
Почитай про ПостроительЗапроса, и запрос легче будет исправить вместо столь многосложной конструкции
Пока минус :(
5. mcroom-info 01.11.10 11:56 Сейчас в теме
Всем спасибо.
Действительно я новичок в этом деле.
Приятно слышать обоснованную критику.
6. direktorSan 298 03.11.10 20:43 Сейчас в теме
Если мне память не изменяет, то в запросе такое разыменование:
ПодразделенияОрганизаций.Родитель.Ссылка
приводит к тому, что в конечном запрое (оттранслированном 1С-кой) будет присутствовать дополнительное соединение таблицы ПодразделенияОрганизаций к ней же самой по условию
ПодразделенияОрганизаций.Ссылка = ПодразделенияОрганизаций.Родитель
И уже из результата этого соединения будет взята ссылка.
Сами понимаете, что если табличка ПодразделенияОрганизаций имеет несколько десятков миллионов записей, то дополнительное соединение скорости запросу НЕ придаст.
Правильней писать было бы так:
ПодразделенияОрганизаций.Родитель = &ПодразделениеДоговорников

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