|
v7: Запрос 1С++ по регистру. Нет строк с пустыми значениями измерения | ☑ | ||
---|---|---|---|---|
0
kissolo
05.06.19
✎
09:47
|
Добрый день.
Есть регистр Коробки с измерениями - Продукт (справочник, потому что может быть как материалы, так и номенклатура) - партия (справочник. Есть реквизиты ДатаПуска, ДатаНаклейки, НомерКОробки - нужны в результатах, по ним также может быть включен отбор) - МестоОбработки(справочник.МестаХранения) Есть ресурсы: - Брутто - Нетто - КоличествоКоробок нужен запрос по регистру, нач. и кон остатки и движения, с детализацией по продукту, ДатеПуска (ака ДП), ДатеНаклейки (ака ДН),НомеруКоробки (ака НК). Запрос вроде сформировал нормально - работает, по крайней мере, и фильтры работают, но, в сравнении с запросом средствами 1с, не показывает информацию с пустой партией (т.е. по продукту есть остаток на начало с пустой партией, т.е. с пустыми ДП, ДН, НК, обычный запрос показывает остаток, через 1с++ - не показывает ничего). Эти данные выбираются в форме диалога: Дата1,Дата - период; ВыбМат, ВыбДО, выбДОкон,ВыбКор, выбДП, выбДПкон. вот сам запрос: ТекстЗапроса=" |SELECT | Рег.МестоОбработки as [МестоОбработки $Справочник.МестаХранения] |, Рег.Продукт as [Продукт $Справочник] |, $Партии.ДатаНаклейки as ДатаОтгрузки |, $Партии.ДатаПуска as ДатаПуска |, $Партии.НомерКоробки as НомерКоробки |, Рег.БруттоНачальныйОстаток as НОБрутто |, Рег.НеттоНачальныйОстаток as НОНетто |, Рег.КоличествоКоробокНачальныйОстаток as НОКолК |, Рег.БруттоПриход as ПРБрутто |, Рег.НеттоПриход as ПРНетто |, Рег.КоличествоКоробокПриход as ПРКолК |, Рег.БруттоРасход as РАБрутто |, Рег.НеттоРасход as РАНетто |, Рег.КоличествоКоробокРасход as РАКолК |, Рег.БруттоКонечныйОстаток as КОБрутто |, Рег.НеттоКонечныйОстаток as КОНетто |, Рег.КоличествоКоробокКонечныйОстаток as КОКолК |FROM | $РегистрОстаткиОбороты.Коробки(:Дата1,:Дата2~,,, | INNER JOIN $Справочник.Партии as Партии WITH (NOLOCK) ON Партия = Партии.id |,, | (Продукт,МестоОбработки,Партия),(Брутто,Нетто,КоличествоКоробок)) as Рег | INNER JOIN $Справочник.Партии as Партии WITH (NOLOCK) on Рег.Партия = Партии.id |"; Усл=""; Усл01 = ""; Если ПустоеЗначение(ВыбМат)=0 тогда Усл01="Рег.Продукт = :ВыбМат~"; RS.УстановитьТекстовыйПараметр("ВыбМат", ВыбМат); Усл =Усл +?(ПустоеЗначение(Усл) =1,Усл01," AND "+Усл01); КонецЕсли; Если ((ПустоеЗначение(Выбдо)=0) и (ПустоеЗначение(ВыбдоКон)=0)) тогда Усл01=" | $Партии.ДатаНаклейки >= :выбдо AND $Партии.ДатаНаклейки <= :выбдоКон"; RS.УстановитьТекстовыйПараметр("выбдо", выбдо); RS.УстановитьТекстовыйПараметр("выбдоКон", выбдоКон); Усл =Усл +?(ПустоеЗначение(Усл) =1,Усл01," AND "+Усл01); КонецЕсли; Если ПустоеЗначение(Выбкор)=0 тогда Усл01=""; Усл01=" | $Партии.НомерКоробки = :выбкор"; RS.УстановитьТекстовыйПараметр("выбкор", выбкор); Усл =Усл +?(ПустоеЗначение(Усл) =1,Усл01," AND "+Усл01); КонецЕсли; Если ((ПустоеЗначение(Выбдп)=0) и (ПустоеЗначение(ВыбдпКон)=0)) тогда Усл01=" | $Партии.ДатаПуска >= :выбдп AND $Партии.ДатаПуска <= :выбдпКон"; RS.УстановитьТекстовыйПараметр("выбдп", выбдп); RS.УстановитьТекстовыйПараметр("выбдпКон", выбдпКон); Усл =Усл +?(ПустоеЗначение(Усл) =1,Усл01," AND "+Усл01); КонецЕсли; Если ПустоеЗначение(Усл)=0 тогда ТекстЗапроса=ТекстЗапроса+" |WHERE |"+Усл; Конецесли; RS.УстановитьТекстовыйПараметр("Дата1", Дата1); RS.УстановитьТекстовыйПараметр("Дата2", Дата2); то = RS.ВыполнитьИнструкцию(ТекстЗапроса); С 1с++ и прямыми запросами работаю второй раз в жизни, соответственно, нихрена не понимаю, что ему не так? |
|||
1
trad
05.06.19
✎
09:56
|
INNER JOIN замени на LEFT JOIN
|
|||
2
trad
05.06.19
✎
09:58
|
т.к. пустая ссылка не может связаться ни с одним элементом справочника
|
|||
3
kissolo
05.06.19
✎
10:18
|
(1), (2) сработало! Спасибо большое!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |