Имя: Пароль:
1C
1С v8
Таблица значений в параметрах запроса
0 Штурман
 
22.04.14
12:35
На форме было поле ввода, где выбирался элемент иерархического справочника. Это значение потом передавалось в запрос.
Когда же вместо поля ввода на форму добавили табличное поле, т.е. таблицу значений, чтобы одновременно выбрать несколько справочников, запрос перестал работать, а теперь попросту выводит все данные подряд за указанный промежуток времени.
В чем может быть причина?

Код:



Массив = Новый Массив();
Для каждого стр из ТЗПодразделения цикл  //ТЗПодразделения – ТЗ на форме справочника, про нее речь
    Массив.Добавить(стр.Подразделение);
конеццикла;
Подразделение = Массив;
////////////////////////////////////////////////////////////////////////////////
Запрос. . .
////////////////////////////////////////////////////////////////////////////////
Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТЗРаб.Физлицо,
                   |    ТЗРаб.Сотрудник,
                   |    ТЗРаб.Подразделение,
                   |    ТЗРаб.Должность
                   |ПОМЕСТИТЬ ВремТаб
                   |ИЗ
                   |    &тзРаб КАК ТЗРаб
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ВремТаб.Сотрудник,
                   |    ПодразделенияОрганизаций.Ссылка КАК ПодразделениеОрганизации,
                   |    ДолжностиОрганизаций.Ссылка КАК ДолжностьОрганизации,
                   |    ФизическиеЛица.Ссылка КАК ФизЛицо
                   |ПОМЕСТИТЬ ВТРаботники
                   |ИЗ
                   |    ВремТаб КАК ВремТаб
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДолжностиОрганизаций КАК ДолжностиОрганизаций
                   |        ПО ВремТаб.Должность = ДолжностиОрганизаций.Ссылка
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
                   |        ПО ВремТаб.Подразделение = ПодразделенияОрганизаций.Ссылка
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
                   |        ПО ВремТаб.Физлицо = ФизическиеЛица.Ссылка
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ВТРаботники.Сотрудник,
                   |    ВТРаботники.ПодразделениеОрганизации КАК Подразделение
                   |ИЗ
                   |    ВТРаботники КАК ВТРаботники
                   |ГДЕ
                   |    ВТРаботники.ПодразделениеОрганизации В ИЕРАРХИИ(&ПодразделениеОрганизации)";
    Запрос.УстановитьПараметр("тзРаб", ТЗРаботники);    
    Запрос.УстановитьПараметр("ДатаНачала",    НачалоМесяца(ДатаОтчета));     //Дата
    Запрос.УстановитьПараметр("ДатаОкончания",    КонецМесяца(ДатаОтчета));     //Дата
    Запрос.УстановитьПараметр("ПодразделениеОрганизации",    Подразделение);     //Справочник ссылка: Подразделения организации
    РезультатЗапроса2 = Запрос.Выполнить();
    Выборка2 = РезультатЗапроса2.Выбрать();
1 Wobland
 
22.04.14
12:35
в этом:  добавили табличное поле
2 Штурман
 
22.04.14
12:39
Вот картинка для иллюстраци:

http://f-lite.ru/lfp/i023.radikal.ru/1404/02/2e183a2d8127.png/htm

Выше поле выбора, а потом добавили ТЗ
3 Штурман
 
22.04.14
12:39
(1) а как в запрос передать несколько справочников?
4 Wobland
 
22.04.14
12:40
(3) В(&МощныйСписок)
5 Штурман
 
22.04.14
12:42
(4) тоже не работает, нужна именно ИЕРАРХИЯ, т.к. справочники имеют кучу уровней вложенности
6 Cube
 
22.04.14
12:42
(3) "несколько справочников"
Король формулировок! :)))
7 Cube
 
22.04.14
12:43
(5) Разрешаю воспользоваться "В ИЕРАРХИИ"
8 Wobland
 
22.04.14
12:43
мда..
9 Wobland
 
22.04.14
12:44
(5) это ради иерархии ты ТЗ изобрёл?
10 Штурман
 
22.04.14
12:45
(6) (7) по делу есть что сказать?
11 Штурман
 
22.04.14
12:46
(9) а есть другие варианты?
12 Cube
 
22.04.14
12:49
(10) Я сказал именно по делу. Тебе осталось это просто осознать...
13 Штурман
 
22.04.14
12:49
(4) Написал вместо "В ИЕРАРХИИ" просто "В"

запрос вообще не работает
14 Штурман
 
22.04.14
12:50
(12) так я в начале топика написал: что запрос выводит не подразделения, относящиеся к выбранным в табличном поле, а практически все подразделения
15 Cube
 
22.04.14
12:53
(14) Какие выбрал, такие и выводит. Плюс все, которые входят в те, что ты выбрал...
Что не так?
16 Wobland
 
22.04.14
12:53
(14) ты всё ещё пользуешься запросом из (0)?
17 Штурман
 
22.04.14
12:55
(15) выводит практически все подразделения конторы, а не только те подразделения, которые входят в выбранные

а надо чтобы выводились только подразделения, которые входят в выбранные на форме
18 Штурман
 
22.04.14
12:56
(16) да
19 Cube
 
22.04.14
12:57
(17) Давай запрос и структуру стравочника своего. Хватит обсасывать сферических коней в вакууме...
20 Wobland
 
22.04.14
12:58
(18) предлагаю выкинуть к чертям эту бабйню и сделать один нормальный запрос
21 Штурман
 
22.04.14
12:58
(17) т.е. есть Администрация, в ней Бухгалтерия, а отдельно от них, например Охрана,
так вот, когда выбираешь Администрацию, надо чтобы в результате выводились Администрация и Бухгалтерия

а в запросе выводятся все, т.е. и Охрана, которую вообще не выбирали
22 Штурман
 
22.04.14
12:59
(19) так я же запрос в (0) разместил
23 Штурман
 
22.04.14
12:59
там крестик размернуть
24 Wobland
 
22.04.14
12:59
(20) максимум - двойной ради ТЗ. если она вообще там упёрлась
25 Штурман
 
22.04.14
13:00
(19) Структура справочника:

Аднинистрация
|---Бухгалтерия
Охрана
26 Cube
 
22.04.14
13:01
(22) Что такое ТЗРаботники? Говори его тип и значение.
27 Cube
 
22.04.14
13:02
(26) А, не надо, уже понял)
28 Cube
 
22.04.14
13:03
Давай значения массива "Подразделение".
29 Cube
 
22.04.14
13:04
+(28) Только не ври!
30 Штурман
 
22.04.14
13:04
(26) Это другой запрос, он просто вытягивает актуальные данные о том, где в определенный период работает сотрудник
(писала сама 1с)


ОписаниеТиповФ = Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица");
    ОписаниеТиповС = Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций");
    ОписаниеТиповП = Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций");
    ОписаниеТиповД = Новый ОписаниеТипов("СправочникСсылка.ДолжностиОрганизаций");
    
    ТЗРаботники = Новый ТаблицаЗначений;
    ТЗРаботники.Колонки.Добавить("Физлицо", ОписаниеТиповФ);
    ТЗРаботники.Колонки.Добавить("Сотрудник", ОписаниеТиповС);
    ТЗРаботники.Колонки.Добавить("Подразделение", ОписаниеТиповП);
    ТЗРаботники.Колонки.Добавить("Должность", ОписаниеТиповД);
    
    Пока Выборка.Следующий() цикл
        стр = ТЗРаботники.Добавить();
        стр.Физлицо = Выборка.Физлицо;
        стр.Сотрудник = Выборка.Сотрудник;
        стр.Подразделение = Выборка.Подразделение;
        стр.Должность = Выборка.Должность;
    КонецЦикла;
31 Штурман
 
22.04.14
13:07
(29) странно, написал:

Для Каждого ЭлементМассива из Подразделение Цикл
        Сообщить(ЭлементМассива);
    КонецЦикла;

выдает:

Итератор для значения не определен
    Для Каждого ЭлементМассива из Подразделение Цикл
32 Cube
 
22.04.14
13:08
(31) Может у тебя есть реквизит формы Подразделение с другим типом?
33 Cube
 
22.04.14
13:09
(31) Замени все вхождения "Подразделение" на "ВыбранныеПодразделения"
34 Штурман
 
22.04.14
13:12
(33) заменил:

ВыбранныеПодразделения = Новый Массив();
    Для каждого стр из ТЗПодразделения цикл
        ВыбранныеПодразделения.Добавить(стр.Подразделение);
    конеццикла;

---

Запрос.УстановитьПараметр("ПодразделениеОрганизации",    ВыбранныеПодразделения);


Заработало, спасибо

Буду дальше тестировать :)
35 vovus
 
22.04.14
13:16
Поле ввода старое по ходу и называлось "Подразделение"
36 Cube
 
22.04.14
13:21
(34) Ага, а то "запрос коряво работает"... :))
37 Штурман
 
22.04.14
13:21
(35) Да, вот косяк, старое поле ввода так и называлось)))
38 AlexITGround
 
22.04.14
13:22
(36) стоПудов с этой ошибкой столкнулся каждый из нас
39 Cube
 
22.04.14
13:28
(38) А ещё бывает и такое:

CуммаДокумента = 500;
Сообщить(СуммаДокумента);

Ошибка... А с виду и не скажешь, где... :)
40 Wobland
 
22.04.14
13:42
я всё пропустил. Cube, зачем ему ТЗ?
41 Cube
 
22.04.14
13:51
(40) Он не сказал, а я не спрашивал))
42 Wobland
 
22.04.14
13:53
но что-то такое понял - (27). ну и ладно
43 Штурман
 
22.04.14
14:17
(40) в ТЗ можно добавить несколько подразделений, а в поле выбора можно выбрать только одно подразделение
44 Wobland
 
22.04.14
14:40
или только один список значений любой длины по вкусу