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

28.10.10

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

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

 

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

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

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

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

Решение:

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

 

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

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

|ВЫБРАТЬ

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

|ИЗ

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

|ГДЕ

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

 

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

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

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

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

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

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

КонецЕсли;

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

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

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

КонецЦикла;

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

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

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

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

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

 

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

 

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

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

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

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

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

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

КонецЦикла;

 

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

 

 

 

 

 

 

 

 

 

 

 

См. также

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

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

23.06.2024    7723    bayselonarrend    20    

156

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

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

13.03.2024    6099    dsdred    16    

80

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

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

24.01.2024    18309    YA_418728146    26    

72

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

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

06.10.2023    23913    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14953    YA_418728146    7    

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

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