Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Как оптимизировать код,что запрос не выполнялся для каждой строки

Как оптимизировать код,что запрос не выполнялся для каждой строки
Я
   1сЮлия
 
27.11.18 - 17:34
Как оптимизировать код,что запрос не выполнялся для каждой строки 
Для Каждого Оформление из ОформленияСтрок Цикл
        Запрос = Новый Запрос;
        Запрос.Текст = 
         "ВЫБРАТЬ
         |    ЕСТЬNULL(СУММА(КорректировкаДолгаСуммыДолга.Сумма),0) КАК Сумма,
         |    КорректировкаДолгаСуммыДолга.Ссылка КАК Ссылка
         |ПОМЕСТИТЬ Кредиторская
         |ИЗ
         |    Документ.КорректировкаДолга.СуммыДолга КАК КорректировкаДолгаСуммыДолга
         |ГДЕ
         |    НЕ КорректировкаДолгаСуммыДолга.ВидЗадолженности = ЗНАЧЕНИЕ(Перечисление.ВидыЗадолженности.Дебиторская)
         |  И  КорректировкаДолгаСуммыДолга.Ссылка В (&МассивСсылок)
         |СГРУППИРОВАТЬ ПО
         |    КорректировкаДолгаСуммыДолга.Ссылка
         |;
         |
         ////////////////////////////////////////////////////////////////////////////////

         |ВЫБРАТЬ
         |    ЕСТЬNULL(СУММА(КорректировкаДолгаСуммыДолга.Сумма),0) КАК Сумма,
         |    КорректировкаДолгаСуммыДолга.Ссылка КАК Ссылка
         |ПОМЕСТИТЬ Дебиторская
         |ИЗ
         |    Документ.КорректировкаДолга.СуммыДолга КАК КорректировкаДолгаСуммыДолга
         |ГДЕ
         |    НЕ КорректировкаДолгаСуммыДолга.ВидЗадолженности = ЗНАЧЕНИЕ(Перечисление.ВидыЗадолженности.Кредиторская)
         |  И  КорректировкаДолгаСуммыДолга.Ссылка В (&МассивСсылок)
         |СГРУППИРОВАТЬ ПО
         |    КорректировкаДолгаСуммыДолга.Ссылка
         |;
         |
         ////////////////////////////////////////////////////////////////////////////////

         |ВЫБРАТЬ
         |    КорректировкаДолга.Ссылка,
         |    ЕСТЬNULL(Дебиторская.Сумма, 0) - ЕСТЬNULL(Кредиторская.Сумма, 0) КАК разн
         |ИЗ
         |    Документ.КорректировкаДолга.СуммыДолга КАК КорректировкаДолга
         |        ЛЕВОЕ СОЕДИНЕНИЕ Дебиторская КАК Дебиторская
         |        ПО КорректировкаДолга.Ссылка = Дебиторская.Ссылка
         |        ЛЕВОЕ СОЕДИНЕНИЕ Кредиторская КАК Кредиторская
         |        ПО КорректировкаДолга.Ссылка = Кредиторская.Ссылка
         |ГДЕ      КорректировкаДолга.Ссылка=&МассивСсылок
         |СГРУППИРОВАТЬ ПО
         |    КорректировкаДолга.Ссылка,
         |    ЕСТЬNULL(Дебиторская.Сумма, 0) - ЕСТЬNULL(Кредиторская.Сумма, 0)" ;
         
        Запрос.УстановитьПараметр("МассивСсылок", Оформление.ДанныеСтроки.Ссылка);
           Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
               Оформление.Ячейки.Сумма.Значение =Выборка.разн;
        КонецЦикла;
 
 
   pasha_d
 
1 - 27.11.18 - 17:37
Выгрузи колонку ТЧ в список значений и подсунь в запрос.
   ILM
 
2 - 27.11.18 - 17:43
1. Создать массив куда считать ссылки
2. Создать соответствие, ссылка и оформление строки.
3. Один запрос (параметр массив ссылок)
4. Результат запроса получить вместе с ссылкой.
5. Используя оформление через ссылку вывести строку.
   Homer
 
3 - 27.11.18 - 17:45
А ни кого не смутил запрос, мне кажется там можно и через УФ все сделать
   1сЮлия
 
4 - 27.11.18 - 17:48
Это обычное приложение.
   xXeNoNx
 
5 - 27.11.18 - 17:51
(0) наверное еще выполняется где-нить "ПриИзменении" например строки?
   Homer
 
6 - 27.11.18 - 17:53
(4) Зачем вообще запрос? там одной строчкой вычисляется данные значение
   FormatC
 
7 - 27.11.18 - 17:56
(0) в этом цикле получай список ссылок и скармливай его запросу... ну и я надеюсь это в процедуре "приПолученииДанных" )
   Ник080808
 
8 - 27.11.18 - 18:03
(0) здесь запрос не нужен
   1сЮлия
 
9 - 27.11.18 - 18:10
да  процедуре "приПолученииДанных"
   Ник080808
 
10 - 27.11.18 - 18:17
(9) Оформление.ДанныеСтроки.Ссылка - получаешь табличную часть находишь сумму строк и все.
 
 Рекламное место пустует
   Ник080808
 
11 - 27.11.18 - 18:17
(9) а еще лучше добавить реквизит и при записи документа его заполнять как сумма документа в РТУ
   lodger
 
12 - 27.11.18 - 18:22
(9) удаление гланд через другое место вам уже в (2) описали.
лучше перестроить архитектуру решения.
   АнализДанных
 
13 - 27.11.18 - 18:27
(4) Для обычного приложения используй обработчик "ПриПолученииДанных".

1. В первом проходе получи ссылки

МассивСсылок = новый массив;
Для Каждого Оформление из ОформленияСтрок Цикл
   МассивСсылок.Добавить(Оформление.ДанныеСтроки.Ссылка);
КонецЦикла

2.Одним запросом получи таблицу значений с колонками "ссылка" и разн" по данным из массива в п.1. Ещё лучше закешировать таблицу в переменную формы и получать запросом только те ссылки, по которым данных в таблице ещё нет.

3. Вторым походом выводим информацию в ячейку
Для Каждого Оформление из ОформленияСтрок Цикл
  // Здесь для каждой "Оформление.ДанныеСтроки.Ссылка" ищем соответствие значения в нашей таблице значений. 

КонецЦикла
   xXeNoNx
 
14 - 27.11.18 - 19:50
(13) (9) пардон.., охренели чтоль?
https://its.1c.ru/db/metod8dev#content:2805:hdoc
   d4rkmesa
 
15 - 27.11.18 - 19:53
(14) Ну может у народа нет доступа к ИТС? =)
   МимохожийОднако
 
16 - 27.11.18 - 21:14
(15) Да ну?
   1сЮлия
 
17 - 28.11.18 - 10:28
Спасибо всеи,я разобралась вот,работает
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
              
         Соответствие = Новый Соответствие; 
         Массив = Новый Массив;
         Для каждого Стр из ОформленияСтрок Цикл
            Массив.Добавить(Стр.ДанныеСтроки.Ссылка);
            Соответствие.Вставить(Стр.ДанныеСтроки.Ссылка, Стр);
         КонецЦикла;
        
        Запрос = Новый Запрос;
        Запрос.Текст = 
         "ВЫБРАТЬ
         |    ЕСТЬNULL(СУММА(КорректировкаДолгаСуммыДолга.Сумма),0) КАК Сумма,
         |    КорректировкаДолгаСуммыДолга.Ссылка КАК Ссылка
         |ПОМЕСТИТЬ Кредиторская
         |ИЗ
         |    Документ.КорректировкаДолга.СуммыДолга КАК КорректировкаДолгаСуммыДолга
         |ГДЕ
         |    НЕ КорректировкаДолгаСуммыДолга.ВидЗадолженности = ЗНАЧЕНИЕ(Перечисление.ВидыЗадолженности.Дебиторская)
         |  И  КорректировкаДолгаСуммыДолга.Ссылка В (&Массив)
         |СГРУППИРОВАТЬ ПО
         |    КорректировкаДолгаСуммыДолга.Ссылка
         |;
         |
         ////////////////////////////////////////////////////////////////////////////////

         |ВЫБРАТЬ
         |    ЕСТЬNULL(СУММА(КорректировкаДолгаСуммыДолга.Сумма),0) КАК Сумма,
         |    КорректировкаДолгаСуммыДолга.Ссылка КАК Ссылка
         |ПОМЕСТИТЬ Дебиторская
         |ИЗ
         |    Документ.КорректировкаДолга.СуммыДолга КАК КорректировкаДолгаСуммыДолга
         |ГДЕ
         |    НЕ КорректировкаДолгаСуммыДолга.ВидЗадолженности = ЗНАЧЕНИЕ(Перечисление.ВидыЗадолженности.Кредиторская)
         |  И  КорректировкаДолгаСуммыДолга.Ссылка В (&Массив)
         |СГРУППИРОВАТЬ ПО
         |    КорректировкаДолгаСуммыДолга.Ссылка
         |;
         |
         ////////////////////////////////////////////////////////////////////////////////

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

        Пока Выборка.Следующий() Цикл
            Соответствие.Получить(Выборка.Ссылка).Ячейки.Сумма.Значение = Выборка.разн;
        КонецЦикла;
   1сЮлия
 
18 - 28.11.18 - 10:28
извиняюсь,спасибо всем большое!!!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует