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

Новая тема
Показывать по 10 20 40 сообщений
"Написал простенький запрос:


    Запрос = Новый Запрос;            Запрос.Текст =            "ВЫБРАТЬ            |    ХозрасчетныйОстатки.КоличествоОстаток КАК Количество            |ИЗ            |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, , , ) КАК ХозрасчетныйОстатки            |ГДЕ            |    ХозрасчетныйОстатки.Субконто1.Ссылка = &Номенклатура            |    И ХозрасчетныйОстатки.Субконто2.Ссылка = &Склад            |    И ХозрасчетныйОстатки.Счет = &Счет";            Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);            Запрос.УстановитьПараметр("Склад", Склад);            Запрос.УстановитьПараметр("Период", Дата);            Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));            ТЗ = Запрос.Выполнить().Выгрузить();  



Его задача - найти количественный остаток конкретной номенклатуры на указанную дату на указанном складе.

Оно работает, но очень уж долго. Подскажите пожалуйста, как можно оптимизировать этот запрос, с целью сокращения времени его выполнения? Или нужно было писать по другому?"
Про параметры виртуальной таблицы что нибудь слышал?
"у меня там период задан *смущенно
То есть мысль в том, чтобы запихнуть туда все остальные параметры?

Смотрим:
Субконто - у нас отбор по видам субконто, в рамках конкретной задачи, ИМХО, не нужно;
УсловиеСчета - выражение типа Булево, условие отбора счёта. Вот тут у меня вопрос - как записать такое условие? *чешет в затылке
Условие - произвольное выражение, возвращающее значение типа Булево. Опять же.... Как?

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

А как по другому? И будет ли это производительнее?
Тебе говорят, что не надо писать быдлокодом, формировать запрос в цикле, это не комильфо!
Не комильфо... не надо кричать, как умею, так и пишу. Главное - работает же, хоть и с вашей помощью.. Щас поеду домой, подумаю над оптимизацией.
Я еще не придумал другой алгоритм.
а у вас есть варианты?
Читают тему
(гостей: 1)

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