Имя: Пароль:
1C
1С v8
Партийный учет, помогите разобраться, суммирует партии
0 nickname1c
 
16.10.14
09:51
В регистре накоплений продажи 34000 за брюки это за все 3 партии, по идее в отчете должно быть тоже 34000 но выдает 102000 очевидно тут происходит суммирование, сколько не искал не могу решить эту проблему, день 3=)
КОД В РАСХОДНИКЕ
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    МетодСписания = РегистрыСведений.МетодСписанияТоваров.ПолучитьПоследнее(Дата).МетодСписания;
    Если МетодСписания.Пустая()Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не указан метод списания! Проведение не возможно";
        Сообщение.Сообщить();
        Отказ = Истина;
        Возврат;
    КонецЕсли;
    Движения.Продажи.Записывать = Истина;
    Движения.Остатки.Записывать = Истина;
    Движения.Остатки.Записать();
    Движения.Продажи.Записать();
    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Остатки");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = Продажи;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    Блокировка.Заблокировать();
    ФИФО = МетодСписания = Перечисления.УчетнаяПолитика.ФИФО;
    ЛИФО = МетодСписания = Перечисления.УчетнаяПолитика.ЛИФО;
    Запрос = Новый Запрос;    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    РасходнаяНакладнаяПродажи.Номенклатура КАК Номенклатура,
    |    СУММА(РасходнаяНакладнаяПродажи.Количество) КАК Количество,
    |    МИНИМУМ(РасходнаяНакладнаяПродажи.Сумма) КАК Сумма,
    |    МИНИМУМ(РасходнаяНакладнаяПродажи.НомерСтроки) КАК НомерСтроки,
    |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РасходнаяНакладнаяПродажи.Номенклатура.Услуга) КАК НоменклатураУслуга
    |ПОМЕСТИТЬ ДокТЧ
    |ИЗ
    |    Документ.РасходнаяНакладная.Продажи КАК РасходнаяНакладнаяПродажи
    |ГДЕ
    |    РасходнаяНакладнаяПродажи.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |    РасходнаяНакладнаяПродажи.Номенклатура
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ЕСТЬNULL(ОстаткиОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    |    ЕСТЬNULL(ОстаткиОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
    |    ОстаткиОстатки.Партия КАК Партия,
    |    ДокТЧ.Номенклатура КАК Номенклатура,
    |    ДокТЧ.Количество КАК Количество,
    |    ДокТЧ.Сумма КАК Сумма,
    |    ДокТЧ.НомерСтроки КАК НомерСтроки
    |ИЗ
    |    ДокТЧ КАК ДокТЧ
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки(
    |                &МоментВремени,
    |                Номенклатура В
    |                    (ВЫБРАТЬ
    |                        ДокТЧ.Номенклатура
    |                    ИЗ
    |                        ДокТЧ КАК ДокТЧ)) КАК ОстаткиОстатки
    |        ПО ДокТЧ.Номенклатура = ОстаткиОстатки.Номенклатура
    |
    |УПОРЯДОЧИТЬ ПО
    |    ОстаткиОстатки.Партия.МоментВремени
    |ИТОГИ
    |    СУММА(КоличествоОстаток),
    |    МИНИМУМ(СуммаОстаток),
    |    МАКСИМУМ(Количество),
    |    МИНИМУМ(Сумма),
    |    МИНИМУМ(НомерСтроки)
    |ПО
    |    Номенклатура,
    |    Партия";
    
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени() );
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Если МетодСписания = Перечисления.УчетнаяПолитика.ЛИФО Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВОЗР","УБЫВ" ); // если лифо – сортируем по УБЫВанию
    КонецЕсли;
    Если МетодСписания = Перечисления.УчетнаяПолитика.ФИФО Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст,"УБЫВ","ВОЗР" ); // если фифо – сортируем по ВОЗРастанию
    КонецЕсли;
    //ФИФО = МетодСписания = Перечисления.УчетнаяПолитика.ФИФО;
    //ЛИФО = МетодСписания = Перечисления.УчетнаяПолитика.ЛИФО;
    ////
    Результат = Запрос.Выполнить();        
    Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка.Следующий() Цикл            
        Если Выборка.Количество > Выборка.КоличествоОстаток И  Выборка.Номенклатура.Услуга = ЛОЖЬ Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не хватает товара """ + Выборка.Номенклатура
            + """, из необходимых " +
            Выборка.Количество + " в наличии осталось только " +
            Выборка.КоличествоОстаток;
            Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки-1) + "].Количество";
            //Товары[3].Количество
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();
            Отказ = Истина;
            Движения.Остатки.Записывать = Ложь;
            КонецЕсли;
              КонецЦикла;
                    Если Отказ Тогда
                        Возврат;
                            КонецЕсли;

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


КонецПроцедуры

Отчет строю по оборотам.
ПРОСЬБА писать только по решению проблемы, заранее благодарю