Имя: Пароль:
1C
1C 7.7
v7: Условие вхождения в список
0 Лиза777
 
25.04.18
13:13
Добрый день. Простой момент, но чёт туплю. Мне надо в запросе условие поставить, чтобы значение входило в список. МойСписок - это список значений, в котором элементы справочника вида МойСправочник.НайтиПоКоду(55).ТекущийЭлемент.
В запросе пишу

|Условие (Товар В МойСписок);

ошибка МойСПИСОК<<?>>
Переменная не определена (МойСПИСОК)

Как не определена то? Чего не так не пойму
1 Temai
 
25.04.18
13:14
|Условие (Товар В &МойСписок) -Найди одно отличие
2 Лиза777
 
25.04.18
13:16
нашла, ща попробую...
3 Zmich
 
25.04.18
13:16
(1). Речь о 7.7
4 Лиза777
 
25.04.18
13:18
(1) неа не идёт так
5 Zmich
 
25.04.18
13:19
(4). Мало данных. Покажи полный код, как список заполняется и код запроса.
6 Джинн
 
25.04.18
13:19
Значит Ваш список вне видимости из процедуры, где формируется запрос.
7 Карст
 
25.04.18
13:20
МойСПИСОК это чо ?

МойСправочник.НайтиПоКоду(55).ТекущийЭлемент.  - чойта ?
8 Злопчинский
 
25.04.18
13:22
мойСписок - должен быть на форме или д.б. определен как глобальная переменная модуля или должен ббыть определен как локальная переменная процедуры/функции или д.б. определен как формальный параметр процедцры/функции
9 Злопчинский
 
25.04.18
13:23
.. ну или если рубить по нашенски - то глобальная переменная глобального модуля в этом глобализованном мире...
10 Лиза777
 
25.04.18
13:25
МойСправочник = СоздатьОбъект("Справочник.Товары");
    МойСписок = СоздатьОбъект("СписокЗначений");
    МойСправочник.НайтиПоКоду("284");  
    МойСписок.ДобавитьЗначение(МойСправочник.ТекущийЭлемент().Код);    
    МойСправочник.НайтиПоКоду("282");
    МойСписок.ДобавитьЗначение(МойСправочник.ТекущийЭлемент().Код);    
    
    Запрос
    ............
    |КодЭлемента = Документ.МойДокумент.Товар.Код;    
    ..........
    |Условие (КодЭлемента В МойСписок);
    ............
11 Злопчинский
 
25.04.18
13:26
Упрости, а то лишнее дергание базы
МойСписок.ДобавитьЗначение(МойСправочник.Код);
12 Лиза777
 
25.04.18
13:27
Текст запроса со списком формируются в ОДНОЙ функции, а выполняется запрос в процедуре уже
13 Злопчинский
 
25.04.18
13:27
(10) написано в целом правильно.
если ругается - значит либо МойСписок другими буквами в разных местах написан либо вы чего-то недоговариваете
14 Лиза777
 
25.04.18
13:27
(11) ок, спс
15 Лиза777
 
25.04.18
13:29
(13) я название и копировала и пробовала менять. Может чего-то не договариваю, только пока не пойму чего
16 Злопчинский
 
25.04.18
13:29
а должно быть вот так
МойСправочник = СоздатьОбъект("Справочник.Товары");

МойСписок = СоздатьОбъект("СписокЗначений");

МойСправочник.НайтиПоКоду("284");  
МойСписок.ДобавитьЗначение(МойСправочник.ТекущийЭлемент());    

МойСправочник.НайтиПоКоду("282");
МойСписок.ДобавитьЗначение(МойСправочник.ТекущийЭлемент());

|Элемент = Документ.МойДокумент.Товар;    
..........
|Условие (Элемент В МойСписок);
17 Злопчинский
 
25.04.18
13:30
(12) недостаточно передать в функцию ТЕКСТ запроса - текст он и есть текст. в нем нет никаких списокв и справочников.
в функцию следует передать в т.ч. и переменные, которые упоминаются в тексте запроса
18 Zmich
 
25.04.18
13:31
(12). Запрос должен выполняться в том же месте, где формируется список значений. Текст запроса - это просто строка.
19 Злопчинский
 
25.04.18
13:31
вот это:
МойСправочник.НайтиПоКоду("284");  
МойСписок.ДобавитьЗначение(МойСправочник.ТекущийЭлемент());

- быдлокод.
Не отрабатывается ситуация когда элемент не найден по коду. Пздж что такой код всегда будет найден - является всего лишь довеском к быдлокоду и ничем иным.
20 Лиза777
 
25.04.18
13:34
(8) помогло. Объявила переменную МойСписок в модуле формы и не ругается )
21 Лиза777
 
25.04.18
13:34
(18) точно!
22 Злопчинский
 
25.04.18
13:35
если надо в коде постоянно обращаться к списку каких-то значений, а в конфигурации нет подходящего объекта для хранения такого списка, то в качестве "хранилища" таких элементов можно использовать люой документ, в котором есть ТЧ Товары.

Запихнуть этот документ-контейнер в начало журнала. Какими значениями заполнит пользователь этот контейнер - то и фильтровать запрос.

А сам документ или искать или запихнгуть как ссылку в константу например (для начала)
23 Злопчинский
 
25.04.18
13:36
(21) точно не в (18), а в (17)
в (18) - опоздунец ;-)
24 Лиза777
 
25.04.18
13:36
ну да. Спасибо!!!!!
25 Злопчинский
 
25.04.18
13:41
Спасибо не надо!
надо участвовать в "Мисс бюст" нв ежегодных мистаконкрсах! ;-)
26 Джинн
 
25.04.18
13:43
(10) А зачем Вы вообще кодами пользуетесь, а не ссылками?
27 Злопчинский
 
25.04.18
13:56
(26) От бездуховности, наверное... ;-)
28 Лиза777
 
26.04.18
05:03
(25, 26) ссылками это просто ТекущийЭлемент() ? Мне кажется это будет более громоздко в памяти держать, чем просто число - код
29 Sserj
 
26.04.18
05:37
(28) А ТекущийЭлемент() в списке это на самом деле строка 9 символов.
30 Sserj
 
26.04.18
05:39
+(28) А запрос со строкой
КодЭлемента = Документ.МойДокумент.Товар.Код;

Будет соединять таблицу строк документов со таблицей справочника номенклатуры чтобы получить этот самый код.
31 Лиза777
 
26.04.18
05:49
аааа, ну значит поставлю ТекущийЭлемент(). Спасибо!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн