Имя: Пароль:
1C
1С v8
ЗначениеВСтрокуВнутр() и запрос...
,
0 ДенисЧ
 
12.05.16
08:55
Попалась тут конфа, где один реквизит хранится как СписокЗначений через ЗначениеВСтрокуВнутр() (да, надо расстрелять, но временный дефицит патронов...)

Хочется как-то запросом получить все документы, где этот список содержит 0 значений...
Это реально? Или перебирать все документы (а их порядочно...) ?
1 sapphire
 
12.05.16
08:56
(0) Реально.
2 Bigbro
 
12.05.16
08:57
одинаковая же строка будет для пустого списка?
3 ДенисЧ
 
12.05.16
08:58
(2) (1) предлагаете в запросе строку потрошить?
4 Guk
 
12.05.16
09:00
(3) видимо предлагают установить как параметр...
5 sapphire
 
12.05.16
09:01
(3) передать в качестве параметра
6 ДенисЧ
 
12.05.16
09:01
(4) (5) Что конкретно я буду передавать в качестве параметра?
Научите...
7 Guk
 
12.05.16
09:02
(6) ЗначениеВСтрокуВнутр(Новый СписокЗначений)
что-то типа этого...
8 lubitelxml
 
12.05.16
09:03
(7) опередил )
(6) попробуй как в (7) - самому интересно прокатит или нет
9 ДенисЧ
 
12.05.16
09:03
Щаз проверю....
10 ДенисЧ
 
12.05.16
09:04
Неа...
Не прокатывает...
Ни через равно, ни через подобно не находит...
Строка неограниченной длины, если что
11 lopus
 
12.05.16
09:06
Может через Выразить
12 ДенисЧ
 
12.05.16
09:07
(11) ВЫРАЗИТЬ КАК СТрока(1000) изначально стоит.
13 lubitelxml
 
12.05.16
09:08
запрос к сз?
14 ДенисЧ
 
12.05.16
09:09
(13) к тч документа
15 ИсчадиеADO
 
12.05.16
09:10
если уж как параметр то значениеизстрокивнутр...

иначе никак
16 lubitelxml
 
12.05.16
09:10
(14) я имел ввиду что ты можешь запросом получить количество элементов в списке значений
17 ИсчадиеADO
 
12.05.16
09:12
придется запросом получать выборку тч, формировать таблицу и передават  ее параметром в запром обратно
18 ИсчадиеADO
 
12.05.16
09:15
тьфу, задачу не дочитал...
19 ДенисЧ
 
12.05.16
09:16
(16) Расскажи, как в зпросе это сделать
20 RomanYS
 
12.05.16
09:18
(10) может не таких?
21 RomanYS
 
12.05.16
09:18
(20) *нет
22 ДенисЧ
 
12.05.16
09:21
(20) Как минимум один есть, это точно
23 lubitelxml
 
12.05.16
09:22
24 RomanYS
 
12.05.16
09:22
(22) покажи строку оттуда
25 ДенисЧ
 
12.05.16
09:24
(24) Обработка закончится - покажу
26 Bigbro
 
12.05.16
09:24
может список не пустой, а содержит пустое значение?
27 mehfk
 
12.05.16
09:24
сз = Новый СписокЗначений;
Стр1 = ЗначениеВСтрокуВнутр(сз);
сз.Добавить("");
сз.Очистить();
Стр2 = ЗначениеВСтрокуВнутр(сз);

Стр1 != Стр2 :)
28 ДенисЧ
 
12.05.16
09:24
(23) Ты заблудился. У меня нет как такового списка. Есть строка, которая преобразовывается в списо
29 ДенисЧ
 
12.05.16
09:25
(26) Количество() = 0
30 gigi789
 
12.05.16
09:27
(29) может типизация значения??
31 lubitelxml
 
12.05.16
09:28
(28) в сторону длины строки не копал?
32 ДенисЧ
 
12.05.16
09:28
(31) Я и через ПОДОБНО делал
(30) Шта?
33 gigi789
 
12.05.16
09:30
(32) сп=Новый СписокЗначений;    
сп.ТипЗначения=Новый ОписаниеТипов("Строка");
34 ДенисЧ
 
12.05.16
09:31
(24)
"{""#"",4772b3b4-f4a3-49c0-a1a5-8cb5961511a3,
{6,1e512aab-1b41-4ef6-9375-f0137be9dd91,0,0,
{0},
{""Pattern""},0,-1}
}"
35 mehfk
 
12.05.16
09:31
(27)+
Стр3 = СтрЗаменить(Стр2, Символы.ПС, "");
сз2 = ЗначениеИзСтрокиВнутр(Стр3);
36 RomanYS
 
12.05.16
09:34
(34) совпадает с (7)
Почему подобно не работает? может "{" или "#" нельзя в подобно?
37 ДенисЧ
 
12.05.16
09:35
(36) В справке нет упоминаний
38 patapum
 
12.05.16
09:35
(34) А получается поймать четкое различие между строкой списка без элементов и с элементами? Типа количества открывающихся скобок?
Если найдется, то можно ловить. Запрос скульный хоть, не клюшечный?
39 ДенисЧ
 
12.05.16
09:37
(38) запрос снеговичный, разумеется
40 lubitelxml
 
12.05.16
09:39
сравнивай длину строк и будет тебе счастье.
41 patapum
 
12.05.16
09:41
(39) Ну, в нем на условиях можно писать функции. То есть определить количество некоторого символа в строке как фильтр должно проканать. Кстати, может (40) реально сработает?
А почему жесткое условие именно запросом вырезать, а не постобработкой?
42 RomanYS
 
12.05.16
09:41
попробуй

где подстрока(твоястрока,113,1) = ""
43 Бледно Золотистый
 
12.05.16
09:43
(39) Только что попробовал, все отбирает нормально.

И (ВЫРАЗИТЬ(МойДокумент.Комментарий КАК СТРОКА(1000))) = &СтрокаВнутр

Запрос.УстановитьПараметр("СтрокаВнутр", ЗначениеВСтрокуВнутр(Новый СписокЗначений));
44 ДенисЧ
 
12.05.16
09:44
(41) Я просто хотел найти такие документы. В коде, где надо, условия уже стоят.
(43) Я через консоль делал.
45 patapum
 
12.05.16
09:44
+(41) Сорри, снеговичный??? Насчет функций погорячился.
Что-то я по теме решил, что это все в клюшках. Зачем в снеговике такое монстрячить... эх...
46 ДенисЧ
 
12.05.16
09:44
Ладно, всем спасибо.
47 gigi789
 
12.05.16
09:48
(44) пс убрал скорее всего
48 catena
 
12.05.16
09:48
По-моему, по 94 символ пустые должны совпадать. Там где {0} - количество элементов.

Вот так все три пустых у меня находятся...

    Запрос = Новый Запрос;
    
    Запросы = "
    |ВЫБРАТЬ
    |    тз.НомерСтр,
    |    тз.Список
    |ПОМЕСТИТЬ тз
    |ИЗ
    |    &тз КАК тз
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    тз.НомерСтр,
    |    &ПустойСп,
    |    тз.Список
    |ИЗ
    |    тз КАК тз
    |ГДЕ
    |    Подстрока(тз.Список,1,94) = Подстрока(&ПустойСп,1,94)
    |    
    |";
    
    
    Параметр = Новый ТаблицаЗначений;
    Параметр.Колонки.Добавить("НомерСтр",ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(5));
    Параметр.Колонки.Добавить("Список",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(200));
    
    стр = Параметр.Добавить();
    стр.НомерСтр = 1;
    стр.Список = ЗначениеВСтрокуВнутр(Новый СписокЗначений);
    
    стр = Параметр.Добавить();
    стр.НомерСтр = 2;
    сп = Новый СписокЗначений;
    сп.Добавить(33);
    стр.Список = ЗначениеВСтрокуВнутр(сп);
    
    стр = Параметр.Добавить();
    стр.НомерСтр = 3;
    сп = Новый СписокЗначений;
    сп.Добавить(33);
    сп.Очистить();
    стр.Список = ЗначениеВСтрокуВнутр(сп);
    
    стр = Параметр.Добавить();
    стр.НомерСтр = 4;
    сп = Новый СписокЗначений;
    сп.ТипЗначения = Новый ОписаниеТипов("Строка");
    стр.Список = ЗначениеВСтрокуВнутр(сп);
    
    Запрос.УстановитьПараметр("тз", Параметр);
    сп = Новый СписокЗначений;
    сп.ТипЗначения=Новый ОписаниеТипов("Строка");
    Параметр = Лев(ЗначениеВСтрокуВнутр(сп),200);
    Запрос.УстановитьПараметр("ПустойСп", Параметр);
    
    Запрос.Текст = Запросы;
    РЗ = Запрос.Выполнить();
49 hhhh
 
12.05.16
10:02
(48) да не будет работать

    сп = Новый СписокЗначений;

надо именно тот старый список значений. У него гуид другой.
50 Бледно Золотистый
 
12.05.16
10:03
51 Ёпрст
 
12.05.16
10:16
Вот до чего продажа СП доводит!
52 lubitelxml
 
12.05.16
10:27
(51) он походу пропил его просто за майские )))
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.