helpf.pro
Регистрация

v8: Помогите доделать последнюю часть обработки, запутался совсем

Persempre
24.07.2012 21:50Прочитано: 3302
И так есть обработка, которая загружает данные из Excel файла в справочник "Места хранения" (который в свою очередь подчинен справочнику "Склады"). Всё хорошо в обработке она отрабатывает но отрабатывает так, что в коде у меня прописан владелец жестко, а мне хотелось бы добиться того чтоб владелец искался из колонки excel , допустим это будет колонка 2. Значения из этой колонки перебирались, находилось соответствие и оно записывалось как владелец элемента того справочника который добавляется.
обработку приложил, и как пример приложил excel
Код 1C v 8.х
 Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
// Отключение стандартной обработки
СтандартнаяОбработка = Ложь;

// Выбор файла Microsoft Excel
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыборФайла.Фильтр = "Документ Excel (*.xls)|*.xls";
ВыборФайла.ПроверятьСуществованиеФайла = Истина;
ВыборФайла.ПолноеИмяФайла = ИмяФайла;
Выбор = ВыборФайла.Выбрать();
Если НЕ Выбор Тогда

Возврат;

КонецЕсли;

ИмяФайла = ВыборФайла.ВыбранныеФайлы[0];

КонецПроцедуры

Процедура ЧтениеXLSФайла(Элемент)

Если ПустаяСтрока(ИмяФайла) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
Возврат;
КонецЕсли;

Попытка
// Загрузка Microsoft Excel
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;

Попытка
// Открытие файла Microsoft Excel
Состояние("Открытие файла Microsoft Excel...");
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
Исключение
Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;

Попытка
// Обработка файла Microsoft Excel
Состояние("Обработка файла Microsoft Excel...");
// Читаем данные первого листа книги
ExcelЛист = ExcelФайл.Sheets(1);

// Определить количество строк и колонок выбранного листа книги Excel
xlCellTypeLastCell = 11;
ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
Исключение
Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
КонецПопытки;

// Создание описателя типов для таблицы значений
КЧ = Новый КвалификаторыЧисла(15,2);
КС = Новый КвалификаторыСтроки(50);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
Массив.Очистить();
Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);

// Очистить предыдущие значения
ТаблицаДокумента.Очистить();
ТаблицаДокумента.Колонки.Очистить();

// Создать колонки табличного документа
ТаблицаДокумента.Колонки.Добавить(ExcelЛист.Cells(1, 1).Value,ОписаниеТиповС,ExcelЛист.Cells(1, 1).Value,50);
ТаблицаДокумента.Колонки.Добавить(ExcelЛист.Cells(1, 2).Value,ОписаниеТиповС,ExcelЛист.Cells(1, 2).Value,50);
ТаблицаДокумента.Колонки.Добавить(ExcelЛист.Cells(1, 3).Value,ОписаниеТиповС,ExcelЛист.Cells(1, 3).Value,50);
ТаблицаДокумента.Колонки.Добавить(ExcelЛист.Cells(1, 4).Value,ОписаниеТиповЧ,ExcelЛист.Cells(1, 4).Value,50);

// Последовательное чтение строк с выбранного листа
Для Строка = 2 По ExcelПоследняяСтрока Цикл

// Обработка нажатия Ctrl + Break
ОбработкаПрерыванияПользователя();

// Добавить данные в табличную часть экранной формы
Стр=ТаблицаДокумента.Добавить();
Попытка
Стр[0] = ExcelЛист.Cells(Строка, 1).Value;
Стр[1] = ExcelЛист.Cells(Строка, 2).Value;
Стр[2] = ExcelЛист.Cells(Строка, 3).Value;
Стр[3] = ExcelЛист.Cells(Строка, 4).Value;
Исключение
// Не редко происходит ошибка конвертации отдельной ячейки документа
Сообщить("Ошибка чтения строки файла Microsoft Excel." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
// Отобразить информацию о ходе выполнения обработки
Состояние("Обработка файла Microsoft Excel : "
+ "строка " + Строка + " из " + ExcelПоследняяСтрока);

КонецЦикла;

// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();

// Отобразить результаты загрузки в форме элемента
ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();

КонецПроцедуры // ЧтениеXLSФайла(Элемент)

Процедура ОсновныеДействияФормыСоздать(Кнопка)
//ExcelЛист = ExcelФайл.Sheets(1);
//ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
// Наименование = ExcelЛист.Cells(Строка, "Стр[1]").Value;
// Элем = Справочники.МестаХранения.НайтиПоНаименованию("Стр[1]");
// НовЭл.Владелец = ?(Элем = Неопределено, Справочники.МестаХранения.ПустаяСсылка(), Элем);


Для Каждого Стр Из ТаблицаДокумента Цикл
НовЭл = Справочники.МестаХранения.СоздатьЭлемент();
НовЭл.Наименование = Стр[2];
НовЭл.Код = Стр[0];
НовЭл.Владелец = Стр[0];//Справочники.Склады.НайтиПоКоду("СОС-01000");
НовЭл.Записать();
КонецЦикла;


КонецПроцедуры
Yandex
Возможно, вас также заинтересует
Реклама на портале
alizgo
25.07.2012 03:52Ответ № 1
Так у тебя получается, что ты в ТЧ документа грузишь строки. Лучше сделать так: данные из файла писать в массив, а потом уже работать именно с массивом, тогда можно будет нормально устанавливать соответствия
Mokey
25.07.2012 09:44Ответ № 2
Так а проблема-то в чём?
Справочники.Склады.НайтиПоКоду(Стр[0]) - разве не отрабатывает? Или в чём причина?
Persempre
25.07.2012 11:38Ответ № 3
Когда я ищу по коду то в поле Владелец записывается значение которое соответствует коду из колонки 0, а там может быть и другое значение. И когда сделал код вида
Код 1C v 8.х
 НовЭл.Владелец = Стр[1];   
или
Код 1C v 8.х
 ]НовЭл.Владелец=Справочники.Склады.НайтиПоНаименованию("Стр[1]");   
то ругается на то что поле владелец не заполнено или заполнено неверно ) что с этим делать ума не приложу, вот и помощи прошу.
А по поводу того как писать в массив я вообще не знаю, я совсем недавно начал в 1С что-то делать, совсем зеленый ещё
alizgo
25.07.2012 13:23Ответ № 4
(3) Persempre, зачем ты стр[1] в кавычки включаешь? Убери кавычки, тогда нормально искать будет
Mokey
25.07.2012 13:36Ответ № 5
(4) alizgo, правильно глаголишь, а ещё проверку на нахождение в справочнике элемента, на всякий случай, чтобы была возможность обработать случай, когда элемент не найден по коду.
alizgo
25.07.2012 15:54Ответ № 6
(5) Mokey, это с самого начала надо было сделать. Без проверок в нашем деле вообще никуда)
Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.