Имя: Пароль:
1C
1С v8
Выбор из запроса
0 amadeus2010
 
16.06.12
10:13
Добрый день всем, помогите пожалуйста с такой задачей.Имеется процедура загружающая товары из Дерева значений в табличную часть.В нее я добавил запрос, который отбирает те заказы количество номенклатуры которых меньше указанного в параметре минимальное количество.В том виде что имеется сейчас код не работает,пропускает все заказы даже те которые не должны проходить.
////////////////////////////////////////////////////////////////
Процедура ДеревоЗаказовДобавитьСТрокуВТаблицуТоваровРекурсивно(Строка,ТаблицаТоваров)
   
   Если ТипЗнч(Строка.Колонка1) = Тип("СправочникСсылка.Номенклатура") Тогда
       СтрокаТаблицыТоваров = ТаблицаТоваров.Добавить();
           ЗаполнитьЗначенияСвойств(СтрокаТаблицыТоваров,Строка);

   
   
   Запрос= Новый Запрос;
   Запрос.Текст=
   "ВЫБРАТЬ
   |ЗаказыПокупателейОстаткиПЕТШАХДАГ.Заказ
   |
   |ИЗ
   |(ВЫБРАТЬ
   |    ЗаказыПокупателейОстатки.ЗаказПокупателя.Ссылка КАК Заказ,
   |    СУММА(ЗаказыПокупателейОстатки.КоличествоОстаток / ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) КАК КоличествоОБЩЕЕ
   |    ИЗ
   |        РегистрНакопления.ЗаказыПокупателей.Остатки(
   |            &Дата,
   |            ЗаказПокупателя.ДатаОтгрузки >= &ЗаказПокупателяДатаНачала
   |                И ЗаказПокупателя.ДатаОтгрузки <= &ЗаказПокупателяДатаКонца) КАК ЗаказыПокупателейОстатки
   |
   |    СГРУППИРОВАТЬ ПО
   |            ЗаказыПокупателейОстатки.ЗаказПокупателя.Ссылка

   |
   |    ИМЕЮЩИЕ
   |        СУММА(ЗаказыПокупателейОстатки.КоличествоОстаток / ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) < &МинимальноеКоличествоКассет) КАК ЗаказыПокупателейОстаткиОБЩЕЕ
   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
   |        ЗаказыПокупателейОстатки.ЗаказПокупателя.Ссылка КАК Заказ,
   |        СУММА(ЗаказыПокупателейОстатки.КоличествоОстаток / ЗаказыПокупателейОстатки.Номенклатура.ЕдиницаИзмеренияМест.Коэффициент) КАК КоличествоШахдагПЕТ
   |            ИЗ
   |                РегистрНакопления.ЗаказыПокупателей.Остатки(
   |                    &Дата,
   |                    ЗаказПокупателя.ДатаОтгрузки >= &ЗаказПокупателяДатаНачала
   |                    И ЗаказПокупателя.ДатаОтгрузки <= &ЗаказПокупателяДатаКонца
   |                    И (Номенклатура.Родитель.Ссылка В ИЕРАРХИИ (&ПЕТ)
   |                    ИЛИ Номенклатура.Родитель.Ссылка В ИЕРАРХИИ (&ШАХДАГ))) КАК ЗаказыПокупателейОстатки
   |    
   |        СГРУППИРОВАТЬ ПО
   |        ЗаказыПокупателейОстатки.ЗаказПокупателя.Ссылка) КАК ЗаказыПокупателейОстаткиПЕТШАХДАГ
   |        ПО (ЗаказыПокупателейОстаткиПЕТШАХДАГ.Заказ = ЗаказыПокупателейОстаткиОБЩЕЕ.Заказ)
   |        И (ЗаказыПокупателейОстаткиПЕТШАХДАГ.КоличествоШахдагПЕТ = ЗаказыПокупателейОстаткиОБЩЕЕ.КоличествоОБЩЕЕ)";

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

   
   
                   
       
   Иначе
       Для Каждого Строка1 из Строка.Строки Цикл
           ДеревоЗаказовДобавитьСТрокуВТаблицуТоваровРекурсивно(Строка1,ТаблицаТоваров);
       КонецЦикла;
   КонецЕсли;
   
КонецПроцедуры
/////////////////////////////////////////////////////////////
1 Wobland
 
16.06.12
10:21
страх какой. не буду читать, вижу, что сначала безусловно добавляешь строку в ТЧ, а потом пытаешься что-то проверять
2 Renat11111
 
16.06.12
10:32
(0) ты типа 1сник?
3 Rovan
 
гуру
16.06.12
10:48
(0) тебя не смущаеть что слово "строка" красное ?
***
сначала надо делать запрос 1 раз и получить результат
а потом в цикле проверять находится там что-то или нет
4 Индиго
 
16.06.12
10:58
(0)Первое правило : Если ты хочешь чтобы чтото попало в запрос, а оно не попадает - смотри на условия ГДЕ и условия-параметры виртуальных таблиц
5 Индиго
 
16.06.12
11:00
+ ну еще ИМЕЮЩИЕ конечно.