powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Оптимизация формирования отчета
17 сообщений из 17, страница 1 из 1
Оптимизация формирования отчета
    #37976825
NiWay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь ускорить формирование отчета. Простым "вылизыванием" кода смог ускорить формирование с 20 минут до 10. Единственное, что осталось улучшить - запросы.
Позавчера начала изучать прямые запросы, но нужной информации так и не нашел...
Суть: Есть запрос вида
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Период с ДатаНач по ДатаКон;
Обрабатывать НеПомеченныеНаУдаление;
ОбрабатыватьДокументы Проведенные;
КредДокумент = Документ.Реализация.ТекущийДокумент;
ДокумСумма = Документ.Реализация.ТекущийДокумент.Сумма;
Покупатель = Документ.Реализация.ТекущийДокумент.Контрагент;
Функция Сумма = Сумма(ДокумСумма);
Группировка Покупатель;
Группировка КредДокумент



переделал на прямой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT
 Жур.IDDoc [КредДокумент $Документ.Реализация]
 , Sum($Док.СуммаВзаиморасчетов) As ДокумСумма
 , $Док.Контрагент [Покупатель $Справочник.Контрагенты]
FROM
 _1SJourn As Жур
INNER JOIN
 $Документ.Реализация As Док ON Док.IDDoc = Жур.IDDoc
WHERE
 Жур.Date_Time_IDDoc BETWEEN :ДатаНач AND :ДатаКон~ AND
 Жур.Closed & 1 = 1 AND
 Жур.IsMark = 0
GROUP BY $Док.Контрагент
 , Жур.IDDoc


Запрос отрабатываеться нормально...
теперь вопрос: как переделать следующие строки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
Пока Запрос.Группировка("Покупатель") = 1 Цикл
 <действия>
 Пока Запрос.Группировка("КредДокумент") = 1 Цикл
  <действия>
 КонецЦикла;
 <действия>
КонецЦикла;



Буду благодарен за любую информацию.
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37976885
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос быстрый? Сколько секунд? Я бы через оборотный регистр сделал.

А обход по по группировкам - сколько времени?
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37976912
NiWay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос на 1С формируется порядка 5 минут (период последние 90-о дней)
Соответственно прямой запрос формируется намного шустрее, НО если убирать группировку будет слишком много ненужных промежуточных, постоянно посторяющихся космитических операций для покупателей....
Вид отчета на выходе что то типа:
Код: sql
1.
2.
3.
4.
5.
6.
Покупатель1
 Реализация1 120
 Релазиация2 250
Покупатель2
 Реализация3 150
 Реализация4 340
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37976913
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NiWay, добавь в конфигурацию оборотный регистр. Покупатель документ сумма. Будет гораздо шустрее все делаться. Да и итоги там уже расчитаны.

