Имя: Пароль:
1C
1С v8
Компоновка данных в Динамическом списке
,
0 cmex
 
14.11.13
10:40
Доброго времени суток, господа.
Ситуация такая: Типовая БП 3.0. При подборе номенклатуры в документы поступления или реализации, вываливается список номенклатуры с остатками. Вот запрос

ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Валюта, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК Валюта,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
    ХозрасчетныйОстатки.Счет КАК СчетУчета
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&ДатаЦены)}, {(Номенклатура).* КАК Ссылка, (ТипЦен) КАК ТипЦен, (Валюта) КАК Валюта}) КАК ЦеныНоменклатурыСрезПоследних
        ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура}
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки({(&ДатаОстатки)}, {(Счет).* КАК Счет}, {(&ВидыСубконто)}, {(ВЫРАЗИТЬ(Субконто1 КАК Справочник.Номенклатура)).* КАК Номенклатура, (Субконто2)}) КАК ХозрасчетныйОстатки
        ПО СправочникНоменклатура.Ссылка = ХозрасчетныйОстатки.Субконто1
            И (ХозрасчетныйОстатки.КоличествоОстаток > 0)}
ГДЕ
    НЕ СправочникНоменклатура.ЭтоГруппа
    И ВЫБОР
            КОГДА &ПоказыватьТолькоОстатки
                ТОГДА ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) > 0
            ИНАЧЕ ИСТИНА
        КОНЕЦ
    И СправочникНоменклатура.омкБлокировка = ЛОЖЬ
{ГДЕ
    СправочникНоменклатура.Ссылка.* КАК Номенклатура}



Тут как мы видим таблицы остатков и цен необязательные и параметры в них тоже, то есть если данных нет,то они не подключаются.
Мне же нужно в этот запрос добавить Остаток с учетом движений НЕПРОВЕДЕННЫХ документов. То есть, я дописал запрос,вот что получилось

ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Валюта, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК Валюта,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
    ХозрасчетныйОстатки.Счет КАК СчетУчета,
    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) + ЕСТЬNULL(ВложенныйЗапрос.Количество, 0) КАК КоличествоОстатокПП
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&ДатаЦены)}, {(Номенклатура).* КАК Ссылка, (ТипЦен) КАК ТипЦен, (Валюта) КАК Валюта}) КАК ЦеныНоменклатурыСрезПоследних
        ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура}
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки({(&ДатаОстатки)}, {(Счет).* КАК Счет}, {(&ВидыСубконто)}, {(ВЫРАЗИТЬ(Субконто1 КАК Справочник.Номенклатура)).* КАК Номенклатура, (Субконто2)}) КАК ХозрасчетныйОстатки
            {ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ВложенныйЗапрос.Склад КАК Склад,
                ВложенныйЗапрос.Номенклатура КАК Номенклатура,
                СУММА(ВложенныйЗапрос.Количество) КАК Количество
            ИЗ
                (ВЫБРАТЬ
                    ПоступлениеТоваровУслугТовары.Ссылка.Склад КАК Склад,
                    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
                    ПоступлениеТоваровУслугТовары.Количество КАК Количество
                ИЗ
                    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                ГДЕ
                    ПоступлениеТоваровУслугТовары.Ссылка.Проведен = ЛОЖЬ
                    И ПоступлениеТоваровУслугТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
                    И ПоступлениеТоваровУслугТовары.Ссылка.Дата > &ДатаЗапрета
                    И ВЫБОР
                            КОГДА &ПоМоментуВремени
                                ТОГДА ПоступлениеТоваровУслугТовары.Ссылка.МоментВремени < &МоментВремени
                            ИНАЧЕ ПоступлениеТоваровУслугТовары.Ссылка.Дата < &РабочаяДата
                        КОНЕЦ) КАК ВложенныйЗапрос
            
            СГРУППИРОВАТЬ ПО
                ВложенныйЗапрос.Номенклатура,
                ВложенныйЗапрос.Склад) КАК ВложенныйЗапрос
            ПО ХозрасчетныйОстатки.Субконто1 = ВложенныйЗапрос.Номенклатура
                И ХозрасчетныйОстатки.Субконто2 = ВложенныйЗапрос.Склад}
        ПО СправочникНоменклатура.Ссылка = ХозрасчетныйОстатки.Субконто1
            И (ХозрасчетныйОстатки.КоличествоОстаток > 0)}
ГДЕ
    НЕ СправочникНоменклатура.ЭтоГруппа
    И ВЫБОР
            КОГДА &ПоказыватьТолькоОстатки
                ТОГДА ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) > 0
            ИНАЧЕ ИСТИНА
        КОНЕЦ
    И СправочникНоменклатура.омкБлокировка = ЛОЖЬ
{ГДЕ
    СправочникНоменклатура.Ссылка.* КАК Номенклатура}


В итоге, если Склад выбран,то все ОК, если нет, то валится с ошибкой
"Ошибка обработки представления "РегистрБухгалтерии.Хозрасчетный.Остатки:Поле не найдено (Субконто2)"
ЛЕВОЕ СОЕДИНЕНИЕ <<?>>РегистрБухгалтерии.Хозрасчетный.Остатки(&П, Счет НЕ В ИЕРАРХИИ(&П6), &П2, (Организация = &П4) И ВЫРАЗИТЬ(Субконто1 КАК Справочник.Номенклатура).Услуга = &П5) КАК ХозрасчетныйОстатки"

