Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
11 дек 2024, 10:14

Учет продуктов при проведении документа заказ

Автор Пушочек, 12 июн 2024, 10:05

0 Пользователей и 1 гость просматривают эту тему.

Пушочек

Здравствуйте, не получается правильно написать обработку проведения документа "Заказ", содержащего блюда из справочника "Меню" в котором указан состав.
При проведение вроде все считается правильно, но если закончился продукт от одной даты и есть от следующей, он не берет новую дату, а считает в минус по предыдущей
Процедура ОбработкаПроведения(Отказ, Режим)
   Для Каждого ТекСтрокаЗаказ Из Заказ Цикл 
      Движения.Количество.Записывать = Истина;   
   //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
|   ЗаказыЗаказ.Блюдо КАК Блюдо,
|   ЗаказыЗаказ.Количество КАК Количество
|ПОМЕСТИТЬ Док
|ИЗ
|   Документ.Заказы.Заказ КАК ЗаказыЗаказ
|ГДЕ
|   ЗаказыЗаказ.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
|   Блюдо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|   МенюСостав.Продукт КАК Продукт,
|   МенюСостав.Вес КАК Вес,
|   Док.Блюдо КАК Блюдо,
|   СУММА(Док.Количество) КАК Количество
|ПОМЕСТИТЬ Док1
|ИЗ
|   Док КАК Док
|      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Меню.Состав КАК МенюСостав
|      ПО Док.Блюдо = МенюСостав.Ссылка
|
|СГРУППИРОВАТЬ ПО
|   Док.Блюдо,
|   МенюСостав.Продукт,
|   МенюСостав.Вес
|
|ИНДЕКСИРОВАТЬ ПО
|   Продукт
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|   КоличествоОстатки.ГоденДо КАК ГоденДо,
|   Док1.Продукт КАК Продукт,
|   Док1.Вес КАК Вес,
|   Док1.Количество КАК Количество,
|   Док1.Блюдо КАК Блюдо,
|   КоличествоОстатки.ВесОстаток КАК ВесОстаток
|ИЗ
|   Док1 КАК Док1
|      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Количество.Остатки КАК КоличествоОстатки
|      ПО (Док1.Продукт = КоличествоОстатки.Товар)
|
|УПОРЯДОЧИТЬ ПО
|   ГоденДо
|ИТОГИ
|   МАКСИМУМ(Вес),
|   МАКСИМУМ(Количество),
|   СУММА(ВесОстаток)
|ПО
|   Продукт,
|   Блюдо";
   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   РезультатЗапроса = Запрос.Выполнить();
   ВыборкаПродукт = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); 
   Пока ВыборкаПродукт.Следующий() Цикл 
      ВесКСписанию = ВыборкаПродукт.Вес / 1000 * ВыборкаПродукт.Количество;
      ВыборкаДетальныеЗаписи = ВыборкаПродукт.Выбрать();
      //ВесКСписанию = ВыборкаДетальныеЗаписи.Вес / 1000 * ВыборкаДетальныеЗаписи.Количество;
      //Если ВесКСписанию > ВыборкаПродукт.Остаток Тогда 
      //   Отказ = Истина; 
      //   Сообщить("Не достаточно " + ВыборкаДетальныеЗаписи.Продукт);
      //КонецЕсли;
      
      Пока ВыборкаДетальныеЗаписи.Следующий()  и ВесКСписанию > 0 Цикл 
         //ВесКСписанию = ВыборкаДетальныеЗаписи.Вес / 1000 * ВыборкаДетальныеЗаписи.Количество;
         
         Если ВыборкаДетальныеЗаписи.ГоденДо = Null Тогда 
         Иначе
            Количество = Мин(ВесКСписанию, ВыборкаДетальныеЗаписи.ВесОстаток); 
            Движение = Движения.Количество.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Вес = Количество;
            Движение.ГоденДо = ВыборкаДетальныеЗаписи.ГоденДо; 
            Движение.Период = Дата;
            Движение.Товар = ВыборкаДетальныеЗаписи.Продукт;
            ВесКСписанию = ВесКСписанию - Количество; 
         КонецЕсли;
      КонецЦикла;
   КонецЦикла;
КонецЦикла;
 

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск