Имя: Пароль:
1C
 
OpenOffice пример выгрузки в формат Excel (зарплата на карту Альфа-Банка)
0 dk
 
12.07.07
14:05

   ScrptCtrl=СоздатьОбъект("MSScriptControl.ScriptControl");
   ScrptCtrl.Language="vbscript";
   ТекстКода =
   "Function MakePropertyValue(cName, uValue)
   |    Set oSM = CreateObject(""com.sun.star.ServiceManager"")    
   |    Set oPropertyValue = oSM.Bridge_GetStruct(""com.sun.star.beans.PropertyValue"")
   |    oPropertyValue.Name = cName
   |    oPropertyValue.Value = uValue
   |    Set MakePropertyValue = oPropertyValue
   |End Function
   |
   |Function ConvertToUrl(strFile)
   |    strFile = Replace(strFile, ""\"", ""/"")
   |    strFile = Replace(strFile, "":"", ""|"")
   |    strFile = Replace(strFile, "" "", ""%20"")
   |    strFile = ""file:///"" + strFile
   |    ConvertToUrl = strFile
   |End Function
   |
   |Sub MySub
   |
   |    Dim oSM, ODesk
   |    Dim oDoc
   |    Dim OpenPar(0)
   |    Dim Sheet1, Sheet2
   |    Dim oBorder, oTableBorder
   |    Dim my1(0)
   |
   |    'Instanciate OOo : the first line is always required from Visual Basic for OOo
   |    Set oSM = CreateObject(""com.sun.star.ServiceManager"")
   |    Set oDesk = oSM.createInstance(""com.sun.star.frame.Desktop"")
   |
   |    'Откроем с параметром Скрытый
   |    Set OpenPar(0) = MakePropertyValue(""Hidden"", True)
   |    'Создадим пустую книгу в ОО
   |    Set oDoc = oDesk.loadComponentFromURL(""private:factory/scalc"", ""_blank"", 0, OpenPar)
   |   'Обратимся к листам
   |    Set Sheet1 = oDoc.Sheets.GetByIndex(0)
   |    Set Sheet2 = oDoc.Sheets.GetByIndex(1)
   |    'Переименуем листы
   |    Sheet1.setName(""Info"")
   |    Sheet2.setName(""Payments"")
   |    
   |    'Оставим только 2 листа, остальные удалим
   |    For i=2 to (oDoc.Sheets.Count - 1)
   |        oDoc.Sheets.removeByName(oDoc.Sheets.GetByIndex(2).getName())
   |    Next
   |
   |    Sheet1.getCellByPosition(0, 0).setFormula(""Наименование организации"")
   |    Sheet1.getCellByPosition(0, 1).setFormula(""ИНН организации"")
   |    Sheet1.getCellByPosition(0, 2).setFormula(""Расчетный счет"")
   |    Sheet1.getCellByPosition(0, 3).setFormula(""Id организации"")";
   
   НаименованиеОрганизации = "Тест";
   Если спФирм.ТекущаяСтрока() > 0  Тогда
       Зн = спФирм.ПолучитьЗначение(спФирм.ТекущаяСтрока());
       Если ПустоеЗначение(Зн) = 0 Тогда
           ТекстКода = ТекстКода +
           "
           |    Sheet1.getCellByPosition(1, 0).setFormula(""" + Зн.Получить("Наименование")        + """)
           |    
           |    Sheet1.getCellByPosition(1, 1).NumberFormat = 1
           |    Sheet1.getCellByPosition(1, 1).setValue(""" + Зн.Получить("ИНН")                + """)
           |    
           |    Sheet1.getCellByPosition(1, 2).NumberFormat = 100
           |    Sheet1.getCellByPosition(1, 2).setFormula(""'"" & """ + Зн.Получить("НомерСчета")        + """)
           |";
           НаименованиеОрганизации = Зн.Получить("Наименование");
       КонецЕсли;
   КонецЕсли;    //"Если ПустоеЗначение(спФирм.ТекущаяСтрока()) > 0  Тогда
   
   
   ТекстКода = ТекстКода +
   "
   |    
   |    Sheet1.getCellByPosition(0, 4).setFormula(""Дата подготовки файла"")
   |    Sheet1.getCellByPosition(1, 4).NumberFormat = 36
   |    Sheet1.getCellByPosition(1, 4).setFormula(""" + Строка(ТекущаяДата()) + """)
   |
   |    Sheet1.getCellByPosition(0, 5).setFormula(""Дата платежной ведомости"")
   |    Sheet1.getCellByPosition(1, 5).NumberFormat = 36
   |    Sheet1.getCellByPosition(1, 5).setFormula(""" + Строка(ТекущаяДата()) + """)
   |
   |    Sheet1.getCellByPosition(0, 6).setFormula(""Основание (код)"")
   |    " + ?(спВидПлатежа.ТекущаяСтрока() > 0, "Sheet1.getCellByPosition(1, 6).setFormula(""" + спВидПлатежа.ПолучитьЗначение(спВидПлатежа.ТекущаяСтрока()) +""")", "Sheet1.getCellByPosition(1, 6).setFormula(""1"")") + "    
   |
   |    Sheet1.getCellByPosition(0, 7).setFormula(""Валюта ПВ"")
   |    Sheet1.getCellByPosition(1, 7).setFormula(""RUR"")
   |    Sheet1.getCellRangeByName(""A1:A9"").CharColor    = 16711680
   |    Sheet1.getCellRangeByName(""A1:A9"").CharWeight    = 150
   |
   |    'Ширина колонок
   |    Sheet1.Columns.GetByName(""A"").Width = 6000
   |    Sheet1.Columns.GetByName(""B"").Width = 4100
   |
   |    'Построим границы у ячеек
   |    Set oTableBorder = Sheet1.getCellRangeByName(""A1"").TableBorder
   |    
   |    With oTableBorder
   |        
   |        Set oBorder = .TopLine
   |      
   |        With oBorder
   |            .Color = 0
   |            .InnerLineWidth = 0
   |            .OuterLineWidth = 35
   |            .LineDistance = 0
   |        End With
   |        
   |        .TopLine                        = oBorder
   |        .IsTopLineValid                    = True
   |
   |        .BottomLine                        = oBorder
   |        .IsBottomLineValid                = True
   |
   |        .LeftLine                        = oBorder
   |        .IsLeftLineValid                = True
   |
   |        .RightLine                        = oBorder
   |        .IsRightLineValid                = True
   |
   |        .HorizontalLine                    = oBorder
   |        .IsHorizontalLineValid            = True
   |
   |        .VerticalLine                    = oBorder
   |        .IsVerticalLineValid            = True
   |
   |        .Distance                        = 0
   |        .IsDistanceValid                = True
   |    End With
   |    
   |    Sheet1.getCellRangeByName(""A1:B8"").TableBorder = oTableBorder
   |
   |    'Лист 2  
   |    'Установим форматы на колонки
   |    'Sheet2.getCellRangeByName(""B1:B1000"").NumberFormat = 2
   |    'Sheet2.getCellRangeByName(""A1:A1000"").NumberFormat = 100
   |    Sheet2.Columns.GetByName(""B"").NumberFormat = 2
   |    Sheet2.Columns.GetByName(""A"").NumberFormat = 100
   |    
   |    'Ширина колонок
   |    Sheet2.Columns.GetByName(""A"").Width = 4200
   |    Sheet2.Columns.GetByName(""B"").Width = 2000
   |    
   |    'Заголовок
   |    Sheet2.getCellByPosition(0, 0).setFormula(""Номер счета"")
   |    Sheet2.getCellByPosition(1, 0).setFormula(""Сумма"")
   |    Sheet2.getCellRangeByName(""A1:B1"").CharColor    = 16711680
   |    Sheet2.getCellRangeByName(""A1:B1"").CharWeight    = 150";
   
       
   ВремТЗ = СоздатьОбъект("ТаблицаЗначений");
   ВыбВыплатаЗаработнойПлаты.ВыгрузитьТабличнуюЧасть(ВремТЗ);
   
   СписокСотрудников = СоздатьОбъект("ТаблицаЗначений");
   СписокСотрудников.НоваяКолонка("Сотрудник", "Справочник.Сотрудники");
   СписокСотрудников.НоваяКолонка("НомерСчета", "Строка");
   СписокСотрудников.НоваяКолонка("Сумма", "Число");
   
   НомерСтроки = 1;
   
   ВремТЗ.ВыбратьСтроки();
   Пока ВремТЗ.ПолучитьСтроку() > 0 Цикл
       
       Сотрудник    = ВремТЗ.Сотрудник;
       Сумма        = ВремТЗ.Сумма + ВремТЗ.Компенсация;
       
       Если (ПустоеЗначение(Сумма) = 1) ИЛИ (ПустоеЗначение(Сотрудник) = 1)  Тогда
           Сообщить("Пропущена строка: " + Строка(ВремТЗ.НомерСтроки) + " сотрудник: " + СокрЛП(Сотрудник) + " сумма: " + Строка(Сумма));
           Продолжить;
       КонецЕсли;
       
       НомерСчета = СокрЛП(Сотрудник.НомерЗарплатногоСчета);
       
       Если ПустоеЗначение(НомерСчета) = 1 Тогда
           Сообщить("Пропущена строка: " + Строка(ВремТЗ.НомерСтроки) + " сотрудник: " + СокрЛП(Сотрудник) + " сумма: " + Строка(Сумма) + " не указан номер счета");
           Продолжить;
       КонецЕсли;
       
       СписокСотрудников.НоваяСтрока();
       СписокСотрудников.Сотрудник        = Сотрудник;
       СписокСотрудников.НомерСчета    = НомерСчета;
       СписокСотрудников.Сумма            = Сумма;
       
       ТекстКода = ТекстКода + "
       |
       |    Sheet2.getCellByPosition(0, " + НомерСтроки +").setFormula(""'"" & """ + Строка(НомерСчета) + """)
       |    Sheet2.getCellByPosition(1, " + НомерСтроки +").setValue(" + Сумма + ")
       |
       |";
       
       НомерСтроки = НомерСтроки + 1;
       
   КонецЦикла;    //"Пока ВремТЗ.ПолучитьСтроку() > 0 Цикл
   
   ИмяФайла = СокрЛП(Путь);
   Если Прав(Путь, 1) <> "\"  Тогда
       ИмяФайла = ИмяФайла + "\";
   КонецЕсли;
   
   ИмяФайла = ИмяФайла + Формат(ТекущаяДата(),"ДГГГГММДД") + " " + СокрЛП(НаименованиеОрганизации) + ".xls";
   ИмяФайла = СтрЗаменить(ИмяФайла, """", "");
   
   Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
       Если Вопрос("Перезаписать файл" + РазделительСтрок + """" + ИмяФайла + """?", "Да+Нет+Отмена", 30) <> "Да" Тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;    //"Если ФС.СуществуетФайл(ИмяФайла) = 1 Тогда
   
   ТекстКода = ТекстКода +
   "
   |    'Запишем в формате Excel
   |    Set my1(0) = MakePropertyValue(""FilterName"", ""MS Excel 97"")
   |    Call oDoc.storeToURL(convertToURL(""" + ИмяФайла + """), my1)
   |    
   |    'Закроем все
   |    Set oDesk = Nothing
   |    Set oSM = Nothing
   |
   |End Sub
   |";
   
   //Сообщить(ТекстКода);
   ScrptCtrl.AddCode(ТекстКода);
   ScrptCtrl.Run("MySub");
   
   Сообщить("Записан файл: " + ИмяФайла);    
   ЗапуститьПриложение(ИмяФайла);

Может кому пригодится.
Теперь надо писАть выгрузку в формате Word, блин, как я ненавижу документацию по ОО.

ЗЫ Это пока тестовая версия выгрузки - проверки банком еще не прошла.
1 dk
 
12.07.07
14:06
Решил не заморачиваться с array в 7-ке, поэтому весь код выполняется в VBS
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.