Имя: Пароль:
1C
1С v8
Остатки
0 ALL_EG
 
22.04.16
21:06
Доброго времени суток! помогите разобраться:
В модуле документа получаю остатки из регистра накопления. Остатки нулевые. Что делаю не так?

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    //Проверка на наличие остатка на складе
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
                 |    РасходнаяНакладнаяСостав.Номенклатура,
                 |    СУММА(РасходнаяНакладнаяСостав.Количество * РасходнаяНакладнаяСостав.ЕдиницаИзмерения.Кратность) КАК Количество
                 |ПОМЕСТИТЬ ВТ_док
                 |ИЗ
                 |    Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
                 |ГДЕ
                 |    РасходнаяНакладнаяСостав.Номенклатура.Услуга = ЛОЖЬ
                 |    И РасходнаяНакладнаяСостав.Ссылка = &ДокументТекущий
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    РасходнаяНакладнаяСостав.Номенклатура
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    ТоварыНаСкладахОстатки.Номенклатура,
                 |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
                 |ПОМЕСТИТЬ ВТ_Остатки
                 |ИЗ
                 |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                 |            &Период,
                 |            Номенклатура В
                 |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
                 |                        ВТ.Номенклатура
                 |                    ИЗ
                 |                        ВТ_Док КАК ВТ)
                 |                И Склад = &Склад) КАК ТоварыНаСкладахОстатки
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    СебестоимостьТоваровОстатки.Номенклатура,
                 |    ВЫБОР
                 |        КОГДА СебестоимостьТоваровОстатки.КоличествоОстаток = 0
                 |            ТОГДА 0
                 |        ИНАЧЕ ВЫРАЗИТЬ(СебестоимостьТоваровОстатки.СтоимостьОстаток / СебестоимостьТоваровОстатки.КоличествоОстаток КАК ЧИСЛО(15, 2))
                 |    КОНЕЦ КАК Себестоимость
                 |ПОМЕСТИТЬ ВТ_Сб
                 |ИЗ
                 |    РегистрНакопления.СебестоимостьТоваров.Остатки(
                 |            &Период,
                 |            Номенклатура В
                 |                (ВЫБРАТЬ РАЗЛИЧНЫЕ
                 |                    ВТ.Номенклатура
                 |                ИЗ
                 |                    ВТ_Док КАК ВТ)) КАК СебестоимостьТоваровОстатки
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    ВТ_док.Номенклатура,
                 |    ВТ_док.Количество,
                 |    ЕСТЬNULL(ВТ_Остатки.КоличествоОстаток, 0) КАК Остаток,
                 |    ЕСТЬNULL(ВТ_Сб.Себестоимость, 0) КАК Себестоимость
                 |ИЗ
                 |    ВТ_док КАК ВТ_док
                 |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
                 |        ПО ВТ_док.Номенклатура = ВТ_Остатки.Номенклатура
                 |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Сб КАК ВТ_Сб
                 |        ПО ВТ_док.Номенклатура = ВТ_Сб.Номенклатура";
                
    Запрос.УстановитьПараметр("ДокументТекущий",Ссылка);
    Запрос.УстановитьПараметр("Период",Новый Граница(Ссылка.Дата,ВидГраницы.Включая));
    Запрос.УстановитьПараметр("Склад",Ссылка.Склад);
    
    Движения.СебестоимостьТоваров.Записывать=Истина;
    Движения.ТоварыНаСкладах.Записывать=Истина;
    
    Выборка=Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        Если Выборка.Количество>Выборка.Остаток Тогда
             Сообщить("Не списано со склада "+Строка(Ссылка.Склад)+" остатка товара: "+Строка(Выборка.Номенклатура)+" в количестве: "+Формат(Выборка.Количество-Выборка.Остаток,"ЧЦ=15; ЧДЦ=3; ЧН=0"));
             Отказ=Истина;
         Иначе
             НовСтрокаТнС=Движения.ТоварыНаСкладах.Добавить();
             НовСтрокаТнС.ВидДвижения=ВидДвиженияНакопления.Расход;
             НовСтрокаТнС.Регистратор=Ссылка;
             НовСтрокаТнС.Период=Ссылка.Дата;
             НовСтрокаТнС.Активность=Истина;
             НовСтрокаТнС.Склад=Ссылка.Склад;
             НовСтрокаТнС.Номенклатура=Выборка.Номенклатура;
             НовСтрокаТнС.Количество=Выборка.Количество;
            
             НовСтрокаСб=Движения.СебестоимостьТоваров.Добавить();
             НовСтрокаСб.ВидДвижения=ВидДвиженияНакопления.Расход;
             НовСтрокаСб.Регистратор=Ссылка;
             НовСтрокаСб.Период=Ссылка.Дата;
             НовСтрокаСб.Активность=Истина;
             НовСтрокаСб.Номенклатура=Выборка.Номенклатура;
             НовСтрокаСб.Количество=Выборка.Количество;
             НовСтрокаСб.Стоимость=Выборка.Количество*Выборка.Себестоимость;
        КонецЕсли;
        
        
        
    КонецЦикла;
    
