Имя: Пароль:
1C
1С v8
Таблица значений
,
0 alexsandrinia
 
25.08.11
15:28
как в Таблице Значений отыскать нужный элемент?
1 Wobland
 
25.08.11
15:29
спрашивал же уже. Найти(), НайтиСтроки(), Отыскать(), ОтыскатьСтроки()
2 ДенисЧ
 
25.08.11
15:29
Найти()
3 NetDozor
 
25.08.11
15:30
ТаблицаЗначений (ValueTable)
Найти (Find)
Синтаксис:
Найти(<Значение>, <Колонки>)
Параметры:
<Значение> (обязательный)
Тип: Произвольный. Искомое значение.
<Колонки> (необязательный)
Тип: Строка. Список имен колонок, разделенных запятыми, по которым производится поиск.
Если параметр не указан, поиск осуществляется по всей таблице значений.
Значение по умолчанию: Пустая строка
Возвращаемое значение:
Тип: СтрокаТаблицыЗначений; Неопределено. Строка, в которой содержится искомое значение. Если значение не найдено, то возвращается значение Неопределено.
Описание:
Осуществляет поиск значения в указанных колонках таблицы значений.
Примечание:
Метод эффективно использовать для поиска уникальных значений.
Пример:
НайденнаяСтрока = ТаблицаЦен.Найти(ВыбТовар, "Товар");
Если НайденнаяСтрока = Неопределено Тогда
   Предупреждение("Товар не найден!");
Иначе
   ЦенаТовара = НайденнаяСтрока.Цена;
КонецЕсли;
4 kible
 
25.08.11
15:31
5 Валерьевна
 
25.08.11
15:32
а вывести на форму и путь пользователи сами ищут! Забесили эти пользователи: интерфейс непонятный, алгоритмы нелогичные, ошибок в программе много... и т.д.
6 alexsandrinia
 
25.08.11
15:35
делаю вот так


НайденнаяСтрока = ТаблЗначНУ.Найти(08.03, "СчетДтНУ");
   Если НайденнаяСтрока = Неопределено Тогда
       Предупреждение("Счет не найден!");
   Иначе
       Счет = НайденнаяСтрока.Счет; ---тут как подправить?
   КонецЕсли;
7 Wobland
 
25.08.11
15:37
(6) а это вопрос на отдельную ветку. зачем подправить?
8 zbv
 
25.08.11
15:37
(6) НайденнаяСтрока = ТаблЗначНУ.Найти(08.03, "СчетДтНУ");

- и что находит ?
9 kible
 
25.08.11
15:39
(6) Счет = НайденнаяСтрока.СчетДтНУ - Так?
10 mikecool
 
25.08.11
15:39
что за переменная 08.03?
11 alexsandrinia
 
25.08.11
15:39
(7) разобраться не могу ТаблЗначНУ.Найти(08.03, "СчетДтНУ")
первый реквизит 08.03 - значение колонки СчетДтНУ, так ведь?
в то то и дело, что не находит, а хотя есть на самом деле. видимо, перебор по всем строкам столбца СчетДтНУ надо сделать,да?
12 Валерьевна
 
25.08.11
15:39
а что у неё в значениях в колонке "СчетДтНУ" стоит число какое-то 08.03??? Она что ищет-то?
13 NetDozor
 
25.08.11
15:40
08.03 возьми в кавычки
14 Mort
 
25.08.11
15:40
Это числовая константа :) Восемь целых три сотых.
15 mikecool
 
25.08.11
15:41
(12) фигня какая-то ))
что пьешь? )
16 Валерьевна
 
25.08.11
15:41
Если предопределенный счет, то надо искать Планысчетов.Налоговый.БлаБлаБла
17 alexsandrinia
 
25.08.11
15:41
(12) - нужно найти счет 08.03 в колонке СчетДтНУ
18 mikecool
 
25.08.11
15:41
(17) учитывай типы при поиске
19 zbv
 
25.08.11
15:41
(11) Какой тип данных хранится в колонке "СчетДтНУ" ?
20 Валерьевна
 
25.08.11
15:42
(13)> 08.03 возьми в кавычки
даже два раза не поможет, если там не строка
21 NetDozor
 
25.08.11
15:43
(20) да я уж понял что маленько не того сморозил :)
22 alexsandrinia
 
25.08.11
15:43
(19) тип - КолонкаТаблицыЗначений
23 zbv
 
25.08.11
15:44
(22) не смешно.
24 Mort
 
25.08.11
15:44
(22) ААААА!!! Какой отжиг!
25 kible
 
25.08.11
15:44
(22) ТаблЗначНУ.Найти(Планысчетов.Налоговый.БлаБлаБла, "СчетДтНУ") Так попробуй.
26 NetDozor
 
25.08.11
15:45
попробуй так еще:

НайденнаяСтрока = ТаблЗначНУ.Найти(ПланыСчетов.Налоговый.НайтиПоКоду("08.03"), "СчетДтНУ");
27 Mort
 
25.08.11
15:46
Света Семененко вернулась
28 Rovan
 
гуру
25.08.11
15:46
(+24) гыыы !

(25) счас скажет, что поле БлаБлаБла не найдено !!
29 Валерьевна
 
25.08.11
15:46
(25) нет! что ты!!! так тоже не поможет. Мне кажется она не сможет вместо блаблабла подставить имя предопределенного счета
30 kible
 
25.08.11
15:46
(28) :)
31 kible
 
25.08.11
15:47
(29) Это он.
32 Быдлокодер 80 lvl
 
25.08.11
15:47
(4) Хаха, + 100!
33 alexsandrinia
 
25.08.11
15:48
пишет, что счет такой не  найден
34 alexsandrinia
 
25.08.11
15:49
а как сделать поиск по всем строкам этого столбца? у меня, по ходу, всего лишь по одной строке обходит...
35 NetDozor
 
25.08.11
15:49
какой такой, полный текст ошибки в студию можно
36 kible
 
25.08.11
15:50
(34) найти ищет по всем строкам.
37 alexsandrinia
 
25.08.11
15:51
делаю вот так


НайденнаяСтрока = ТаблЗначНУ.Найти(ПланыСчетов.Налоговый.ВложенияВоВнеоборотныеАктивы, "СчетДтНУ");
   Если НайденнаяСтрока = Неопределено Тогда
       Предупреждение("Счет не найден!");
   Иначе
       Счет = НайденнаяСтрока.СчетДтНУ;
   КонецЕсли;


и выходит сообщение "Счет не найден!", поскольку НайденнаяСтрока = Неопределено и конец программы
38 Валерьевна
 
25.08.11
15:51
очень неконфиликтный и стрессоустойчивый тип. Это хорошо :).
39 Rovan
 
гуру
25.08.11
15:52
(37) посмотри значение
ТаблЗначНУ.Количество()
40 kible
 
25.08.11
15:52
(37) не значит нет этого счета в ТЗ
41 zbv
 
25.08.11
15:52
(37) откуда взялась ТаблицаЗначений ?
42 Sersh
 
25.08.11
15:53
ТаблЗначНУ.ВыбратьСтроку()
43 mikecool
 
25.08.11
15:54
(38) тип значения в ТЗ? )
44 NetDozor
 
25.08.11
15:54
и все-таки с типом данных в колонке "СчетДтНУ" надо разобраться, может там и вправду строка
45 Wobland
 
25.08.11
15:54
(38) это ты про (19)?
46 alexsandrinia
 
25.08.11
15:54
(39) значение - 91, тип - число
47 Валерьевна
 
25.08.11
15:55
(37) отладчиком сумеешь воспользоваться? остановись в строке  "Если НайденнаяСтрока = Неопределено Тогда" и сделай ....  так блин... я зависла как объяснить, что ему надо ТаблЗначНУ Показать в табло... Объясните за меня. Там за одно и типы значений подсмотрит
48 salvator
 
25.08.11
15:55
(38) Смотри, сейчас напишет что все тут холопы, что пишем ересь (с)
49 alexsandrinia
 
25.08.11
15:55
(41) в таблицу значений закинул запрос (вернее, выгрузил в него)
50 alexsandrinia
 
25.08.11
15:56
(48) всё нормально, без паники, господа)))
51 Sersh
 
25.08.11
15:56
смотри ТипЗнч(ТаблЗначНУ[0].СчетДтНУ)
52 alexsandrinia
 
