Процедура ОбработкаПроведения(Отказ, Режим)
Движения.Остатки.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасходнаяНакладная.Номенклатура КАК Номенклатура,
| СУММА(РасходнаяНакладная.Количество) КАК Количество,
| СУММА(РасходнаяНакладная.СуммаПродажи) КАК Сумма
|ПОМЕСТИТЬ РасходнаяНакладная
|ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладная
|ГДЕ
| РасходнаяНакладная.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладная.Номенклатура
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| РасходнаяНакладная.Номенклатура КАК Номенклатура,
| РасходнаяНакладная.Количество КАК Количество,
| РасходнаяНакладная.Сумма КАК Сумма,
| ОстаткиНоменклатурыОстатки.Партия КАК Партия,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток
|ИЗ
| РасходнаяНакладная КАК РасходнаяНакладная
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Остатки.Остатки(
| &Период,
| Номенклатура В
| (ВЫБРАТЬ
| РасходнаяНакладная.Номенклатура
| ИЗ
| РасходнаяНакладная)) КАК ОстаткиНоменклатурыОстатки
| ПО РасходнаяНакладная.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| ОстаткиНоменклатурыОстатки.Партия.Дата
|ИТОГИ
| МАКСИМУМ(Количество),
| МАКСИМУМ(Сумма),
| СУММА(КоличествоОстаток)
|ПО
| Номенклатура";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Период", Дата);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Если Выборка.Количество > Выборка.КоличествоОстаток Тогда
Сообщить("Не достаточно номенклатуры " + Выборка.Номенклатура + " на количество " + (Выборка.Количество-Выборка.КоличествоОстаток));
Отказ = Истина;
Продолжить;
КонецЕсли;
Стоимость = 0;
ОсталосьСписать = Выборка.Количество;
ПолнаяВыборка = Выборка.Выбрать();
Пока (ОсталосьСписать > 0) И ПолнаяВыборка.Следующий() Цикл
КоличествоСписания = Мин(ОсталосьСписать, ПолнаяВыборка.КоличествоОстаток);
Движение = Движения.Остатки.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ПолнаяВыборка.Номенклатура;
Движение.Партия = ПолнаяВыборка.Партия;
Движение.Количество = КоличествоСписания;
Движение.Стоимость = (КоличествоСписания * ПолнаяВыборка.СтоимостьОстаток) /
ПолнаяВыборка.КоличествоОстаток;
Стоимость = Стоимость + Движение.Стоимость;
КонецЦикла;
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.Количество;
Движение.Стоимость = Стоимость;
Движение.Продажа = Выборка.Сумма;
КонецЦикла;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Учиться на ошибках. Тонкое искусство переговоров для специалистов по 1С и не только. Часть 6
- Баланс сторон на внутренних проектах. Почему внутренние проекты - вечные?
- Ошибка аутентификации клиента средствами операционной системы: Аутентификационный контекст клиента отсутствует в рабочем процессе
- Ошибка src\frntend\src\MergeModuleUtil.cpp или как не потерять недели работы при обновлении конфигурации
- Гибрид 1С и Atlassian: как, а главное – зачем?
Найденные решения
(1) Самое первое что бросилось в глаза - Это параметр запроса "Дата". По-идее тут должен быть момент времени. Ну или граница периода. Иначе при перепроведении документа будут учтены движения текущего документа.
Ну и про ОсталосьСписать правильно написали
Ну и про ОсталосьСписать правильно написали
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Это тестовое задание? Требуйте пример и отладчик!!!!
сразу все будет понятно,
а так на первый взгляд косчк зделсь -
КоличествоСписания = Мин(ОсталосьСписать, ПолнаяВыборка.КоличествоОстаток);
не производится коррекция - ОсталосьСписать, видимо списывается больше чем надо
в общем, без отладчика - ХЗ что там еще не так.
сразу все будет понятно,
а так на первый взгляд косчк зделсь -
КоличествоСписания = Мин(ОсталосьСписать, ПолнаяВыборка.КоличествоОстаток);
не производится коррекция - ОсталосьСписать, видимо списывается больше чем надо
в общем, без отладчика - ХЗ что там еще не так.
(1) Самое первое что бросилось в глаза - Это параметр запроса "Дата". По-идее тут должен быть момент времени. Ну или граница периода. Иначе при перепроведении документа будут учтены движения текущего документа.
Ну и про ОсталосьСписать правильно написали
Ну и про ОсталосьСписать правильно написали
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот