Имя: Пароль:
1C
 
Как составить контроль остатков в разрезе номенклатуры и качества? 1с83
0 pro3ri
 
08.05.15
08:25
Добрый день!
обраб. пров-ия:

провел по регистру,
далее делаю запрос на наличие отрицат остатков,

"ВЫБРАТЬ
        |    ОстаткиТоваровЭталонОстатки.Номенклатура,
        |    ОстаткиТоваровЭталонОстатки.КоличествоОстаток,
        |    ОстаткиТоваровЭталонОстатки.Качество
        |ИЗ
        |    РегистрНакопления.ОстаткиТоваровЭталон.Остатки(
        |            &Момент,
        |            Номенклатура В
        |                    (ВЫБРАТЬ
        |                        РеализацияТоваровТовары.Номенклатура
        |                    ИЗ
        |                        Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |                    ГДЕ
        |                        РеализацияТоваровТовары.Ссылка = &Ссылка)
        |                И Качество В
        |                    (ВЫБРАТЬ
        |                        РеализацияТоваровТовары.Качество
        |                    ИЗ
        |                        Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |                    ГДЕ
        |                        РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровЭталонОстатки
        |ГДЕ
        |    ОстаткиТоваровЭталонОстатки.КоличествоОстаток < 0";

списываю большое колво, а результат запроса пустой. Где поправить?
1 saaken
 
08.05.15
08:28
отделил качество от товара, напиши (Номенклатура, качество) в
2 jsmith82
 
08.05.15
08:29
ипануцо
3 saaken
 
08.05.15
08:29
и убери "момент"
4 jsmith82
 
08.05.15
08:29
ты даже вычет не сделал, а уже условие ставишь на меньше нуля
5 pro3ri
 
08.05.15
08:32
(4) вычет не нужен, у нас до этого
    // регистр ОстаткиТоваровЭталон Расход
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиТоваровЭталон.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Качество = ТекСтрокаТовары.Качество;
        Движение.Количество = ТекСтрокаТовары.Количество;
    КонецЦикла;
    
    Движения.Записать();
6 jsmith82
 
08.05.15
08:38
как вариант

ВЫБРАТЬ
    Товары.Номенклатура КАК Номенклатура,
    Товары.Качество КАК Качество
    СУММА(Товары.Количество) КАК Количество
ПОМЕСТИТЬ Товары
ИЗ
    Документ.РеализацияТоваров.Товары КАК Товары
ГДЕ
    Товары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
    Товары.Номенклатура,
    Товары.Качество;
ВЫБРАТЬ
    Товары.Номенклатура КАК Номенклатура,
    Товары.Качество КАК Качество,
    ЕСТЬNULL(Остатки.КоличествоОстаток, 0) - Товары.Количество КАК Нехватка
ИЗ
    Товары КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровЭталон.Остатки(&Момент) КАК Остатки
ПО
    Товары.Номенклатура = Остатки.Номенклатура
    И Товары.Качество = Остатки.Качество
ГДЕ
    ЕСТЬNULL(Остатки.КоличествоОстаток, 0) - Товары.Количество > 0
7 jsmith82
 
08.05.15
08:40
(4) а вот оно чо
8 EarthsSoul
 
08.05.15
08:49
ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура,
    РеализацияТоваровУслугТовары.Качество
ПОМЕСТИТЬ ТЧ
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЧ.Номенклатура,
    ТЧ.Качество,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
ИЗ
    ТЧ КАК ТЧ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                &МоментВремени,
                (Качество, Номенклатура) В
                        (ВЫБРАТЬ
                            ТЧ.Качество,
                            ТЧ.Номенклатура
                        ИЗ
                            ТЧ КАК ТЧ)
                    И Склад = &Склад) КАК ТоварыНаСкладахОстатки
        ПО ТЧ.Номенклатура = ТоварыНаСкладахОстатки.Качество
            И ТЧ.Качество = ТоварыНаСкладахОстатки.Качество
9 EarthsSoul
 
08.05.15
08:54
Нужно левое соединение с табличной частью документа, что бы не терялись совсем данные ... Ну и момент времени должна быть граница, включающая именно момент времени

ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура,
    РеализацияТоваровУслугТовары.Качество
ПОМЕСТИТЬ ТЧ
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТЧ.Номенклатура,
    ТЧ.Качество,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
ПОМЕСТИТЬ Остатки
ИЗ
    ТЧ КАК ТЧ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
                &МоментВремени,
                (Качество, Номенклатура) В
                        (ВЫБРАТЬ
                            ТЧ.Качество,
                            ТЧ.Номенклатура
                        ИЗ
                            ТЧ КАК ТЧ)
                    И Склад = &Склад) КАК ТоварыНаСкладахОстатки
        ПО ТЧ.Номенклатура = ТоварыНаСкладахОстатки.Качество
            И ТЧ.Качество = ТоварыНаСкладахОстатки.Качество
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Остатки.Номенклатура,
    Остатки.Качество,
    Остатки.КоличествоОстаток
ИЗ
    Остатки КАК Остатки
ГДЕ
    Остатки.КоличествоОстаток < 0
10 pro3ri
 
08.05.15
08:59
так заработало, ошибку нашел вместо    Движения.Записать();  написал   Движения.ОстаткиТоваровЭталон.Записать();    
// регистр ОстаткиТоваровЭталон Расход
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.ОстаткиТоваровЭталон.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Качество = ТекСтрокаТовары.Качество;
        Движение.Количество = ТекСтрокаТовары.Количество;
    КонецЦикла;
    
    Движения.ОстаткиТоваровЭталон.Записать();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиТоваровЭталонОстатки.Номенклатура,
        |    ОстаткиТоваровЭталонОстатки.КоличествоОстаток,
        |    ОстаткиТоваровЭталонОстатки.Качество
        |ИЗ
        |    РегистрНакопления.ОстаткиТоваровЭталон.Остатки(
        |            &Момент,
        |            (Номенклатура, Качество) В
        |                (ВЫБРАТЬ РАЗЛИЧНЫЕ
        |                    РеализацияТоваровТовары.Номенклатура,
        |                    РеализацияТоваровТовары.Качество
        |                ИЗ
        |                    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |                ГДЕ
        |                    РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровЭталонОстатки
        |ГДЕ
        |    ОстаткиТоваровЭталонОстатки.КоличествоОстаток < 0
        |
        |СГРУППИРОВАТЬ ПО
        |    ОстаткиТоваровЭталонОстатки.Номенклатура,
        |    ОстаткиТоваровЭталонОстатки.КоличествоОстаток,
        |    ОстаткиТоваровЭталонОстатки.Качество";
        
    Граница = Новый Граница(МоментВремени(),ВидГраницы.Включая);
    Запрос.УстановитьПараметр("Момент", Граница);
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший