image_pdfimage_print

К санкциям готов!

Доброго времени суток!
Санкции на иностранное коммерческое программное обеспечение все ближе и ближе. И надо же с этим что-то делать.

Итак подготавливаемся к импортозамещению коммерческого иностранного программного обеспчения.

Дистрибутив Linux Mint 17. Xfce. Windows 7,8,10
1С 8.3 локальные базы. Лицензирование NFC для разработчика или Бухгалтерия 3.0 измененной конфигурации.
wine для установки 1С дистрибутивов
В дистрибутиве:
LibreOffice 4.2.6.3 — Microsoft Office 2013
apache2
php 5.3
И конечно wordpress 4.0 для локальной копии блога.

Самый быстрый способ обновить платформу 1С на Linux:
1. Скачать Клиента и Сервер из 1С users.v8.1c.ru
2. Распаковать их в отдедьную папку
3. Запустить
cd Директория с пакетами
sudo dpkg -i *.deb
4. Установить HASP ключ для Linux (http://wiki.etersoft.ru/HASP?v=roe).
4. Попить кофейку.

И для начинающих — Windows версия 1С для обучения : http://online.1c.ru/catalog/programs/program/18610119

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

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

Обработку ЗагрузкаданныхизТабличногоДокументаконечно должен знать каждый 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;

//Для Column = 1 По ПослКолонка + 1 Цикл
// ТабличныйДокумент.Область(«C» + Формат(Column, «ЧГ=»)).ШиринаКолонки = Лист.getColumns.getByIndex(Column-1).Width;
//КонецЦикла;

Для Row = 1 По ПослСтрока + 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(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);

Вот так лучше.

Скачать обработку можно с Инфостарта http://infostart.ru/public/158951/

 

Другие подобные ссылки:

http://help1c.com/faq82/view/1225.html