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

Новая тема
Показывать по 10 20 40 сообщений
> все данные кинуть в SQL server 2003 и считать в нем через SQL запросы (благо ADO есть)

Дурь.

> ...система начинает превращаться в черный ящик

Прежде чем лезть в систему нужно учиться.
Условия нужно накладываnm на виртуальную таблицу


РегистрБухгалтерии.Хозрасчетный.Остатки(&Период,&Счет , Субконто1 = &Номенклатура И Субконто2 = &Склад , )



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



Суть этого в следующем: выбираем список документов за период. Если документ при проведении выдал ошибку, то идем в запрос. Для каждой номенклатуры в ТЧ документа находим именно отрицательные остатки - 99% документ не перепровелся именно поэтому, а далее дело техники.
Все равно запрос получился в цикле, потому что нужно перебрать все документы за выбранный период, и в каждом документе свою ТЧ, и по результатам мы получаем количество, которого на складе в момент проведения нет. А значит, нужно искать на другом складе, чтобы оборотка была красивой, а не сплошь красной. Вторым запросом для номенклатуры, количества которой не хватает на складе, мы ищем альтернативу на других складах, и перемещаем её. В результате документ проводицца красиво.
Наверно, объяснил сумбурно - я уже полтора суток на ногах, и думать, честно говоря, лень.
Однако, по сравнению с первым предложенным вариантом этот запрос работает раз в десять быстрееэ"
> по сравнению с первым предложенным вариантом этот запрос работает раз в десять быстрееэ
его можно сделать еще быстрее, если вынести склады и документы во временные таблицы
Читают тему
(гостей: 1)

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