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

Помогите разобраться в запросе

Автор Шурик_1985, 06 окт 2011, 06:47

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

Шурик_1985

Помогите пожалуйста реализовать запрос на проверку товаров в остатке, имеется документ УчетОС
с реквизитов МатериальноОтветственноеЛицо тип-СправочникСотрудник, МестоХранение тип-СправочникМестоХранение, СнятьСУчета с типом-Булево
и табличной части Номенклатура и количество
Надо сделать следующее: Если СнятьСУчета =  Ложь  тогда записывал в регистр УчетОС иначе ругался с сообщениям что нету такого товара
я пробовал написать но у меня, в обоих случаях ругается, нету такого в остатке, что я нитак делаю;

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

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

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

   Выборка = Результат.Выбрать();

   Пока Выборка.Следующий() Цикл
      Если Выборка.Количество() > Выборка.КоличествоОС Тогда
      Сообщить("Не хватает товар на складе");
      Отказ = Истина
   Иначе
      Продолжить;
      КонецЕсли;   
      КонецЦикла;
    Движения.УчетОснавныхСредств.Записывать = Истина;
   Движения.УчетОснавныхСредств.Очистить();
      Если СнятьСУчета = Ложь
   Тогда
      Движение = Движения.УчетОснавныхСредств.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
      Движение.Период = Дата;
      Движение.Сотрудник = МатериальноОтветственноеЛицо;
      Движение.МестоХранение = МестоХранение;
      Движение.Номенклатура = Выборка.Номенклатура;
      Движение.Количество = Выборка.Количество();
      
   Иначе   
      Движение = Движения.УчетОснавныхСредств.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Сотрудник = МатериальноОтветственноеЛицо;
      Движение.МестоХранение = МестоХранение;
      Движение.Номенклатура = Выборка.Номенклатура;
      Движение.Количество = Выборка.Количество();
   КонецЕсли;

КонецПроцедуры
Усё чотко!

progmikon

Запрос, вообще что-то возвращает?

Андрей Федотов

Чему равно значение условия Выборка.Количество() > Выборка.КоличествоОС ?
Полагаю что Истина
С уважением,
Андрей Федотов
Future IT Solutions

Шурик_1985

Цитата: progmikon от 06 окт 2011, 07:58
Запрос, вообще что-то возвращает?
Возвращает нулевое количество номенклатуры в обоих случаях
Усё чотко!

has

Так попробуй

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

Шурик_1985

Цитата: has от 06 окт 2011, 10:18
Так попробуй

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


переделал как вы написали, увы сообщения о нехватки товаров выходит повторно :(
Усё чотко!

has

Кстати остатки то на дату документа надо получать. Попробуй так. Могут быть ошибки, но думаю направление верное дал. Только имя регистра реально УчетОснАвныхСредств?

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

Теги:

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

Рейтинг@Mail.ru

Поиск