|
Списание по партиям, помогите найти ошибку | ☑ | ||
---|---|---|---|---|
0
Vladius
03.10.11
✎
20:16
|
Вот код:
УчетнаяПолитика = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).Значение; Если УчетнаяПолитика = Перечисления.УчетнаяПолитика.ЛИФО Тогда ПорядокСписания = "УБЫВ"; Иначе ПорядокСписания = "ВОЗР"; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура, | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество, | МИНИМУМ(РасходнаяНакладнаяСписокНоменклатуры.НомерСтроки) КАК НомерСтроки |ПОМЕСТИТЬ ДокТЧ |ИЗ | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры |ГДЕ | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | Номенклатура |; |ВЫБРАТЬ | ДокТч.Номенклатура КАК Номенклатура, | ДокТч.Количество КАК Количество, | ДокТч.НомерСтроки КАК НомерСтроки, | ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(Остатки.СтоимостьОстаток, 0) КАК Цена, | Остатки.Партия КАК Партия |ИЗ | ДокТЧ КАК ДокТч | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(&МоментВремени, Номенклатура В(ВЫБРАТЬ Номенклатура | ИЗ ДокТЧ КАК ДокТЧ)) КАК Остатки | ПО ДокТч.Номенклатура = Остатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | Остатки.Партия.МоментВремени " + ПорядокСписания + " |ИТОГИ | МИНИМУМ(Количество), | МИНИМУМ(НомерСтроки), | МИНИМУМ(КоличествоОстаток) |ПО | Номенклатура"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("МоментВремени", МоментВремени()); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() Цикл Если Выборка.Количество > Выборка.КоличествоОстаток Тогда Нехватает = Выборка.Количество - Выборка.КоличествоОстаток; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает товара " + "'" + Выборка.Номенклатура + "'" + " количество " + Нехватает + " в наличии осталось только " + Выборка.КоличествоОстаток; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Поле = "Товары["+(Выборка.НомерСтроки-1)+"].Количество"; Сообщение.Сообщить(); Отказ=Истина; КонецЕсли; КонецЦикла; Если Отказ Тогда Возврат; КонецЕсли; Выборка.Сбросить(); Пока Выборка.Следующий() Цикл ОсталосьСписать = Выборка.Количество; ВыборкаПартий = Выборка.Выбрать(); Пока ВыборкаПартий.Следующий() И ОсталосьСписать <>0 Цикл Списать = Мин(ОсталосьСписать, Выборка.КоличествоОстаток); Движение = Движения.ОстаткиНоменклатуры.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = Выборка.Номенклатура; Движение.Количество = Списать; Движение.Партия = ВыборкаПартий.Партия; Движение.Стоимость = Выборка.Цена; ОсталосьСписать = ОсталосьСписать - Списать; КонецЦикла; КонецЦикла; Движения.ОстаткиНоменклатуры.Записывать=Истина; Товар списывается. Но получается вот такая лабуда http://imagestun.com/images/2011/1jjlla3avb.jpg И затем товар не списывается так как списывает его по последней партии в которой остаток 0 а не по следующей партии. Где ошибка так и не понял.... |
|||
1
catena
03.10.11
✎
20:20
|
Так на первой же партии и отказ:
Если Выборка.Количество > Выборка.КоличествоОстаток Тогда |
|||
2
Vladius
03.10.11
✎
20:38
|
Не совсем понял причем тут "Если Выборка.Количество > Выборка.КоличествоОстаток Тогда" ?
|
|||
3
catena
03.10.11
✎
20:39
|
(2)Отладчиков пройдись, поймешь.
У тебя на первой же партии это условие спотыкается. |
|||
4
Vladius
03.10.11
✎
20:45
|
Выборка.КоличествоОстаток показывает 0. Значит проблема в запросе?
|
|||
5
Tarlich
03.10.11
✎
20:56
|
НЕ берусь утверждать - может что то с ГП ?
|
|||
6
catena
03.10.11
✎
20:58
|
Да при чем здесь? Нехватку надо определять по сумме всех партий, а не по каждой партии отдельно.
|
|||
7
Vladius
03.10.11
✎
21:03
|
Подсказали что с регистра надо отбирать вот так
РегистрНакопления.ОстаткиНоменклатуры.Остатки(&;МоментВремени, Номенклатура В(ВЫБРАТЬ Номенклатура ИЗ ДокТЧ КАК ДокТЧ)) Что именно выполняет этот код? В(ВЫБРАТЬ Номенклатура ИЗ ДокТЧ КАК ДокТЧ) Так все работает... |
|||
8
GROOVY
модератор
04.10.11
✎
01:37
|
(7) ВНИМАТЕЛЬНО читаем посты (3) и (6).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |