Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Запрос 1С++ по регистру. Нет строк с пустыми значениями измерения

v7: Запрос 1С++ по регистру. Нет строк с пустыми значениями измерения
Я
   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с++ и прямыми запросами работаю второй раз в жизни, соответственно, нихрена не понимаю, что ему не так?
 
 
   trad
 
1 - 05.06.19 - 09:56
INNER JOIN замени на LEFT JOIN
   trad
 
2 - 05.06.19 - 09:58
т.к. пустая ссылка не может связаться ни с одним элементом справочника
   kissolo
 
3 - 05.06.19 - 10:18
(1), (2) сработало! Спасибо большое!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.