Обход выбора из списка
в чём заключается вопрос. Созданы документ и справочник, документ заполняется данными из экселя в табличную часть, одна из колонок должна быть связана с справочником. ну естественно я сделал тип этого столбца ссылкой на справочник, но, в чем загвоздка, все данные вводятся правильно(у которых строчный тип), а столбец с ссылочным типом не заполняется никак. пытался во время заполнения(загрузки из экселя) сразу же создавать новые значения в справочнике, но они всё равно не подставляются в ячейки, необходимо выбирать из списка(ссылающегося на справочник), но ,я думаю, сами понимаете что при загрузке таблицы в 100+ сток выбирать для каждой строки выбирать наименование из списка...немного не хорошо. ну так и в чем вопрос, есть возможность напрямую "кодово" вписывать значения в ссылочную ячейку при загрузке данных из эксель? Один вариант подсказали, вместо одной колонки,в которую вносятся данные и она же ссылается на справочник из-за которого проблемы с вводом. А разбить на 2, в одну вносить данные,как во все остальные колонки,а вторую сделать ссылочную и написать код присвоения(что б в ссылочный столбец) присваивались данные с колонки в которую данные уже ввели(параллельно создавало запись в справочнике и проверяло на уникальность), но как по мне, это лишнее действия(та и реализовать не знаю как).
&НаКлиенте
Процедура ЗагрузитьФайл(Команда)
НомерПервойСтроки = 5;
НомерПервойКолонки = 1;
КоличествоСтрокВЭксель = 0;
КоличествоКолонокВЭксель = 0;
ИмяФайла = ОткрытьExcelФайл();
//Книга = Эксель.WorkBooks.Open(ИмяФайла);
//ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".xls");
//ДвоичныеДанные = ПолучитьМакетНаСервере();
//ДвоичныеДанные.Записать(ИмяВременногоФайла);
//ДвоичныеДанные = Объект.ПолучитьМакет("Макет");
//ДвоичныеДанные.Записать(ИмяВременногоФайла);
//Подключаемся к Эксель
Попытка
Эксель = Новый COMОбъект("Excel.Application");
Эксель.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
//Открываем необходимый лист
Эксель.Sheets(1).Select(); // лист 1, по умолчанию
Исключение
//Закрываем Excel
Эксель.ActiveWorkbook.Close();
Эксель = 0;
Сообщить("Файл "+Строка(Объект.ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!");
Возврат;
КонецПопытки;
//Получим количество строк и колонок.
КоличествоСтрокВЭксель = Эксель.Cells.SpecialCells(11).Row;
КоличествоКолонокВЭксель = Эксель.Cells.SpecialCells(11).Column;
// Выделяем область на листе Эксель.
Область = Эксель.Range(Эксель.Cells(НомерПервойСтроки,НомерПервойКолонки), Эксель.Cells(КоличествоСтрокВЭксель,КоличествоКолонокВЭксель));
// Выгружаем область Эксель в двумерный массив.
Данные = Область.Value.Выгрузить();
//Отключаемся от Excel
Попытка
Эксель.DisplayAlerts = 0;
Эксель.ActiveWorkbook.Close();
Эксель.DisplayAlerts = 1;
Эксель.Quit();
Эксель = Неопределено;
Исключение
Сообщить("Не удалось отключиться от Excel - " + ОписаниеОшибки());
Возврат;
КонецПопытки;
//Далее обрабатываем на сервере полученные из Эксель данные.
ОбработатьДанныеИзЭксельНаСервере(Данные);
КонецПроцедуры
&НаСервере
Процедура ОбработатьДанныеИзЭксельНаСервере(Данные)
Счетчик = 1;
Для Индекс = 1 По Данные[0].Количество()-1 Цикл
// Заполняем таблицу значений из массива.
СтрокаТаблицаЗначенийИзЭксель = Объект.Таблица1.Добавить();
СтрокаТаблицаЗначенийИзЭксель.ОписаниеКатегории = СокрЛП(Данные[0][Счетчик]);
СтрокаТаблицаЗначенийИзЭксель.ОбщаяЗаявленнаяСтоимость = СокрЛП(Данные[5][Счетчик]);
СтрокаТаблицаЗначенийИзЭксель.СредстваАНОИРИ = СокрЛП(Данные[6][Счетчик]);
СтрокаТаблицаЗначенийИзЭксель.ПривлекаемыеСредства = СокрЛП(Данные[7][Счетчик]);
Счетчик = Счетчик + 1;
КонецЦикла;
ТаблицаЗначенийИзЭксель = Неопределено;
Сообщить("Загрузка завершена");
КонецПроцедуры
&НаКлиенте
Функция ОткрытьExcelФайл()
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = "Файл Excel (*.xls?)|*.xls?";
ДиалогВыбораФайла.Заголовок = "Выберите файл Excel";
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
//ДиалогВыбораФайла.Расширение = "json";
ДиалогВыбораФайла.ИндексФильтра = 0;
Если ДиалогВыбораФайла.Выбрать()Тогда
Возврат ДиалогВыбораФайла.ПолноеИмяФайла;
КонецЕсли
КонецФункции
Функция ПолучитьМакетНаСервере()
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
НовыйМакет = ОбработкаОбъект.ПолучитьМакет("Макет");
Возврат НовыйМакет;
КонецФункции