Приемы эффективной загрузки данных из Excel в 1С

Публикация № 714988

Разработка - Обмен данными 1С - Загрузка и выгрузка в Excel

Обмен загрузка Excel

Показаны приемы эффективной работы с Excel для загрузки данных в 1С.

В публикации показаны приемы по загрузке данных из файла Excel в таблицу значений..

Протестировано на версии платформы 1С:Предприятие 8.3 (8.3.9.1818).

В версии 8.3 для загрузки из Excel существует альтернатива COM объекту. У табличного документа есть метод Прочитать.

Особенно актуально для файлов больших объемов, т.к. табличный документ обрабатывается гораздо быстрее.

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

Во вложении обработка - пример загрузки и вывода в табличный документ и таблицу значений.

Рабочий код занимает несколько строк:

//Вывод в табличный документ

   ТабличныйДокумент = Новый ТабличныйДокумент;

   ТабличныйДокумент.Прочитать(Файл, СпособЧтенияЗначенийТабличногоДокумента.Значение);

//вывод в таблицу значений

   ПЗ = Новый ПостроительЗапроса;

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

   ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;

   ПЗ.ЗаполнитьНастройки();

   ПЗ.Выполнить();

   ТаблицаЗначений = ПЗ.Результат.Выгрузить();

P.S. При выводе в таблицу значений через построитель запроса, названия колонок в источнике данных должны быть первой строкой, иначе построитель не сможет получить и преобразовать их в колонки таблицы значений и выдаст ошибку.

Во внешней обработке демонстрация загрузки.

Скачать файлы

Наименование Файл Версия Размер
Приемы эффективной загрузки данных из Excel в 1С:

.epf 7,15Kb
12.12.17
107
.epf 1.0 7,15Kb 107 Скачать

Специальные предложения

Лучшие комментарии
44. ImHunter 202 17.04.18 09:25 Сейчас в теме
(0) (38) Разбивка по листам, похоже, не раскрыта?
Недавно тоже вот перешел на этот способ с ADO.
Разбивать по листам, в принципе, несложно. В загруженном ТабДоке присутствует несколько областей с названиями листов.

В итоге, получилось вот так:

///////////////////////////////////
// Работа с Excel через ТабДок

// Функция - Прочитать excel
//
// Параметры:
//  ФайлExcel - Файл, Строка	 - Объект Файл или полное имя файла.
//  ФункцияОбработкиСтрок	 - Строка, Неопределено	 - Шаблон выражения для обработки строковых значений ячеек. 
//	В шаблоне производится подстановка - вместо символа ? будет подставляться обрабатываемое значение строки.
//	Если передать Неопределено или пустую строку, то обработка производиться не будет.
//  МаксШирина				 - Число - Максимальное кол-во колонок, просматриваемых при усечении таблицы по ширине.
//  ОграничиватьСверху		 - Булево - Убирать пустые строки сверху
//  ОграничиватьСлева		 - Булево - Убирать пустые строки слева
//  ОграничиватьСнизу		 - Булево - Убирать пустые строки снизу
//  ОграничиватьСправа		 - Булево - Убирать пустые строки справа
// 
// Возвращаемое значение:
//  СписокЗначений - Список значений содержимого. Элементы списка в поле Значение содержат ячейки листа (объект ОбластьЯчеекТабличногоДокумента), в поле Представление - имя листа
//
Функция ПрочитатьExcel(ФайлExcel, ФункцияОбработкиСтрок = "СокрЛП(?)",
		ОграничиватьСверху = Истина, ОграничиватьСлева = Истина, ОграничиватьСнизу = Истина, ОграничиватьСправа = Истина) Экспорт 
	
	Ф = НовыйФайл(ФайлExcel);
	ВесьТабДок = Новый ТабличныйДокумент();
	ВесьТабДок.Прочитать(Ф.ПолноеИмя, СпособЧтенияЗначенийТабличногоДокумента.Значение);
	
	Результат = Новый СписокЗначений;
	Области = ВесьТабДок.Области;
	Если Области.Количество()=0 Тогда 
		ВызватьИсключение("В файле нет областей");
	КонецЕсли;
	
	Для Каждого Обл Из Области Цикл
		ТекТабДок = Новый ТабличныйДокумент;
		ОгрОбласть = ПолучитьОграниченнуюОбласть(ВесьТабДок, Обл);
		// вставим область в табдок
		ОгрОбласть.Имя = Обл.Имя;
		ТекТабДок.ВставитьОбласть(ОгрОбласть, 
			ТекТабДок.Область(1, ОгрОбласть.Лево, ОгрОбласть.Низ - ОгрОбласть.Верх + 1, ОгрОбласть.Право)
		);
		СократитьСтроки(ТекТабДок, ФункцияОбработкиСтрок);
		Результат.Добавить(ТекТабДок, Обл.Имя);
	КонецЦикла;
	// зачищаем исходный таб док. хз, может лишнее
	ВесьТабДок.Очистить();
	ВесьТабДок = Неопределено;
	
	Возврат Результат;
	
КонецФункции

Процедура СократитьСтроки(ТабДок, ФункцияОбработкиСтрок = "СокрЛП(?)")
	
	Если ПустаяСтрока(ФункцияОбработкиСтрок) Тогда 
		Возврат;
	КонецЕсли;
	
	Если Ложь Тогда ТабДок = Новый ТабличныйДокумент; КонецЕсли; // фейк
	
	Для Стр = 1 По ТабДок.ВысотаТаблицы Цикл 
		Для Кол = 1 По ТабДок.ШиринаСтраницы Цикл 
			ТекОбласть = ТабДок.Область(Стр, Кол);
			ТекстОбласти = ТекОбласть.Текст;
			Если Не ТекОбласть.СодержитЗначение И Не ПустаяСтрока(ТекОбласть.Текст)	Тогда 
				Выражение = СтрЗаменить(ФункцияОбработкиСтрок, "?", "ТекстОбласти");
				ТекОбласть.Текст = Вычислить(Выражение);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры

Функция ПолучитьОграниченнуюОбласть(ТабДок, ОбластьЯчеек,
	ОграничиватьСверху = Истина, ОграничиватьСлева = Истина, ОграничиватьСнизу = Истина, ОграничиватьСправа = Истина)
	
	Если Не ОграничиватьСверху И Не ОграничиватьСлева И Не ОграничиватьСправа И Не ОграничиватьСнизу Тогда 
		Возврат ОбластьЯчеек;
	КонецЕсли;
	
	Если Ложь Тогда // фейк
		ТабДок = Новый ТабличныйДокумент;
		ОбластьЯчеек = ТабДок.Области[0];
	КонецЕсли;
	
	Лево = Неопределено; Право = Неопределено; Верх = Неопределено; Низ = Неопределено;
	МаксШирина = ТабДок.ШиринаТаблицы;
	Для Стр = ОбластьЯчеек.Верх По ОбластьЯчеек.Низ Цикл
		Для Кол = 1 По МаксШирина Цикл 
			ТекОбласть = ТабДок.Область(Стр, Кол);
			Если ЭтоЗначащаяОбласть(ТекОбласть) Тогда 
				Лево = ?(Лево=Неопределено, Кол, Мин(Лево, Кол));
				Право = ?(Право=Неопределено, Кол, Макс(Право, Кол));
				Верх = ?(Верх=Неопределено, Стр, Верх);
				Низ = ?(Низ=Неопределено, Стр, Макс(Низ, Стр));
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Результат = ТабДок.Область(
		?(ОграничиватьСверху, ?(Верх=Неопределено, ОбластьЯчеек.Верх, Верх), ОбластьЯчеек.Верх),
		?(ОграничиватьСлева, ?(Лево=Неопределено, ОбластьЯчеек.Лево, Лево), ОбластьЯчеек.Лево),
		?(ОграничиватьСнизу, ?(Низ=Неопределено, ОбластьЯчеек.Низ, Низ), ОбластьЯчеек.Низ),
		?(ОграничиватьСправа, ?(Право=Неопределено, ОбластьЯчеек.Право, Право), ОбластьЯчеек.Право)
	);
	
	Возврат Результат;
	
КонецФункции

