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

Неверная обработка запроса

Автор Sasha1C, 28 окт 2024, 10:12

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

Sasha1C

Добрый день, при решении задания для подготовки к собеседованию столкнулся с проблемой:
  Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);

Запрос.Текст = "ВЫБРАТЬ
               | ВводВЭксплуатацию.Склад КАК Склад,
               | ВводВЭксплуатацию.Дата КАК Дата
               |ИЗ
               | Документ.ВводВЭксплуатацию КАК ВводВЭксплуатацию
               |ГДЕ
               | ВводВЭксплуатацию.Ссылка = &Ссылка";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();

Запрос.Текст ="ВЫБРАТЬ
              | ВводВЭксплуатациюУстройства.Устройство КАК Устройство,
              | ЕСТЬNULL(ВводВЭксплуатациюУстройства.Количество, 0) КАК Количество,
              | ЕСТЬNULL(ВводВЭксплуатациюУстройства.Сумма, 0) КАК Сумма
              |ПОМЕСТИТЬ ТаблицаУстройств
              |ИЗ
              | Документ.ВводВЭксплуатацию.Устройства КАК ВводВЭксплуатациюУстройства
              |;
              |
              |////////////////////////////////////////////////////////////////////////////////
              |ВЫБРАТЬ
              | РегистрОстатковОстатки.Устройство КАК Устройство,
              | ЕСТЬNULL(РегистрОстатковОстатки.КоличествоОстаток, 0) КАК Остаток,
              | ЕСТЬNULL(РегистрОстатковОстатки.СуммаОстаток, 0) КАК СуммаОстатка,
              | ЕСТЬNULL(ТаблицаУстройств.Количество, 0) КАК Количество,
              | ЕСТЬNULL(ТаблицаУстройств.Сумма, 0) КАК СуммаДокумента
              |ИЗ
              | РегистрНакопления.РегистрОстатков.Остатки(
              | &Дата,         
              | Склад = &Склад
              | И Устройство В
              | (ВЫБРАТЬ
              | ТаблицаУстройств.Устройство КАК Устройство
              | ИЗ
              | ТаблицаУстройств КАК ТаблицаУстройств)) КАК РегистрОстатковОстатки,
              | ТаблицаУстройств КАК ТаблицаУстройств";

Запрос.УстановитьПараметр("Дата", Шапка.Дата);
Запрос.УстановитьПараметр("Склад", Шапка.Склад);

РезультатЗапроса = Запрос.Выполнить().Выбрать();

Пока РезультатЗапроса.Следующий() Цикл

Если РезультатЗапроса.Количество > РезультатЗапроса.Остаток Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает устройств на остатке. Есть " + РезультатЗапроса.Остаток + " ,а надо= " + РезультатЗапроса.Количество;
Сообщение.Сообщить();
Иначе
НужноСписать = РезультатЗапроса.Количество;
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() И НужноСписать > 0 Цикл

Если НужноСписать >= Выборка.Остаток Тогда
КоличествоСписать = Выборка.Остаток;
НужноСписать = НужноСписать -  КоличествоСписать;                       
Иначе
КоличествоСписать = нужноСписать;
НужноСписать = 0;
КонецЕсли;

КонецЦикла;                                                 

Движение = Движения.РегистрОстатков.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Регистратор = этотОбъект.Ссылка;
Движение.Период = Шапка.Дата;
Движение.Склад = Шапка.Склад;
Движение.Партия = ЭтотОбъект.Ссылка;
Движение.Устройство = РезультатЗапроса.Устройство;
Движение.Количество = НужноСписать;
Движение.Сумма = РезультатЗапроса.СуммаДокумента;
КонецЕсли;
//Движения.РегистрОстатков.Записать();

КонецЦикла;

На выходе из запроса я получаю нужные данные (проверено в отладчике), но в цикле эта строчка Выборка = РезультатЗапроса.Выбрать(); не получает данные из основного запроса.
И списание происходит дважды. Не понимаю на каком этапе я совершаю ошибку. Заранее  спасибо

Максим75

Sasha1C, зачем во втором запросе Вы временную таблицу добавляете в выборку? используйте ее только в качестве отбора по устройств.
да и вообще странный потом обход выборки. такой подход используется при списании партий, но у Вас в остатках просто остаток по номенклатуре, без партий, поэтому будет просто остаток по номенклатуре на складе (свернутый). зачем еще что-то городить внутри цикла?

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

Рейтинг@Mail.ru

Поиск