КонецПроцедуры
1 ALL_EG
 
22.04.16
21:07
Две вложенные таблицы-пустые почему-то, хотя в регистрах накопления остатки есть.
Делал отчет на СКД - остатки показывает.
2 Лефмихалыч
 
22.04.16
21:16
документ поди проведен?
3 GROOVY
 
22.04.16
21:23
Грохай старые движения при перепроведении.
4 Лефмихалыч
 
22.04.16
21:25
+(3) еще можно ВидГраницы.Исключая, но передавать при этом момент времени (3)
5 RomanYS
 
22.04.16
21:26
Запрос.УстановитьПараметр("Период",Новый Граница(Ссылка.Дата,ВидГраницы.Включая));

заменить на

Запрос.УстановитьПараметр("Период", МоментВремени());
6 Лефмихалыч
 
22.04.16
21:27
(5) граница нужна и с моментом, но другая
7 ALL_EG
 
22.04.16
21:28
Документ не проведен!
Ставил-и МоментВремени(), и вообще

ВЫБРАТЬ
                 |    ТоварыНаСкладахОстатки.Номенклатура,
                 |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
                 |ПОМЕСТИТЬ ВТ_Остатки
                 |ИЗ
                 |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                 |           ) КАК ТоварыНаСкладахОстатки

без результатно
8 RomanYS
 
22.04.16
21:29
(6) почему другая, в данном контексте МоментВремени() эквивалентно Граница(МоментВремени(), исключая)? Что и нужно.
9 ALL_EG
 
22.04.16
21:30
такое ощущение, что не работают вложенные таблицы
10 RomanYS
 
22.04.16
21:33
(9) извини конечно, но у тебя номенклатура в ТЧ и в регистрах одного типа? приход в регистрах есть?
11 ALL_EG
 
22.04.16
21:34
(10) Да, проверил, уже, неоднократно
12 ALL_EG
 
22.04.16
21:37
(10) приход в регистрах есть.
13 RomanYS
 
22.04.16
21:42
Пихать запрос в консоль и проверить результат на каждом шаге (каждую ВТ).

В контексте объекта применение Ссылка.Дата и Ссылка.Склад выглядит противоестественным. Это так, придирки к вопросу отношения не имеющие.
14 Лефмихалыч
 
22.04.16
21:54
(8) нет
15 Лефмихалыч
 
22.04.16
21:54
(9) период - момент времени, а граница - исключая
16 RomanYS
 
22.04.16
22:01
(14) что нет?
приведи пример, когда результаты
остатки(Момент)
и
остатки(ГраницаМоментИсключая)
дадут разные результаты
17 Лефмихалыч
 
28.04.16
21:50
(16) да, ты прав - Остатки() момент времени исключают
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.