Функция ЭтоЗначащаяОбласть(ОбластьЯчеек)
	Возврат Не ПустаяСтрока(ОбластьЯчеек.Текст) 
		Или ОбластьЯчеек.Гиперссылка
		Или ОбластьЯчеек.СодержитЗначение
		//Или ОбластьЯчеек.ГраницаСверху.ТипЛинии<>ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
		//Или ОбластьЯчеек.ГраницаСнизу.ТипЛинии<>ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
		Или ОбластьЯчеек.ГраницаСлева.ТипЛинии<>ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
		Или ОбластьЯчеек.ГраницаСправа.ТипЛинии<>ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
	;
КонецФункции

// Функция - Текст области листа
// Предполагаем, что имеем дело с ТабДоком, обрезанным по нужным размерам.
// Параметры:
//  Лист - ЭлементСпискаЗначений, ТабличныйДокумент	 - Где искать текст.
//  Верх	 - Число, Неопределено	 - Верхняя граница области
//  Лево	 - Число, Неопределено	 - Левая граница области
//  Низ		 - Число, Неопределено	 - Нижняя граница области
//  Право	 - Число, Неопределено	 - Правая граница области
// 
// Возвращаемое значение:
//  Строка - Объединенный текст указанной области. Ячейки по горизонтали разделяются символом ТАБ, строки переносятся ВК
//
Функция ТекстОбластиЛиста(Лист, Знач Верх = Неопределено, Знач Лево = Неопределено, Знач Низ = Неопределено, Знач Право = Неопределено) Экспорт
	
	ТипЗнчЛист = ТипЗнч(Лист);
	Если ТипЗнчЛист=КэшФункции.ТипТабличныйДокумент() Тогда 
		ТабДок = Лист;
	ИначеЕсли ТипЗнчЛист=КэшФункции.ТипЭлементСпискаЗначений() Тогда 
		ТабДок = Лист.Значение;
	Иначе 
		ТабДок = Новый ТабличныйДокумент; // фейк
		ВызватьИсключение("Неподдерживаемый тип параметра Лист " + ТипЗнчЛист);
	КонецЕсли;
	
	Область = ТабДок.Область(Верх, Лево, Низ, Право);
	Результат = "";
	ГорРазд = Символы.Таб;
	ВертРазд = Символы.ВК;
	
	ОблЛево = ?(Область.Лево=0, 1, Область.Лево);
	ОблПраво = ?(Область.Право=0, ТабДок.ШиринаТаблицы, Мин(Область.Право, ТабДок.ШиринаТаблицы));
	ОблВерх = ?(Область.Верх=0, 1, Область.Верх);
	ОблНиз = ?(Область.Низ=0, ТабДок.ВысотаТаблицы, Мин(Область.Низ, ТабДок.ВысотаТаблицы));
	
	Для Стр=ОблВерх По ОблНиз Цикл 
		
		Для Кол=ОблЛево По ОблПраво Цикл
			
			ТекстЯчейки = ТабДок.Область(Стр, Кол).Текст;
			ЭтоПустаяЯчейка = ПустаяСтрока(ТекстЯчейки);
			
			Если ЭтоПустаяЯчейка Тогда 
				ТекстЯчейки = ГорРазд;
			КонецЕсли;
			Если Кол=ОблПраво И Стр=ОблНиз Тогда 
				Разделитель = "";
			ИначеЕсли Кол=ОблПраво Тогда
				Разделитель = ВертРазд;
			Иначе 
				Разделитель = ?(ЭтоПустаяЯчейка, "", ГорРазд);
			КонецЕсли;
			
			Результат = Результат + ТекстЯчейки + Разделитель;
				
		КонецЦикла;
		
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

Показать
Mahinya; pavelpribytkin96; unknown181538; user767423; kwazi; cfifgoth; user811769; olololeg; _MPV_; freeraider; bajiepka; sansys; Somebody1; necropunk; DeD MustDie; LexSeIch; frkbvfnjh; alexey.kutya; +18 Ответить
22. Lapitskiy 983 14.12.17 13:21 Сейчас в теме
(15) полностью перешел на этот метод, скорость сравнима с ADO
А совместимость выше.
pavelpribytkin96; va582; BufBaf; Дмитрий31178; alexey.kutya; +5 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. BigB 181 13.12.17 14:21 Сейчас в теме
Как воспримет построитель вот такие найменования колонок например:
Наименование товара
Кол-во
Дата документа
2. alexey.kutya 233 13.12.17 14:57 Сейчас в теме
(1) воспримет нормально, но переименует по-своему ))
вот так
НаименованиеТовара
Кол_во
ДатаДокумента
Прикрепленные файлы:
frkbvfnjh; BigB; +2 Ответить
3. MaxS 2033 13.12.17 16:21 Сейчас в теме
Допустим требуется заполнить реквизит Артикул справочника номенклатура. Исходный файл содержит соответствующую колонку с текстом "000123", "000124" и т.п. все символы цифровые. Какое значение попадёт в строковый реквизит номенклатуры?
Если "123", "124" и т.п., то приемы эффективной загрузки данных из Excel в 1С разбиваются о реальность ))
5. alexey.kutya 233 13.12.17 16:49 Сейчас в теме
(3) Попадет значение "000123".
Прикрепленные файлы:
4. alexey.kutya 233 13.12.17 16:47 Сейчас в теме
Попадет значение "000123".
Прикрепленные файлы:
Plotks2017; MaxS; +2 Ответить
7. MaxS 2033 13.12.17 16:57 Сейчас в теме
(4) Спасибо за эксперимент, пересмотрю своё мнение об этом методе. Мои опыты приводили к потере лидирующих нулей.
8. alexey.kutya 233 13.12.17 17:42 Сейчас в теме
(7) возможно что-то уже изменили в платформе

и еще есть один нюанс. У метода Прочитать есть второй параметр СпособЧтенияЗначений.

<СпособЧтенияЗначений> (необязательный)

Тип: СпособЧтенияЗначенийТабличногоДокумента.
Определяет, каким образом нужно интерпретировать значения, считываемые из исходного документа XLS, XLSX или ODS.
При загрузке табличного документа из формата Excel 97 - 2010 и OpenOffice Calc, в случае если в ячейке исходного документа содержалось значение типа Дата или Число, то в ячейку результирующего табличного документа это значение попадает в зависимости от значения этого параметра.
Значение по умолчанию: Текст.
77. user700035_6550355 18 11.04.19 08:17 Сейчас в теме
(4) При загрузке Артикула = "80665" загружается как "80 665" вне зависимости от СпособЧтенияЗначенийТабличногоДокумента (Текст или Значение)
6. maxopik2 58 13.12.17 16:54 Сейчас в теме
У меня проблема в методе "Прочитать()" , ядро 8.3.10.2580 : при загрузке больших файлов (2-3 Mb) расход памяти сервера может достигать 12 Gb
пришлось отказаться от этого метода и пользоваться ADODB
9. alexey.kutya 233 13.12.17 17:43 Сейчас в теме
(6) обидно )) но что поделаешь
11. maxopik2 58 14.12.17 07:20 Сейчас в теме
(9) Не обидно, а вопрос: Это ошибка платформы (т.к. не может из файла 2 Mb появиться файл mxl объемом 11Gb) или я что-то не так делаю?
12. alexey.kutya 233 14.12.17 08:45 Сейчас в теме
(11) да интересно ) если хотите, отправьте мне этот файл. Я попробую его загрузить. Если конечно там нет конфиденциальной информации.
19. maxopik2 58 14.12.17 12:20 Сейчас в теме
25. alexey.kutya 233 14.12.17 14:01 Сейчас в теме
(19) вот результат. Обработал за 2 сек )) размер mxl файла 3 Мб.

Время начала чтения табличного документа: 14.12.2017 13:52:46
Время окончания чтения табличного документа: 14.12.2017 13:52:48
Количество секунд чтения: 2

