Вопрос с запросом

Новая тема
Показывать по сообщений
"Написал простенький запрос:<br> <br><br><pre>    Запрос = Новый Запрос;            Запрос.Текст =            "ВЫБРАТЬ            |    ХозрасчетныйОстатки.КоличествоОстаток КАК Количество            |ИЗ            |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, , , ) КАК ХозрасчетныйОстатки            |ГДЕ            |    ХозрасчетныйОстатки.Субконто1.Ссылка = &Номенклатура            |    И ХозрасчетныйОстатки.Субконто2.Ссылка = &Склад            |    И ХозрасчетныйОстатки.Счет = &Счет";            Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);            Запрос.УстановитьПараметр("Склад", Склад);            Запрос.УстановитьПараметр("Период", Дата);            Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));            ТЗ = Запрос.Выполнить().Выгрузить();  </pre><br><br> <br>Его задача - найти количественный остаток конкретной номенклатуры на указанную дату на указанном складе.<br> <br>Оно работает, но очень уж долго. Подскажите пожалуйста, как можно оптимизировать этот запрос, с целью сокращения времени его выполнения? Или нужно было писать по другому?"
Про параметры виртуальной таблицы что нибудь слышал?
"у меня там период задан *смущенно<br>То есть мысль в том, чтобы запихнуть туда все остальные параметры?<br> <br>Смотрим:<br>Субконто - у нас отбор по видам субконто, в рамках конкретной задачи, ИМХО, не нужно;<br>УсловиеСчета - выражение типа Булево, условие отбора счёта. Вот тут у меня вопрос - как записать такое условие? *чешет в затылке<br>Условие - произвольное выражение, возвращающее значение типа Булево. Опять же.... Как?<br> <br>Если не трудно - напишите, пожалуйста, пару примеров, чтобы я увидел, и больше не приставал с вопросами"
"<pre>// Вставить содержимое обработчика.<br>    Запрос = Новый Запрос;<br>            Запрос.Текст =<br>            "ВЫБРАТЬ<br>            |    ХозрасчетныйОстатки.КоличествоОстаток КАК Количество<br>            |ИЗ<br>            |    РегистрБухгалтерии.Хозрасчетный.Остатки(<br>            |            &Период,<br>            |            Счет В ИЕРАРХИИ (&Счет),<br>            |            ,<br>            |            Субконто1 В ИЕРАРХИИ (&Номенклатура)<br>            |                И Субконто2 В ИЕРАРХИИ (&Склад)) КАК ХозрасчетныйОстатки";<br>            Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);<br>            Запрос.УстановитьПараметр("Склад", Склад);<br>            Запрос.УстановитьПараметр("Период", Дата);<br>            Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладе);<br>            ТЗ = Запрос.Выполнить().Выгрузить(); </pre>"
Спасибо, добрый человек!<br>Запомнил, записал)
1. Почему проявляется пренебрежение к отбору по виду субконто? Его зря что ли придумали?<br>2. Судя по "СтрокаТЧ.Номенклатура" остатки нужно получать для всех товаров в табличной части, а не перебором строк каждый раз "дергать" таблицы регистров бух.учета.
- Если заранее известен счет, то явным определением порядка субконто можно пренебречь<br>  - Попросили оптимизировать запрос, а не всю задачу.
в цикле получили остаток по конкретной номенклатуре - сравнили с количеством в ТЧ - если больше - то записываем в новую ТЗ1, дальше будем разбираться. Если =< - то нормально, пропускаем.<br>Получили новую ТЗ1. Теперь надо посмотреть, на каких складах есть остатки? Снова запрос и снова в цикл. Понятно, что запрос тут точно такой же, и повторяется столько раз, сколько у нас складов, но я не очень представляю, как можно использовать один запрос в данной задаче.<br>То, что нашлось (причем, элементы из ТЗ1, естественно, могут находиться на разных складах), записываем в ТЗ2, и на её основе делаем документы перемещения товаров, а то, чего на складах нет - делаем поступление.<br>Вот такая задачка.<br> <br>А как по другому? И будет ли это производительнее?
Тебе говорят, что не надо писать быдлокодом, формировать запрос в цикле, это не комильфо!
Не комильфо... не надо кричать, как умею, так и пишу. Главное - работает же, хоть и с вашей помощью.. Щас поеду домой, подумаю над оптимизацией.<br>Я еще не придумал другой алгоритм.<br>а у вас есть варианты?

Читают тему

(гостей: 1)

Быстрый переход