| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Партионный учет |
| Автор: larinva 18.11.2011, 13:40 |
| Всем привет! помогите не правильно списываются партии, что ни так делаю вот обработчик проведения Перем Метод; Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиНоменклатуры.Записывать = Истина; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Партия, | МАКСИМУМ(РасходнаяНакладнаяСписокНоменклатуры.Цена) КАК Цена, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма |ПОМЕСТИТЬ ВТ_Товары |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Документ | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | РасходнаяНакладнаяСписокНоменклатуры.Партия |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Товары.Номенклатура КАК Номенклатура, | ОстаткиНоменклатурыОстаткиИОбороты.Партия КАК Партия, | ВТ_Товары.Количество КАК ТребуемоеКоличество, | ОстаткиНоменклатурыОстаткиИОбороты.КоличествоПриход КАК КоличествоОстаток, | ОстаткиНоменклатурыОстаткиИОбороты.СуммаПриход КАК СуммаОстаток, | ВТ_Товары.Сумма КАК Сумма, | ВТ_Товары.Цена КАК Цена |ИЗ | ВТ_Товары КАК ВТ_Товары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.ОстаткиИОбороты КАК ОстаткиНоменклатурыОстаткиИОбороты | ПО ВТ_Товары.Номенклатура = ОстаткиНоменклатурыОстаткиИОбороты.Номенклатура | |УПОРЯДОЧИТЬ ПО | Номенклатура, | ОстаткиНоменклатурыОстаткиИОбороты.Партия.Ссылка УБЫВ, | ОстаткиНоменклатурыОстаткиИОбороты.Партия.Дата УБЫВ |ИТОГИ | МАКСИМУМ(ТребуемоеКоличество), | СУММА(КоличествоОстаток), | СУММА(СуммаОстаток), | МАКСИМУМ(Сумма) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Документ", Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаТовара = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Если Метод = Перечисления.УчетнаяПолитика.ФИФО Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "УБЫВ", "ВОЗВР"); КонецЕсли; Пока ВыборкаТовара.Следующий() Цикл Если ВыборкаТовара.ТребуемоеКоличество > ВыборкаТовара.КоличествоОстаток Тогда НедостающееКоличество = ВыборкаТовара.ТребуемоеКоличество - ВыборкаТовара.КоличествоОстаток; Сообщить("Не хватает количество " + НедостающееКоличество + " " + ВыборкаТовара.Номенклатура); Отказ = Истина; Продолжить; КонецЕсли; Себестоимость = 0; ОсталосьСписать = ВыборкаТовара.ТребуемоеКоличество; ВыборкаПартии = ВыборкаТовара.Выбрать(); Пока ВыборкаПартии.Следующий() Цикл Если ВыборкаПартии.КоличествоОстаток <= ОсталосьСписать Тогда СписатьКоличество = ВыборкаПартии.КоличествоОстаток; //количество по партиям отдельно СписатьСебестоимость = ВыборкаПартии.СуммаОстаток; //сумма по партиям отдельно ОсталосьСписать = ОсталосьСписать - СписатьКоличество; //общее количество - количество с партии Иначе СписатьКоличество = ОсталосьСписать; СписатьСебестоимость = ВыборкаПартии.СуммаОстаток/ВыборкаПартии.КоличествоОстаток; ОсталосьСписать = 0; КонецЕсли; //КонецЦикла; // регистр ОстаткиНоменклатуры Расход Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Номенклатура = ВыборкаПартии.Номенклатура; Движение.Партия = ВыборкаПартии.Партия; Движение.Период = Дата; Движение.Количество = СписатьКоличество; Движение.Сумма = СписатьСебестоимость; Если ОсталосьСписать = 0 Тогда Прервать; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры |
| Автор: larinva 18.11.2011, 15:04 |
| есть кто живой? |
| Автор: larinva 21.11.2011, 13:06 |
| решено |