Время начала выгрузки табличного документа в ТЗ: 14.12.2017 13:52:48
Время окончания выгрузки табличного документа в ТЗ: 14.12.2017 13:52:49
Количество строк таблицы значений: 11 874
Количество секунд выгрузки: 1
13. MaxS 2033 14.12.17 08:49 Сейчас в теме
(11) А если на этом же сервере запустить тонкий клиент и через "Файл - Открыть" открыть этот файл? Расход памяти такой же будет?
20. maxopik2 58 14.12.17 12:21 Сейчас в теме
(13) Попробовал через тонкий клиент. Расход памяти такой же.
88. user703966_martynyuknatalia 17.07.19 04:20 Сейчас в теме
Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
Если ЛистЭксель = Неопределено Тогда
ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
КонецЕсли;
Если ВсегоСтрок = 0 Тогда
ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
КонецЕсли;
Если ВсегоКолонок = 0 Тогда
ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
КонецЕсли;
Если ТЗ = Неопределено Тогда
ТЗ = Новый ТаблицаЗначений;
Для Счетчик = 1 По ВсегоКолонок Цикл
ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
НоваяСтрока = ТЗ.Добавить();
КонецЦикла;

Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();

Для Счетчик = 0 По ВсегоКолонок-1 Цикл
ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
ЛистЭксель = Неопределено;
Возврат ТЗ;
КонецФункции
96. chukawata 10 04.02.20 06:40 Сейчас в теме
(88)
SpecialCells
Надо иметь в виду, что SpecialCells(11) даёт последнюю ячейку на листе, который был активным при закрытии книги, а не листа, с которого происходит считывание. Например, если на активном при закрытии листе было три строки, то именно столько строк считается с листа данных. Аналогично, видимо, со столбцами.
10. Alligator84 68 14.12.17 05:23 Сейчас в теме
Спасибо, познавательно!
Plotks2017; alexey.kutya; +2 Ответить
14. Lapitskiy 983 14.12.17 09:31 Сейчас в теме
а зачем построитель?
Можно по циклу обойти Табличный документ.
16. alexey.kutya 233 14.12.17 10:02 Сейчас в теме
(14) можно и циклом. Это альтернативный способ. Мне больше нравится через построитель.
vovan_victory; +1 Ответить
23. Lapitskiy 983 14.12.17 13:22 Сейчас в теме
(16) я думаю, из-за построителя и расход памяти поболее будет.
alexey.kutya; +1 Ответить
24. alexey.kutya 233 14.12.17 13:46 Сейчас в теме
(23) сам не замерял, но вполне возможно )
15. VmvLer 14.12.17 09:50 Сейчас в теме
табличные документы 1С много "весят" - это особенно ощутимо для больших данных.

покрутите предлагаемый метод для эксель-файлов с сотнями тысяч строк, интересно за какое время вы прочтете
17. alexey.kutya 233 14.12.17 10:27 Сейчас в теме
(15) вот результат замера. 1 млн. строк, файл excel 25 мб.

Время начала чтения табличного документа: 14.12.2017 10:24:40
Время окончания чтения табличного документа: 14.12.2017 10:26:31
Количество секунд чтения: 111

Время начала выгрузки табличного документа в ТЗ: 14.12.2017 10:26:37
Время окончания выгрузки табличного документа в ТЗ: 14.12.2017 10:26:49
Количество строк таблицы значений: 1 000 000
Количество секунд выгрузки: 12
22. Lapitskiy 983 14.12.17 13:21 Сейчас в теме
(15) полностью перешел на этот метод, скорость сравнима с ADO
А совместимость выше.
pavelpribytkin96; va582; BufBaf; Дмитрий31178; alexey.kutya; +5 Ответить
37. wolfsoft 2423 20.12.17 08:58 Сейчас в теме
(22) Ага, ещё бы при чтении некоторых эксель-файлов не вылетало с ошибкой и страницы бы читала.
18. vladismi 161 14.12.17 10:59 Сейчас в теме
Забавно. Попробуем.
alexey.kutya; +1 Ответить
21. qwinter 627 14.12.17 13:04 Сейчас в теме
Кто то узнал о существовании построителя. Круто.
26. PavelKolobkov 14.12.17 15:34 Сейчас в теме
Здесь обсуждалось подобное сабжу
27. alexey.kutya 233 14.12.17 16:07 Сейчас в теме
(26) там немного про другое, но в комментариях да, упоминается про метод Прочитать.
28. logarifm 1082 15.12.17 01:06 Сейчас в теме
А где приемы? Я насчитал только один! Отчитали и накрыли построителем, а остальные ?
DmitrySinichnikov; +1 1 Ответить
29. alexey.kutya 233 15.12.17 08:29 Сейчас в теме
(28) ну вот и получается загрузка в 2 приема ))
Рассмотреть все возможные варианты работы с Excel не являлось целью публикации. Я просто хотел показать как можно с наменьшими затратами, используя код в несколько строк выполнить задачу.
30. Infector 165 15.12.17 09:32 Сейчас в теме
Был небольшой опыт:
Когда попытался обработать через "прочитать" сохраненную контрагентом печатную форму с графическими объектами, все это дело просто повесилось. Пока что ADO и COM-объекты в таких случаях надежнее.
alexey.kutya; +1 Ответить
32. alexey.kutya 233 15.12.17 13:11 Сейчас в теме
(30) да, в таком случае лучше ADO.
31. AzagTot 39 15.12.17 12:16 Сейчас в теме
Спасибо! Очень интересный способ.
Насколько я понял, он не требует наличия на компьютере Microsoft Excel или OpenOffice Calc для чтения соответствующих таблиц?
Метод Табличного Документа "Записать" точно не требует, проверено)
alexey.kutya; +1 Ответить
36. alexey.kutya 233 15.12.17 19:28 Сейчас в теме
(31) Я не проверял, но думаю должен работать.
43. YuriIn 16.04.18 22:53 Сейчас в теме
(31) на сколько мне известно в 1С есть встроенный механизм работы с табличными документами, и в данном случае работает как раз встроенный механизм и получается приложение необязательное.
33. alexey.kutya 233 15.12.17 13:12 Сейчас в теме
Я не проверял, но думаю должен работать.
38. kredko 19 20.12.17 09:16 Сейчас в теме
Хороший метод, только вот не работает с файлами эксель с расширением xlm, который с макросами. И Данные с нескольких страниц помещает в один табличный документ.
alexey.kutya; +1 Ответить
39. Stradivari 150 13.04.18 08:46 Сейчас в теме
Спасибо. Статья помогла!
40. echo77 1175 16.04.18 13:09 Сейчас в теме
Просто и полезно. Укажите в публикации, пожалуйста, что это работает начиная с платформы версии 8.3.6, а с версии 8.3.10 можно грузить данные с определенного листа. Можно так же подкрепить ссылка на ИТС
frkbvfnjh; alexey.kutya; +2 Ответить
75. user755058 05.02.19 16:06 Сейчас в теме
(40) везде только и говорят про
а с версии 8.3.10 можно грузить данные с определенного листа
но нигде не нашёл ни ссылку на документацию ни пример реализации . Может кто знает - поделитесь пожалуйста.
41. d4rkmesa 16.04.18 22:10 Сейчас в теме
Гениально. Не знал про такие фокусы с построителем и табличным документом.
alexey.kutya; +1 Ответить
42. triviumfan 24 16.04.18 22:39 Сейчас в теме
(41) Тоже не знал) До сих пор ADO/EXCEL юзаю =)
alexey.kutya; +1 Ответить
44. ImHunter 202 17.04.18 09:25 Сейчас в теме
(0) (38) Разбивка по листам, похоже, не раскрыта?
Недавно тоже вот перешел на этот способ с ADO.
Разбивать по листам, в принципе, несложно. В загруженном ТабДоке присутствует несколько областей с названиями листов.

В итоге, получилось вот так:

///////////////////////////////////
// Работа с Excel через ТабДок

// Функция - Прочитать excel
//
// Параметры:
//  ФайлExcel - Файл, Строка	 - Объект Файл или полное имя файла.
//  ФункцияОбработкиСтрок	 - Строка, Неопределено	 - Шаблон выражения для обработки строковых значений ячеек. 
//	В шаблоне производится подстановка - вместо символа ? будет подставляться обрабатываемое значение строки.
//	Если передать Неопределено или пустую строку, то обработка производиться не будет.
//  МаксШирина				 - Число - Максимальное кол-во колонок, просматриваемых при усечении таблицы по ширине.
//  ОграничиватьСверху		 - Булево - Убирать пустые строки сверху
//  ОграничиватьСлева		 - Булево - Убирать пустые строки слева
//  ОграничиватьСнизу		 - Булево - Убирать пустые строки снизу
//  ОграничиватьСправа		 - Булево - Убирать пустые строки справа
// 
// Возвращаемое значение:
//  СписокЗначений - Список значений содержимого. Элементы списка в поле Значение содержат ячейки листа (объект ОбластьЯчеекТабличногоДокумента), в поле Представление - имя листа
//
Функция ПрочитатьExcel(ФайлExcel, ФункцияОбработкиСтрок = "СокрЛП(?)",
		ОграничиватьСверху = Истина, ОграничиватьСлева = Истина, ОграничиватьСнизу = Истина, ОграничиватьСправа = Истина) Экспорт 
	
	Ф = НовыйФайл(ФайлExcel);
	ВесьТабДок = Новый ТабличныйДокумент();
	ВесьТабДок.Прочитать(Ф.ПолноеИмя, СпособЧтенияЗначенийТабличногоДокумента.Значение);
	
	Результат = Новый СписокЗначений;
	Области = ВесьТабДок.Области;
	Если Области.Количество()=0 Тогда 
		ВызватьИсключение("В файле нет областей");
	КонецЕсли;
	
	Для Каждого Обл Из Области Цикл
		ТекТабДок = Новый ТабличныйДокумент;
		ОгрОбласть = ПолучитьОграниченнуюОбласть(ВесьТабДок, Обл);
		// вставим область в табдок
		ОгрОбласть.Имя = Обл.Имя;
		ТекТабДок.ВставитьОбласть(ОгрОбласть, 
			ТекТабДок.Область(1, ОгрОбласть.Лево, ОгрОбласть.Низ - ОгрОбласть.Верх + 1, ОгрОбласть.Право)
		);
		СократитьСтроки(ТекТабДок, ФункцияОбработкиСтрок);
		Результат.Добавить(ТекТабДок, Обл.Имя);
	КонецЦикла;
	// зачищаем исходный таб док. хз, может лишнее
	ВесьТабДок.Очистить();
	ВесьТабДок = Неопределено;
	
	Возврат Результат;
	
КонецФункции

Процедура СократитьСтроки(ТабДок, ФункцияОбработкиСтрок = "СокрЛП(?)")
	
	Если ПустаяСтрока(ФункцияОбработкиСтрок) Тогда 
		Возврат;
	КонецЕсли;
	
	Если Ложь Тогда ТабДок = Новый ТабличныйДокумент; КонецЕсли; // фейк
	
	Для Стр = 1 По ТабДок.ВысотаТаблицы Цикл 
		Для Кол = 1 По ТабДок.ШиринаСтраницы Цикл 
			ТекОбласть = ТабДок.Область(Стр, Кол);
			ТекстОбласти = ТекОбласть.Текст;
			Если Не ТекОбласть.СодержитЗначение И Не ПустаяСтрока(ТекОбласть.Текст)	Тогда 
				Выражение = СтрЗаменить(ФункцияОбработкиСтрок, "?", "ТекстОбласти");
				ТекОбласть.Текст = Вычислить(Выражение);
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры

Функция ПолучитьОграниченнуюОбласть(ТабДок, ОбластьЯчеек,
	ОграничиватьСверху = Истина, ОграничиватьСлева = Истина, ОграничиватьСнизу = Истина, ОграничиватьСправа = Истина)
	
	Если Не ОграничиватьСверху И Не ОграничиватьСлева И Не ОграничиватьСправа И Не ОграничиватьСнизу Тогда 
		Возврат ОбластьЯчеек;
	КонецЕсли;
	
	Если Ложь Тогда // фейк
		ТабДок = Новый ТабличныйДокумент;
		ОбластьЯчеек = ТабДок.Области[0];
	КонецЕсли;
	
	Лево = Неопределено; Право = Неопределено; Верх = Неопределено; Низ = Неопределено;
	МаксШирина = ТабДок.ШиринаТаблицы;
	Для Стр = ОбластьЯчеек.Верх По ОбластьЯчеек.Низ Цикл
		Для Кол = 1 По МаксШирина Цикл 
			ТекОбласть = ТабДок.Область(Стр, Кол);
			Если ЭтоЗначащаяОбласть(ТекОбласть) Тогда 
				Лево = ?(Лево=Неопределено, Кол, Мин(Лево, Кол));
				Право = ?(Право=Неопределено, Кол, Макс(Право, Кол));
				Верх = ?(Верх=Неопределено, Стр, Верх);
				Низ = ?(Низ=Неопределено, Стр, Макс(Низ, Стр));
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Результат = ТабДок.Область(
		?(ОграничиватьСверху, ?(Верх=Неопределено, ОбластьЯчеек.Верх, Верх), ОбластьЯчеек.Верх),
		?(ОграничиватьСлева, ?(Лево=Неопределено, ОбластьЯчеек.Лево, Лево), ОбластьЯчеек.Лево),
		?(ОграничиватьСнизу, ?(Низ=Неопределено, ОбластьЯчеек.Низ, Низ), ОбластьЯчеек.Низ),
		?(ОграничиватьСправа, ?(Право=Неопределено, ОбластьЯчеек.Право, Право), ОбластьЯчеек.Право)
	);
	
	Возврат Результат;
	
КонецФункции

Функция ЭтоЗначащаяОбласть(ОбластьЯчеек)
	Возврат Не ПустаяСтрока(ОбластьЯчеек.Текст) 
		Или ОбластьЯчеек.Гиперссылка
		Или ОбластьЯчеек.СодержитЗначение
		//Или ОбластьЯчеек.ГраницаСверху.ТипЛинии<>ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
		//Или ОбластьЯчеек.ГраницаСнизу.ТипЛинии<>ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
		Или ОбластьЯчеек.ГраницаСлева.ТипЛинии<>ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
		Или ОбластьЯчеек.ГраницаСправа.ТипЛинии<>ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
	;
КонецФункции

// Функция - Текст области листа
// Предполагаем, что имеем дело с ТабДоком, обрезанным по нужным размерам.
// Параметры:
//  Лист - ЭлементСпискаЗначений, ТабличныйДокумент	 - Где искать текст.
//  Верх	 - Число, Неопределено	 - Верхняя граница области
//  Лево	 - Число, Неопределено	 - Левая граница области
//  Низ		 - Число, Неопределено	 - Нижняя граница области
//  Право	 - Число, Неопределено	 - Правая граница области
// 
// Возвращаемое значение:
//  Строка - Объединенный текст указанной области. Ячейки по горизонтали разделяются символом ТАБ, строки переносятся ВК
//
Функция ТекстОбластиЛиста(Лист, Знач Верх = Неопределено, Знач Лево = Неопределено, Знач Низ = Неопределено, Знач Право = Неопределено) Экспорт
	
	ТипЗнчЛист = ТипЗнч(Лист);
	Если ТипЗнчЛист=КэшФункции.ТипТабличныйДокумент() Тогда 
		ТабДок = Лист;
	ИначеЕсли ТипЗнчЛист=КэшФункции.ТипЭлементСпискаЗначений() Тогда 
		ТабДок = Лист.Значение;
	Иначе 
		ТабДок = Новый ТабличныйДокумент; // фейк
		ВызватьИсключение("Неподдерживаемый тип параметра Лист " + ТипЗнчЛист);
	КонецЕсли;
	
	Область = ТабДок.Область(Верх, Лево, Низ, Право);
	Результат = "";
	ГорРазд = Символы.Таб;
	ВертРазд = Символы.ВК;
	
	ОблЛево = ?(Область.Лево=0, 1, Область.Лево);
	ОблПраво = ?(Область.Право=0, ТабДок.ШиринаТаблицы, Мин(Область.Право, ТабДок.ШиринаТаблицы));
	ОблВерх = ?(Область.Верх=0, 1, Область.Верх);
	ОблНиз = ?(Область.Низ=0, ТабДок.ВысотаТаблицы, Мин(Область.Низ, ТабДок.ВысотаТаблицы));
	
	Для Стр=ОблВерх По ОблНиз Цикл 
		
		Для Кол=ОблЛево По ОблПраво Цикл
			
			ТекстЯчейки = ТабДок.Область(Стр, Кол).Текст;
			ЭтоПустаяЯчейка = ПустаяСтрока(ТекстЯчейки);
			
			Если ЭтоПустаяЯчейка Тогда 
				ТекстЯчейки = ГорРазд;
			КонецЕсли;
			Если Кол=ОблПраво И Стр=ОблНиз Тогда 
				Разделитель = "";
			ИначеЕсли Кол=ОблПраво Тогда
				Разделитель = ВертРазд;
			Иначе 
				Разделитель = ?(ЭтоПустаяЯчейка, "", ГорРазд);
			КонецЕсли;
			
			Результат = Результат + ТекстЯчейки + Разделитель;
				
		КонецЦикла;
		
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

