Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 янв 2026, 05:19

Остатки по срокам годности

Автор Lavartis, Вчера в 12:05

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

Lavartis

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

Максим75

Lavartis, вот здесь
  |ПО
   |   Товар,
   |   СрокГодности";

а алиаса Товар нет, есть алиас Товары.

Lavartis

У меня выходит такая ситуация по срокам годности
Снимок экрана 2026-01-20 122006.png

Lavartis

Максим75, Посмотрите пожалуйста

Максим75

Lavartis, это до проведения документа или уже после проведения остатки по срокам полезли в минус?

Lavartis

Максим75, После проведения

Максим75

Lavartis, Вы запрос в конструктор запроса запихивали? Он не ругался? Еще раз повторюсь, итоги делаете по алиасу Товар, а в полях выборки такого алиаса нет, есть Товары.

станьте точкой останова после этого
РезультатЗапроса = Запрос.Выполнить();
и посмотрите, что в выборке запроса
вычислите Запрос.Выполнить().Выгрузить() - должна быть таблица значений, что в ней? что в товарах в КоличествоДок, в КоличествоОстаток?

Lavartis

Максим75, Нет у меня просто Номенклатура - Товар, а запрос сам писал(то есть сам из имеющегося создавал)

Lavartis

Максим75, Что-то такое пишет

Максим75

Lavartis, я же не то писал сделать.
в выражении не текст запроса считать, а Запрос.Выполнить().Выгрузить()

на текст запроса естественно ругнется.

надо посмотреть, что же в выборке запроса есть. быстрее всего выгрузить выборку в таблицу значений и посмотреть на нее в точке останова.

а вот текст запроса запихнуть в конструктор, не ругнется? вот станьте мышом на Выбрать, правая кнопка мыша и выбрать конструктор запроса. Если с текстом запроса все хорошо в плане синтаксиса - откроется конструктор, иначе ругнется.

Теги:

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

Рейтинг@Mail.ru

Поиск