Вход | Регистрация
 
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) сработало! Спасибо большое!

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.