Консультация № 141045
30.07.2008, 11:40
0.00 руб.
0 3 2
День добрый. Два смежных вопроса по отчёту в 1С 7.7.
Первый:
делается запрос по документам (выбираются два вида накладных) за общий период. Выборка делается по выбранному товару. Если выборку делать по одной позиции товара, то выборка делается быстро, если выборку производить по группе (к примеру в группе 10 позиции) то выборка идёт ооочень долго. База SQL, период 1,5 года (учитываются документы за первое полугодие каждого года). Делалось 2,5+ часа, за это время по сетке в обе стороны прогналось порядка 3,2 миллионов пакетов, по моему мнению это явно не нормально.
Второй:
можно как-то к "ВыбНачалоПериода" плюсовать периоди с интервалом скажем в месяц (а не тупо прибавлять по 30 дней). Выборка документов за нужный период идёт через условие "когда((ДатаДок >= ВыбНачПериода1) И (ДатаДок <= ВыбКонПериода1))"

Обсуждение

Неизвестный
30.07.2008, 11:56
общий
это ответ
Здравствуйте, Jon_joni!
1. Мало информации - какой объем информации, как в запрос Вы передаете список требуемых товаров.
Попробуйте запусить очтет на серер, чтобы не задействована была сеть.
2. Попробуйте использовать функцию ДобавитьМесяц(<Дата>,<ЧислоМесяцев>).
Неизвестный
30.07.2008, 12:06
общий
это ответ
Здравствуйте, Jon_joni!
Советую посмотреть на проект 1С++ (сайт 1CPP.Ru). Есть возможность напрямую к SQL серверу писать запросы и это намного быстрее, чем стандартными средствами 1С
Неизвестный
30.07.2008, 13:45
общий
To Korolyov Alexander :

|Период с ВыбНачПериода по ВыбКонПериода1;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Док= Документ.РасходнаяНакладнаяС.ТекущийДокумент, Документ.РасходнаяНакладная.ТекущийДокумент;
|Товар = Документ.РасходнаяНакладнаяС.Товар, Документ.РасходнаяНакладная.Товар;
|Количество = Документ.РасходнаяНакладнаяС.Количество, Документ.РасходнаяНакладная.Количество;
|ДатаДок = Документ.РасходнаяНакладнаяС.ДатаДок, Документ.РасходнаяНакладная.ДатаДок;
|Функция СуммаОтправки = Сумма(Количество) когда((ДатаДок >= ВыбНачПериода) и (ДатаДок <= ВыбКонПериода));
|Функция СуммаОтправки1 = Сумма(Количество) когда((ДатаДок >= ВыбНачПериода1) И (ДатаДок <= ВыбКонПериода1));
|Группировка Товар без групп;
|"//}}ЗАПРОС
;

Если ВыбТовар.ЭтоГруппа() = 1 Тогда
ТекстЗапроса = ТекстЗапроса +
"Условие (Товар.ПринадлежитГруппе(ВыбТовар) = 1);";
Иначе
ТекстЗапроса = ТекстЗапроса + "Условие (Товар = ВыбТовар);";
КонецЕсли;

Локально на дбф варианте выполняеться много быстрее (даже не в монопольном), нагрузки на сервере по процу ни по памяти нету (при запуске на сервере одинаково)
Форма ответа