Имя: Пароль:
1C
1С v8
Импорт из exel
0 Vitalii72
 
21.06.16
13:21
Доброе время суток, знаю тем много, но не смог найти решение. В общем есть таблица в exel, необходимо часть импортировать в справочник контрагенты, причём часть в реквизиты типа "наименование" и т.п., а вторую часть в табличную часть. Нашёл типовую обработку ЗагрузкаДанныхИзТабличногоДокумента, ей можно это сделать, но только в ручную выгружать в каждого контрагента, а их там тысячи 2 где то.
Подскажите пожалуйста, чем можно импортировать такую таблицу, файл известный, столбики тоже. Видел в интернете код обработки, но там видел только в реквизиты или только в табличную часть, а чтобы так в месте не смог найти.
1 Amra
 
21.06.16
13:22
Пишется за полчаса с перекурами
2 Vitalii72
 
21.06.16
13:23
Хотя бы пример схожий, дальше сам буду разбираться или почитать где )
3 Fedor-1971
 
21.06.16
14:34
(2)конфигурация на УФ или ОФ?
4 Fedor-1971
 
21.06.16
14:39
(0) идея следующая:
Находишь перебор файла Exel из 1С - гугл выдаёт кучу ссылок

Ищешь элемент в справочнике Контрагенты по нужным тебе параметрам из файла Exel
получаешь объект из ссылки на элемент
исправляешь наименование или добавляешь строку в ТЧ
записываешь объект элемента справочника.

Профит
5 Vitalii72
 
21.06.16
14:46
Вот нашёл примерно как можно выгрузить из экселя:

// Пытаемся подключиться к Excel.
Попытка

     ExcelПриложение = Новый COMОбъект("Excel.Application");
     Книга = ExcelПриложение.Workbooks.Open(ПутьКФайлу);
     Лист = Книга.WorkSheets(1);

Исключение

     Сообщить(ОписаниеОшибки());
     Возврат;

КонецПопытки;

ExcelПриложение.Application.Visible = Ложь;
ExcelПриложение.Application.DisplayAlerts = Ложь;

// По координатам "последней" ячейки (SpecialCells(11)) получаем
// количество используемых колонок и строк
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

// Указываем номер строки, с которой начинается чтение листа
НомерПервойСтроки = 1;

// Указываем номера колонок, данные из которых будем читать
КолонкаНаименованиеПолное = 2;
КолонкаАртикул = 5;
КолонкаЦена = 8;

// Добавляем номенклатуру в систему
СчетчикСтрок = НомерПервойСтроки;
Пока СчетчикСтрок <= ВсегоСтрок Цикл

     НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
     // Мы по координатам (номер строки, номер колонки) находим ячейку и читаем её значение
     НоваяНоменклатура.НаименованиеПолное = СокрЛП(Лист.Cells(СчетчикСтрок, КолонкаНаименованиеПолное).Value);
     НоваяНоменклатура.Артикул = СокрЛП(Лист.Cells(СчетчикСтрок, КолонкаАртикул).Value);
     НоваяНоменклатура.Цена = СокрЛП(Лист.Cells(СчетчикСтрок, КолонкаЦена).Value);

     Попытка
          НоваяНоменклатура.Записать();
     Исключение
          СообщениеПользователю = Новый СообщениеПользователю;
          СообщениеПользователю.Текст = "Не удалось записать номенклатуру + " + НоваяНоменклатура.НаименованиеПолное + "! " + ОписаниеОшибки();
          СообщениеПользователю.Сообщить();
     КонецПопытки;

     СчетчикСтрок = СчетчикСтрок + 1;

КонецЦикла;

// Закрываем книгу и эксель
ExcelПриложение.ActiveWorkbook.Close();
ExcelПриложение.Quit();

Сейчас ищю, как записать данные в табличную часть.
6 Vitalii72
 
21.06.16
14:47
(3) Конфигурация самописная
7 Amra
 
21.06.16
14:58
(6) Емкий ответ. С такими познаниями лучше отойти и ничего не трогать
8 Fedor-1971
 
21.06.16
14:58
(5) вместо
     НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
    // Мы по координатам (номер строки, номер колонки) находим ячейку и читаем её значение

     НоваяНоменклатура.НаименованиеПолное = СокрЛП(Лист.Cells(СчетчикСтрок, КолонкаНаименованиеПолное).Value);
     НоваяНоменклатура.Артикул = СокрЛП(Лист.Cells(СчетчикСтрок, КолонкаАртикул).Value);
     НоваяНоменклатура.Цена = СокрЛП(Лист.Cells(СчетчикСтрок, КолонкаЦена).Value);

     Попытка
          НоваяНоменклатура.Записать();
     Исключение
          СообщениеПользователю = Новый СообщениеПользователю;
          СообщениеПользователю.Текст = "Не удалось записать номенклатуру + " + НоваяНоменклатура.НаименованиеПолное + "! " + ОписаниеОшибки();
          СообщениеПользователю.Сообщить();
     КонецПопытки;

Вставь свою работу со справочником, только учти ты отыскал обработку для ОФ

(6) ну тогда сам знаешь как преобразовать найденное к условиям твоей конфигурации
9 RomaH
 
naïve
21.06.16
15:06
CSAМассив= ТекЛист.Range(ТекЛист.Cells(СтруктураЗагрузки.НачальнаяСтрока, 1), ТекЛист.Cells(СтруктураЗагрузки.ПоследняяСтрока, СтруктураЗагрузки.ПоследнийСтолбец)).Value;
            
            МассивКолонок             = CSAМассив.Выгрузить();
            ОбщееКоличествоКолонок    = CSAМассив.GetUpperBound(0);
            ОбщееКоличествоСтрок      = CSAМассив.GetUpperBound(1);
            
            ЗагрузитьДанныеИзЕкселяВДокумент(МассивКолонок,ОбщееКоличествоКолонок,ОбщееКоличествоСтрок,СтруктураЗагрузки);


вот - клиент - сервер
10 Smallrat
 
21.06.16
15:42
Макет = Новый ТабличныйДокумент;
Макет.Прочитать("d:\Книга1.xlsx");

ПостроительЗапроса = Новый ПостроительЗапроса();
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область());    
ПостроительЗапроса.Выполнить();

ВыборкаДанные = ПостроительЗапроса.Результат.Выбрать();

Пока ВыборкаДанные.Следующий() Цикл
    
    Сообщить(ВыборкаДанные.Имя);
    Сообщить(ВыборкаДанные.Количество);

КонецЦикла;


тут надо добавить только передачу файла с клиента на сервер, лень было писать
11 ДемонМаксвелла
 
21.06.16
15:45
Исправьте название темы
12 Tatitutu
 
21.06.16
16:11
Прыг-Скок...или из MS EXCEL в 1С (8.2) (открытый код)
http://catalog.mista.ru/public/399457/
13 Vitalii72
 
22.06.16
05:57
(7) Вам мозг не давит не на что? Можно подумать вы сами как родились шпили в 1с как бог ))).

(8) (9) (10) (12) Спасибо за ответы!
14 Vitalii72
 
22.06.16
14:48
(10) Ещё раз спасибо тебе, тему можно закрывать ))
Закон Брукера: Даже маленькая практика стоит большой теории.