Имя: Пароль:
1C
 
Обойти Колонки ТЗ
,
0 myr4ik07
 
11.01.16
15:52
Добрый день. Имеется ТЗ в ней есть Динамическое количество колонок (то есть, сегодня 3, завтра 33).
Мне нужно найти в этих колонках значение булево.
Будьте добры, подсказать запросом как это сделать и в цикле?
Статично понимаю, а вот когда динамично колонки то не могу додумать.
Спасибо.
1 Garykom
 
гуру
11.01.16
15:53
а читать не пробовали? говорят помогает...
2 Lexey_
 
11.01.16
15:53
(0) Для каждого Колонка из ТЗ.Колонки Цикл
3 myr4ik07
 
11.01.16
15:56
(2)     Если ТЗ.Количество() <> 0 Тогда
        Для Каждого Строка Из ТЗ Цикл
            н = "K_Линия"+1;
            Для Каждого Колонка Из Строка[н] Цикл
            КонецЦикла;
        КонецЦикла;
    КонецЕсли;

Колонки называются у меня К_Линия1, К_Линия2 но пишет
Для Каждого Колонка Из Строка[н]
что нет такой колонки, хотя она есть
4 Garykom
 
гуру
11.01.16
15:56
(3) ыыыы
5 Heckfy
 
11.01.16
15:59
А если
Для Каждого СтрокаТЗ Из ТЗ Цикл
?
:)
6 Lexey_
 
11.01.16
16:00
(3) отладчик не здесь
7 Fish
 
11.01.16
16:01
(3) феерично.
8 Garykom
 
гуру
11.01.16
16:01
(5) а почему забыл про 2-й вложенный цикл по ТЗ.Колонки?

ЗЫ незачет...
9 Heckfy
 
11.01.16
16:02
(8) Тихо ты.. :)
Может про второй он сам дойдет. :)
10 salvator
 
11.01.16
16:04
(3) Посмотри в отладчике, что у тебя в Строка[н] и "вы понимаете теперь, чего вы натворили?" (с)
11 Garykom
 
гуру
11.01.16
16:05
и сразу ветка Помогите найти термин пригодилась ))
12 myr4ik07
 
11.01.16
16:06
(10) В отдалчик К_Линия1 то что и надо = тип строка
13 Анцеранана
 
11.01.16
16:10
Может цикл для 1 по количество колонок. Или с 0 по количество-1.?
14 myr4ik07
 
11.01.16
16:16
Так чего то я не понял

Если ТЗ.Количество()-1 <> 0 Тогда
        Для Каждого Строка Из ТЗ Цикл
            Для Каждого Колонка Из ТЗ.Колонки Цикл
            КонецЦикла;
        КонецЦикла;
    КонецЕсли;

то если мне нужно найти значение в колонках (динамических колонках) то мне не зачем перебирать строки?
15 myr4ik07
 
11.01.16
16:17
ничего не пойму как правильно искать в табличе значение в колонках и что бы вернуло строку найденную
16 AllJoke
 
11.01.16
16:18
тебе именно в колонках нужно найти значение Булево или тупо во всей ТЗ?
17 Анцеранана
 
11.01.16
16:21
Для Каждого Строка Из ТЗ Цикл
            Для Кол = 0 По  КоличествоКолонокВТЗ Цикл
                   НаимКол = "К_Линия"+Кол;
                   Сообщить(Строка[НаимКол];

что-то типа этого я имел ввиду.
18 myr4ik07
 
11.01.16
16:22
(16) в колонках, количество которых будет меняться каждый день (К_Линия1, К_Линия2, К_Линия3) в них тип Булево, вот мне и нужно найти есть ли Истина где то в этих колонках и если есть вернуть всю строку
19 AllJoke
 
11.01.16
16:23
(18) ТаблицаЗначений.Найти(ТвоёЗначениеБулево, Колонки). Посмотри в СП.
20 Heckfy
 
11.01.16
16:25
Ладно, я так понимаю с перебором не получится ТС самому разобраться.

ТаблицаЗначений (ValueTable)
Найти (Find)
Синтаксис:

Найти(<Значение>, <Колонки>)
Параметры:

<Значение> (обязательный)

Тип: Произвольный.
Искомое значение.
<Колонки> (необязательный)

Тип: Строка.
Список имен колонок, разделенных запятыми, по которым производится поиск.
Если параметр не указан, поиск осуществляется по всей таблице значений.
Значение по умолчанию: Пустая строка.
Возвращаемое значение:

Тип: СтрокаТаблицыЗначений; Неопределено.
Строка, в которой содержится искомое значение. Если значение не найдено, то возвращается значение Неопределено.
Описание:

Осуществляет поиск значения в указанных колонках таблицы значений.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Метод эффективно использовать для поиска уникальных значений.
21 AllJoke
 
11.01.16
16:25
Колонки - тип строка.
СтрокаКолонко = "";
Для Каждого кол Из ТЗ.Колонки Цикл
СтрокаКолонок = СтрокаКолонок + "," + кол.Имя;
КонецЦикла;
Как то так.
22 Garykom
 
гуру
11.01.16
16:25
(19) угу а потом менять на Ложь (удалять строку) и снова искать ))
23 Heckfy
 
11.01.16
16:25
(17) Ну чё, тоже весело
Для Каждого Строка Из ТЗ Цикл

:)
24 myr4ik07
 
11.01.16
16:26
(19) смотрел, вернет только одну строку из ТЗ, у меня может возвращаться много строк
25 myr4ik07
 
11.01.16
16:26
(20) вернет же одну строку (24)
26 AllJoke
 
11.01.16
16:27
Тогда используй НАйтиСтроки()
27 hhhh
 
11.01.16
16:27
(25) найтиСтроки тогда
28 Heckfy
 
11.01.16
16:28
ТаблицаЗначений.НайтиСтроки (ValueTable.FindRows)
ТаблицаЗначений (ValueTable)
НайтиСтроки (FindRows)
Синтаксис:

НайтиСтроки(<ПараметрыОтбора>)
Параметры:

<ПараметрыОтбора> (обязательный)

Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:

Тип: Массив.
Массив строк таблицы значений, соответствующих условиям поиска.
Замечание! Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.
Описание:

Осуществляет поиск строк таблицы значений, отвечающих заданным условиям поиска.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Метод эффективно использовать для выборки неуникальных
29 myr4ik07
 
11.01.16
16:28
вот эту беду нужно обойти - https://s.mail.ru/3hZDXeCTzMNb/img-2016-01-11-15-28-04.png
30 Heckfy
 
11.01.16
16:29
(29) Ну, у меня доступа к таким ресурсам нету. :(
31 myr4ik07
 
11.01.16
16:29
(27) (27) т.е. запихнуть в НайстиСТроки(Параметр) все Колонки?
32 myr4ik07
 
11.01.16
16:30
(30) оно просто пускает, доступа не надо
33 salvator
 
11.01.16
16:30
(31) Почитай уже в СП про этот метод.
34 myr4ik07
 
11.01.16
16:31
почитаю, а все же, как то циклом можно найти то что ищу? или запросом? Если да, дайте пример пожалуйста, хочу посмотреть как
35 Garykom
 
гуру
11.01.16
16:32
интересно а ТС в курсе что ТЗ = двумерный массив?
36 Торин
 
11.01.16
16:33
Тупо, в лоб, но работать будет...

СписокСтрок = новый СписокЗначений;
для сч1 = 0 по Тз.количество() -1 Цикл
для сч2 = 0 по Тз.колонки.количество() -1 Цикл

Если ТЗ[сч1][сч2] тогда
СписокСтрокюдобавить(ТЗ[сч1]);
конецесли

конецЦикла;

конецЦикла;
37 Торин
 
11.01.16
16:34
орфографическая ошибка -- буква ю вместо точки
38 palpetrovich
 
11.01.16
16:35
(36)  с булевым в условии надо быть осторожнее :)
39 Торин
 
11.01.16
16:35
и после СписокСтрок.добавить вставьте прервать
40 myr4ik07
 
11.01.16
16:59
Колонки = Новый Структура;
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        Колонки.Вставить(Колонка.Имя ,Истина);
    КонецЦикла;
    Найдено = ТЗ.НайтиСтроки(Колонки);

ничего не находит, хотя есть истина в одной колонке
41 AllJoke
 
11.01.16
17:02
Найдено = ТЗ.НайтиСтроки(Колонки);
Колокни - это что?????
А должна быть Структура.
42 Lexey_
 
11.01.16
17:02
(40) это код для истины во всех колонках
43 AllJoke
 
11.01.16
17:03
+ упс, неуглядел.
44 myr4ik07
 
11.01.16
17:03
(41) структура, где находиться
К_Линия1, Истина
что бы передать в параметр ТЗ.НайтиСтроки(Структура)
45 Heckfy
 
11.01.16
17:04
ИМХО, в ТЗ Истина текст, а не булево.
46 myr4ik07
 
11.01.16
17:04
(42) ну так я ищу Истину, есть ли она в колонках, если есть тогда бегом в массив, нет, пропускаться дождно и в массив не попадать
47 myr4ik07
 
11.01.16
17:05
(45)     
Колонки = Новый Структура;
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        Колонки.Вставить(Колонка.Имя ,"Истина");
    КонецЦикла;
    Найдено = ТЗ.НайтиСтроки(Колонки);

аналогично, массив пустой
48 AllJoke
 
11.01.16
17:06
НайтиСтроки ищет вроде только по одной колонке.
49 hhhh
 
11.01.16
17:07
(48) нет, не по одной. Но автору надо по ИЛИ, а она по И ищет.
50 myr4ik07
 
11.01.16
17:08
(49) и чё делать?
51 Fish
 
11.01.16
17:09
(50) Цикл в цикле уже предлагали?
52 myr4ik07
 
11.01.16
17:10
(51) да, я с циклом и пришел сюда, напишите будьте добры еще вы правильный каркас цикла для моей задаче
53 hhhh
 
11.01.16
17:10
Для Каждого Колонка Из ТЗ.Колонки Цикл
        Колонки = Новый Структура;                  
        Колонки.Вставить(Колонка.Имя ,"Истина");
        Найдено = ТЗ.НайтиСтроки(Колонки);  
    КонецЦикла;
54 Fish
 
11.01.16
17:11
(52) А чем вариант в (36) не устраивает?
55 Fish
 
11.01.16
17:12
+(54) С учётом последующих замечаний?
56 myr4ik07
 
11.01.16
17:16
(53) спасибо, огромное спасибо

Для Каждого Колонка Из ТЗ.Колонки Цикл
        Колонки = Новый Структура;                  
        Колонки.Вставить(Колонка.Имя ,Истина);
        Найдено = ТЗ.НайтиСтроки(Колонки);  
КонецЦикла;


а с перебором строк, а потом колонок + с Запросом можно справиться с данной задачой?
Каркас не сложно будет набросать еще такими способами, увы, не ммогу додумать сам, а так бы поучился в знающих людей.
Спасибо.
57 myr4ik07
 
11.01.16
17:17
(54) вариант (36) очень хорошо, хотя не пробовал, за что большое спасибо человеку но все же хотелось как то более понятнее для меня, там лабиринт какой то, это мое мнение просто.
58 Heckfy
 
11.01.16
17:56
(57) Это подойдет?:

    Для Каждого СтрокаТЗ Из ТЗ Цикл
        Для Х=0 По ТЗ.Колонки.Количество()-1 Цикл
            Сообщить(СтрокаТЗ.Получить(Х));
        КонецЦикла;
    КонецЦикла;