15 октября, понедельник 21:06
Bankir.Ru

Объявление

Свернуть
Пока нет объявлений.

Импорт данных в KLIKO из Excel

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Импорт данных в KLIKO из Excel

    Коллеги! Пользуясь некоторым затишьем, хочу поделиться с Вами своей наработкой по обозначенной теме. Думаю многим облегчит жизнь.

    (НИКЕ дальше не читать!!!!!!!!!)


    В екселе в начале листа собираете данные для сброса следующим образом. В ячейке А1 – название формы по-кликовски. Например, F115> или F118C>. В ячейке В1 – имя файла, в который будет происходить сброс. Например, C:\F115\F115_200405.txt. В ячейке F1 – количество строк, которое занимает импортируемая форма, в ячейке Н1 – количество столбцов. При задании количества столбцов важно не забыть про последние пустые графы, которые должны присутствовать при импорте многих форм.
    Чтобы понять структуру данных для каждой формы надо сделать из КЛИКО экспорт и посмотреть получившийся файл.
    Строки со 2-ой и далее содержат данные, по одному в каждой ячейке, включая всякие служебные пустые и прочие.

    Далее, находясь на этом листе запускается макрос, текст которого приведен ниже.


    Option Explicit
    Private Declare Function CharToOem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long

    Function AnsiToOem(ByVal str As String) As String
    'Переводит строку из ANSI в ASCII
    Dim str1 As String
    str1 = Space$(Len(str))
    Call CharToOem(str, str1)
    AnsiToOem = str1
    End Function

    Sub сброс_для_kliko()
    '
    Dim Ss As String, Outfile As String, Ks As Integer, Kst As Integer
    Dim i, j As Integer
    ActiveSheet.Range(Cells(1, 2), Cells(1, 2)).Select
    Outfile = Selection.Value ‘ имя файла для сброса
    If Outfile = "" Then
    Exit Sub
    End If
    ActiveSheet.Range(Cells(1, 6), Cells(1, 6)).Select
    Ks = Selection.Value ‘ количество строк
    If Ks = 0 Then
    Exit Sub
    End If
    ActiveSheet.Range(Cells(1, 8), Cells(1, 8)).Select
    Kst = Selection.Value ‘ количество столбцов
    If Kst = 0 Then
    Exit Sub
    End If
    Open Outfile For Output As #1
    For i = 1 To Ks ‘ цикл по строкам
    For j = 1 To Kst ‘ цикл по столбцам
    ActiveSheet.Range(Cells(i, j), Cells(i, j)).Select
    If Len(Selection.Value) > 0 And TypeName(Selection.Value) > "String" Then ‘ если есть данные и они не текстовые
    Ss = Trim(str(Selection.Value)) ‘ то преобразуем в строку и убираем пробелы
    Else ‘ если данных нет или они текстовые
    Ss = Selection.Value
    End If
    If Mid(Ss, 1, 1) > "" Then Ss = """" + Ss + """" ‘ если не заголовок формы, то окавычиваем
    Ss = AnsiToOem(Ss) ‘ перекодируем в DOS
    Print #1, Ss; ‘ выводим
    If Mid(Ss, 1, 1) = "" Then Exit For ‘ если заголовок формы, то пропускаем последующие столбцы
    If j Int(Kst) Then Print #1, ","; ‘ если не последний столбец, то выводим разделитель
    Next j
    Print #1, vbCrLf; ‘ выводим конец строки + перевод каретки
    Next i
    Close #1
    End Sub


    Ну вот, собственно и все.
    Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

  • #2
    CAP
    Да, хороший макрос. У меня почти такой же...
    Только я вот "окавычиваю" простой командой write #1, ...

    Для информации - если все формы запихнуть в один файл, разделенный заголовками формы, то kliko сама выберет нужные формы и втянет.

    Комментарий


    • #3
      CAP, Спасибо! У меня с кодировкой DOS-кой раньше не получалось.

      Комментарий


      • #4
        slava_bank Про эту перекодировку раньше уж обсудили - в теме про публикуемую отчетность.

        MValerik Это понятно. А есть смысл все пихать в один файл?

        Вижу, откликаются те, кто и сам может макрос смастерить. Остальным, наверное, ручками забивать не в лом...
        Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

        Комментарий


        • #5
          CAP Остальным, наверное, ручками забивать не в лом... Может АБС позволяет не пользоваться Excel? Хотя сомневаюсь, что такие есть.

          Комментарий


          • #6
            slava_bank
            Думаю, только собственные разработки банков уже подстроились под новую kliko, а вот независимые разработчики с этим делом лоханулись...

            CAP Мне удобней, когда все в одном файле. Нажал на кнопочку, сформировался файл, скопировал в нужную директорию и можно загружать в любые pak`и

            Комментарий


            • #7
              MValerik Тут дело, как грится, вкуса. Дело в том, что в поля для сброса данные тоже стараюсь макросами рассчитать и вставить по максимуму. Потому мне кажется неудобно, если они где-то в дальних строках. Да еще при изменении количества строк в других формах надо будет менять все макросы, что куда-то ниже изменений пишут.
              Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

              Комментарий


              • #8
                CAP
                Согласен, при изменении формата данных экспорта, надо будет и макрос менять, но мне это легко сделать

                Комментарий


                • #9
                  MValerik А мне лень.
                  Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

                  Комментарий


                  • #10
                    Не получается в форуме почему-то вложенные циклы разделять пробелами.

                    Комментарий


                    • #11
                      s50 Не получается в форуме почему-то вложенные циклы разделять пробелами.
                      Да, через форму быстрого ответа не получится, все "лишние" пробелы удаляются.
                      А вот через форму полного ответа -
                      вполне!
                      Надо только воспользоваться -[INDENT]
                      В действительности все не так, как на самом деле.

                      Комментарий


                      • #12
                        Еще можно добавить такое в код:
                        If Outfile = "" Then
                        MsgBox "Не введено имя файла для сбороса" & vbCritical
                        Exit Sub
                        End If
                        ActiveSheet.Range(Cells(1, 6), Cells(1, 6)).Select
                        Ks = Selection.Value ' количество строк
                        If Ks = 0 Then
                        MsgBox "Не введено количиство строк" & vbCritical
                        Exit Sub
                        End If
                        ActiveSheet.Range(Cells(1, 8), Cells(1, 8)).Select
                        Kst = Selection.Value ' количество столбцов
                        If Kst = 0 Then
                        MsgBox "Не введено количество столбцов" & vbCritical
                        Exit Sub
                        End If

                        Комментарий


                        • #13
                          Все сделал по инструкциям, но макрос почему-то ругается, разобраться в нем, к сожалению не могу. Просьба огромная, пришлите пожалйста готовый файлик с макросом (рабочий) на любую форму отчетности.
                          bank1@rambler.ru
                          Заранее благодарен за помощь.

                          Комментарий


                          • #14
                            Andrj Без понимания кода, к сожалению, какой бы файл не выслали- поможет мало. Каждая малейшая неточность станет камнем преткновения.

                            Комментарий


                            • #15
                              В связи с тем, что во многих формах есть всякие подформы и количество полей в строках импорта формы различается, выкладываю модификацию макроса, который сбрасывает из листа, где в первая колонка стала служебной и содержит количество полей в текущей строке. Соответственно данные начинаются со столбца В, имя файла в ячейке С1 и количество строк в ячейке G1.

                              Sub сброс_kliko_x_DOS()
                              '
                              ' В С1 - имя файла, в G1 - количество строк, в колонке А - количество столбцов в каждой строке.

                              Dim Ss As String, Outfile As String, Ks As Integer, Kst As Integer
                              Dim i, j As Integer
                              ActiveSheet.Range(Cells(1, 3), Cells(1, 3)).Select
                              Outfile = Selection.Value
                              If Outfile = "" Then
                              Exit Sub
                              End If
                              ActiveSheet.Range(Cells(1, 7), Cells(1, 7)).Select
                              Ks = Selection.Value
                              If Ks = 0 Then
                              Exit Sub
                              End If
                              Open Outfile For Output As #1
                              For i = 1 To Ks
                              ActiveSheet.Range(Cells(i, 1), Cells(i, 1)).Select
                              Kst = Selection.Value
                              If Kst > 0 Then
                              For j = 1 To Kst
                              ActiveSheet.Range(Cells(i, j + 1), Cells(i, j + 1)).Select
                              If Len(Selection.Value) > 0 And TypeName(Selection.Value) > "String" Then
                              Ss = Trim(str(Selection.Value))
                              Else
                              Ss = Selection.Value
                              End If
                              If Mid(Ss, 1, 1) > "" Then Ss = """" + Ss + """"
                              Ss = AnsiToOem(Ss)
                              Print #1, Ss;
                              If j Int(Kst) Then Print #1, ",";
                              Next j
                              End If
                              Print #1, vbCrLf;
                              Next i
                              Close #1
                              End Sub
                              Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

                              Комментарий


                              • #16
                                CAP
                                Здесь есть еще несколько моментов. Бывает нужно видеть из чего складывается сумма в строке. Для этого нужно вводить дополнительные строки, которые не нужно выгружать. У меня, если строчка выгружается, то у нее вначале стоит *.
                                Степень округления для той же 131 формы в разные стобцах разная. Для этого
                                If Len(Selection.Value) > 0 And TypeName(Selection.Value) > "String" Then ' если есть данные и они не текстовые

                                Ss = Trim(str(Round(Selection.Value, Cells(4, j).Value)))' в 4-ой строке проставлена степень округления над соответствующим столбцом.
                                Else ' если данных нет или они текстовые
                                Ss = Selection.Value

                                End If

                                Комментарий


                                • #17
                                  s50 Бывает нужно видеть из чего складывается сумма в строке
                                  Это обязательно нужно видеть.Только не тут. Чтобы не городить лишнего в макросе и не путать, у меня сам собственно расчет происходит либо на том же листе ниже, либо на другом листе (зона расчета). Кроме того, в зоне расчета присутствуют всякие заголовки, комментарии и прочее, что облегчает расчет. А в зоне для сброса стоят только константы заголовочные и ссылки на нужные ячейки рассчетной зоны.

                                  Степень округления для той же 131 формы в разные стобцах разная
                                  Так это и определяется форматом конкретных ячеек. Какой у них будет формат, так их значение и сбросится.
                                  Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

                                  Комментарий


                                  • #18
                                    CAP Это обязательно нужно видеть.Только не тут.- Дело вкуса

                                    Какой у них будет формат, так их значение и сбросится. - Промежуточные суммы не пойдут. Правильно, конечно, в самом Excel-е воспользоваться функцией ROUND или ОКРУГЛ, но это уж больно много данных перелопатить нужно.

                                    Комментарий


                                    • #19
                                      s50 но это уж больно много данных перелопатить нужно В нашем отчетном деле без этого никуда. Так это ж один раз и навсегда. Зато потом голова ни о чем не болит.
                                      Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

                                      Комментарий


                                      • #20
                                        Напишите пожалуйста макрос для ф.118 и 157.

                                        Для 118 попробовала, клико ругнулся:
                                        Нарушен формат импорта формы F118С
                                        строка-1
                                        слово-1
                                        "Порядковый Номер Группы связ

                                        Комментарий


                                        • #21
                                          Cholly Все макросы уже написаны. Надо только правильно скомпоновать данные для сброса.
                                          Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

                                          Комментарий


                                          • #22
                                            Судя по данной ошибке, в чем может быть проблема?! Где исправлять-то надо?

                                            Комментарий


                                            • #23
                                              Cholly Это будет называться отладка программы через форум

                                              Комментарий


                                              • #24
                                                Cholly Сделайте экспорт данных прошлого месяца из КЛИКО и сравните этот файл с тем, который у Вас из екселя выходит. Аккуратненько так сравните. Каждый символ. Ну конечно структуру только, фактические данные должны различаться. Как различия найдете, так и поймете, что у Вас не так.

                                                s50 Это будет называться отладка программы через форум
                                                Это все же лучше, чем по телефону. А мне и этим приходилось заниматься. Особенно хорошо, когда по мобилке из Турции или из Парижу.
                                                Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

                                                Комментарий


                                                • #25
                                                  Да, я также мучался но со своим макросом, потом оказалось что balance сохраняте букву Н в латинском языке, а не на русском (от слова Норматив).

                                                  Комментарий


                                                  • #26
                                                    MValerik У нас вся отчетность и учет ссуд- компоновка Excel c Visual Basic. Запомнился красивый момент. Пишешь в коде программы для записи в ячейку "=If(i>0,0)" в ячейку в результате выводится"=ЕСЛИ(i>0;0)".

                                                    Комментарий


                                                    • #27
                                                      s50
                                                      Я тоже хотел из макроса вставить в ячейку формулу, но не получалось, т.к. я писал "-ЕСЛИ...", а надо было "=IF..."
                                                      Теперь опять придется писать новые макросы (т.к. я в другой банк перешел), но буду уже умней

                                                      Комментарий


                                                      • #28
                                                        Сообщение от НИКА
                                                        Doberman Смотрите тему по ссылке из предыдущего моего поста.
                                                        Да я посмотрела. Просто никто не обсуждал, как должна выглядеть табличка в экселе. Допустим число столбцов такое же, как в таблице, которая формируется из клико. Но вопрос в том, какой должен быть формат ячеек, можно ли туда вставлять формулы, или это должны быть просто числа.

                                                        Комментарий


                                                        • #29
                                                          НИКА , эту веточку я смотрел, но файлика там точно нет, есть код макроса, но хотелось бы обычного простого примера, и все. Если есть поделитесь пжл!!!
                                                          Дорогу осилит идущий!

                                                          Комментарий


                                                          • #30
                                                            TataNata вопрос в том, какой должен быть формат ячеек, можно ли туда вставлять формулы, или это должны быть просто числа

                                                            По опыту скажу так: лучше, чтоб там были формулы. Только простейшие, а именно ссылки на те ячейки, где эти числа рассчитываются. Потому что иногда меняются форматы для импорта в КЛИКО, а иногда и алгоритм расчета формы. Чтоб одно не мешало другому, я практикую, например, расчет в одном листе, а формирование данных для импорта на другом листе. Если форма небольшая, то можно на одном листе совместить, сверху - сброс. ниже - расчет.
                                                            Но, как сказал Маркиз де Сад Захер Мазоху: "Ну, имейте же терпение, мой друг!" (Т.Шаов (с))

                                                            Комментарий

                                                            Пользователи, просматривающие эту тему

                                                            Свернуть

                                                            Присутствует 1. Участников: 0, гостей: 1.

                                                            Обработка...
                                                            X