Чтение файлов XLS XLSX DOC DOCX в 1С
Для извлечения данных из файлов формата DOC DOCX необходимо, чтобы платформа 1С, база данных и приложение Microsoft WORD 2010 (рекомендуется как самая стабильная версия) находились локально на одном сервере.
Чтение файлов вызывается на клиенте пользователя и использует объект тип COMОбъект ( «Word.Application« ).
Существуют альтернативные варианты чтения только для файлов DOCX, которые можно читать из XML — формата через конвертацию — восстановление c использованием ZIP без приложения Microsoft WORD. В каждом случае всегда учитывается среда окружения операционной системы. Эти доработки выполняются по техническому заданию согласно прайс-листу.
В версии 2.0.99.23 для чтения DOCX на сервере планируется использовать новые функции из модуля ШаблоныПечатиОфисныхДокументов
Функция СФормироватьДокумент(Знач ОбъектПечати, Шаблон, УникальныйИдентификатор) Экспорт ДополнительныеПараметры = ОпределитьВспомогательныеПараметрыПечати(ОбъектПечати, Шаблон); Если НЕ ЗначениеЗаполнено(ОбъектПечати) Тогда ОбщегоНазначения.СообщитьПользователю(СтрШаблон(НСтр("ru='Документ по шаблону (%1) не сформирован'"), Шаблон)); Возврат Неопределено; КонецЕсли; ДанныеШаблона = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Шаблон, "Ссылка,Наименование,ФайлШаблон,Назначение,НеВыделятьПоляДокументаЦветом"); ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла(); ПараметрыДанныхФайла.ИдентификаторФормы = УникальныйИдентификатор; ПараметрыДанныхФайла.ПолучатьСсылкуНаДвоичныеДанные = Истина; ДанныеФайла = РаботаСФайлами.ДанныеФайла(ДанныеШаблона.ФайлШаблон, ПараметрыДанныхФайла); СтруктураДокумента = СтруктураДокумента(ДанныеФайла, УникальныйИдентификатор); СтруктураДокумента.Вставить("Шаблон", Шаблон); Если СтруктураДокумента.Расширение = "docx" Тогда ВыбранныеПараметры = ПараметрыИзДокументаDOCX(СтруктураДокумента.ПутьКФайлу); ИначеЕсли СтруктураДокумента.Расширение = "odt" Тогда ВыбранныеПараметры = ПараметрыИзДокументаODT(СтруктураДокумента.ПутьКФайлу); КонецЕсли; ДополнитьСписокСклоняемыхПараметровИсходными(ВыбранныеПараметры); ОписаниеПараметров = ПолучитьЗначенияНайденныхПараметров(ОбъектПечати, ДанныеШаблона, ВыбранныеПараметры, ДополнительныеПараметры); Ошибки = Неопределено; Если СтруктураДокумента.Расширение = "docx" Тогда ЗаполнитьПараметрыДокументаDOCX(ДополнительныеПараметры, ОписаниеПараметров, СтруктураДокумента, Ошибки); ЗаписатьФайлСвязейДокументаDOCX(СтруктураДокумента); ЗаписатьФайлТипыКонтентаДокументаDOCX(СтруктураДокумента); ИначеЕсли СтруктураДокумента.Расширение = "odt" Тогда ЗаполнитьПараметрыДокументаODT(ДополнительныеПараметры, ОписаниеПараметров, СтруктураДокумента, Ошибки); КонецЕсли; ПереместитьФайл(СтруктураДокумента.ПутьКФайлуЗамены, СтруктураДокумента.ПутьКФайлу); СтруктураДокумента.ВременныеФайлы.Добавить(СтруктураДокумента.ПутьКФайлуЗамены); Если ДанныеШаблона.НеВыделятьПоляДокументаЦветом И СтруктураДокумента.Расширение = "docx" Тогда ОтключитьЗатемнениеПолейДокументаDOCX(СтруктураДокумента); КонецЕсли; УдалитьВременныеФайлы(СтруктураДокумента.ВременныеФайлы); ДвоичныеДанныеФайла = ПолучитьДвоичныеДанныеДокументаИзСтруктурыФайлов(СтруктураДокумента.КаталогСтруктураФайла, СтруктураДокумента.Расширение); ДанныеФайла = ПолучитьДанныеНовогоФайла(ОбъектПечати, ДанныеШаблона, СтруктураДокумента.Расширение, ДвоичныеДанныеФайла, УникальныйИдентификатор); ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки); Возврат ДанныеФайла; КонецФункции Функция ПараметрыИзДокументаDOCX(ПутьКФайлу) ПараметрыИзДокумента = Новый Массив; ЧтениеXML = Новый ЧтениеXML(); ЧтениеXML.ОткрытьФайл(ПутьКФайлу); ПараметрыЧтенияXML = Неопределено; ОбновитьСвойстваЧтенияXMLДокументаDOCX(ЧтениеXML, ПараметрыЧтенияXML); Пока ЧтениеXML.Прочитать() Цикл Если НЕ ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Продолжить; КонецЕсли; ОбновитьСвойстваЧтенияXMLДокументаDOCX(ЧтениеXML, ПараметрыЧтенияXML); Пока ЧтениеXML.ПрочитатьАтрибут() Цикл ОбновитьСвойстваЧтенияXMLДокументаDOCX(ЧтениеXML, ПараметрыЧтенияXML); Если НЕ ЗначениеЗаполнено(ПараметрыЧтенияXML.ИмяПараметра) Тогда Продолжить; КонецЕсли; Параметр = ПараметрыЧтенияXML.ИмяПараметра; РаскодироватьСпецСимволы(Параметр); Если ПараметрыИзДокумента.Найти(Параметр) = Неопределено Тогда ПараметрыИзДокумента.Добавить(Параметр); КонецЕсли; КонецЦикла; КонецЦикла; ЧтениеXML.Закрыть(); Возврат ПараметрыИзДокумента; КонецФункции
Чтение файлов старого формата DOC в 1С возможно только на клиенте с использованием компонент Microsoft Office.
Чтение XLS XLSX файлов доступно как на клиенте пользователя, так и на сервере 1С, (приложение клиента и приложение сервера находятся на разных машинах)
при выполнении условий:
- Так как 1С обращается к диску из серверного модуля, то обращение происходит под тем пользователем, под которым запущен сервер 1С. Для чтения файлов нужно настроить права доступа к этой папке для пользователя, под которым запущен сервер.
- Для чтения XLS XLSX на сервере необходимо создать папку C:WindowsSysWOW64configsystemprofileDesktop или C:WindowsSystem32configsystemprofileDesktop (в зависимости от разрядности вашей системы).
Чтение данных файла XLS XLSX осуществляется без Microsoft Office с помощью объекта ТабличныйДокумент().
Загрузка прайс-листов в 1С 8.3 из Excel или Word
В типовых конфигурациях 1С очень часто встречается штатный функционал по загрузке каких-либо данных в программу. В данной статье мы рассмотрим загрузку цен поставщиков, на примере 1С 8.3 «Управление торговлей 11». Данный способ применим и в других ситуациях, где доступна подобная загрузка, например, планы закупок в ERP и прочее.
Перейдем в раздел «Закупки» и выберем пункт «Цены поставщиков (прайс-листы)». Мы будем загружать в программу именно прайс-лист, который нам выслал поставщик в Excel файле.

