|
В каком универсальном объекте поискать аналог Вставить() от Соответствия | ☑ | ||
---|---|---|---|---|
0
Elkin-Palkin
23.01.17
✎
21:04
|
Задача вроде бы проста, но я где-то торможу.
У Соответствия есть отличный (для моих целей) метод Вставить(), который не добавляет новые записи, если уже существует такой ключ в Соответствии. Т.е. МоёСоответствие.Вставить(МойКлюч, МоеЗначение) гарантирует, что с одинаковым ключом не будет записей. Всё хорошо, но я потом не могу обратиться к первой записи. Т.е. нельзя написать МоёСоответвствие[1].Значение. Понятно, что я могу запомнить первый ключ и по нему обращаться в Соответствие. Можно использовать СписокЗначений, но тогда перед добавлением обязательно явно надо проверять, есть ли уже то, что я собираюсь добавить. Потому что ни Вставить(), ни Добавить() у Списка значений не делают такую проверку. Но может я плохо знаю синтаксис и есть объект, который позволяет: 1) Вставить(добавить) без дублирования по какому-то ключу 2) Хранит два значения (значение и представление значения) 3) Обратиться к первому элементу по индексу А? |
|||
1
PR
23.01.17
✎
21:05
|
Нахрена?
|
|||
2
Elkin-Palkin
23.01.17
✎
21:07
|
В отчёт надо вывести все представления, а в расшифровку только первое значение. А значения могут повторяться. Так нахрена в отчёт лепить лишнее?
|
|||
3
Cyberhawk
23.01.17
✎
21:08
|
Вставить + Свернуть
|
|||
4
Elkin-Palkin
23.01.17
✎
21:09
|
ТаблицаЗначений?
|
|||
5
Cyberhawk
23.01.17
✎
21:16
|
Список значений (выгрузить значения в массив, массив загрузить в ТЗ, ТЗ свернуть, выгрузить колонку ТЗ в массив, загрузить в список значений), бугага
|
|||
6
Лефмихалыч
23.01.17
✎
21:43
|
(0) начни с ответа на вопрос "зачем" вместо "как"
|
|||
7
Неверный Параметр И
23.01.17
✎
22:53
|
(0) Ответь сначала, что такое "первый" ключ.
|
|||
8
Torquader
24.01.17
✎
00:20
|
Во-первых, вызов по индексу доступен для структуры - если ключ строка, то проблема решена.
Во-вторых, если хочется уникальность, то индексированная таблица значений вполне подойдёт: лтзДанные=Новый ТаблицаЗначений; лтзДанные.Колонки.Добавить("Ключ"); лтзДанные.Колонки.Добавить("Значение"); // добавление значения лНовоеЗначение с ключом лНовыйКлюч лстз=лтзДанные.Найти(лНовыйКлюч,"Ключ"); Если лстз=НЕОПРЕДЕЛЕНО Тогда лстз=лтзДанные.Добавить(); лстз.Ключ=лНовыйКлюч; КонецЕсли; лстз.Значение=лНовоеЗначение; |
|||
9
Torquader
24.01.17
✎
00:23
|
P.S. забыл самое главное:
// при создании таблицы лтзДанные.Индексы.Добавить("Ключ"); // Кстати, если сделать так: лтзДанные.Индексы.Добавить("Значение"); // Можно будет перекодироваться обратно из значения в ключ: лстз=лтзДанные.Найти(лНовоеЗначение,"Значение"); Если лстз=НЕОПРЕДЕЛЕНО Тогда лБылКлюч=НЕОПРЕДЕЛЕНО; Иначе лБлыКлюч=лстз.Ключ; КонецЕсли; Ну и ложка дёгтя: В управляемых формах таблицы значений на клиенте просто нет. |
|||
10
Elkin-Palkin
24.01.17
✎
10:18
|
(7) "Первый" ключ - в данном случае "первый попавшийся" :)
|
|||
11
Elkin-Palkin
24.01.17
✎
10:47
|
Ну, если уж я начал тему, то её и закончу. Чтобы не было неопределённостей. Спасибо (8) и (9), но я, видимо, хотел перфекционизму (излишнего), поэтому этот код длинноват.
Тогда уж лучше СписокЗначений использовать с проверкой перед добавлением - есть ли такое значение в списке. Я всё-таки использовал соответствие и использовал код: Для Каждого Стр Из МоёСоответствие Цикл НужноеЗначение = Стр.Ключ; //вот и "первое попавшееся" значение Прервать; КонецЦикла; |
|||
12
Torquader
25.01.17
✎
00:59
|
(11) Только нет уверенности, что первым будет тот, кого первым добавили - создатели соответствия этого не обещали.
|
|||
13
Elkin-Palkin
25.01.17
✎
09:59
|
(12) Согласен. Но мне по-фигу. Правильно тогда было бы сказать: "мне нужен только ОДИН ИЗ", вместо "первый попавшийся"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |