Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Партионный учет


Автор: larinva 18.11.2011, 13:40
Всем привет! помогите не правильно списываются партии, что ни так делаю вот обработчик проведения


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

Автор: larinva 18.11.2011, 15:04
есть кто живой?

Автор: larinva 21.11.2011, 13:06
решено

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)