Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Экспорт документов в Excel

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Прикладные решения от ЧП Казначей
Предыдущая тема :: Следующая тема  
Автор Сообщение
nikman



Зарегистрирован: 10.03.2005
Сообщения: 786
Откуда: Украина, Донецк

СообщениеДобавлено: Пн Апр 02, 2012 9:18 pm    Заголовок сообщения: Экспорт документов в Excel Ответить с цитатой

Существенным неудобством в Акценте остается невозможность копирования документов в Excel.
Особенно этот минус выделяется на фоне 1С, где все печатные формы документов формируются в табличном виде и легко выгружаются в Excel.
Нельзя сказать, что это нужно часто, но когда нужно -- приходится долго работать над этим.
Чтобы устранить этот недочет, решил выложить готовую выгрузку в Excel для самых востребованных случаев:
Счет,
Расходная накладная,
Акт сдачи работ,
Расходная налоговая накладная.

Ссылка для скачивания.

В ссылке есть файл с описанием и примерами.

Если у кого-то будут появляться новые документы, присылайте, буду включать в эту разработку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail AIM Address MSN Messenger
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Вт Апр 03, 2012 8:21 am    Заголовок сообщения: Ответить с цитатой

Есть другое решение, более простое, универсальное, но не такое красивое: я просто повесил на on_popup такой код:
Код:
Sub OnPopup(Command, Form, Op)
   Dim Dlg

   Select Case Command
      Case 10
         Dim xl
         Dim Path
         Dim Sht
         Dim i, j

         If Form.Map.Exists("CurGrid") Then
            ' Если в Мап передали таблицу, которую нужно выгрузить в эксель, то запускаем выгрузку
            If CreateExcel(xl)Then
               Path = GetPath()
               If Path <> "" Then
                  If Not OpenBook(xl, Sht, Path) Then Exit Sub
                  With Form.Map.Item("CurGrid")
                     If .TypeName = "FrmGrid" Then
                        For j=1 To .Columns
                           For i=1 To .Rows
                              Select Case .Cell(i,j).CellDataType
                                 Case vbLong
                                    Sht.Cells(i,j).NumberFormat = "#,##0"
                                 Case vbDouble, vbCurrency
                                    Sht.Cells(i,j).NumberFormat = "#,####0.0000"
                                 Case vbDate
                                    Sht.Cells(i,j).NumberFormat = "d/m/yyyy"
                              End Select
                              Sht.Cells(i,j).Value = .Cell(i,j).Value
                           Next
                        Next
                     ElseIf .TypeName = "FrmScrollGrid" Then
                        For j=1 To .Columns
                           Select Case .Column(j).CellDataType
                              Case vbLong
                                 Sht.Columns(j).NumberFormat = "#,##0"
                              Case vbDouble, vbCurrency
                                 Sht.Columns(j).NumberFormat = "#,####0.0000"
                              Case vbDate
                                 Sht.Columns(j).NumberFormat = "d/m/yyyy"
                           End Select
                           For i=1 To .Rows
                              Sht.Cells(i,j).Value = .Cell(i,j).Value
                           Next
                        Next
                     End If
                     xl.Visible = True
                  End With
               End If
            End If
            Form.Map.Remove("CurGrid")
         Else
            MsgBox "Не можу відкрити таблицю!", vbInformation, "Помилка"
         End If
   End Select
End Sub

Вынес это в скелет формы и выгружаю любую таблицу по правому клику из выпадающего меню. Конечно, это не форма (можно попытаться написать универсальную функцию выгрузки любой формы в определенном приближении, но лень), но если юзеру нужно найти из 1000 строк в каком-нить акте или накладной определенную строку для редактирования - чудесно работает, рекомендую.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Виктор



Зарегистрирован: 10.03.2005
Сообщения: 210
Откуда: Горловка (Щирий кум)

СообщениеДобавлено: Вт Апр 03, 2012 10:16 am    Заголовок сообщения: Re: Экспорт документов в Excel Ответить с цитатой

nikman писал(а):
Существенным неудобством в Акценте остается невозможность копирования документов в Excel.

Больше нравиться использование именнованных диапазонов в Excel - да и под Word сделать наверно давольно просто, вот пример кода:

Код:

Sub btnToExcel
 Dim i, rg, j
 Dim Path   

 If Not CreateExcel() Then Exit Sub
   If Not Workarea.Params.Exists("Имя папки шаблонов") Then Workarea.Params.Create vbString, "Имя папки шаблонов"
   Path = Workarea.Params("Имя папки шаблонов")

   While Workarea.Params("Имя папки шаблонов").Value2=""
      Path =   CStr(selectPath)
      Workarea.Params("Имя папки шаблонов").value2 = Path
      Workarea.Params.Refresh
   Wend

 xl.Workbooks.Add Path & NameTemplFile      'Добавим рабочий лист

 Set ws = xl.Workbooks(1).Sheets(1)
' Set ws2 = xl.Workbooks(1).Sheets(2)

 xl.DisplayAlerts = False
 'xl.Workbooks(1).Sheets(3).Delete
' xl.Workbooks(1).Sheets(2).Delete
 xl.DisplayAlerts = True
 ws.Name = "Счет с НДС"

 With xl.ActiveWindow
   .DisplayGridlines = False
'   .DisplayHeadings = False
   .DisplayZeros = False
'  .FixRows=4
 End With

 With ws
   .range("Название").Value = lblDocName.Text & " " & Op.DocNo
   .range("Дата").Value = "  от  " & Format2(edDocDate.date,edDocDate.Format)
   .range("Дата_До").Value = "Cчет действителен до " & Format2(edDateTo.date,edDateTo.Format)

'   .range("Номер").Value = edDocNo.Text

'   .range("Реквизиты").value = MyCo.Name + " ОКПО " + MyCo.Code + " Р/с " + MyCo.BankAccounts(1).AccountNo + " в " + MyCo.BankAccounts(1).Bank.Name + " МФО " + MyCo.BankAccounts(1).Bank.Code + vbCrLf + " Адрес : " + MyCo.Address 'Meter.Open "Заполнение данных", 0, row_count
   .range("Плательщик") = "Плательщик: " & Op.TransList(1).AgToBind


   .Names.Add "Данные","=R23C1:R23C10"

   For i=1 To op.TransList(1).Rows-1
      .Range("Данные").EntireRow.Insert
'      ws2.Range("Данные2").EntireRow.Insert
   Next
   .Names.Add "Данные","=R22C1:R22C10"
   .Names.Add "Данные2","=R22C13:R22C22"

   For i=1 To op.TransList(1).Rows
      Select Case Op.TransList(1).Item(i).EntID
         Case Titulka
            .Range(.Range("Данные").Cells(i, 1), .Range("Данные").Cells(i, 10)).Select
            Call BoldAllSelect
            .Range(.Range("Данные").Cells(i, 1), .Range("Данные").Cells(i, 10)).Font.Italic = True
            .Range(.Range("Данные").Cells(i, 1), .Range("Данные").Cells(i, 10)).Font.Bold = True
            .Range(.Range("Данные").Cells(i, 1), .Range("Данные").Cells(i, 10)).Font.Size = 12
            .Range(.Range("Данные").Cells(i, 1), .Range("Данные").Cells(i, 10)).Font.ColorIndex = 5
            .Range(.Range("Данные").Cells(i, 1), .Range("Данные").Cells(i, 10)).Interior.ColorIndex = COLOR_STRIPE
            .Range(.Range("Данные").Cells(i, 2), .Range("Данные").Cells(i, 10)).Select
            Xl.Selection.MergeCells = True
            .Range("Данные").Cells(i,2) = Op.Trans(1,i).Entity.Name
   
            .Range(.Range("Данные2").Cells(i, 1), .Range("Данные2").Cells(i, 10)).Select
            Call BoldAllSelect
            .Range(.Range("Данные2").Cells(i, 1), .Range("Данные2").Cells(i, 10)).Font.Italic = True
            .Range(.Range("Данные2").Cells(i, 1), .Range("Данные2").Cells(i, 10)).Font.Bold = True
            .Range(.Range("Данные2").Cells(i, 1), .Range("Данные2").Cells(i, 10)).Font.Size = 12
            .Range(.Range("Данные2").Cells(i, 1), .Range("Данные2").Cells(i, 10)).Font.ColorIndex = 5
            .Range(.Range("Данные2").Cells(i, 1), .Range("Данные2").Cells(i, 10)).Interior.ColorIndex = COLOR_STRIPE
            .Range(.Range("Данные2").Cells(i, 2), .Range("Данные2").Cells(i, 10)).Select
            Xl.Selection.MergeCells = True
            .Range("Данные2").Cells(i,2) = Op.Trans(1,i).Entity.Name
         Case Else
          .Range("Данные").Cells(i, 1) = Op.Trans(1,i).RowNo
   '       .Range("Данные").Cells(i, 2) = Op.Trans(1,i).Entity.Cat
          .Range("Данные").Cells(i, 2) = Op.Trans(1,i).Entity.Name
          .Range("Данные").Cells(i, 3) = Op.Trans(1,i).UnitBind.Name
          .Range("Данные").Cells(i, 4) = Op.Trans(1,i).Qty
          .Range("Данные").Cells(i, 7) = Op.Trans(1,i).Price
          .Range("Данные").Cells(i, 8) = Op.Trans(1,i).Price*1.2
          .Range("Данные").Cells(i, 9) = Op.Trans(1,i).Sum
          .Range("Данные").Cells(i, 10) = Op.Trans(1,i).Price*Op.Trans(1,i).Qty*1.2
   
          .Range("Данные2").Cells(i, 1) = Op.Trans(1,i).RowNo
   '       .Range("Данные2").Cells(i, 2) = Op.Trans(1,i).Entity.Cat
          .Range("Данные2").Cells(i, 2) = Op.Trans(1,i).Entity.Name
          .Range("Данные2").Cells(i, 3) = Op.Trans(1,i).UnitBind.Name
          .Range("Данные2").Cells(i, 4) = Op.Trans(1,i).Qty
          .Range("Данные2").Cells(i, 7) = Op.Trans(1,i).Price
          .Range("Данные2").Cells(i, 8) = Op.Trans(1,i).Price*1.2
          .Range("Данные2").Cells(i, 9) = Op.Trans(1,i).Sum
          .Range("Данные2").Cells(i, 10) = Op.Trans(1,i).Price*Op.Trans(1,i).Qty*1.2
      End Select
   Next

'  For i=1 To op.TransList(1).Rows+1 Step 2
'   .Range("Данные").Cells(i,1).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,2).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,3).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,4).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,5).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,6).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,7).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,8).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,9).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные").Cells(i,10).Interior.ColorIndex = COLOR_STRIPE
'
'   .Range("Данные2").Cells(i,1).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,2).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,3).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,4).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,5).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,6).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,7).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,8).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,9).Interior.ColorIndex = COLOR_STRIPE
'   .Range("Данные2").Cells(i,10).Interior.ColorIndex = COLOR_STRIPE
'  Next 

'   .Range("Данные").Cells.EntireColumn.AutoFit
   .range("Сумма_прописью").Value = SpellMoney2(Op.Sum,"0|грн|грн|грн|0|коп|коп|коп")
   .range("НДС_прописью").Value = SpellMoney2(Op.TransList(2).Sum,"0|грн|грн|грн|0|коп|коп|коп")

   .range("Итого") = Op.TransList(1).Sum
'   .range("НДС_строка").Value = IIF(Op.TransList(2).Sum <> 0, "НДС 20%", "Без НДС")
   .range("НДС") = Op.TransList(2).Sum
   .range("Всего") = Op.Sum   
'  .Range("КолВес")= " Кол-во: " & CStr(Op.transList(1).Qty)& "   "

'2лист
'    With ws2
'      .Names.Add "Данные2","=R14C2:R14C9"
'
'      For i=1 To op.TransList(1).Rows
'          .Range("Данные2").Cells(i, 1) = Op.Trans(1,i).RowNo
'          .Range("Данные2").Cells(i, 2) = Op.Trans(1,i).Entity.Cat
'          .Range("Данные2").Cells(i, 3) = Op.Trans(1,i).Entity.Name
'          .Range("Данные2").Cells(i, 4) = Op.Trans(1,i).UnitBind.Name
'          .Range("Данные2").Cells(i, 5) = Op.Trans(1,i).Qty
'          .Range("Данные2").Cells(i, 6) = Op.Trans(1,i).EntBind.tag
'          .Range("Данные2").Cells(i, 7) = Op.Trans(1,i).Price
'          .Range("Данные2").Cells(i, 8) = Op.Trans(1,i).Sum
'      Next
'
'     For i=1 To op.TransList(1).Rows+1 Step 2
'      .Range("Данные2").Cells(i,1).Interior.ColorIndex = COLOR_STRIPE
'      .Range("Данные2").Cells(i,2).Interior.ColorIndex = COLOR_STRIPE
'      .Range("Данные2").Cells(i,3).Interior.ColorIndex = COLOR_STRIPE
'      .Range("Данные2").Cells(i,4).Interior.ColorIndex = COLOR_STRIPE
'      .Range("Данные2").Cells(i,5).Interior.ColorIndex = COLOR_STRIPE
'      .Range("Данные2").Cells(i,6).Interior.ColorIndex = COLOR_STRIPE
'      .Range("Данные2").Cells(i,7).Interior.ColorIndex = COLOR_STRIPE
'      .Range("Данные2").Cells(i,8).Interior.ColorIndex = COLOR_STRIPE
'     Next 
'    .Range("КолВес2")= IIF(ves <> 0, " Кол-во: " & CStr(Op.transList(1).Qty) & "     Общий вес: "  & CStr(ves) & "  кг."  , "   Кол-во: "  & Op.transList(1).Qty)
'  End With
 End With

 xl.Visible = True
 Set ws = Nothing
 Set xl = Nothing
End Sub


Перед этим для нужного документа создаем Excel документ, проставляем где надо именованные диапазоны, переименовываем расширение в .xlt и подсовываем для этого кода
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
nikman



Зарегистрирован: 10.03.2005
Сообщения: 786
Откуда: Украина, Донецк

СообщениеДобавлено: Сб Апр 28, 2012 1:40 pm    Заголовок сообщения: Ответить с цитатой

Добавил приходную налоговую, обновил счет, согласно версии 99.

Теперь есть:
Счет,
Расходная накладная,
Акт сдачи работ,
Приходная налоговая накладная,
Расходная налоговая накладная.

Именованные диапазоны, наверное, будут удобны. Как-нибудь попробую.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail AIM Address MSN Messenger
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Прикладные решения от ЧП Казначей Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group