25.08.11
15:57
(51) как мне это сделать?
53 zbv
 
25.08.11
15:58
(49) покажи запрос.
54 alexsandrinia
 
25.08.11
15:58
домой пора, завтра только смогу проверить((((
55 Sersh
 
25.08.11
15:58
НайденнаяСтрока = ТаблЗначНУ.Найти(ПланыСчетов.Налоговый.ВложенияВоВнеоборотныеАктивы, "СчетДтНУ");
   Если НайденнаяСтрока = Неопределено Тогда
       Предупреждение(ТипЗнч(ТаблЗначНУ[0].СчетДтНУ));
       Предупреждение("Счет не найден!");
   Иначе
       Счет = НайденнаяСтрока.СчетДтНУ;
   КонецЕсли;
56 alexsandrinia
 
25.08.11
15:59
(53)

ЗапросНУ = Новый Запрос;
   ЗапросНУ.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
                    |    СоответствиеСчетовБУиНУ.СчетБУ КАК СчетБУ_НУ,
                    |    СоответствиеСчетовБУиНУ.СчетНУ КАК СчетНУ_НУ,
                    |    НУ.Организация КАК ОрганизацияНУ,
                    |    НУ.СчетДтНУ КАК СчетДтНУ,
                    |    НУ.СчетКтНУ КАК СчетКтНУ,
                    |    НУ.ВидУчетаДтНУ КАК ВидУчетаДтНУ,
                    |    НУ.ВидУчетаКтНУ КАК ВидУчетаКтНУ,
                    |    НУ.СуммаНУ
                    |ИЗ
                    |    (ВЫБРАТЬ
                    |        ОтражениеЗарплатыВРеглУчете.Организация.Ссылка КАК Организация,
                    |        Налоговый.СчетДт КАК СчетДтНУ,
                    |        Налоговый.СчетКт КАК СчетКтНУ,
                    |        Налоговый.ВидУчетаДт КАК ВидУчетаДтНУ,
                    |        Налоговый.ВидУчетаКт КАК ВидУчетаКтНУ,
                    |        СУММА(Налоговый.Сумма) КАК СуммаНУ
                    |    ИЗ
                    |        РегистрБухгалтерии.Налоговый КАК Налоговый
                    |            ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтражениеЗарплатыВРеглУчете КАК ОтражениеЗарплатыВРеглУчете
                    |            ПО Налоговый.Регистратор = ОтражениеЗарплатыВРеглУчете.Ссылка
                    |    ГДЕ
                    |        ОтражениеЗарплатыВРеглУчете.Проведен = ИСТИНА
                    |        И ОтражениеЗарплатыВРеглУчете.ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода
                    |        И Налоговый.Период МЕЖДУ &НачалоПериода И &КонецПериода
                    |    
                    |    СГРУППИРОВАТЬ ПО
                    |        ОтражениеЗарплатыВРеглУчете.Организация.Ссылка,
                    |        Налоговый.ВидУчетаКт,
                    |        Налоговый.СчетКт,
                    |        Налоговый.ВидУчетаДт,
                    |        Налоговый.СчетДт) КАК НУ
                    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеСчетовБУиНУ КАК СоответствиеСчетовБУиНУ
                    |        ПО НУ.СчетДтНУ = СоответствиеСчетовБУиНУ.СчетНУ
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |    ОрганизацияНУ,
                    |    СчетДтНУ.Код,
                    |    ВидУчетаДтНУ,
                    |    СчетКтНУ.Код,
                    |    ВидУчетаКтНУ";
57 Валерьевна
 
25.08.11
15:59
(52) ТаблЗначНУ.Количество() это он значит посмотрел, дал ответ в (46), а теперь прикидывается, что не умеет посомтреть ТипЗнч(ТаблЗначНУ[0].СчетДтНУ). тема - развод.
58 alexsandrinia
 
25.08.11
16:00
(55)  план счетов.план счетов налогового учета
59 Sersh
 
25.08.11
16:01
(55) значит нет такого в тз
60 Sersh
 
25.08.11
16:04
в (11) ищешь счет 08.03, а в (37) счет 08
61 Валерьевна
 
25.08.11
16:05
(56) а ты вообще результат запроса своего хотя бы в консоли отчетов видел? ты там что зачем соединяешь?
62 Sersh
 
25.08.11
16:06
из (11) следует что нужно искать ПланыСчетов.Налоговый.СтроительствоОбъектовОсновныхСредств
63 Валерьевна
 
25.08.11
16:13
не, ну просто из регистра налоговый можно напрямую получить Организацию, зачем присобачивать реквизит Организация из документа ОТражениеЗпВреглУчете, уже запрос меньше будет.
64 Валерьевна
 
25.08.11
16:14
может тебе просто надо, чтобы регистраторами были только документы ОтражениеЗПВРеглУчете?
65 alexsandrinia
 
26.08.11
11:47
(64) оставил только этот документ регистратором, всё равно получается (55)
66 alexsandrinia
 
26.08.11
11:58
НайденнаяСтрока = ТаблЗначНУ.Найти(ПланыСчетов.Налоговый.ВложенияВоВнеоборотныеАктивы.Код, "СчетДтНУ");
   Если НайденнаяСтрока = Неопределено Тогда
       Предупреждение(ТипЗнч(ТаблЗначНУ[0].СчетДтНУ));
       Предупреждение("Счет не найден!");
   Иначе
       Счет = НайденнаяСтрока.СчетДтНУ;
       Сообщить(Счет);
   КонецЕсли;



хотя, когда в отладчике смотрю значение "ПланыСчетов.Налоговый.ВложенияВоВнеоборотныеАктивы.Код" пишет значение "08", тип строка
67 alexsandrinia
 
26.08.11
12:32
есть у кого какие-нибудь мысли?
68 alexsandrinia
 
26.08.11
13:37
можно как-нибудь сделать поиск или нет?
69 ДенисЧ
 
26.08.11
13:38
(68) Можно. Но у тебя не получится.
70 alexsandrinia
 
26.08.11
13:39
(69) почему не получится?
71 NetDozor
 
26.08.11
13:40
Вот так наверно все-таки надо сделать:
НайденнаяСтрока = ТаблЗначНУ.Найти(ПланыСчетов.Налоговый.СтроительствоОбъектовОсновныхСредств, "СчетДтНУ");
72 alexsandrinia
 
26.08.11
13:48
(71)
73 alexsandrinia
 
26.08.11
13:49
(71) спасибо, всё заработало. только выводит одну строку с таким счётом, хотя там их 4
74 ДенисЧ
 
26.08.11
13:50
(73) используй НайтиСтроки()
75 alexsandrinia
 
26.08.11
13:51
(73) {Форма.ФормаОтчета(253)}: Слишком много фактических параметров
   НайденнаяСтрока = ТаблЗначНУ.НайтиСтроки(ПланыСчетов.Налоговый.СтроительствоОбъектовОсновныхСредств, "СчетДтНУ");
76 Wobland
 
26.08.11
13:52
(75) обратись к ДенисЧ, у него сегодня скидки ;)
77 alexsandrinia
 
26.08.11
13:53
(74) ошибка получается)))
78 ДенисЧ
 
26.08.11
13:54
(77) Купи у меня СП. И курсы по умению его читать.
(76) Для автора - наценка. И немаленькая.
79 NetDozor
 
26.08.11
13:54
ну посмотри уже в СП, вот что там написано:

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

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

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

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

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

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

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

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

Метод эффективно использовать для выборки неуникальных значений.
Пример:

// СписокРаботников - реквизит формы для представления информации
// о работниках (тип ТаблицаЗначений).
// В форме расположено табличное поле СписокРаботников, в котором
// показываются данные СписокРаботников.
// С помощью запроса выбирается информация о работниках.
Запрос = Новый Запрос;
ТекстЗапроса =
   "ВЫБРАТЬ
   // текст запроса
   // ...
   ";
Запрос.Текст = ТекстЗапроса;
СписокРаботников = Запрос.Выполнить().Выгрузить();
Отбор = Новый Структура();
Отбор.Вставить("ФизЛицо",Справочники.ФизическиеЛица.ПустаяСсылка());
Строки = СписокРаботников.НайтиСтроки(Отбор);
Если Строки.Количество() > 0 Тогда
   ЭлементыФормы.СписокРаботников.ТекущаяСтрока = Строки[0];
КонецЕсли;