Имя: Пароль:
1C
1С v8
1C V8 сравнение с множеством
0 technik-1c
 
21.01.16
14:13
Есть ли языке в 1С v8 :
1) Оператор сравнения с множеством (или вхождения в перечисление)

Если Условие IN (1,2,3,4) Тогда
или
Если Условие IN ("1","2","3","4") Тогда

2) Оператор CASE
ВЫБОР Условие Для
1 :
2 :


Спасибо.
1 FIXXXL
 
21.01.16
14:14
в запросе есть
2 butterbean
 
21.01.16
14:14
нет
3 chelentano
 
21.01.16
14:14
да и не только в запросе
4 Nuobu
 
21.01.16
14:15
(0)
Массив = Новый Массив();
Массив.Добавить(1);
Массив.Добавить("1");
Массив.Добавить(2);
Массив.Добавить("2");
Массив.Добавить(3);
Массив.Добавить("3");

Массив.Содержит(3);
5 technik-1c
 
21.01.16
14:15
(1) Спасибо.А в языке 1С?
6 Волшебник
 
модератор
21.01.16
14:15
1) Если Массив.Найти(Условие) <> Неопределено Тогда

2) только ИначеЕсли
7 technik-1c
 
21.01.16
14:17
(4)(6) Спасибо.

Можно ли задать значения всего массива одной строкой
(1,2,3,4)?
8 Nuobu
 
21.01.16
14:20
(7) нет, но можно написать функцию в глобальном модуле.

Функция СоздатьМассив(ЗначРаз = Неопределено, ЗначРазРаз = 0, ЗначТриРаза = "")
Массив = Новый Массив;
Если ЗначениеЗаполнено(ЗначРаз) Тогда
Массив.Добавить(ЗначРаз);
КонецЕсли;
Возврат Массив;
КонецФункции
9 Волшебник
 
модератор
21.01.16
14:20
(7)
Массив.Добавить(1); Массив.Добавить(2); Массив.Добавить(3);
10 Кирпич
 
21.01.16
14:22
Если СтрНайти("1234","3") <> 0 Тогда
11 oslokot
 
21.01.16
14:22
(9) бгг)
12 Garykom
 
гуру
21.01.16
14:24
(10) а терь плиз для дву...N-значных чисел?
13 Nuobu
 
21.01.16
14:25
(12) Если СтрНайти("12,34","34") <> 0 Тогда
14 Кирпич
 
21.01.16
14:25
(12)
Если СтрНайти("1.2.3.4.99","99") <> 0 Тогда
15 Garykom
 
гуру
21.01.16
14:26
(13) (14) а теперь для дробных?
16 Garykom
 
гуру
21.01.16
14:27
(15)+ и вы не думайте... я на этом "собаку съел", уже еще 3 пункта подготовлено...
17 Nuobu
 
21.01.16
14:28
(15) Если СтрНайти("1.2,33.4,99.33","99.33") <> 0 Тогда
18 Кирпич
 
21.01.16
14:28
(15) сам придумай, если не тупой
19 Garykom
 
гуру
21.01.16
14:28
(18) json
20 Кирпич
 
21.01.16
14:31
(19) что json?
21 Garykom
 
гуру
21.01.16
14:33
(20) json - это строка
22 НЕА123
 
21.01.16
14:33
(7)
частенько в 1С используют
Новый Структура("Эл1,Эл2,Эл3",1,2,3);
неудобства
ключ д.б. идентификатором,
надо указывать значения в обязах, т.к. есть только метод Свойство()
23 Nuobu
 
21.01.16
14:35
(22) Как этим пользоваться для поиска?
24 НЕА123
 
21.01.16
14:40
сорри в (22) соврал.
Свойство() возвращает Булево. так что значения необязательно.


(23)
Структ = Новый Структура("Эл1,Эл2,Эл3");

если Структ.Свойство("Эл1") Тогда //есть такое
....
25 Кирпич
 
21.01.16
14:42
(21) ну все как бы в курсе что это строка. какое это отношение к теме имеет непонятно.
26 ObjectRelation Model
 
21.01.16
14:43
даешь LINQ в 1С
27 Nuobu
 
21.01.16
14:46
(24) Лучше уже соответствие.
28 Garykom
 
гуру
21.01.16
14:54
(25) в json массивы есть, с разными типами значений
поэтому можно юзать формат (готовый) для реализации "множеств"
29 Nuobu
 
21.01.16
14:58
(28) В 1С они тоже есть.
30 Кирпич
 
21.01.16
15:01
(28) спасибо. я как нибудь по проще с четырьмя цифрами справлюсь.
31 Garykom
 
гуру
21.01.16
15:04
(30) да согласен можно и проще, просто если есть готовый формат почему бы не юзать?

а то потом еще что то захочется и снова свой лисапед придется изобретать ;)
32 Кирпич
 
21.01.16
15:19
(31) да вроде изобретать то нечего. секундное дело.
33 ejikbeznojek
 
21.01.16
15:25
А давайте извращаться?

ТЗ=новый ТаблицаЗначений;
    тз.Колонки.Добавить("СтрокиИщемТут", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(10)));
    
    СтрТЗ=тз.Добавить();
    СтрТЗ.СтрокиИщемТут="ыы";
    
    СтрТЗ=тз.Добавить();
    СтрТЗ.СтрокиИщемТут="уу";
    
    СтрТЗ=тз.Добавить();
    СтрТЗ.СтрокиИщемТут="ыу";
    
    СтрТЗ=тз.Добавить();
    СтрТЗ.СтрокиИщемТут="уу";
    
    СЗСтрок=новый СписокЗначений;
    СЗСтрок.Добавить("ыы");
    СЗСтрок.Добавить("уу");
    
    
    запрос=новый запрос;
    Менеджер=Новый МенеджерВременныхТаблиц;
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ *    
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |    &ТЗ как ТЗ
    |;
    |Выбрать *
    | из ВТ
    |Где ВТ.СтрокиИщемТут в (&СЗСтрок)";
    Запрос.УстановитьПараметр("ТЗ",ТЗ);
    Запрос.УстановитьПараметр("СЗСтрок",СЗСтрок);
    
    Запрос.МенеджерВременныхТаблиц=Менеджер;
    
    
    
    
    
    Результат=Запрос.Выполнить().Выгрузить();
    Сообщить(Строка(Результат.Количество()));
34 ejikbeznojek
 
21.01.16
15:26
+(33) соответственно для поиска вхождений для каждого типа данных нужна будет своя колонка в ТЗ))
35 Garykom
 
гуру
21.01.16
15:35
Мне нравится что целая ветка не о чем ))

(0) в 1С для этого есть "СписокЗначений"
36 Garykom
 
гуру
21.01.16
15:36
(35)+ вместо CASE юзают

Если Условие1 Тогда
...
ИначеЕсли Условие2 Тогда
...
Иначе
...
КонецЕсли;
37 technik-1c
 
21.01.16
19:18
(все)

Буду выбирать варианты ))

(4)
Метод объекта не обнаружен (Содержит)

Наверное нужно использовать
Массив.Найти(<Значение>)