| 
    
            
         
         | 
    
  | 
Как через СКД выполнить вывод незаполненных строк | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        a2a4    
     17.09.19 
            ✎
    08:29 
 | 
         
        Есть несколько регистров. Общее у них всех - номенклатура. Но остатки могут различаться (из-за любви бухгалтеров переодически править документом корректировка записей регистров). Хочу через СКД вывести данные о всех регистрах с группировкой по номенклатуре. Как сделать вывод строки для регистров по которым нет остатков? 
 
        По факту через все имеющиеся остатки по всем регистрам я формирую список Номенклатуры и к ней цепляю остатки по разным регистрам. Одна из колонок - в текстовом виде наименование регистра. Если остатков по какому-то регистру нет, то должна выводиться пустая строка у которой заполнен только столбец с наименование регистра. зы. да, знаю как сделать обычным отчетом, но интересно именно СКД, так как там значительный функционал по всяким отборам и прочему.  | 
|||
| 
    1
    
        FIXXXL    
     17.09.19 
            ✎
    08:50 
 | 
         
        (0) тебе весь справочник Номенклатура нужен? или только номенклатура, которая фигурирует в любом из интересующих регистров?     
         | 
|||
| 
    2
    
        a2a4    
     17.09.19 
            ✎
    08:53 
 | 
         
        (1) только номенклатура которая присутсвует в любом из регистров. Получить список номенклатуры не проблема.     
         | 
|||
| 
    3
    
        FIXXXL    
     17.09.19 
            ✎
    08:55 
 | 
         
        (2) ну и? собираешь ВТ номенклатур, к ней левым соединением остатки (что не есть хорошо, но отчет админский)     
         | 
|||
| 
    4
    
        a2a4    
     17.09.19 
            ✎
    08:56 
 | 
         
        (3) Есть регистр1, регистр2, регистр3. По регистрам 1 и 2 остатков нет. Прицепи его.     
         | 
|||
| 
    5
    
        FIXXXL    
     17.09.19 
            ✎
    08:58 
 | 
         
        (4) товар же есть в регистре3? прицепится с NULL ;)     
         | 
|||
| 
    6
    
        FIXXXL    
     17.09.19 
            ✎
    08:59 
 | 
         
        (5) + но сначала - ВТ товаров по всем трем регистрам     
         | 
|||
| 
    7
    
        тарам пам пам    
     17.09.19 
            ✎
    09:13 
 | 
         
        (3) такое лучше делать не соединением, а объединением:
 
        
     | 
|||
| 
    8
    
        FIXXXL    
     17.09.19 
            ✎
    10:05 
 | 
         
        (7) соединение с ВТ - на каждый регистр, а потом все в кучу объединить конечно
 
        ну или один запрос с кучей левых и вывод каждого регистра в свою колонку... тут уж от задачи  | 
|||
| 
    9
    
        a2a4    
     17.09.19 
            ✎
    10:08 
 | 
         
        Вижу народ вообще не врубается в проблему.
 
        Регистров НЕСКОЛЬКО. По факту от всех соединений и объединений будет таблица вида номенклатура1 регистр1 номенклатура1 регистр2 номенклатура1 регистр3 номенклатура2 регистр2 (по номенклатуре2 больше нет остатков) Это все группируется по номенклатуре, КАК ВЫВЕСТИ СТРОКИ по номенклатуре2 и регистрам 1 и 3?  | 
|||
| 
    10
    
        FIXXXL    
     17.09.19 
            ✎
    10:53 
 | 
         
        (9) вижу ты читаешь невнимательно :)
 
        Регистр1.Номенклатура ПОМЕСТИТЬ ВТНоменклатура ОБЪЕДИНИТЬ Регистр2.Номенклатура ОБЪЕДИНИТЬ Регистр3.Номенклатура и вот эту ВТ всех номенклатур с хоть каким то остатком по любому регистру соединяй уже с каждой таблицей остатков  | 
|||
| 
    11
    
        a2a4    
     17.09.19 
            ✎
    12:29 
 | 
         
        (10) как я прикреплю остаток которого нет? Не надо путать эту ситуацию с случаем когда у вас ДВЕ таблицы с левым соединением - вот здесь вы получите NULL. Если таблиц несколько, то никогда не получите NULL если есть хоть один остаток.
 
        Если внимательно прочитать (0), то там написано - для регистра без остатка выводить пустую строку (только колонка с наименованием регистра должна быть заполнена). Кроме того, почему то решили что я все данные по регистрам хочу запихать в одну строку - так нет. Каждому регистру отдельная строка.  | 
|||
| 
    12
    
        FIXXXL    
     17.09.19 
            ✎
    12:40 
 | 
         
        (11) я не путаю, я пытаюсь донести про ДВЕ таблицы
 
        1.полная таблица всех номенклатур, хоть с каким остатком, предварительно собранная по всем регистрам остатков 2.таблица остатков по регистрN 3.ОБЪЕДИНИТЬ, повторить по количеству регистров  | 
|||
| 
    13
    
        FIXXXL    
     17.09.19 
            ✎
    12:50 
 | 
         
        держи
 
        ВЫБРАТЬ РАЗЛИЧНЫЕ ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура ПОМЕСТИТЬ ВТНоменклатура ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ОБЪЕДИНИТЬ ВЫБРАТЬ РАЗЛИЧНЫЕ ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Номенклатура ИЗ РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТНоменклатура.Номенклатура КАК Номенклатура, "НаСкладах" КАК Регистр, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток ИЗ ВТНоменклатура КАК ВТНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ПО ВТНоменклатура.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ВТНоменклатура.Номенклатура, "НаОрганизациях", ТоварыОрганизацийОстатки.КоличествоОстаток ИЗ ВТНоменклатура КАК ВТНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки ПО ВТНоменклатура.Номенклатура = ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Номенклатура  | 
|||
| 
    14
    
        a2a4    
     17.09.19 
            ✎
    12:51 
 | 
         
        Выбрать
 
        "Рег1" КАК НаимРег, рег1.Номенклатура, рег1.ОстатокКоличество, рег1.ОстатокСумма, рег1.Реквизит1 КАК рег1Реквизит1 , NULL КАК рег2Реквизит1 Поместить ВТОстатки ИЗ РегистрНакопления.рег1 КАК рег1 Объединить ВСЕ Выбрать "Рег2", рег2.Номенклатура, рег2.ОстатокКоличество, рег2.ОстатокСумма, NULL, рег2.Реквизит1 ИЗ РегистрНакопления.рег2 КАК рег2 ; ВЫБРАТЬ РАЗЛИЧНЫЕ ВТОстатки.Номенклатура Поместить СписокНоменклатуры ИЗ ВТОстатки КАК ВТОстатки ; Выбрать "Рег1" КАК НаимРег Поместить СписокРегистров ОБЪЕДИНИТЬ Выбрать "Рег2" ; Выбрать СписокНоменклатуры.Номенклатуры Как Номенклатура, СписокРегистров.НаимРег КАК НаимРег Поместить НомИСписокРег Из СписокНоменклатуры КАК СписокНоменклатуры ПОЛНОЕ СОЕДИНЕНИЕ СписокРегистров КАК СписокРегистров ПО ИСТИНА ; ВЫБРАТЬ НомИСписокРег.Номенклатура, НомИСписокРег.НаимРег, ВТОстатки.ОстатокКоличество, ВТОстатки.ОстатокСумма, ВТОстатки.рег1Реквизит1, ВТОстатки.рег2Реквизит1 ИЗ НомИСписокРег КАК НомИСписокРег ЛЕВОЕ СОЕДИНЕНИЕ ВТОстатки КАК ВТОстатки ПО НомИСписокРег.Номенклатура = ВТОстатки.Номенклатура И НомИСписокРег.НаимРег = ВТОстатки.НаимРег проверено рабочее. только сокращенное. у меня 4 регистра и порядка 16 полей  | 
|||
| 
    15
    
        тарам пам пам    
     17.09.19 
            ✎
    13:26 
 | 
         
        (14) Какая-то дичь, если честно. Нафига вообще нужна вся вторая половина запроса? Достаточно только самого первого запроса из пакета (который с объединением).     
         | 
|||
| 
    16
    
        тарам пам пам    
     17.09.19 
            ✎
    13:35 
 | 
         
        а если нужны строки с нулевыми остатками (т. е. чтобы гарантированно были записи по всем 4 регистрам), то нужно просто в то же объединение их и добавить:
 
        
     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |