:: Вопросы по 1С
Как убрать запрос в цикле
sphinx
Автор

Сообщений: 32782
Откуда: Екатеринбург
Дата регистрации: 22.11.2006
Коллеги, есть такая процедура, у которой запрос выполняется в цикле (с PostgreSQL). Хотелось бы если не состыковать запрос из PostgreSQL с запросом из Документов/Регистров, то найти какое-то более красивое решение.


Часть текста скрыта
Процедура Импорт (пСтруктураПараметров = Неопределено) Экспорт
лСоединение = Новый COMОбъект("ADODB.Connection");
лКомманда = Новый COMОбъект("ADODB.Command");
лНаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
лНаборЗаписейНумератор = Новый COMОбъект("ADODB.RecordSet");
лСоединение.ConnectionString = "Driver={PostgreSQL ANSI};Server=" + пСтруктураПараметров.IPАдресСервера + ";Port=" + пСтруктураПараметров.Порт + ";Database=" + пСтруктураПараметров.ИмяБазыДанных + ";Uid=" + пСтруктураПараметров.ИмяПользователя + ";Pwd=" + пСтруктураПараметров.Пароль + ";";
лСоединение.Open();
лКомманда.ActiveConnection = лСоединение;
лКомманда.CommandText =
" SELECT p.id as ID
| FROM public.procedures p
| WHERE p.kol >= 10000
| AND p.date >= to_date(’01.01.2020’, ‘dd.mm.yyyy’);
лНаборЗаписей = лКомманда.Execute();
Пока Не лНаборЗаписей.EOF Цикл
лЗапрос = Новый Запрос;
лЗапрос.Текст =
"ВЫБРАТЬ
| Договора.Ссылка,
| Договора.Идентификатор,
| Договора.Дата,
| Подразделения.Код КАК КодПодразделения,
| Договора.Цена
|ИЗ Документ.Договора КАК Договора
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Подразделения КАК Подразделения
| ПО Договора.Подразделение = Подразделения.Ссылка
|ГДЕ
| Договора.Идентификатор = &ИдентификаторПостгресСкл";
лЗапрос.УстановитьПараметр("ИдентификаторПостгресСкл ",лНаборЗаписей.Fields(0).Value);
лРезультатЗапроса = лЗапрос.Выполнить().Выбрать();
Если лРезультатЗапроса.Следующий() Тогда
лСтруктураШапкиДокумента = Новый Структура;
лДокумент = Документы.Договора.СоздатьДокумент();
лДокумент.Дата = лНаборЗаписей.Fields(1).Value;
лДокумент.Идентификатор = лНаборЗаписей.Fields(0).Value;
лДокумент.Дата = лНаборЗаписей.Fields(1).Value;
лДокумент.Подразделение = Справочники.Подразделения.НайтиПоКоду(лНаборЗаписей.Fields(2).Value);
лДокумент. Цена = лНаборЗаписей.Fields(3).Value;
лДокумент.Записать();
лНаборЗаписей.MoveNext();
КонецЦикла



------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
pasha_usue

Сообщений: 3768
Откуда: Е-бург
Дата регистрации: 06.10.2006
Так классика же
1. Запрос к postgre в таблицу значений.
2. Тз параметром в запрос 1с
3. Индексы на полученную временную таблицу
4. Джойнишь временную на документ.договора

Я обычно пакетом получаю три отдельных результата: что удалить, что добавить, а что обновить.
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
pasha_usue

Сообщений: 3768
Откуда: Е-бург
Дата регистрации: 06.10.2006
И найтипокоду выкини. В том же запросе на раз вычисляется.
Если ты не делаешь тупой запрос к бд в цикле, то найтипокоду делает его за тебя.
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
medstrax
Забанен

Сообщений: 5964
Дата регистрации: 23.03.2007
"Венгерская нотация" применительно к 1С выглядит не очень. Что, вот реально кто-то так пишет, везде суя префиксы?
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
pasha_usue

Сообщений: 3768
Откуда: Е-бург
Дата регистрации: 06.10.2006
medstrax
"Венгерская нотация" применительно к 1С выглядит не очень. Что, вот реально кто-то так пишет, везде суя префиксы?
У меня чувак был, которого я семь лет учил фоксу. Потом мы разными путями ушли в 1С. А потом я его к себе на работу звал. Вот он так и продолжает в Венгерской нотации.

А смысла нет ещё и потому, что 99% переменных в коде это объекты. А если попадается элементарный тип, то это будет какая-нибудь Сумма, ДатаНачала. Нахрена б такой переменной ещё и венгерская нотация?

PS. Да, и почему префикс везде "л" я так и не смог догадаться.



Исправлено 1 раз(а). Последнее : pasha_usue, 26.03.21 11:58
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Иногда кажется, что 1С - это было бы наиболее годное занятие для программеров, заслуживших ад.
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
pasha_usue

Сообщений: 3768
Откуда: Е-бург
Дата регистрации: 06.10.2006
Simple777
Иногда кажется, что 1С - это было бы наиболее годное занятие для программеров, заслуживших ад.
Это вкусовщина чистой воды.

Не видел ни одного устойчивого аргумента против 1С.
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
pasha_usue
Simple777
Иногда кажется, что 1С - это было бы наиболее годное занятие для программеров, заслуживших ад.
Это вкусовщина чистой воды.

Не видел ни одного устойчивого аргумента против 1С.

Это называется - "стокгольмский синдром".
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
medstrax
Забанен

Сообщений: 5964
Дата регистрации: 23.03.2007
Simple777
Иногда кажется, что 1С - это было бы наиболее годное занятие для программеров, заслуживших ад.

Наверняка фпд-шники будут где-то рядом
Ratings: 0 negative/0 positive
Re: Как убрать запрос в цикле
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
medstrax
Simple777
Иногда кажется, что 1С - это было бы наиболее годное занятие для программеров, заслуживших ад.

Наверняка фпд-шники будут где-то рядом

Цитата:
Совпадение? Не думаю... (С)

Ratings: 0 negative/0 positive


Эта тема закрыта.

On-line: 3 (Гостей: 3)

© 2000-2025 Fox Club 
Яндекс.Метрика