Загрузка данных из табличного документа от 1C. Нет ODF. Добавляем.

18.04.13

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Добавим документы ODF (OpenOffice/LibreOffice) в стандартную обработку Загрузки Табличного документа из 1С.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Загрузка данных из табличного документа c ODF.
.epf 67,48Kb
130 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Доброго времени суток!

Обработку  ЗагрузкаданныхизТабличногоДокументаконечно должен знать каждый 1С-ник. И сколько бы обработок такого плана не появлялось, эта остается классикой. Даже претензии можно предъявлять если вы в ней что-то не понимаете к самой 1С. Хотя какие претензии, исходный код открыть - изучай, не хочу...

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

Но что-то в ней не хватает. Конечно стандарта офисных документов ODF (Open Document Format и между прочим ГОСТ Р ИСО/МЭК 26300-2010). Как говаривал мой начальник - есть чем себя занять. Из всех внешних загрузок, которые сейчас есть к сожалению самыми распостраненными являются OLE(Com+) технологии. Возможно что-то еще появиться, но пока примемся за них.

Залезаем в код и видим несколько однотипных функуций

Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт

Функция мПрочитатьТабличныйДокументИзТекста(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт

 

Пора добавить свою:

// Функция считывает в табличный документ данные из файла в формате ODF Calc(ods)
//
// Параметры:
//  ТабличныйДокумент  - ТабличныйДокумент, в который необходимо прочитать данные
//  ИмяФайла           - имя файла в формате ODF, из которого необходимо прочитать данные
//  НомерЛистаCalc     - номер листа книги Calc, из которого необходимо прочитать данные
//
// Возвращаемое значение:
//  Истина, если файл прочитан, Ложь - иначе
//
Функция мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент, ИмяФайла, НомерЛистаCalc = 1) Экспорт

   
ВыбФайл = Новый Файл(ИмяФайла);
    Если НЕ
ВыбФайл.Существует() Тогда
       
Сообщить("Файл не существует!");
        Возврат Ложь;
    КонецЕсли;

    Попытка
       
ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
       
Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop");
       
Desktop.getCurrentFrame().getContainerWindow().setVisible(Ложь);  //невидимым основное окно.

        //установим параметры - не показывать таблицу Calc
       
Параметры = Новый COMSafeArray("VT_DISPATCH", 1);
       
Свойство = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
       
Свойство.Name = "Hidden";
       
Свойство.Value = true;
       
Параметры.SetValue(0,Свойство);

       
Document = Desktop.LoadComponentFromURL("file:///" + ИмяФайла, "_blank", 0, Параметры);
       
Состояние("Обработка файла Office Calc ...");
       
Листы = Document.getSheets();
       
Лист = Листы.getByIndex(НомерЛистаCalc-1);
    Исключение
       
Сообщить("Ошибка загрузки данных. Возможно неверно указан номер листа книги Calc.");
        Возврат ложь;
    КонецПопытки;

   
ТабличныйДокумент.Очистить();

   
//Определение максимум ячейки с данными...
   
НульЯчейка = Лист.GetCellbyPosition(0,0);
   
НульКурсор = Лист.createCursorByRange(НульЯчейка);
   
НульКурсор.GotoEndOfUsedArea(1);
   
НульАдрес  = НульКурсор.RangeAddress;
   
ПослСтрока = НульАдрес.EndRow;
   
ПослКолонка = НульАдрес.EndColumn;

    
Для Row = 1 По ПослСтрока + Цикл     

      Если Лист.getCellByPosition(Column-1,Row-1).getType() = 0 Или Лист.getCellByPosition(Column-1,Row-1).getType() = 1 Тогда      

        ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = Лист.getCellByPosition(Column-1,Row-1).value;

      ИначеЕсли Лист.getCellByPosition(Column-1,Row-1).getType() = 2 Тогда

       
ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = Лист.getCellByPosition(Column-1,Row-1).string;

      КонецЕсли;

    КонецЦикла;

   
//ServiceManager.quit();
   
Document.Dispose();
   
Document = 0;
   
Параметры = 0;
   
Desktop = 0;
   
ServiceManager = 0;

    Возврат Истина;

КонецФункции

И добавим в форму выбора файла ods по тексту.

   ДиалогВыбораФайла.Фильтр    = "Табличный документ (*.mxl)|*.mxl|Лист Calc (*.ods)|*.ods|Лист Excel (*.xls)|*.xls|Текстовый документ (*.txt)|*.txt|dBase III (*.dbf)|*.dbf|";

И выбор функции для ods

   ИначеЕсли нРег(ФайлНаДиске.Расширение) = ".ods" Тогда
           
мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);

 

P.S. Сайт www.sikuda.ru

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27180 24870 руб.

12.06.2017    156346    925    306    

473

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

52967 47670 руб.

25.02.2015    180021    342    281    