Показать
Mahinya; pavelpribytkin96; unknown181538; user767423; kwazi; cfifgoth; user811769; olololeg; _MPV_; freeraider; bajiepka; sansys; Somebody1; necropunk; DeD MustDie; LexSeIch; frkbvfnjh; alexey.kutya; +18 Ответить
45. alexey.kutya 233 17.04.18 10:08 Сейчас в теме
(44) Спасибо за дополнение :) У вас отлично реализовано. Думаю будет очень полезно.
50. vpaoli 29 18.04.18 09:42 Сейчас в теме
(45) Я недавно сравнивал скорость загрузки через ADO и с помощью метода
Область = ЛистЭксель.Range(...);
Данные = Область.Value.Выгрузить();
Получилось, что второй метод быстрее ADO где то на 25%
Вы не сравнивали метод Range с вашим методом загрузки ? Что быстрее и насколько. Может сравните для полноты ощущений ...?
46. ediks 329 17.04.18 10:33 Сейчас в теме
(44) А что за объект КэшФункции в функции ТекстОбластиЛиста?
И в строке Ф = НовыйФайл(ФайлExcel); пробел не пропущен НовыйФайл?
47. ImHunter 202 17.04.18 10:55 Сейчас в теме
(46) Да, точно

Тут же в модуле

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


А КэшФункции - это модуль, закешированный на сеанс. Там, в том числе, закешированы типы данных:
Функция ТипСтрока() Экспорт
	Возврат Тип("Строка");
КонецФункции

Функция ТипДата() Экспорт
	Возврат Тип("Дата");
КонецФункции

Функция ТипФайл() Экспорт
	Возврат Тип("Файл");
КонецФункции

Функция ТипСтруктура() Экспорт
	Возврат Тип("Структура");
КонецФункции

Функция ТипНеопределено() Экспорт
	Возврат Тип("Неопределено");
КонецФункции

Функция ТипУникальныйИдентификатор() Экспорт
	Возврат Тип("УникальныйИдентификатор");
КонецФункции

Функция ТипЭлементСпискаЗначений() Экспорт 
	Возврат Тип("ЭлементСпискаЗначений");
КонецФункции

Функция ТипСписокЗначений() Экспорт 
	Возврат Тип("СписокЗначений");
КонецФункции

Функция ТипТабличныйДокумент() Экспорт 
	Возврат Тип("ТабличныйДокумент");
КонецФункции

Функция ТипМассив() Экспорт 
	Возврат Тип("Массив");
КонецФункции
Показать
48. ImHunter 202 17.04.18 16:32 Сейчас в теме
На основании публикации доработал и свой модуль. Теперь выгружаю и в ТЗ.
// Функция - Получить таблицу значений excel
//
// Параметры:
//  Лист - ЭлементСпискаЗначений, ТабличныйДокумент	 - Где искать текст.
//  ПоляТолькоПоДокументу	 - Булево - Если Истина, то создаются поля по верхней строке ТабДока. Если Ложь, то создаются авто-поля Поле[N] по всей ширине ТабДока.
// 
// Возвращаемое значение:
//  ТаблицаЗначений - ТЗ с данными ТабДока
//
Функция ПолучитьТаблицуЗначенийExcel(Лист, ПоляТолькоПоДокументу = Ложь) Экспорт
	
	Если Истина Тогда 
		ТабДок = ПолучитьТабДок(Лист);
	Иначе 
		ТабДок = Новый ТабличныйДокумент;
	КонецЕсли;
	
	Если ТабДок.ВысотаТаблицы=0 Тогда 
		Возврат Неопределено;
	КонецЕсли;
	
	// вставим заголовки
	Если ПоляТолькоПоДокументу=Ложь Тогда 
		ВерхняяСтрока = ТабДок.Область("R1");
		ТабДок.ВставитьОбласть(ВерхняяСтрока, ВерхняяСтрока, ТипСмещенияТабличногоДокумента.ПоВертикали, Ложь);
		ВерхняяСтрока = ТабДок.Область("R1");
		ВерхняяСтрока.Очистить();
		Для Кол=1 По ТабДок.ШиринаТаблицы Цикл
			ТабДок.Область(1, Кол).Текст = "Поле" + Формат(Кол, "ЧГ=");
		КонецЦикла;
	КонецЕсли;
	
	ПЗ = Новый ПостроительЗапроса;
	ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
	ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
	ПЗ.ЗаполнитьНастройки();
	ПЗ.Выполнить();
	ТаблицаЗначений = ПЗ.Результат.Выгрузить();	
	
	// вставим заголовки
	Если ПоляТолькоПоДокументу=Ложь Тогда
		ВерхняяСтрока = ТабДок.Область("R1");
		ТабДок.УдалитьОбласть(ВерхняяСтрока, ТипСмещенияТабличногоДокумента.ПоВертикали);
	КонецЕсли;
   
    Возврат ТаблицаЗначений;
   
КонецФункции

Функция ПолучитьТабДок(Лист)
	
	ТипЗнчЛист = ТипЗнч(Лист);
	Если ТипЗнчЛист=КэшФункции.ТипТабличныйДокумент() Тогда 
		ТабДок = Лист;
	ИначеЕсли ТипЗнчЛист=КэшФункции.ТипЭлементСпискаЗначений() Тогда 
		ТабДок = Лист.Значение;
	Иначе 
		ВызватьИсключение("Неподдерживаемый тип параметра Лист " + ТипЗнчЛист);
	КонецЕсли;
	
	Возврат ТабДок;
	
КонецФункции
Показать
alexey.kutya; +1 Ответить
59. vpaoli 29 20.04.18 12:22 Сейчас в теме
Раз уж Вы пишете "Приемы эффективной загрузки ..." , наверно необходимо сравнение с другими существующими . Иначе это может быть и "не эффективной загрузки".
Есть метод:
Область = ЛистЭксель.Range(...); 
Данные = Область.Value.Выгрузить(); 


Вы не сравнивали метод Range с вашим методом загрузки ? Что быстрее и насколько ?
65. alexey.kutya 233 23.04.18 12:58 Сейчас в теме
(59)
Область = ЛистЭксель.Range(...);
Данные = Область.Value.Выгрузить();


Попробовал на 1 млн. строк.

Время выполнения чтения файла вашим методом 36 сек. Время выполнения методом описанным в моей публикации 193 сек. Разница в 5 раз :) Но ваш метод возвращает массивы значений, надо попробовать их разобрать.
66. ImHunter 202 23.04.18 13:24 Сейчас в теме
(65) Так ожидаемо, что ТабДоком медленнее. И значительно тяжелее, наверное, по расходу памяти.
Но профит в том, что не нужен Excel, ADO-провайдеры. Пожалуй, только из-за этого на табдоки перебрался.
alexey.kutya; +1 Ответить
67. alexey.kutya 233 23.04.18 14:11 Сейчас в теме
(66)
ADO-провайдер


Конечно, если время выполнения приемлемое, то почему бы и нет.
68. vpaoli 29 24.04.18 10:52 Сейчас в теме
(65)
Но ваш метод возвращает массивы значений, надо попробовать их разобрать.
Все уже разобрано.... Есть публикации вместе с кодом на инфостарте.
alexey.kutya; +1 Ответить
69. ImHunter 202 27.04.18 13:42 Сейчас в теме
Хех, недолго радовался:( Придется отказаться от такого чтения. Тесты в боевых условиях валятся по нехватке памяти. Похоже, чтение ТабДоком сильно не любит формулы.
70. alexey.kutya 233 27.04.18 15:11 Сейчас в теме
71. ImHunter 202 28.04.18 06:47 Сейчас в теме
(70) Для справки. Тесты гонял на 8.3.10.2580, 32-бит.
Так что, народ, аккуратнее с загрузкой ТабДоком...
alexey.kutya; +1 Ответить
72. vis_tmp 30 05.05.18 15:06 Сейчас в теме
Не могу понять, вашим методом загружается ли гиперссылка из ячейки Excel-а?
Гиперссылка представляет из себя URL на картинку на сайте (прилагаю для примера кусочек такого файла).
Кому-нибудь удалось получить URL гиперссылки из подобного файла?
Прикрепленные файлы:
PRICE - сантехника MIN.xls
73. alexey.kutya 233 25.12.18 15:08 Сейчас в теме
(72) может уже не актуально, но нет, гиперссылка не загружается
76. vis_tmp 30 10.03.19 23:04 Сейчас в теме
(73)Актуально!
Как бы научиться загружать гиперссылки?
78. pushkarev 10.06.19 16:49 Сейчас в теме
добрый день. На 64 битную подойдет?
79. alexey.kutya 233 10.06.19 17:37 Сейчас в теме
(78) не проверял, но думаю должно работать
80. pushkarev 10.06.19 18:22 Сейчас в теме
Перехожу на 1с розница 2.2. Хочу из EXEL импортировать. Не могу тут ничего скачать. на почту не перешлете.?
83. alexey.kutya 233 11.06.19 09:40 Сейчас в теме
(80) отправлю, только доберусь до компа
81. pushkarev 10.06.19 18:46 Сейчас в теме
82. alexey.kutya 233 11.06.19 09:38 Сейчас в теме
Отправлю, только доберусь до компа
84. user811769 8 16.07.19 11:09 Сейчас в теме
Добрый день! Алексей, а эффективно ли будет работать построитель с такой шапкой:
Прикрепленные файлы:
85. alexey.kutya 233 16.07.19 12:06 Сейчас в теме
(84) добрый день!
Я думаю, что построитель некорректно обработает такую шапку. Лучше чтобы шапка была в одну строку.
86. user811769 8 16.07.19 12:16 Сейчас в теме
(85) спасибо за ответ и за статью!
Построитель положу в копилочку решений с простыми шапками, для этой попробую COM или ТабличныйДокумент =)
alexey.kutya; +1 Ответить
87. alexey.kutya 233 16.07.19 13:31 Сейчас в теме
(86) рад что вам пригодилось )
89. medangel 78 13.09.19 11:04 Сейчас в теме
Используем этот механизм, спасибо. Но есть проблемы при загрузке файла с группировками (уровень группировки не определить) + в шапке не должно быть объединенных ячеек.
90. alexey.kutya 233 16.09.19 10:14 Сейчас в теме
(89) да, некоторые ограничения есть
91. user892257 31.10.19 08:22 Сейчас в теме
Вот пример файла, который данный способ не охватывает.
Прикрепленные файлы:
Загрузка МВЗ и должности.xls
92. alexey.kutya 233 31.10.19 09:23 Сейчас в теме
(91) да, этот файл метод 1с не сможет обработать корректно, первая строка должна содержать заголовки
93. user1315758 24.11.19 19:59 Сейчас в теме
Можно ли этим способом вытащить из файла только нужные колонки и сразу их сгруппировать? Далее нужно эти данные поместить во временную таблицу и соединять с регистрами. Для этого ТЗ должна быть типизированной. Как это сделать на уровне построителя?
94. alexey.kutya 233 25.11.19 14:22 Сейчас в теме
(93) я думаю построитель автоматом не типизирует колонки, для запроса не получится подставить такую таблицу без спец. обработки
95. swk_swetlana 25.12.19 09:29 Сейчас в теме
Добрый день. Комплексная автоматизация 2.4.10. Не могу добавить Вашу обработку к Дополнительным
Прикрепленные файлы:
97. Deryni 23 04.07.20 11:34 Сейчас в теме
Тут есть интересный нюанс. Если файл уже открыт, то 1С его читать не будет.
Если читать средствами Экселя, то он ругнётся, но прочитать позволит.
Я так понимаю, вариантов обойти это дело нет?
98. alexey.kutya 233 10.07.20 11:59 Сейчас в теме
(97) Скорее всего да, если файл заблокирован, то прочитать не удастся.
99. Deryni 23 12.07.20 00:12 Сейчас в теме
(98) Тут не то, что "скорее", тут уже проверено. Я думал есть способ прочитать, но не нашёл. В итоге сделал загрузку средствами 1С и средствами OLE Excel. Второй способ позволяет прочитать.
Оставьте свое сообщение

См. также

Прыг-Скок...или из MS EXCEL в 1С (8.2) (открытый код) Промо

Обработка документов Обработка справочников Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Универсальная загрузка данных из Microsoft Office Excel. Автоматическая загрузка из любых по форме документов с очень удобным редактором. Почти готовый шаблон для любой конфигурации. Не требует регистрации-бесплатно.

1 стартмани

16.09.2015    63318    360    Tatitutu    48    

Парсинг Excel-файла

Загрузка и выгрузка в Excel Универсальные функции v8 Розница УНФ ERP2 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Шаблон внешней обработки для парсинга Excel без использования COM-объектов, с учетом клиент-серверного взаимодействия, на толстом, тонком и веб-клиенте. С учетом требований безопасности и отображением длительных операций.

1 стартмани

15.09.2020    2508    11    LamerSoft    0    

Простой способ загрузить файл Excel на тонком клиенте.

Загрузка и выгрузка в Excel Универсальные функции v8 1cv8.cf Абонемент ($m)

Самый простой способ загрузить файл Excel на тонком клиенте - это скопировать лист Excel в "табличный документ" на форме обработки и обрабатывать уже поля "табличного документа".

1 стартмани

30.10.2019    8016    2    John_d    16    

Загрузка из Excel (без использования com-объектов, без установленного Excel)

Обработка документов Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Обработка не использует com-объект для чтения из файла, не нужен установленный Excel.

1 стартмани

22.03.2019    17294    160    Смешной 1С    27    

Выгрузка и загрузка данных из файла Excel с поиском по любым полям (есть поиск по ссылке, всего три итерации поиска. Управляемые формы или "Такси") Промо

Загрузка и выгрузка в Excel Обработка документов v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка позволяет загружать данные с поиском по ссылке как для загружаемого объекта, так и его свойств. Загружает справочники, документы, планы видов характеристик. Будет полезна как замена использования конвертации данных для задач переноса, а также как классическая загрузка из табличного документа (Excel). Поиск объекта при загрузке выполняется до трех раз с разными полями поиска (поля поиска настраиваются). Также реализована выгрузка в Excel по ссылкам. У обработки удобный интерфейс, в котором разберется даже начинающий пользователь. Загрузка накладных из файлов xls реализована с интеллектуальным поиском колонок с данными. В интеллектуальном поиске поддерживаются все основные типовые печатные формы.

5 стартмани

16.10.2015    60078    508    primat    33    

Конфигурация "Обмен данными Excel"

Загрузка и выгрузка в Excel v8 1cv8.cf Россия Абонемент ($m)

Что будет, если скрестить Конвертацию 2.0, Модуль загрузки преобразования в значения БД от конвертации 3.0 и Excel шаблоны? Правильно, получится отличная подсистема "Обмен данными Excel", которую можно встраивать в существующие конфигурации и получить универсальный механизм по загрузке данных из Excel и вводу начальных данных. Данная подсистема позволит заменить множество различных обработок по загрузкам из Excel. Хочу отметить, что все интеграции через веб сервисы 1С по загрузкам soap пакетов (документов xml) можно адаптировать и универсально загружать через данную подсистему, правда, это потребует двух доработок конфигурации, но это возможно, архитектурное решение и идея включены в подсистему "Обмен данными Excel" и хочу Вам сообщить, что уже реализованы и доступны в новом обновлении 1.1.1.1.

2 стартмани

05.03.2019    8116    22    Алексей777    19    

Вы больше не будете разбирать Excel как раньше

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Кому не приходилось разбирать файлы в формате Excel? Все матерятся, плюются, требуют обещаний что "это в последний раз", но таки пишут загрузку из Excel. Потом форматы меняются, строки съезжают, колонки переставляют... Вам это не надоело?

1 стартмани

07.05.2018    29530    63    m-rv    34    

Загрузка номенклатуры в базу "Управление торговлей 11.4", с возможностью создания номенклатуры поставщика, через табличный документ Excel, Word

Загрузка и выгрузка в Excel Обработка справочников Оптовая торговля Учет ТМЦ Оптовая торговля Учет ТМЦ Розничная торговля v8 ERP2 УТ11 БУ УУ Абонемент ($m)

Хочу поделиться простой обработкой, дающей возможность загружать номенклатуру с возможностью создания номенклатуры поставщика, в какую-либо определённую группу товаров. 

2 стартмани

15.03.2018    32607    317    appolon321    89    

Универсальное средство чтения файлов Excel Промо

Универсальные обработки Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Унифицируем чтение файлов Excel, читаем "неудобные" файлы, переносим содержимое таблиц Excel через буфер обмена.

5 стартмани

27.03.2013    30244    35    Infector    4    

Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника. ЗУП 3.1

Обработка документов Загрузка и выгрузка в Excel Зарплата Зарплата v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Абонемент ($m)

Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника по данным экономического отдела. ЗУП 3.1.

3 стартмани

20.12.2017    48850    32    mvv1975    7    

Загрузка и создание номенклатуры из Excel, и создание документа Поступление товаров и услуг. УТ 11, Розница 2 и ERP Управление предприятием 2

Обработка документов Загрузка и выгрузка в Excel Оптовая торговля Учет ТМЦ Обработка справочников Оптовая торговля Учет ТМЦ v8 v8::ОУ Розница УТ11 Россия УУ Абонемент ($m)

Обработка для загрузки номенклатуры из Excel в любом формате, создание недостающей номенклатуры и автоматическое создание документа Поступление товаров.

1 стартмани

13.10.2017    20317    124    Matveev_VS    26    

Загрузка дополнительных реквизитов и сведений справочника Номенклатура из Excel и таблиц УТ 11, ERP 2

Обработка справочников Загрузка и выгрузка в Excel Учет ТМЦ Учет ТМЦ v8 v8::ОУ ERP2 УТ11 Россия УУ Абонемент ($m)

Внешняя обработка "Загрузка дополнительных реквизитов и сведений справочника Номенклатура"

1 стартмани

07.08.2017    41125    256    Windyhead    41    

Загрузка УПД в Бухгалтерию 3.0 Промо

Обработка документов Загрузка и выгрузка в Excel Оптовая торговля Оптовая торговля v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Загрузка УПД из Excel в Бухгалтерию предприятия 3.0, с добавлением номенклатуры, ГТД, стран происхождения.

3 стартмани

20.10.2015    23021    18    teyana    12    

Загрузка из Excel-файла данных в документ Поступление товаров и услуг

Обработка документов Загрузка и выгрузка в Excel Оптовая торговля Розничная торговля Учет ТМЦ Оптовая торговля Розничная торговля Учет ТМЦ v8 Розница БП3.0 УТ11 КА2 Россия БУ УУ Абонемент ($m)

Загрузка из произвольного Excel-файла документов Поступление товаров и услуг с возможностью создания номенклатуры, обработка позволяет автоматизировать процесс оформления новых поступлений товара.

1 стартмани

04.03.2017    31085    401    gzharkoj    117    

Выгрузка в XML и загрузка из XML. Пример с передачей файла с клиента на сервер и обратно

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Столкнулся с проблемой передачи файла с клиента на сервер и обратно для выгрузки и загрузки данных в XML. Много примеров для выгрузки/загрузки, но не встретил ни одного, где описывался бы механизм передачи файла на сервер и обратно

1 стартмани

03.02.2017    51626    71    Anchoret    6    

Внешняя обработка заполнения табличной части из Excel (с созданием Номенклатуры)

Загрузка и выгрузка в Excel Оптовая торговля Оптовая торговля v8 v8::БУ БП3.0 БУ Абонемент ($m)

Внешняя обработка заполнения табличной части из Excel (с созданием Номенклатуры)

1 стартмани

22.01.2017    18768    156    Batman    34    

Загрузка данных из Excel Промо

Загрузка и выгрузка в Excel Обработка документов v8 1cv8.cf Абонемент ($m)

Загружает информацию из файлов Excel в любой документ, в шапку документа и в любую табличную часть. Сняты ограничения по количеству загружаемой информации... Теперь есть возможность сохранить настройки формы.

1 стартмани

02.04.2012    50421    295    TSer1    78    

 Интеграция 1С и C#. Обращение к 1С через COM. Создание номенклатуры и выполнение запроса к 1С из C# на примере интеграции с Союз-PLM (система информационной поддержки жизненного цикла изделий). Обработка «Загрузка заказа на сборку». (ERP)

Загрузка и выгрузка в Excel Внешние источники данных Интеграция v8 ERP2 Абонемент ($m)

Союз-PLM представляет собой полнофункциональный программный комплекс для решения  широкого спектра задач управления инженерной технической информацией наукоемких изделий и сложных инженерных объектов в области машиностроения, приборостроения, архитектуры, строительства. На практике, это управление конструкторской документацией, интегрированное с САПР, бизнес-процессы, файловый архив. Все это работает в SQL и шевелится с помощью скриптов на C#. Скрипты свободно  отлаживаются в MS Visual Studio. Подробнее смотрите на их сайте: http://www.programsoyuz.ru/products/system-soyuz-plm.html  Редактирование, конструирование и использование бизнес-процессов на порядок лучше систем на базе 1С из тех, что я изучил.

1 стартмани

25.07.2016    45139    5    milkers    2    

[FREE] Универсальная загрузка данных в регистры сведений и справочники, включая дополнительные реквизиты (можно через буфер из Excel)

Универсальные обработки Загрузка и выгрузка в Excel Обработка справочников v8 v8::УФ БП2.0 ЗУП2.5 УТ10 УНФ ERP2 ЗКГУ3.0 БП3.0 УТ11 КА2 Абонемент ($m)

Универсальная обработка для загрузки данных в регистры сведений и справочники (поддерживает загрузку в дополнительные реквизиты). Открытый код.

1 стартмани

30.06.2016    24884    237    pridecom    0    

Групповая обработка номенклатуры "Крутотенюшка": выгрузка из 1С в Excel, правка и обратная загрузка в 1С с учетом изменений

Загрузка и выгрузка в Excel v8 УТ10 Абонемент ($m)

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

1 стартмани

11.04.2016    24365    62    O-Planet    41    

Полезные приемы при работе с Excel из 1С (Версия 3.1)

Практика программирования Разработка внешних компонент Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Программисту 1С часто приходится работать с таблицами Excel из 1С. Я постарался собрать небольшой FAQ и набор функций для работы с файлами Excel. Надеюсь, кому-то будет полезна данная статья.

1 стартмани

22.09.2015    199798    444    Zerocl    70    

Обмен прайс-листами и анализ ценовой политики конкурентов, партнёров и поставщиков в программе 1С:Предприятие

Ценообразование, прайсы Обработка документов Загрузка и выгрузка в Excel Ценообразование, анализ цен Ценообразование, анализ цен v8 УТ10 УПП1 УУ Абонемент ($m)

Универсальная программа для загрузки Прайс-листов в базу 1С:Предприятия 8. Основные достоинства: простота использования и широкие функциональные возможности поиска товаров для записи цен. Область применения: обмен прайс-листами и анализ ценовой политики конкурентов, партнёров и поставщиков в программе 1С:Предприятие.

10 стартмани

16.07.2015    32977    3    Destroy    2    

Просмотр файлов разных форматов (PDF, DOC, XLS, MXL, видео, картинок и др.) в управляемой форме 1С

Работа с интерфейсом Универсальные обработки Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Просмотр файлов разных форматов (PDF, DOC, XLS, MXL, видео, картинок и др.) в управляемой форме 1С. Не надо веб-сервера, ActiveX и т.д.

8 стартмани

23.06.2015    37893    100    sss123    30    

Импорт из EXCEL и других источников (xls, xlsx, xlsb, ods, sxc, dbf, mxl, csv, clipboard, sql) в 1С Промо

Загрузка и выгрузка в Excel Внешние источники данных Обработка справочников Практика программирования Обработка документов v8 КА1 БП2.0 УТ10 Розница Беларусь Украина Россия БУ Абонемент ($m)

-Наглядная, контролируемая загрузка иерархической номенклатуры с различными атрибутами и картинками из прайсов, файлов табличного вида xls,xlsx,xlsb,ods,sxc,dbf,mxl,csv произвольной структуры по указанному диапазону строк, а также из буфера обмена и внешнего SQL-источника данных в основные, дополнительные и пользовательские реквизиты. -Вариантный поиск номенклатуры. -Создание сопутствующей справочной информации. -Создание документов в национальной/иностранной валюте. -Обычное и управляемое приложение. Файл и Клиент-Сервер.

1 стартмани

16.03.2012    368286    2869    StepByStep    734    

И снова "Как сжать картинки для экспорта в EXCEL?" или Умная картинка 8.2

Практика программирования Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Прошла уже эпоха , когда экономили на трафике интернета. Но все же...повторюсь. Я предлагаю совершенно новый способ сжатия картинки - эффект в 20 раз !!!

1 стартмани

17.06.2015    30283    43    Tatitutu    10    

Загрузка товаров из таблицы в реализацию и поступление УТ 10.3 по артикулу и производителю + создание товаров и ГТД

Обработка документов Загрузка и выгрузка в Excel Оптовая торговля Учет ТМЦ Оптовая торговля Учет ТМЦ v8 УТ10 Россия УУ Абонемент ($m)

Обработка встраивается в конфигурацию (только кнопка для вызова обработки) и позволяет быстро и просто загрузить список товаров в реализацию или поступление. В процессе загрузки создаются отсутствующие товары и ГТД.

2 стартмани

03.03.2015    15628    2    taurus__    0    

Работа с Excel. Объединение, Стыковка, Свертка

Универсальные обработки Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Обработка позволяет работать как с одним, так и с несколькими файлами Excel: Объединять файлы со сходной структурой в одну таблицу, Стыковать файлы с разной структурой по ключевому полю, Группировать результат по выбранным полям и суммировать числовые поля.

1 стартмани

19.02.2015    25880    23    Ekovichev    7    

Нестандартная загрузка из Excel

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Взгляд на привычную задачу под неожиданным углом - пусть пользователь прямо в Excel решает, что ему надо, и грузит в 1С только нужное. Установите любой отбор, выделите фрагмент, и вот он уже в 1С. Для обычных и УФ 8.3

1 стартмани

12.11.2014    30568    51    Yashazz    46    

Загрузка данных из табличного документа (УФ)

Обработка документов Обработка справочников Загрузка и выгрузка в Excel v8 v8::УФ 1cv8.cf Абонемент ($m)

Загрузка данных из табличного документа (УФ) с сохранением/восстановлением настроек, загрузкой в план счетов, загрузкой реквизитов объектов типа ПВХ

1 стартмани

22.05.2014    26861    77    blindcat2006    15    

Универсальная загрузка табличных данных из файла Microsoft Excel

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Мастер загрузки произвольных табличных данных из книг Microsoft Excel в объекты информационной базы 1С: Предприятие (управляемое приложение).

1 стартмани

30.04.2014    29463    148    McSeem    21    

[x1c.ru] Загрузка Табеля учета рабочего времени из Excel-отчета системы "Таймформер" для ЗУП Редакция 2.5

Загрузка и выгрузка в Excel Учет рабочего времени Учет рабочего времени v8 ЗУП2.5 Россия БУ УУ Абонемент ($m)

Обработка для загрузки данных об отработанном времени из Excel-файла системы "Таймформер". Загружает Excel-файлы, содержащие подробный месячный отчет.

1 стартмани

16.04.2014    24001    6    GusevNA    1    

NEW! Быстрый способ выгрузки в Excel без «геморроя» с помощью COMSafeArray.

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Как очень быстро, легко и без всяких препятствий (драйвера ADODB, права пользователя Windows и т.п.) выгрузить данные в Excel с помощью COMSafeArray.

1 стартмани

30.03.2014    25764    42    akor77    10    

Загрузка данных из табличного документа (управляемые формы)

Загрузка и выгрузка в Excel v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Обработка загрузки данных из табличного документа на основе стандартной от 1С, переделанная для тонкого клиента. Для 8.2 и 8.3

1 стартмани

28.03.2014    97010    1403    proal    85    

Обработка выгрузки/загрузки табеля учета рабочего времени

Зарплата Учет рабочего времени Загрузка и выгрузка в Excel Зарплата Учет рабочего времени v8 ЗУП2.5 БУ УУ Абонемент ($m)

Обработка предназначена для выгрузки и загрузки табеля учета рабочего времени. Обработка выгружает шаблоны табеля учета рабочего времени в файлы Excel по подразделениям (для каждого подразделения один файл). И загружает введённые данные из этих же файлов.

1 стартмани

04.02.2014    21674    21    arr    5    

Иерархическая загрузка номенклатуры из Excel-файла

Загрузка и выгрузка в Excel Учет ТМЦ Учет ТМЦ v8 1cv8.cf Абонемент ($m)

Столкнулся с задачей загрузки данных из Excel-файла в 1С с учетом представленной в файле иерархией. Сам по себе процесс перекачки данных из экселя в 1с трудностей не представляет. В сети очень много обработок и примеров кода, которые позволяют общаться с Excel. Но облазив много форумов, я нигде не нашел внятного объяснения как произвести загрузку с учетом иерархии, при условии что количество уровней этой самой иерархии произвольно и разные уровни группировок находятся в одной колонке, а не каждый уровень в своей. Хочу поделиться тем, что получилось у меня. Может кому-то пригодится.

1 стартмани

22.01.2014    29802    87    lisrws    16    

Выгрузка товаров и цен из Excel в документ установки цен

Загрузка и выгрузка в Excel Ценообразование, анализ цен Обработка документов Ценообразование, анализ цен v8 Розница БП3.0 УТ11 Россия Абонемент ($m)

Данная обработка предназначена для выгрузки из прайс-листа Excel товаров и цен в документ установки цен. Поддерживает следующие конфигурации: Бухгалтерия 3.0, Управление торговлей 11.1, Розница 2.0

1 стартмани

20.01.2014    20717    26    rsvp201    9    

Универсальная загрузка из EXCEL MXL и Google таблиц для управляемого приложения

Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

версия обработки "Универсальная загрузка из EXCEL для управляемого приложения" (c) авторства uzhelas добавлена возможность грузить из MXL и Google spreadsheet

1 стартмани

14.11.2013    20484    55    bxz    18    

Как рисовать диаграммы в Excel

Загрузка и выгрузка в Excel Работа с интерфейсом v8 Абонемент ($m)

Что делать, если средствами 1С не получается нарисовать диаграмму, которую хочет Заказчик? Выход есть!

1 стартмани

10.10.2013    21263    74    Сисой    1    

Универсальная загрузка из EXCEL для управляемого приложения

Загрузка и выгрузка в Excel v8 Абонемент ($m)

Загрузка данных из Excel для управляемого интерфейса. Возможность загрузки справочников, документов и регистров сведений. Простая настройка, удобный интерфейс.

1 стартмани

27.09.2013    14172    63    uzhelas    35    

Все константы MS Office

Инструментарий разработчика Загрузка и выгрузка в Excel v8 1cv8.cf 1cv7.md Абонемент ($m)

16000+ констант MS Office 2013 для Excel, Word, Access, Outlook, PowerPoint, Project и Visio с краткими описаниями из MSDN, переведены в формат "mxl", с удобной оболочкой в виде обработки для отбора и преобразования в другие форматы. Примеры использования. Пример получения значений напрямую из Excel (без ВК).

1 стартмани

22.07.2013    28813    27    TrashMaster    22    

Универсальная загрузка таблицы Еxcel в документ или справочник 8.2.

Универсальные обработки Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Предназначена для загрузки таблицы из Excel в табличную часть документа, движения документа, создание элементов справочника, создание документов(без табличной части).

1 стартмани

19.04.2013    12136    22    lap_soft    22    

Обработка по загрузке документа "РеализацияТоваровУслуг" в УТ 11 из EXCEL в заданном формате

Обработка документов Загрузка и выгрузка в Excel v8 УТ10 Россия Абонемент ($m)

Быстрая загрузка документа "Реализация товаров и услуг" в Конфигурации "Управление торговлей" ред. 11

1 стартмани

25.12.2012    11061    10    farkhod    1