Имя: Пароль:
1C
1C 7.7
v7: Запрос и список
,
0 Zhuravlik
 
18.08.11
15:44
Здравствуйте. Подскажите пожалуйста такую вещь. Собираю в запросе документы за период в таблицу значений.
Код:


   Запрос = СоздатьОбъект("Запрос");
   
   ТекстЗапроса = "
   |Период с выбДата по выбДата;
   |ОбрабатыватьДокументы Проведенные;
   |Без Итогов;
   |МЛ = Документ.МаршрутныйЛист.ТекущийДокумент;
   |Функция ЧтобыБыло = Счётчик();
   |Группировка МЛ;
   |";    
   


А потом хочу ее же обновлять, то есть включать в нее все документы, кроме найденных. Для этого делаю такую добавку:


   Если тзМаршрутныхЛистов.КоличествоСтрок() > 0 Тогда
       спПолученныхМаршрутов = СоздатьОбъект("СписокЗначений");
       
       тзМаршрутныхЛистов.Выгрузить(спПолученныхМаршрутов,,,1);
       
       ТекстЗапроса = ТекстЗапроса +"
       |Условие (НЕ (МЛ в спПолученныхМаршрутов));
       |";
       
   КонецЕсли;    
   

Дальше заполняю таблицу.

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

       текДок = Запрос.МЛ;

       тзМаршрутныхЛистов.НоваяСтрока();
       тзМаршрутныхЛистов.Документ = текДок;
       тзМаршрутныхЛистов.Водитель = Запрос.МЛ.Водитель;
       тзМаршрутныхЛистов.ТипТовара = ПроверкаПропускаПоСкладу(текДок);

   КонецЦикла;



У меня условие не работает. То есть запрос должен брать все документы, кроме тех, которые есть в списке, а он берет те же самые. Я уже понял, что конструкцией НЕ просто отменяю действие условия. А как сделать такую выборку, без внешних функций?
И еще вопрос, можно ли в запросе присвоить переменной значение, вычисляемое во внешней функции? (как в моем запросе сделать ТипТовара = ПроверкаПропускаПоСкладу(текДок)?)
1 andrewks
 
18.08.11
15:46
|Условие (спПолученныхМаршрутов.НайтиЗначение(МЛ)=0);
2 andrewks
 
18.08.11
15:47
но лучше уж тогда в ТЗ загнать, если большие количество
3 Zhuravlik
 
18.08.11
15:49
(2) Количества не большие, до 200 значений)) Спасибо, вы как всегда помогли)
А со вторым вопросом подскажете?
4 Zhuravlik
 
18.08.11
15:51
(2) А с ТЗ как проверять? Также? И в ТЗ должна быть оджна колонка?
5 Sj
 
18.08.11
15:55
текДок = Запрос.МЛ;
ну попробуй
текДок = Запрос.МЛ.ТекущийДокумент();
6 Sj
 
18.08.11
15:55
Если тзМаршрутныхЛистов.КоличествоСтрок() > 0 Тогда

условие можно убрать
7 andrewks
 
18.08.11
15:56
(4)
|Условие (тзПолученныхМаршрутов.НайтиЗначение(МЛ,0,1)=0);
8 Sj
 
18.08.11
15:58
по 2-му вряд ли возможно, да и не имеет смысла. присваивай в переборе запроса.
9 Zhuravlik
 
18.08.11
15:58
(7) Спасибо)
А можно в запросе присвоить переменной значение, вычисляемое во внешней функции? (как в моем запросе сделать ТипТовара = ПроверкаПропускаПоСкладу(текДок)?)
10 Zhuravlik
 
18.08.11
15:59
(8) Понял, спасибо вам всем огромное)
11 andrewks
 
18.08.11
15:59
(9) в условие запихни
12 Zhuravlik
 
18.08.11
16:02
(11) Уже, все летает) Класс)
13 Zhuravlik
 
18.08.11
16:03
(12) Ой, вы имеете в виду внешнюю функцию? Сейчас попробую...
14 andrewks
 
18.08.11
16:03
(13) ага
15 andrewks
 
18.08.11
16:03
+(14) только учти, что это существенно затормозит запрос
16 Zhuravlik
 
18.08.11
16:08
(15)
Я тоже об этом только что подумал, и решил что не буду ее туда вставлять, спасибо вам за вашу помощь)