405

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.261.x) и БП 3.0 (3.0.189.x). Правила подходят для версии ПРОФ и КОРП.

38000 34200 руб.

15.12.2021    31586    229    61    

173

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 34200 руб.

23.07.2020    64003    302    81    

242

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

61356 55220 руб.

15.04.2019    80957    218    167    

157

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Перенос данных из ЗУП 3 в ЗУП 3 | из ЗУП 3 в КА 2 | из ЗУП 3 в ERP | Оперативно обновляется при выходе новых релизов 1С | Готовые правила конвертации (КД 2) для перехода с "ЗУП 3" на "УП ред. 3" / "КА, ред. 2" / "ERP, ред. 2" |Переносится нормативно-справочная информация и документы с движениями

58422 52580 руб.

11.01.2021    36645    32    55    

34

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Перенос данных из КА 1.1 в КА 2 | из КА 1.1 в УТ 11 | Воспользовались более 367 компаний! | Переносятся все возможные виды документов, начальных остатков и вся справочная информация из "1С:КА 1.1" в "1С:КА 2.х" / "1С:УТ 11" | Разработан в формате КД 2 (правила конвертации данных) | Фильтр по организациям при выгрузке | Выбор разных алгоритмов выгрузки начальных остатков | Можно проверить перенос до покупки!

61356 55220 руб.

04.12.2015    197655    260    354    

413

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

61356 55220 руб.

10.07.2018    76747    53    143    

58
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. fomix 33 09.11.12 09:40 Сейчас в теме
Все хорошо. Зачет! Только последние 2 картинки "по ходу не из той оперы"... Достаточно было одной первой обойтись. :-)
2. lvictor58 138 25.12.12 11:34 Сейчас в теме
Ну тогда уж и в процедуре КоманднаяПанельТабличногоДокументаСохранить(Кнопка)
надо было тоже указать
ДиалогВыбораФайла.Фильтр    = "Табличный документ (*.mxl)|*.mxl|Лист Calc (*.ods)|*.ods|Лист Excel (*.xls)|*.xls|Текстовый документ (*.txt)|*.txt|";
3. Kom-off 29.12.12 16:11 Сейчас в теме
Для автора и тех кто будет этим делом пользоваться. Не знаю как в версиях Open Office 2.x, но в версиях 3.x значения в ячейках таблицы Calc отличаются по типам хранимых в них значений и, соответственно, методам их получения. Реализация функции чтения данных Calc в этой статье читает только числовые значения и не читает текстовые. Для добавления возможности чтения тестовых данных необходимо строку:
ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = Лист.getCellByPosition(Column-1,Row-1).value;

заменить на конструкцию:
			Если Лист.getCellByPosition(Column-1,Row-1).getType() = 0 Или  Лист.getCellByPosition(Column-1,Row-1).getType() = 1 Тогда
				ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = Лист.getCellByPosition(Column-1,Row-1).value;
			ИначеЕсли Лист.getCellByPosition(Column-1,Row-1).getType() = 2 Тогда
				ТабличныйДокумент.Область("R" + Формат(Row, "ЧГ=") +"C" + Формат(Column, "ЧГ=")).Текст = Лист.getCellByPosition(Column-1,Row-1).string;
			КонецЕсли;
teflon; sikuda; Lukich66; +3 Ответить
4. sikuda 680 27.01.13 15:47 Сейчас в теме
(3) Спасибо. Изменил по указанному.

Обнаружил странное поведение обработки на последнем LibreOffice 3.6. Если он не загружен, выдается ошибка типа неизвестный синтаксис -embeded. Единственное решения загрузить LibreOffice (открыть любой документ).
6. user012 13.02.13 12:40 Сейчас в теме
5. sikuda 680 13.02.13 11:26 Сейчас в теме
Заходите на сайт sikuda.ru. Комментируйте статью.
7. Ламия 02.10.13 18:39 Сейчас в теме
8. Ламия 02.10.13 18:41 Сейчас в теме
Здравствуйте, стоит LibreOffice 4.1, выдает
Ошибка загрузки данных. Возможно неверно указан номер листа книги Calc.
Не пойму что не так, помочь можете?
9. capitan 2550 29.01.15 19:10 Сейчас в теме
Не знаю как в 2013 году, а в 2015 если сделать копипаст с описания - не взлетает.
Надо как водится допилить напильником :)
Поэтому плюс не поставил. А идея хорошая.
10. tarassov 113 02.06.15 13:57 Сейчас в теме
(9) capitan,
Аналогично.
Поэтому добавлю сюда свой вариант "допиливания"
Прикрепленные файлы:
ЗагрузкаДанныхИзТабличногоДокумента_УФ_БезМодальности.epf
11. everest12345 57 01.09.15 16:52 Сейчас в теме
Переменная Column не определена. Где она задается?
Для отправки сообщения требуется регистрация/авторизация