Просветите, пожалуйста, как починить?
1 cmex
 
14.11.13
11:33
самбади хелп!
2 cmex
 
14.11.13
11:48
Попытался закинуть связь по Складу в условие, типа


ПО ХозрасчетныйОстатки.Субконто1 = ВложенныйЗапрос.Номенклатура
                И (ВЫБОР
                    КОГДА &ЕстьСклад
                        ТОГДА ХозрасчетныйОстатки.Субконто2 = ВложенныйЗапрос.Склад
                    ИНАЧЕ ЛОЖЬ
                КОНЕЦ)}


Не помогло(
3 Ofizer
 
14.11.13
12:03
(2) в переменную &ВидыСубконто что передается?
4 cmex
 
14.11.13
12:30
(3) Номенклатура
5 Euguln
 
14.11.13
12:33
(4) а откуда там второе субконто возьмется, если в параметрах ВТ одно?
6 cmex
 
14.11.13
12:37
Вот кусок кода, ктр добавляет еще одно

Если ИспользоватьОтборПоСкладу Тогда
        Если ЗначениеЗаполнено(Склад)
           И ВедетсяУчетПоСкладам Тогда
            ВидыСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады);
            ОтборыСписковКлиентСервер.ИзменитьЭлементОтбораСписка(СписокНоменклатуры, "Субконто2",
                Склад, Истина);
        КонецЕсли;
    КонецЕсли;
7 zladenuw
 
14.11.13
12:38
(2) а там разве не Истину надо на Иначе ?
8 cmex
 
14.11.13
12:39
(7) пробовал и так, и так - нет разницы(
9 zladenuw
 
14.11.13
12:47
а вот это кусок ты сам писал ? (ВЫРАЗИТЬ(Субконто1 КАК Справочник.Номенклатура)).* КАК Номенклатура

может надо так же и со вторым субконто ?
10 cmex
 
14.11.13
12:48
(9) нет, это было
11 cmex
 
14.11.13
12:49
Каким образом можно связь отключить или сделать эту связь необязательной? То есть, если нет субконто2, то убрать эту связь?
12 cmex
 
14.11.13
13:29
Победил))

ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Валюта, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) КАК Валюта,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
    ХозрасчетныйОстатки.Счет КАК СчетУчета,
    ЕСТЬNULL(ДвиженияДокументов.Количество, 0) + ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстатокПП
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&ДатаЦены)}, {(Номенклатура).* КАК Ссылка, (ТипЦен) КАК ТипЦен, (Валюта) КАК Валюта}) КАК ЦеныНоменклатурыСрезПоследних
        ПО СправочникНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура}
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки({(&ДатаОстатки)}, {(Счет).* КАК Счет}, {(&ВидыСубконто)}, {(ВЫРАЗИТЬ(Субконто1 КАК Справочник.Номенклатура)).* КАК Номенклатура, (Субконто2)}) КАК ХозрасчетныйОстатки
        ПО СправочникНоменклатура.Ссылка = ХозрасчетныйОстатки.Субконто1
            И (ХозрасчетныйОстатки.КоличествоОстаток > 0)}
        {ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ВложенныйЗапрос.Номенклатура КАК Номенклатура,
            ВложенныйЗапрос.Количество КАК Количество
        ИЗ
            (ВЫБРАТЬ
                ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
                СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество
            ИЗ
                Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
            ГДЕ
                ПоступлениеТоваровУслугТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
                И ПоступлениеТоваровУслугТовары.Ссылка.Проведен = ЛОЖЬ
                И ПоступлениеТоваровУслугТовары.Ссылка.Дата > &ДатаЗапрета
                И ВЫБОР
                        КОГДА &ПоМоментуВремени
                            ТОГДА ПоступлениеТоваровУслугТовары.Ссылка.МоментВремени < &МоментВремени
                        ИНАЧЕ ПоступлениеТоваровУслугТовары.Ссылка.Дата < &ДатаДокумента
                    КОНЕЦ
            {ГДЕ
                ПоступлениеТоваровУслугТовары.Ссылка.Склад.*}
            
            СГРУППИРОВАТЬ ПО
                ПоступлениеТоваровУслугТовары.Номенклатура) КАК ВложенныйЗапрос) КАК ДвиженияДокументов
        ПО СправочникНоменклатура.Ссылка = ДвиженияДокументов.Номенклатура}
ГДЕ
    НЕ СправочникНоменклатура.ЭтоГруппа
    И ВЫБОР
            КОГДА &ПоказыватьТолькоОстатки
                ТОГДА ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) > 0
            ИНАЧЕ ИСТИНА
        КОНЕЦ
    И СправочникНоменклатура.омкБлокировка = ЛОЖЬ
{ГДЕ
    СправочникНоменклатура.Ссылка.* КАК Номенклатура}



Не к остаткам надо было подцеплять движения документов, а к справочнику номенклатуры,а отбор по складу в КД закинуть и связываться только по номенклатуре. Теперь покажет даже потенциальные остатки, даже если остатков нет, а НЕПРОВЕДЕННЫЕ доки поступлений есть. Всем спасибо