Имя: Пароль:
1C
1C 7.7
v7: Как установить условие после выполнения запроса?
0 lesstat
 
27.06.12
12:31
Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос

   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)

   |Период с ВыбНачПериода по ВыбКонПериода;
   |ОбрабатыватьДокументы все;
   |Склад = Регистр.ОстаткиТМЦ.Склад;
   |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
   |Количество = Регистр.ОстаткиТМЦ.Количество;
   |ТекущийДокумент = Регистр.ОстаткиТМЦ.ТекущийДокумент;
   |Функция КоличествоНачОст = НачОст(Количество);
   |Функция КоличествоПриход = Приход(Количество);
   |Функция КоличествоРасход = Расход(Количество);
   |Функция КоличествоКонОст = КонОст(Количество);
   |Группировка Склад;
   |Группировка Номенклатура;
   |Группировка Документ;
   |Условие(Склад в ВыбСклад);
   |Условие(Номенклатура в ВыбНоменклатура);
   |"//}}ЗАПРОС

   ;
   // Если ошибка в запросе, то выход из процедуры

   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса

   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"

   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
       // Заполнение полей Склад

       Таб.ВывестиСекцию("Склад");
       Пока Запрос.Группировка(2) = 1 Цикл
           
           // Заполнение полей Номенклатура

           
           Таб.ВывестиСекцию("Номенклатура");
           
           Пока Запрос.Группировка(3) = 1 Цикл
               // Заполнение полей Документ

               Таб.ВывестиСекцию("Документ");
           КонецЦикла;
       КонецЦикла;
   КонецЦикла;
   // Заполнение полей "Итого"

   Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы

   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");


на форме есть флажки нулевыеостаткинананачало и нулевыеостаткинаконец,

как мне отбирать номенклатуры при включении того или иного флажка или если оба флажка включены?
1 MishaD
 
27.06.12
12:43
Внутри цикла по номенклатуре поставь условие
Если  (флажок нулевыеостаткинананачало = 1 ) и (Запрос.КоличествоНачОст<>0) Тогда
продолжить
КонецЕсли;
2 lesstat
 
27.06.12
12:57
(1) Спасибо
3 lesstat
 
27.06.12
13:42
Блин а как в сам запрос засунуть это условие?
4 lesstat
 
27.06.12
13:43
Если делать в цикле то слишком долго работает
5 Nik_nik_nik
 
27.06.12
13:46
(3) на экране условий добавьте условие и напишите его руками.
Примерно так и будет:

(нулевыеостаткинананачало = 1 ) и (КоличествоНачОст<>0)
6 lesstat
 
27.06.12
13:50
Условие(Номенклатура в ВыбНоменклатура);"+
   ТекстЗапроса = ТекстЗапроса +
   |Условие(Если ОстатокнаНачало = 1 Тогда (КоличествоНачОст = 0) и (КоличествоКонОст >=0) КонецЕсли);";

Пишет переменная не определена КоличествоНачОст
И где то ошибка в присоединении ТекстЗапроса
7 Ёпрст
 
27.06.12
13:53
(6) не надо пытаться фильтровать в тексте запросе результат функции, чорный запрос этого не умеет "как надо", в нём нет having, условие наложится для каждого вычисления функции.

+ конструкции Если ОстатокнаНачало = 1 Тогда в тексте запроса недопустимы
8 Андрей_Андреич
 
naïve
27.06.12
13:54
(6) не слушай (5). Нет в запросе фильтра на результат типа Having.
9 Андрей_Андреич
 
naïve
27.06.12
13:55
(0) А (7) слушай - он ну сильно умный. Правда.
10 ДенисЧ
 
27.06.12
13:55
(8) А куда делся? О_о
Условие(Запрос.КоличествоНачОст>0);
11 Ёпрст
 
27.06.12
14:02
(10) вот сразу видно - никогда не смотрел на результат оного выполнения
:))))
12 Ёпрст
 
27.06.12
14:02
ничего.. это хорошие грабли