Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Списание по партиям по системе фифо
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
burza
Вот код дле фифо списания партий, тольк вот ошибка, где не так?{ВнешняяОбработка.КонсольЗапросов_82.МодульОбъекта(55)}: Ошибка при вызове метода контекста (ВыполнитьПакет): {(42, 4)}: Таблица не найдена "ТоварыНаСкладе"
<<?>>ТоварыНаСкладе КАК ТоварыНаСкладе

ВЫБРАТЬ
    РасходТовары.Товар КАК Товар,
    СУММА(РасходТовары.Количество) КАК Количество
ПОМЕСТИТЬ ТоварыВсе
ИЗ
    Документ.СписаниеТоваров.Товары КАК РасходТовары
ГДЕ
    РасходТовары.Ссылка = &Расход

СГРУППИРОВАТЬ ПО
    РасходТовары.Товар
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыВсе.Товар КАК Товар,
    ТоварыВсе.Количество КАК Количество
ПОМЕСТИТЬ Товары
ИЗ
    ТоварыВсе КАК ТоварыВсе
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ТоварыНаСкладе.Товар КАК Товар,
            СУММА(ТоварыНаСкладе.Остаток) КАК ОстатокОбщий
        ИЗ
            ТоварыНаСкладе КАК ТоварыНаСкладе
        
        СГРУППИРОВАТЬ ПО
            ТоварыНаСкладе.Товар) КАК П
        ПО (П.Товар = ТоварыВсе.Товар)
            И (П.ОстатокОбщий >= ТоварыВсе.Количество)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Товары.Товар КАК Товар,
    ВТ1.Партия КАК Партия,
    ВТ1.Остаток КАК Остаток,
    СУММА(ВТ2.Остаток) КАК ОстатокИтог,
    СУММА(ВТ2.Остаток) - ВТ1.Остаток КАК ПредыдущийОстаток,
    ВЫБОР
        КОГДА СУММА(ВТ2.Остаток) - ВТ1.Остаток = 0
            ТОГДА ВЫБОР
                    КОГДА Товары.Количество < ВТ1.Остаток
                        ТОГДА Товары.Количество
                    ИНАЧЕ ВТ1.Остаток
                КОНЕЦ
        ИНАЧЕ ВЫБОР
                КОГДА Товары.Количество - ВЫБОР
                        КОГДА Товары.Количество < СУММА(ВТ2.Остаток) - ВТ1.Остаток
                            ТОГДА Товары.Количество
                        ИНАЧЕ СУММА(ВТ2.Остаток) - ВТ1.Остаток
                    КОНЕЦ < ВТ1.Остаток
                    ТОГДА Товары.Количество - ВЫБОР
                            КОГДА Товары.Количество < СУММА(ВТ2.Остаток) - ВТ1.Остаток
                                ТОГДА Товары.Количество
                            ИНАЧЕ СУММА(ВТ2.Остаток) - ВТ1.Остаток
                        КОНЕЦ
                ИНАЧЕ ВТ1.Остаток
            КОНЕЦ
    КОНЕЦ КАК Списать
ИЗ
    Товары КАК Товары
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТоварыНаСкладе КАК ВТ1
        ПО Товары.Товар = ВТ1.Товар
        ЛЕВОЕ СОЕДИНЕНИЕ ТоварыНаСкладе КАК ВТ2
        ПО (ВТ1.Товар = ВТ2.Товар)
            И (ВТ1.МоментВремени >= ВТ2.МоментВремени)

СГРУППИРОВАТЬ ПО
    Товары.Товар,
    ВТ1.Партия,
    ВТ1.МоментВремени,
    ВТ1.Остаток,
    Товары.Количество

ИМЕЮЩИЕ
    Товары.Количество > СУММА(ВТ2.Остаток) - ВТ1.Остаток

УПОРЯДОЧИТЬ ПО
    ВТ1.МоментВремени
sava1
Обычно ТоварыНаСкладАХ
burza
sava1 @ Вчера, 22:16 необходимо зарегистрироваться для просмотра ссылки ,
это все?
sava1
burza @ Сегодня, 7:42 необходимо зарегистрироваться для просмотра ссылки ,
Обычно выборка из регистра ТоварыНаСкладах

У Вас идет выборк из временной таблицы ТоварыНаСкладе - ее самой нет в наличии
Petre
Разве текст ошибки не очевиден?
burza
Вот весь код, но при проведении не записывает в регистр ничего, хотя при запросе отдельно данные есть.

    Движения.ТоварыНаСкладе.Записывать = Истина;


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

    Запрос.УстановитьПараметр("Ссылка", Ссылка);

    Результат = Запрос.Выполнить();

ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаНоменклатура.Следующий() Цикл
    
        
                
        Если ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток Тогда
            
            
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не хватает товара " + ВыборкаНоменклатура.Номенклатура  + " из требуемых " +
        ВыборкаНоменклатура.Количество + " на складе осталось " + ВыборкаНоменклатура.КоличествоОстаток;
                Сообщение.Сообщить();    
         Отказ = Истина;
         КонецЕсли;

        
          НеобходимоСписать = ВыборкаНоменклатура.Количество;
          
          ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();

        Пока ВыборкаДетальныеЗаписи.Следующий() И НеобходимоСписать > 0 Цикл
            
            КоличествоКСписанию = Мин(НеобходимоСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток);
            
            
            Если
                
                 КоличествоКСписанию = ВыборкаДетальныеЗаписи.КоличествоОстаток
                Тогда
                   СуммаКСписанию = ВыборкаДетальныеЗаписи.СтоимостьОстаток;
               Иначе
                   СуммаКСписанию = ВыборкаДетальныеЗаписи.СтоимостьОстаток / ВыборкаДетальныеЗаписи.КоличествоОстаток * КоличествоКСписанию;
                   КонецЕсли;
                
        // Движения  для Регистров Остатки ТОваров и Продажи для Не Услуги        
      
        Движение = Движения.ТоварыНаСкладе.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Партия = ВыборкаДетальныеЗаписи.Партия;
        Движение.Товар = ВыборкаДетальныеЗаписи.Товар;
        Движение.Количество = КоличествоКСписанию;
        Движение.Стоимость =  СуммаКСписанию;
        
                    НеобходимоСписать = НеобходимоСписать - КоличествоКСписанию;

                                
                
            КонецЦикла;
            
            
        КонецЦикла;
sava1
Заходим в отладчик и смотрим в чем проблема.
burza
sava1 @ Сегодня, 9:24 необходимо зарегистрироваться для просмотра ссылки ,
отладчик доходит до этого Пока ВыборкаДетальныеЗаписи.Следующий() И НеобходимоСписать > 0 Цикл

ставлю след строку останова и нифига,документ спокойно себе проводиться.

не хочет в этом цыкле создавать,выношу его из эттго пишет.
sava1
а Итоги где ?
burza
сделал) спасибо

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.