А обход по по группировкам - сколько времени?
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37976959
NiWay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас весь отчет формируется за 30 секунд... Основная нагрузка идет именно запросы (тот что я показал обработка 5 минут, плюс еще один запрос к регистрам - 4 минуты)... вот их бы убрать :(

Что никаких вариантов больше нет - не ломая конфигуратор... (может при использовании прямых запросов у CPP какой нить аналог есть команде Группировка(1)?)
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37976978
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕПОНЯТНО.

Что вы подразумеваете под "запросом" - Выборка из запроса или Запрос.Выполнить?

Если первое - то как вариант выгрузка в тз. Если второе - то быстрее чем прямой запрос можно сделать только если будет отдельная таблица с данными результатами. (оборотный регистр)

И кстати непонятно база большая? Сколько строк получается в результате вашего запроса? Может проблема совершенно в другом? (железо память и тд?)
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977063
NiWay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поз запросом я имею ввиду:
Код: sql
1.
Запрос.Выполнить()

... Там если с отдельным запросом - слишком много переделывать... не очень охото... там столько накручено что мозг кипит от одного только вида (единственное что понял, когда читал - его писали несколько программистов...)

В результате запроса выдается порядка 25 000 документов (строк)... База 25 Гб.
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977103
NiWay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S. Забыл упомянуть... пробовал через код:
Код: plsql
1.
Запрос.ПолучитьСтроку("Покупатель");

Выдает ошибку... не могу понять, почему :(
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977107
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NiWay, глупый вопрос - а кому-то нужен отчет с 25т строк? Пологаю что нужен с отбором по контрагенту и все. А если это делается за приемлимое время в текущей базе, то плевать что отчет по всем формируется 10 минут.

А сделать новый регистр - не понимая даже сложности всего навороченного - легко.
1. Смотрю все документы что двигают этот регистр.
2. В обработке проведения этих документов - читаю все записи в регистр и записываю в мой.

Правда встанет проблема с данными предыдуших итогов - можно ли их перезаписать... Но тут вариант - создать свой документ - с движением только по моему новому регистру и насоздавать этих документов от рождества Христова.

ps А прямой запрос - сколько времени выполняется?
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977113
NiWay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1сNiWay, глупый вопрос - а кому-то нужен отчет с 25т строк? Пологаю что нужен с отбором по контрагенту и все. А если это делается за приемлимое время в текущей базе, то плевать что отчет по всем формируется 10 минут.

А сделать новый регистр - не понимая даже сложности всего навороченного - легко.
1. Смотрю все документы что двигают этот регистр.
2. В обработке проведения этих документов - читаю все записи в регистр и записываю в мой.

Правда встанет проблема с данными предыдуших итогов - можно ли их перезаписать... Но тут вариант - создать свой документ - с движением только по моему новому регистру и насоздавать этих документов от рождества Христова.

ps А прямой запрос - сколько времени выполняется?

отчет 25т. строк нужен экономистам... грубо говоря он выводит дебеторскую задолжность с учетом просроченного долга (месяц назад сколько покупатель должен был, два месяца, три) чтобы видеть это счастье в динамике...
На прямом запросе этот запрос формируется 5 секунд (разница как бы 4 минуты 55 секунд, даже по скромным посчетам)

Эта конфа настолько корява, что не хотелось бы ее менять... Проблема заключается в том, что при формировании этого отчета весь офис курит бамбук пока он не сформируется.... вот и задумался о том, как можно сократить этот интервал либо совсем его выкинуть...
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977132
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NiWay, ок тогда простая идея.

насколько я помню выполнить прямой запрос - возвращает ТЗ. Эту тз сортируем по контрагент.наименование и док.датадок.
Дальше перебираем строчки ТЗ и выводим в отчет. (Чуть логику только вывода строк меняем)
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977134
NiWay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист 1сNiWay, ок тогда простая идея.

насколько я помню выполнить прямой запрос - возвращает ТЗ. Эту тз сортируем по контрагент.наименование и док.датадок.
Дальше перебираем строчки ТЗ и выводим в отчет. (Чуть логику только вывода строк меняем)
К сожалению не чуть логику и вывод строк.... а мозг на полную парсим код и разбираемся что куда выводиться.... почему тот или иной контрагент в одну отчетность должен попадать, а во вторую нет (он то покупатель, то поставщик.... и соответственно долг считается по разному....
Если аналога нету - значит весь запрос переделывать.... Ну ладно - все равно спасибо за помощь.... ближе к понедельнику скажу результат - удалось мне или нет...
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977143
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NiWay,

По запросу. Выбирайте по регистру а не по документам.
По группировкам. Используйте индексированную таблицу.
По тому что все нервно курят. Это проблема движка 1С. Или поднимайте ночной бекап в отдельную базу (для аналитиков), или юзайте OLAP (если уж нужна такая подробная динамика).
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977145
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить. Если решите использовать OLAP то даже непытайтесь строить локальные кубы. При таком объеме невзлетит - проверено лично. Поэтому придется ставить полноценный MSAS. Вопрос стоимости лицензий я неподнимаю, т.к. вопрос был о путях решения конкретной задачи.
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977266
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, но вы нифига не вылизали код..
Обход результатов выборки у вас тормозит, т.к. В заиросе вы получаете не данняе для отчета, а только ссылки на них. Даные вы получаете при обходе выборки. Как поправить- пояснить?
Провеюенный документ не может быть помечен на удаление..
Запрос 1С возвращает данные через дбф таблицу в директории временных файлов 1С. 1С++ через датасет.. Рам диск помогает.
ЗЫ Такие отчеты надо строить не в кубах, а во внерабочее время и отдавать пользователю уже экселевский файл..
ЗЗЫ За гуру стыдно...
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977275
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AHDP, тоесть в 7 sql запрос возвращается в дбф файл, хранщийся во временный файлах 1с? Хм хотя наверное ты прав.

NiWay - приведи всю логику расчета поставщика и покупателя. Будет видно - можно ли все в запрос кинуть.
...
Рейтинг: 0 / 0
Оптимизация формирования отчета
    #37977488
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с,

Насколько помнью неиспользоватьsql() на это не влияет.

Всю логику перетаскивать может и не надо, а вот вытащить значения для ее реализации и построения отчета нужно. И отсортировать.
Например показать контрагентов у которых задолженность привышала 5%от оборота за анализируемый месяц в течении 5 рабочих юней и при этом была больше 1000 рублей.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Оптимизация формирования отчета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]