Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 13:54

Загрузка с Excel

Автор Ermak1985, 05 фев 2016, 11:36

0 Пользователей и 1 гость просматривают эту тему.

Ermak1985

Добрый день! Подскажите, нужно загрузить данные с Excel в справочник по условиям:
1) Если Код услуги в справочнике отсутствует то загружаем
2) Если Код услуги в файле одинаковый что и в справочнике И наименования файла отличается от наименования в справочнике то меняем на наименования который в файле

Я сделал так, попробовал сделать второе условие но почему то все равно загружает повторные
Если ПустаяСтрока(ИмяФайла) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл 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();
КонецПопытки;

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

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

// Добавить данные в табличную часть экранной формы
//Стр=ТаблицаДокумента.Добавить();

Номер = Номер + 1;
//ExcelЛист.Range(ExcelЛист.Cells(Строка,5).MergeArea.Address).Select();
//ExcelЛист.Selection.Merge();

Попытка
Если ПустаяСтрока(ExcelЛист.Cells(Строка, 2).Value) Тогда
Продолжить;
КонецЕсли;
КодУслуги=ExcelЛист.Cells(Строка, 1).Value;
Номенклатура=ExcelЛист.Cells(Строка, 2).Value;
Ценна=ExcelЛист.Cells(Строка, 3).Value;

Если Справочники.Номенклатура.НайтиПоНаименованию(КодУслуги).Пустая() Тогда
НовЭл = Справочники.Номенклатура.СоздатьЭлемент();
НовЭл.КодУслуги=КодУслуги;
НовЭл.Наименование=Номенклатура;
НовЭл.Записать();
Если Не ЗначениеЗаполнено(РегистрыСведений.ТарифыУслуги.ВыбратьПоРегистратору(НовЭл.Ссылка)) и ЗначениеЗаполнено(Ценна) Тогда
Движение = РегистрыСведений.ТарифыУслуги.СоздатьНаборЗаписей();
Движение.Отбор.Услуга.Установить(НовЭл.Ссылка);
Движение.Прочитать();
НоваяЗапись = Движение.Добавить();
НоваяЗапись.Период = ДатаДок;
НоваяЗапись.Услуга=НовЭл.Ссылка;
НоваяЗапись.Тариф=Ценна;
Движение.Записать();
КонецЕсли;
Иначе
Продолжить;
КонецЕсли;

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

КонецПопытки;
// Отобразить информацию о ходе выполнения обработки
Состояние("Обработка файла Microsoft Excel : "
+ "строка " + Строка + " из " + ExcelПоследняяСтрока);

КонецЦикла;

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


vitasw

Цитата: Ermak1985 от 05 фев 2016, 11:36Если Справочники.Номенклатура.НайтиПоНаименованию(КодУслуги).Пустая() Тогда

Цитата: Ermak1985 от 05 фев 2016, 11:36НовЭл.КодУслуги=КодУслуги;

Обяснить?

Ermak1985

Цитата: vitasw от 05 фев 2016, 13:26
Цитата: Ermak1985 от 05 фев 2016, 11:36Если Справочники.Номенклатура.НайтиПоНаименованию(КодУслуги).Пустая() Тогда

Цитата: Ermak1985 от 05 фев 2016, 11:36НовЭл.КодУслуги=КодУслуги;

Обяснить?
Получаем с файла КодУслуги
Потом проверяем Если Справочники.Номенклатура.НайтиПоНаименованию(КодУслуги).Пустая()

vitasw

Да кэп, все правильно.
Только код услуги из экселя вы пишите в реквизит КодУслуги, а поиск элемента осуществляете, почему-то, по наименованию...?

Ermak1985

Цитата: vitasw от 08 фев 2016, 13:11
Да кэп, все правильно.
Только код услуги из экселя вы пишите в реквизит КодУслуги, а поиск элемента осуществляете, почему-то, по наименованию...?
Я исправил на
Если Справочники.Номенклатура.НайтиПоРеквизиту(КодУслуги).Пустая() Тогда
как проверить 2 пункт?

vitasw

Сравнить наименования, в случае отличия - получить объект, изменить наименование, записать.

Ermak1985

Цитата: vitasw от 11 фев 2016, 16:19
Сравнить наименования, в случае отличия - получить объект, изменить наименование, записать.
Покажите на примере как это сделать

vitasw

Не имею желания.
Ошибки подправить - пожалуйста, а готовый код - за деньги.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск