16 октября, вторник 21:50
Bankir.Ru

Объявление

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

Нужен пример отчета в Diasoft 5NT

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

  • Нужен пример отчета в Diasoft 5NT

    Требуется создать отчет, который будет сохранять данные в несколько файлов...(т.е разные данные в разные файлы)
    Перерыл много отчетов, но подобного не нашел (сделал средствами sql, но это не подходит, нужно прямо из диаса)

    Пробовал:
    [SQL]
    @SQL@=SQL{
    SELECT 'File1.txt' as File1
    }

    @SQL1@=SQL{
    SELECT 'File2.txt' as File2
    }

    [FILE]
    @FN@ = FileName{File1.txt,}
    @FN1@ = FileName{File2.txt,}
    [FIELDS]
    @File1..@=Field{File1,@s9}

    [FIELDS1]
    @File2..@=Field{File2,@s9}
    Сохраняет только в последний файл все данные
    А нужно что схранил секцию SQL в файл FN,
    а SQL1 в FN1
    Если у кого есть примеры, то поделитесь
    Сервак на SQL2000

  • #2
    Для того что сохранить в несколько файлов нужно использовать функцию отчетника Mark и выставить флаг "Архив отчетов"(!) на шаблоне.
    В первой секции в таблицу tDocMark заносится какие-нибудь идентификаторы секций с любым типом (например тип 1)
    insert tDocMark
    select @@spid,1,1 -- 1 секция

    insert tDocMark
    select @@spid,1,2 -- 2 секция
    и т. д.

    Результирующая выборка каждой секции содержит
    поле которое возращает идентификатор каждой секции и имя файла
    @SQL_1@=SQL{ --1 секция
    ...
    select 1 as ID,
    'File1' as FileName,
    ...
    from ...
    where...
    }
    @SQL_2@=SQL{ --2 секция
    ...
    select 2 as ID,
    'File2' as FileName,
    ...
    from ...
    where...
    }

    Mark в данном случае описывается как
    @Mark@=Mark{@ID.....@,INST}
    // INST - так как мы положили в tDocMark отметки с типом 1
    @ID.....@=Field{ID,@n10}

    Комментарий


    • #3
      как раз выгружает данные в разные файлы описанным ниже образом

      Комментарий


      • #4
        В генераторе отчетов есть функция FileName...

        Комментарий


        • #5
          Просто вызов FileName перед каждой секцией отчета ничего не даст, все сохранистя в один файл.
          Нужно использовать функцию Mark и обязательно поставить флаг "Архив" на отчете.

          Так уж это работает...

          Комментарий


          • #6
            Luzin,
            извините, фамилия знакомая. Вы в ГИВЦ ГКЭС не работали?

            Комментарий


            • #7
              А у меня когда я ставлю флаг "Архив" отчет отрабатывает нормально, но выдает ошибку: "Финансовая операция не имеет начального состояния". Отчего так может быть?
              (5NT 3.5.10.338)

              Комментарий


              • #8
                Сообщение от Tyall
                А у меня когда я ставлю флаг "Архив" отчет отрабатывает нормально, но выдает ошибку: "Финансовая операция не имеет начального состояния". Отчего так может быть?
                (5NT 3.5.10.338)
                цитирую файл KB_0529_0610.doc
                194954 Базовый Если на отчете поставить флаг "Архив" - то при формировании отчета выдается ошибка
                "Финансовая операция не имеет начального состояния"
                отчет формируется, но архив не создается.

                Что нужно сделать для устранения сообщения об ошибке? Необходимо создать произвольную финансовую операцию – например отчеты – для нее создать как минимум начальное состояние или целое свое дерево состояний.

                В принципе, от операции для «архива» нужны только состояния – в данном функционале предполагалось, что с архивом можно на этих состояниях что-то делать. Например, если перевести архив отчета в состояние с типом «не удалять» то никто не сможет удалить этот архив.

                Архив отчета можно будет толкать по состояниям так же как первичный документ или сообщение по «манипуляторам–пальцам» в левом верхнем углу экрана.

                На состояние, например, можно навесить вызов внешней программы – вроде отправки отчета мэйлом до адресата.

                Комментарий


                • #9
                  А как связать "произвольную финансовую операцию" с образцом отчета?
                  С уважением, Максаев Андрей.

                  Комментарий


                  • #10
                    Разумеется Mark и флаг "Архив" и Filename.
                    Я, правда, столкнувшись с ситуацией, когда число файлов заранее неизвестно, выгружал все в один текстовый файл и далее обрабатывал VBA-программой. Для запуска VBA отчетом вызывался DOC- или XLS-file (в разных отчетах по-разному). Но тут другая засада - несовместимость макросов в office-2000 и в XP.

                    Комментарий


                    • #11
                      К VBA я в конце концов и пришла. Но все равно спасибо.

                      Комментарий


                      • #12
                        Сообщение от mns_h
                        Разумеется Mark и флаг "Архив" и Filename.
                        Я, правда, столкнувшись с ситуацией, когда число файлов заранее неизвестно, выгружал все в один текстовый файл и далее обрабатывал VBA-программой. Для запуска VBA отчетом вызывался DOC- или XLS-file (в разных отчетах по-разному). Но тут другая засада - несовместимость макросов в office-2000 и в XP.
                        У нас сделано проще - простенькая консольная программка на Delphi. Получает в качестве параметра имя файла с отчетом и ищет в нем некую специальную строку, например,
                        Резать здесь; Блок сохранить:"имя_файла_включая_путь ".
                        Всё, что выше этих строк будет сохранено в прописанный файл по прописанному пути.
                        Плюсы: очень скромная потребность к ресурсам. Не зависит от офисов.

                        Комментарий


                        • #13
                          Насчет проще - не уверен. В случае VBA юзер запускает обычный отчет в ДИАСе и получает на экран DOC или XLS в нужном количестве с нужной инфой. Промежуточный файл с VBA-макросом отрабатывает и закрывается сам. Так сделаны и отчеты ДИАСа - Message.tpr+Message.xls+Message_blank.xls, например. Зависимость от офиса победить при желании можно.
                          Вообще VBA-макросы и скрипты выручают здорово.
                          У меня макрос таскает курсы с www.cbr.ru и грузит в DBF, а скрипт по расписанию контролирует, что загрузка в ДИАС была и соответственно молчит или напоминает.

                          Комментарий


                          • #14
                            У нас стоит WorkFlow, но думаю в 5NT так же.

                            В настройках отчетах есть "внешний редактор отчета".
                            Там указываешь путь на batник.
                            И, собственно, дальше все зависит от размаха мысли.

                            ЗЫ: Прошу прощения за незнание, но в чем выражается несовместимоть макросов?
                            "Единственный способ научиться играть лучше - играть с более сильным соперником!"

                            Комментарий


                            • #15
                              Я столкнулся с 2 случаями. Макрос, записанный в Access-XP не исполнился в офис-2000, сообщив: "Неизвестная функция DIR в выражении". Пробовали на нескольких компах.
                              Другой случай. Макрос записан в офис2000 и исполнялся на разных машинах с офис-2000. При попытке исполнить в офис-XP завис. Надо бы прогнать в отладчике, возможна банальная ошибка.

                              Комментарий


                              • #16
                                2 mns_h
                                Действительно, попробуй по шагам прогнать.
                                Потом скажи в чем были затыки, просто самому интересно.
                                "Единственный способ научиться играть лучше - играть с более сильным соперником!"

                                Комментарий


                                • #17
                                  Один случай такой.
                                  Вот такая конструкция:
                                  Workbooks(3).Worksheets(1).Cells(j, 5).Value = FormatNumber(k,4,vbFalse)
                                  В зависимости от выбранного разделителя чисел в виндах в "Язык и стандарты" возвращала очень разные значения одного числа.
                                  Пусть число k=28.2015. Если установленный в стандарте разделитель - точка, то все в порядке. В ячейку именно такое число и запишется. Если разделитель - запятая (а тогда точка будет считаться разделителем разрядов), то функция FormatNumber сочтет точку разделителем разрядов, выбросит ее (она не на месте) и запишет число 282015. А это курс ЦБ (@#$%^&*!!!). Вся штука в том, что входной параметр фунции - строка, в хелпе я этого не увидел.
                                  Лечится, например, так:
                                  Workbooks(3).Worksheets(1).Cells(j, 5).Value = CDbl(FormatNumber(k, 4, vbFalse))
                                  Ирония судьбы была в том, что были 4 компа. 2 под ХР с выставленным стандартом - запятая, и 2 под 2000, с выставленным стандартом - точка.
                                  Макрос стабильно правильно работал под 2000, и стабильно глючил под ХР, пока не разобрался.

                                  Комментарий


                                  • #18
                                    2 mns_h
                                    Проблема достаточно знакомая
                                    ИМХО в этом случае не стоит пинять на несовместимоть макросов.
                                    Предлагаю два выхода:
                                    1.На всех компах однообразить формат чисел
                                    2.Есть функция, которая принудительно меняет формат чисел(и не только чисел) в этой программе. Прописать ее в начале и нет проблем.
                                    Увы но название ее в VBA не скажу.
                                    А в Delphi - DecimalSeparator:='.'
                                    "Единственный способ научиться играть лучше - играть с более сильным соперником!"

                                    Комментарий


                                    • #19
                                      В Делфи нет такого разврата с описанием типов данных. Это вообще не так актуально.

                                      Комментарий


                                      • #20
                                        В Делфи нет такого разврата с описанием типов данных. Это вообще не так актуально.
                                        2 mns_h
                                        Извините меня, но то у вас несовместимость макросов, после Вы не можете найти глобальную переменную, которую я указал, а в конце оказывается, что это для Вас воообще не актуально. Тогда зачем жаловаться?
                                        Я Вас не понимаю.
                                        "Единственный способ научиться играть лучше - играть с более сильным соперником!"

                                        Комментарий


                                        • #21
                                          Я не искал указанную Вами глобальную переменную. А менять у юзера выбранный им формат числа не стоит - это могло быть сделано осознанно. Проще было использовать другую функцию, что я и сделал.
                                          Не понимаю, что Вы не понимаете.

                                          Комментарий


                                          • #22
                                            2 mns_h
                                            Проще было использовать другую функцию, что я и сделал
                                            У меня есть подозрения, что это функция:
                                            new_string = Replace(my_string,",",".")
                                            я не считаю это лучшим выходом.
                                            менять у юзера выбранный им формат числа не стоит
                                            В этом месте Вы меня не правильно поняли.
                                            Эта строка НЕ меняет формат числа в Винде, она переопределяет значение этой переменной только для текущей программы.

                                            P.S. На самом деле мы уже отколонились от темы, предлагаю поставить .
                                            "Единственный способ научиться играть лучше - играть с более сильным соперником!"

                                            Комментарий


                                            • #23
                                              Сообщение от Юнец
                                              2 mns_h

                                              У меня есть подозрения, что это функция:
                                              new_string = Replace(my_string,",",".")
                                              .
                                              Зачем подозревать? Оба варианта использования функции приведены выше.

                                              Комментарий

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

                                              Свернуть

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

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