Документ РасходнаяНакладная списывает товары по принципу ФИФО. Если проводить документ после его первого проведения, т.е. на складе было 15 товаров, при первом проведении списывается 10. Если не отменять проведение и провести его еще раз, выдает, что товара на складе не хватает, так как осталось 5 штук из 10 необходимых. Вроде как надо что-то исправить в запросе, связанное с датой проведения, но я не знаю как это сделать. Выгрузку прилагаю, заранее спасибо.
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиМатериалов.Записывать = Истина;
Запрос = Новый Запрос("ВЫБРАТЬ
| ВЫБОР
| КОГДА МетодСписанияТоваров.МетодСписания = ЗНАЧЕНИЕ(Перечисление.ВидУчета.ФИФО)
| ТОГДА ""ВОЗР""
| КОНЕЦ КАК МетодСписания
|ИЗ
| РегистрСведений.МетодСписанияТоваров.СрезПоследних(&Период, ) КАК МетодСписанияТоваров");
Запрос.УстановитьПараметр("Период", Дата);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Отказ = Истина;
Сообщить("Не указан метод списания в учетной политике!!!");
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Выборка.Следующий();
МетодСписания = Выборка.МетодСписания;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
ЗапросВТ = Новый Запрос;
ЗапросВТ.МенеджерВременныхТаблиц = МенеджерВТ;
ЗапросВТ.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяМатериалы.Ссылка.Дата КАК Период,
| РасходнаяНакладнаяМатериалы.Материал КАК Материал,
| СУММА(РасходнаяНакладнаяМатериалы.Количество) КАК Количество
|ПОМЕСТИТЬ Товары
|ИЗ
| Документ.РасходнаяНакладная.Материалы КАК РасходнаяНакладнаяМатериалы
|ГДЕ
| РасходнаяНакладнаяМатериалы.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяМатериалы.Ссылка.Дата,
| РасходнаяНакладнаяМатериалы.Материал";
ЗапросВТ.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = ЗапросВТ.Выполнить();
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст = "ВЫБРАТЬ
| Товары.Материал КАК Материал,
| Товары.Количество КАК Количество,
| Товары.Период КАК Период,
| ОстаткиМатериаловОстатки.Партия КАК Партия,
| ОстаткиМатериаловОстатки.КоличествоОстаток КАК Остаток,
| ОстаткиМатериаловОстатки.СтоимостьОстаток КАК Стоимость,
| ОстаткиМатериаловОстатки.Партия.Дата КАК ДатаПартии
|ИЗ
| Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
| ,
| Материал В
| (ВЫБРАТЬ
| ВТ.Материал
| ИЗ
| Товары КАК ВТ)) КАК ОстаткиМатериаловОстатки
| ПО Товары.Материал = ОстаткиМатериаловОстатки.Материал
|ИТОГИ
| МАКСИМУМ(Количество),
| СУММА(Остаток)
|ПО
| Материал";
Движения.ОстаткиМатериалов.Записывать = Истина;
Выборка = Запрос2.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока Выборка.Следующий() Цикл
Если Выборка.Количество > Выборка.Остаток Тогда
Отказ = Истина;
Сообщить("Остатка для товара """ + Выборка.Материал + """ не хватает." +
" Требуется: " + Выборка.Количество +
" Остаток: " + Выборка.Остаток);
Продолжить;
КонецЕсли;
КРаспределениюПоПартиям = Выборка.Количество;
Обход = Выборка.Выбрать();
Пока Обход.Следующий() И НЕ КРаспределениюПоПартиям = 0 Цикл
Запись = Движения.ОстаткиМатериалов.Добавить();
ЗаполнитьЗначенияСвойств(Запись, Обход);
Запись.ВидДвижения = ВидДвиженияНакопления.Расход;
Если КРаспределениюПоПартиям >= Обход.Остаток Тогда
Запись.Количество = Обход.Остаток;
Запись.Стоимость = Обход.Стоимость;
КРаспределениюПоПартиям = КРаспределениюПоПартиям - Обход.Остаток;
Иначе
Запись.Количество = КРаспределениюПоПартиям;
Запись.Стоимость = Обход.Стоимость / Обход.Остаток * КРаспределениюПоПартиям;
КРаспределениюПоПартиям = 0;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
Задание2.0.dt
По теме из базы знаний
- Быстрое проведение документов контрагента
- Создание документов поступления недостающего товара для проведения документов реализации 1С 7.7 УСН и 1С:Бухгалтерия
- Гарантированное проведение документов (подключаемое расширение)
- Проведение документов на управляемых формах
- Распроведение и повторное проведение документов за выбранный период. 1С:ЗУП
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот