| 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, блин, как я ненавижу документацию по ОО.
 
 ЗЫ Это пока тестовая версия выгрузки - проверки банком еще не прошла.
 |  |