Перед вами откроется форма, в которой можно сформировать прайс-лист на определенную дату с отбором по поставщику. Нажмите в данном окне на кнопку «Загрузить из внешнего файла».

Перед нами появилось окно, в котором расположено поле табличного документа. Именно в него нужно будет поместить прайс-лист, предназначенный для загрузки в 1С.
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С. Связаться с нами можно по телефону +7 499 350 29 00. Услуги и цены можно увидеть по ссылке. Будем рады помочь Вам!

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

Теперь перейдём к самой интересной части – заполнению табличного документа. После выбора типа цен в нем появилась дополнительная колонка – «Оптовая». В нее в дальнейшем мы будем проставлять цену номенклатуры поставщика из прайс-листа.
Так же данный табличный документ содержит колонки «Артикул» и «Номенклатура поставщика». Эти данные тоже нужно будет заполнить.
Получите понятные самоучители по 1С бесплатно:
- Самоучитель по 1С Бухгалтерии 8.3;
- Самоучитель по 1С ЗУП 8.3.
Откроем прайс-лист, который нам прислал поставщик в Excel файле. Дальше нужно выделить ту область, которая должна попасть в 1С. У нас получились три строки с соответствующими колонками.
Далее переходим в 1С и нажимаем на ту ячейку, с которой должна быть произведена вставка скопированных нами данных. Мы вставили данные в первую строку колонки «Артикул». Вставку можно осуществить как контекстным меню (правой кнопкой мыши) и комбинацией горящих клавиш Ctrl+V.

Данные в этот табличный документ можно внести не только копированием из Excel, но и из Word, а также из других файлов, поддерживающих копирование данных. Так же вы можете заполнить таблицу вручную при небольших объемах данных.
После внесения всех строк прайс-листа поставщика, указания даты, видов цен и самого поставщика в шапке помощника загрузки, нажмите в правом нижнем углу на кнопку «Далее».

1С 8.3 некоторое время будет анализировать введенные вами данные в зависимости от их объема (в нашем случае это заняло не более секунды). После этого нам выдалось окно с предупреждением о том, что для некоторых строк введенного нами прайс-листа не найдено соответствий в справочнике номенклатуры поставщика. Все верно, так как данные номенклатурные позиции мы ранее не приобретали.
У нас отображается вся номенклатура, но при большом объеме с помощью соответствующего переключателя можно просмотреть только не сопоставленные позиции.

Как видно на рисунке выше, что в колонке «Номенклатура поставщика» в каждой строке по умолчанию написано, что будет создана при загрузке. Это означает то, что для всех тех номенклатурных позиций, которым не было установленных соответствий в справочнике создадутся новые. Конечно же, нажав в данном поле вы можете выбрать уже существующую номенклатурную позицию.
После проверки всех не сопоставленных позиций, нажмите на кнопку «Далее» и укажите способ регистрации цен. Естественно, регистрировать только измененные цены можно только для сопоставленных номенклатурных позиций.

На этом завершена настройка загрузки прайс-листа и все данные попадут в программу.




