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

Загрузка из Exel в документ

Автор Рамис333, 11 авг 2017, 09:20

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

Рамис333

добрый день. нужно создать обработку по загрузке данных из Exel в табличную часть документа (номенклатура, склад, количество).
файл открывается. как дальше сделать привязку строки и колонки Exel и 1с


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

&НаКлиенте
Процедура Загрузить(Команда)
   ИмяФайла=Объект.ИмяФайла;
   ЗагрузитьДанные(ИмяФайла);   
КонецПроцедуры
   
Функция ЗагрузитьДанные(ИмяФайла)//Номер листа в книге Excel для получения данных
      
   
   НомерЛиста         = 1;
    //Пытаемся подключиться к Excel
    Попытка
        Excel = новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Похоже, Excel на компьютере не установлен. Необходимо выполнить установку/переустановку Excel.");
        Возврат Ложь;
    КонецПопытки;     
    //Подключились удачно, открываем файл
    Excel.Workbooks.Open(ИмяФайла);
    //Открываем необходимый лист
    Excel.Sheets(НомерЛиста).select();   
    //Получим количество строк и колонок.
    //В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
    Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
    Если Версия = "8" тогда
        ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
        ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
        ФайлСтрок   = Excel.Cells(1,1).SpecialCells(11).Row;
        ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;   
   Конецесли;
   
   Остатки = Документы.ВводНачальныхОстатков.СоздатьДокумент();
   Остатки.Дата = ТекущаяДата();
      
   
   Для а = 9 по ФайлСтрок Цикл           
      
      
      НоваяСтрока = Остатки.Товары.Добавить();
      
      НоваяСтрока.Номенклатура = Excel.Cells( ,2).Value;   
      НоваяСтрока.Склад        = Excel.Cells( ,2).Value;
      НоваяСтрока.Количество   = Excel.Cells( ,2).Value;   
   

      
      
   КонецЦикла;
   
         
   
   
        Остатки.Записать(РежимЗаписиДокумента.Запись);
      //Закрываем Excel
    Excel.ActiveWorkbook.Close();   
     КонецФункции

oleg-x

Цитироватьфайл открывается. как дальше сделать привязку строки и колонки Exel и 1с
Что вы имеете виду, по словом привязка?

Если имеете виду прочитать значения, то вот у Вас код, только немного не корректный:
   Для а = 9 по ФайлСтрок Цикл  //а - с какой строки читать лист.       
      НоваяСтрока = Остатки.Товары.Добавить();
     
      НоваяСтрока.Номенклатура = Excel.Cells(а,1).Value; //(а,б) - где а номер строки, которая меняется. б - номер колонки, которая фиксированная.
      НоваяСтрока.Склад        = Excel.Cells(а,2).Value;
      НоваяСтрока.Количество   = Excel.Cells(а,3).Value;   
     
   КонецЦикла;
   
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Рамис333

Цитата: oleg-x от 11 авг 2017, 10:41Что вы имеете виду, по словом привязка?

в таблице Exel есть 3 колонки: Номенклатура, Склад и количество. Данные начинаются со второй строки. в 1с в документе Ввод остатков есть табличная часть с 4 колонками: Номер строки, Номенклатура, склад и количество. обработка прочитала файл, что сделать дальше?
Добавлено: 11 авг 2017, 11:23


Цитата: oleg-x от 11 авг 2017, 10:41
Цитироватьфайл открывается. как дальше сделать привязку строки и колонки Exel и 1с
Что вы имеете виду, по словом привязка?

Если имеете виду прочитать значения, то вот у Вас код, только немного не корректный:
   Для а = 9 по ФайлСтрок Цикл  //а - с какой строки читать лист.       
      НоваяСтрока = Остатки.Товары.Добавить();
     
      НоваяСтрока.Номенклатура = Excel.Cells(а,1).Value; //(а,б) - где а номер строки, которая меняется. б - номер колонки, которая фиксированная.
      НоваяСтрока.Склад        = Excel.Cells(а,2).Value;
      НоваяСтрока.Количество   = Excel.Cells(а,3).Value;   
     
   КонецЦикла;




Для а = 2 по ФайлСтрок Цикл           
    
НоваяСтрока = Остатки.Товары.Добавить();      
      
НоваяСтрока.Номенклатура = Excel.Cells(а,1).Value;   
НоваяСтрока.Склад = Excel.Cells(а,2).Value;                   
НоваяСтрока.Количество =    Excel.Cells(а,3).Value

подправил код. количество в документ загрузилось. номенклатура и склад пустые ячейки.

oleg-x

ЦитироватьДля а = 2 по ФайлСтрок Цикл           
     
НоваяСтрока = Остатки.Товары.Добавить();     
       
НоваяСтрока.Номенклатура = Excel.Cells(а,1).Value;   
НоваяСтрока.Склад = Excel.Cells(а,2).Value;                   
НоваяСтрока.Количество =    Excel.Cells(а,3).Value


подправил код. количество в документ загрузилось. номенклатура и склад пустые ячейки.
Пустые, потому что загружается строка, число, а тебе нужна ссылка.
То есть получаешь значение и по данному значению ищешь в базе ссылку на элемент или создаешь новый.
Как то так будет:

НоваяСтрока.Склад = фСклад(Excel.Cells(а,2).Value);

Функция фСклад(НазваниеСклада)
    //Здесь твой запрос по поиску склада
    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
        Возврат ВыборкадетальныеЗаписи.Ссылка;
    Иначе
        //Создаем новый элемент или сообщаем что значение не найдено и ничего грузить не собираемся.
    КонецЕсли;
   
КонецФункции
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Теги:

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

Рейтинг@Mail.ru

Поиск