|
Списание методом ФИФО | ☑ | ||
---|---|---|---|---|
0
UUmmmmm
30.09.19
✎
23:50
|
Подскажите пожалуйста что не так в запросе! Списание происходит но в регистр продаж в сумму попадают отрицательные значения, тоже самое и в регистр себестоимость
Процедура ОбработкаПроведения(Отказ, Режим) ВидУслуга = Перечисления.ВидыНоменклатуры.Услуга; Движения.ОстаткиМатериалов.Записать(); Движения.Себестоимость.Записать(); Движения.Продажи.Записывать = Истина; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МАКСИМУМ(РасходнаяТовары.НомерСтроки) КАК НомерСтроки, | РасходнаяТовары.Номенклатура КАК Номенклатура, | СУММА(РасходнаяТовары.Количество) КАК КоличествоВДокументе, | СУММА(РасходнаяТовары.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ Док |ИЗ | Документ.Расходная.Товары КАК РасходнаяТовары |ГДЕ | РасходнаяТовары.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | РасходнаяТовары.Номенклатура | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОстаткиМатериаловОстатки.Партия КАК Партия, | ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ПриходнаяТовары.Цена КАК Цена, | Док.НомерСтроки КАК НомерСтроки, | Док.Номенклатура КАК Номенклатура, | Док.КоличествоВДокументе КАК КоличествоВДокументе, | Док.СуммаВДокументе КАК СуммаВДокументе |ИЗ | Док КАК Док | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки( | &Дата, | Номенклатура В | (ВЫБРАТЬ | Док.Номенклатура КАК Номенклатура | ИЗ | Док КАК Док)) КАК ОстаткиМатериаловОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Приходная.Товары КАК ПриходнаяТовары | ПО ОстаткиМатериаловОстатки.Партия = ПриходнаяТовары.Ссылка | И ОстаткиМатериаловОстатки.Номенклатура = ПриходнаяТовары.Номенклатура | ПО Док.Номенклатура = ОстаткиМатериаловОстатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | ОстаткиМатериаловОстатки.Партия.МоментВремени |ИТОГИ | СУММА(КоличествоОстаток), | МАКСИМУМ(НомерСтроки), | МАКСИМУМ(КоличествоВДокументе), | МАКСИМУМ(СуммаВДокументе) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("Дата", МоментВремени()); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда ВыборкаТовары = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаТовары.Следующий() Цикл Если ВыборкаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар И ВыборкаТовары.КоличествоОстаток < ВыборкаТовары.КоличествоВДокументе Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает номенклатуры " + ВыборкаТовары.Номенклатура + ", в количестве " + Строка(ВыборкаТовары.КоличествоВДокументе - ВыборкаТовары.КоличествоОстаток) + "."; Сообщение.Поле = "Товары[" + (ВыборкаТовары.НомерСтроки - 1) + "].Количество"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; КоличествоНоменклатурыВДок = ВыборкаТовары.КоличествоВДокументе; ВыборкаПартий = ВыборкаТовары.Выбрать(); Пока ВыборкаПартий.Следующий() И НЕ КоличествоНоменклатурыВДок = 0 Цикл Если ВыборкаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда ОстатокВПартии = ВыборкаПартий.КоличествоОстаток; КоличествоТоваров = Мин(ОстатокВПартии, КоличествоНоменклатурыВДок); //Движения по регистру ОстаткиМатериалов Движение = Движения.ОстаткиМатериалов.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Партия = ВыборкаПартий.Партия; Движение.Номенклатура = ВыборкаТовары.Номенклатура; Движение.Количество = КоличествоТоваров; //Движения по регистру Себестоимость Движение = Движения.Себестоимость.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Партия = ВыборкаПартий.Партия; Движение.Номенклатура = ВыборкаТовары.Номенклатура; Движение.Стоимость = ВыборкаПартий.Цена * КоличествоТоваров; //Движения по регистру Продажи Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаТовары.Номенклатура; Движение.Мастер = Мастер; Движение.Партия = ВыборкаПартий.Партия; Движение.Количество = КоличествоТоваров; Движение.Сумма = (ВыборкаТовары.СуммаВДокументе / ВыборкаТовары.КоличествоВДокументе) * КоличествоТоваров; КоличествоНоменклатурыВДок = ОстатокВПартии - КоличествоНоменклатурыВДок; ИначеЕсли ВыборкаТовары.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда //Движения по регистру Продажи для услуг Движение = Движения.Продажи.Добавить(); Движение.Период = Дата; Движение.Номенклатура = ВыборкаТовары.Номенклатура; Движение.Мастер = Мастер; Движение.Количество = ВыборкаТовары.КоличествоВДокументе; Движение.Сумма = ВыборкаТовары.СуммаВДокументе; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; Движения.ОстаткиМатериалов.Записать(); Движения.Себестоимость.Записать(); КонецПроцедуры |
|||
1
Ненавижу 1С
гуру
01.10.19
✎
00:09
|
вместо:
КоличествоНоменклатурыВДок = ОстатокВПартии - КоличествоНоменклатурыВДок; попробуйте: КоличествоНоменклатурыВДок = КоличествоНоменклатурыВДок - КоличествоТоваров; |
|||
2
assasu
01.10.19
✎
04:30
|
зачем это "МАКСИМУМ(РасходнаяТовары.НомерСтроки) КАК НомерСтроки" ?
я просто для самообразования спрашиваю |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |