Имя: Пароль:
1C
1С v8
Поиск в массиве
,
0 ejikbeznojek
 
19.11.14
13:35
Добрый день.
Помогите кто-нибудь разобраться.
1С 8.1
У меня есть некий массив ТекТ
В отладке я наблюдаю следующее

Выражение                         Значение         Тип
    ТекТ                      Массив      Массив
ТекТПолучить(1).наименование   "8033604079853"    Строка
ТекТ.Найти("8033604079853")                       Неопределенно      
Найти(Тект,"8033604079853")         0             Число


Непонятно почему не ищет в массиве, ведь отладка показывает что искомая строка есть
1 YFedor
 
19.11.14
13:37
(0) Отладка показывает, что искомой строки нет. Учи матчасть
2 ejikbeznojek
 
19.11.14
13:38
Как это?
Во 2й строчке же есть.

ТекТПолучить(1).наименование   "8033604079853"    Строка
3 YFedor
 
19.11.14
13:38
(2) Учи матчасть
4 ejikbeznojek
 
19.11.14
13:40
Подскажи хоть в каком разделе мат части учить))
5 ДемонМаксвелла
 
19.11.14
13:40
"8033604079853" это наименование элемента, а не сам элемент
6 angro
 
19.11.14
13:42
ТекТПолучить(1).наименование
откуда наименование?
7 Крошка Ру
 
19.11.14
13:44
(0) Элемент и значение элемента - это разные вещи
8 Рэйв
 
19.11.14
13:44
(6)Да там ссылка на справочник лежит.
9 ejikbeznojek
 
19.11.14
13:44
Ну это название колонки, запроса из которого получился массив.
результат=запрос.Выполнить().Выгрузить();
ТекТ=результат.НайтиСтроки(отбор);

Не пойму тогда как искать
10 Рэйв
 
19.11.14
13:44
(0)Ищи в .Найти ссылку, а не строку наименования
11 ejikbeznojek
 
19.11.14
13:47
а мне нужна не конкретная ссылка, а ссылка у которой реквизит имеет определённоё значение
12 Рэйв
 
19.11.14
13:49
(11)С массивом только перебором.
13 olegves
 
19.11.14
13:49
массив (9) ???
а тут все думают, что результат запроса сохраняется в таблицу значений
14 Рэйв
 
19.11.14
13:50
(13)Кстати да:-)
15 hhhh
 
19.11.14
13:50
(11) ну допустим, там 70 реквизитов у ссылки и 5 табличных частей тоже с реквизитами. Неужели думаете все 100 реквизитов программа будет просматривать в поисках вашей строчки?
16 Рэйв
 
19.11.14
13:52
(13)Если у теб это результат запроса. то чего бы тебе прям в запросе не найти что надо пока все поля доступны для написания условия?
17 Рэйв
 
19.11.14
13:55
(16)к (9)
18 ejikbeznojek
 
19.11.14
13:56
ну я ищу штрих-кода у товара, и штрих-код мне нужен только 1.
Штрих-кода у нас есть основные, дополнительные и временные.
Я по возможности вывожу только основной, но его может и не быть.
19 ejikbeznojek
 
19.11.14
13:58
Результат запроса это одно, а у меня отбор по результату запроса, а это массив))
20 hhhh
 
19.11.14
14:00
запрос в студию
21 ejikbeznojek
 
19.11.14
14:02
запрос=новый запрос;
    запрос.Текст="ВЫБРАТЬ
    |    ШтрихКоды.Наименование,
    |    ШтрихКоды.Владелец,
    |    ШтрихКоды.ВидШК
    |ИЗ
    |    Справочник.ШтрихКоды КАК ШтрихКоды
    |ГДЕ
    |    ШтрихКоды.Владелец В ИЕРАРХИИ(&Владелец)
    |    И ШтрихКоды.ПометкаУдаления = ложь
    |    И ШтрихКоды.ТипШК = &ТипШК";
    запрос.УстановитьПараметр("Владелец",Номенклатура);
    запрос.УстановитьПараметр("ТипШК",Перечисления.ТипыШтрихКодов.Штука);
    результат=запрос.Выполнить().Выгрузить();
22 pessok
 
19.11.14
14:04
(13) если уж придираться, то таблица значений - не что иное, как многомерный массив, сиречь матрица :)
23 Крошка Ру
 
19.11.14
14:05
(22) Матрица - однородна, таблица - нет
24 pessok
 
19.11.14
14:05
(23) это если ЯП подразумевает строгую типизацию
25 ejikbeznojek
 
19.11.14
14:06
А как по человечески код постить?
А то он у меня часто кривым вставляется сюда
26 olegves
 
19.11.14
14:06
(22) только синтаксис функции НАЙТИ у них разный...
27 spero
 
19.11.14
14:06
(21) А где ТекТ?
28 ejikbeznojek
 
19.11.14
14:07
[code]
    ТЗ=новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Номенклатура");
    ТЗ.Колонки.Добавить("ШтрихКод");
    ТЗ.Колонки.Добавить("Цена");
    
    запрос=новый запрос;
    запрос.Текст="ВЫБРАТЬ
    |    ШтрихКоды.Наименование,
    |    ШтрихКоды.Владелец,
    |    ШтрихКоды.ВидШК
    |ИЗ
    |    Справочник.ШтрихКоды КАК ШтрихКоды
    |ГДЕ
    |    ШтрихКоды.Владелец В ИЕРАРХИИ(&Владелец)
    |    И ШтрихКоды.ПометкаУдаления = ложь
    |    И ШтрихКоды.ТипШК = &ТипШК";
    запрос.УстановитьПараметр("Владелец",Номенклатура);
    запрос.УстановитьПараметр("ТипШК",Перечисления.ТипыШтрихКодов.Штука);
    результат=запрос.Выполнить().Выгрузить();
    ТНом=результат.Скопировать();
    ТНом.Свернуть("Владелец");
    сч=0;
    для Каждого СтрТ из ТНом цикл
        сч=сч+1;
        Состояние("Получение штрих-кодов и цен "+сч+" из "+ТНом.Количество());
        ОбработкаПрерыванияПользователя();
        НСтрока=ТЗ.Добавить();
        НСтрока.Номенклатура=СтрТ.Владелец;
        НСтрока.Цена=ПолучитьЦенуНоменклатуры(СтрТ.Владелец,,ТипЦен,Справочники.Валюты.НайтиПоКоду("810"),1);
        
        
        отбор=новый Структура;
        отбор.Вставить("Владелец",СтрТ.Владелец);
        ТекТ=результат.НайтиСтроки(отбор);
        
        если ТекТ.Количество()=1 тогда
            НСтрока.ШтрихКод=ТекТ.Получить(0).Наименование;
        иначе
            для жж=1 по 3 цикл
                если жж=1 тогда
                    для каждого СтрМ из ТекТ цикл
                        если СтрМ.ВидШК=Перечисления.ВидыШК.Основной Тогда
                            НСтрока.ШтрихКод=СтрМ.Наименование;
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                ИначеЕсли жж=2 тогда
                    для каждого СтрМ из ТекТ цикл
                        если СтрМ.ВидШК=Перечисления.ВидыШК.Дополнительный Тогда
                            НСтрока.ШтрихКод=СтрМ.Наименование;
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                ИначеЕсли жж=3 тогда
                    для каждого СтрМ из ТекТ цикл
                        если СтрМ.ВидШК=Перечисления.ВидыШК.Временный Тогда
                            НСтрока.ШтрихКод=СтрМ.Наименование;
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;


[/code]
29 ejikbeznojek
 
19.11.14
14:08
ну это я уже переделал на цикл, вместо найти
30 olegves
 
19.11.14
14:08
(0)Найти (Find)
Синтаксис:

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

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

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

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

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

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

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

Сервер, толстый клиент, внешнее соединение.
Примечание:

Метод эффективно использовать для поиска уникальных значений.
31 pessok
 
19.11.14
14:08
это код 1С
32 pessok
 
19.11.14
14:09
(31) к (25)
33 pessok
 
19.11.14
14:09
короче не code а 1С
34 ДемонМаксвелла
 
19.11.14
14:10
добавь колонку Наименование в ТЗ и ищи по ней
35 spero
 
19.11.14
14:10
(28) ТекТ - массив строк таблицы, а не массив строк.
36 ejikbeznojek
 
19.11.14
14:12
Какой-то у меня быдло код получился, впрочем как и обычно 8(((