Имя: Пароль:
1C
1С v8
добавление элементов в справочник из массива, без повторов
0 r2d24
 
15.11.13
16:02
думаю над задачкой:
есть массив, в нем хранится строки со значениями. Нужно добавить в справочник "Качество" новые значения из массива, но только что бы добавлялись без повторов.

масс = новый Массив;
масс.Добавить("плохое");
масс.Добавить("отличное");
масс.Добавить("плохое");
масс.Добавить("старое");
масс.Добавить("большое");
масс.Добавить("старое");
масс.Добавить("большое");
масс.Добавить("отличное");
масс.Добавить("большое");
масс.Добавить("старое");
для каждого мас1 из масс Цикл
    Сообщить(мас1);
    Запр=новый Запрос;
    запр.Текст="ВЫБРАТЬ
               |    Качество.Наименование
               |ИЗ
               |    Справочник.Качество КАК Качество
               |ГДЕ
               |    Качество.Наименование ПОДОБНО &Наименование";
    Запр.УстановитьПараметр("Наименование", + мас1);
    Рез = Запр.Выполнить().Выбрать();
    Если Рез.Пустой() Тогда
        НовКач=Справочники.Качество.СоздатьЭлемент();
        НовКач.Наименование=мас1;
        НовКач.Записать();
    КонецЕсли;                     
КонецЦикла;
1 r2d24
 
15.11.13
16:02
(0) выдается ошибка
преобразование значения к типу число не может быть выполнено
2 Зойч
 
15.11.13
16:03
Если НайтиПоНаименованию().Пустая() Тогда Добавить()
3 Maxus43
 
15.11.13
16:04
Запр.УстановитьПараметр("Наименование", "%"+мас1+"%");
4 lordmb
 
15.11.13
16:07
(1)
>>>Рез = Запр.Выполнить().Выбрать();

убери .Выбрать*()

т.е. надо

Рез = Запр.Выполнить();
5 Поросенок Петр
 
15.11.13
16:14
Т.е. запрос в цикле никого не смутил? Ну ладно...
6 vicof
 
15.11.13
16:16
(0) Я вообще не понял, зачем добавлять в массив кучу задвоенных позиций
(5) +1
7 User_Agronom
 
15.11.13
16:17
(5) Я тоже про запрос в цикле подумал
8 exwill
 
15.11.13
16:17
(5) Ну какой там цикл? Ну не больше словаря синонимов.
9 МойКодУныл
 
15.11.13
16:18
Создаешь ТЗ с нужным количество строк, загружаешь колонку, сворачиваешь.

ТаблицаЗначений (ValueTable)
ЗагрузитьКолонку (LoadColumn)
Синтаксис:

ЗагрузитьКолонку(<Массив>, <Колонка>)
Параметры:

<Массив> (обязательный)

Тип: Массив.
Массив значений, который выступает в качестве источника данных для колонки.
<Колонка> (обязательный)

Тип: Число; Строка; КолонкаТаблицыЗначений.
Колонка, в которую будут загружены значения из массива. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка.
Описание:

Загружает колонку таблицы значений из массива значений.

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

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

Значения из массива загружаются в колонку в порядке индексов.
Пример:

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

// Создадим пустые строки таблицы
Для Н=1 По СтрокиДереваЗначений.Количество() Цикл
    ТаблицаРезультат.Добавить();
КонецЦикла;

// Скопируем значения колонок
Для каждого ИмяКолонки Из МассивИменКолонок Цикл
    ЗначенияКолонки = СтрокиДереваЗначений.ВыгрузитьКолонку(ИмяКолонки);
    ТаблицаРезультат.ЗагрузитьКолонку(ЗначенияКолонки, ИмяКолонки);
КонецЦикла;
10 Мимохожий Однако
 
15.11.13
16:19
(6)Задвоенные позиции для тестирования.ИМХО.
11 МойКодУныл
 
15.11.13
16:19
это конечно,если справочник пуст)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший