28 мая, четверг 00:41
Bankir.Ru

Объявление

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

Помогите новичку

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

  • #31
    [ATTACH=CONFIG]44894[/ATTACH
    вывод делается через оператор Put. подскажите как убрать маркер начала страницы
    Вложения

    Комментарий


    • #32
      Символ перевода страницы добавляет инклюдник {preview.i} в зависимости от выбранного принтера в БИСквите
      выбери принтер с длиной страницы 0 перед формированием отчета и будет тебе счастье.

      Если стоит задача выгрузки данных без печати из БИСквита, то отчет лучше выводить в свой файл, т.е. определить свой поток для вывода и в него писать.

      Если вывод в один файл то переопределяем стандартный вывод

      def var mFile as char init "/tmp/MyFile.txt" .
      output to value(mFile) .

      или без переменных сразу

      output to /tmp/MyFile.txt .

      после вывода

      output close .

      еще можно перед вызовом {preview.i} копировать временный файл в свой

      unix silent cp "_spool.tmp" value(mFile) .

      если вывод надо делать в несколько файлов то определяем несколько потоков вывода

      def stream File1 .
      def stream File2 .

      output stream File1 to value("./File1.txt") .
      output stream File2 to value("./File2.txt") .

      put stream File1 unformatted .... skip .
      put stream File2 unformatted .... skip .

      put stream File1 close .
      put stream File2 close .

      Комментарий


      • #33
        а что за тип данных или класс Tacct и как его описать а то компилятор отказывается его воспринимать. может надо подключить какой-то модуль или инклюдник? и еще - есть ли возможность выслать инклюдник sh-bal?
        Вложения

        Комментарий


        • #34
          sh-bal - это глобальная переменная, содержащая в себе остаток по счету.
          Для ее получения необходимо подключить sh-defs.i

          Вот, к примеру....

          Код:
          {globals.i}
          {sh-defs.i}
          
          find first acct where acct.bal-acct eq 40817 no-lock.
          run acct-pos in h_base(acct.acct, acct.currency, TODAY, TODAY, chr(251)).
          disp sh-bal.
          ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

          Комментарий


          • #35
            Вот так вот стараешься, помогаешь - работающие примеры приводишь с небольшим описанием, а новичок не смотря на жажду знаний их игнорирует.
            Чем вас не устроил работающий пример из поста #3 ?
            в нем и setdest.i и preview.i и sh-bal c описанием?

            Пример из поста #2 не для новичка и вырван из контекста, без которого он не работоспособен.

            Комментарий


            • #36
              Сообщение от bv Посмотреть сообщение
              Вот так вот стараешься, помогаешь - работающие примеры приводишь с небольшим описанием, а новичок не смотря на жажду знаний их игнорирует.
              Чем вас не устроил работающий пример из поста #3 ?
              в нем и setdest.i и preview.i и sh-bal c описанием?

              Пример из поста #2 не для новичка и вырван из контекста, без которого он не работоспособен.
              пост #3 меня бы очень устроил, вы доходчиво объяснили что как делается, но
              работоспособность вышей программы к сожалению оценить не смог....
              так же не до конца понятен алгоритм рассчета в бисквите остатка на счете.
              а setdest.i и preview.i я хорошо освоил. надеюсь и с sh-bal скоро разберусь...
              Вложения

              Комментарий


              • #37
                Сообщение от fetchxxx Посмотреть сообщение
                sh-bal - это глобальная переменная, содержащая в себе остаток по счету.
                Для ее получения необходимо подключить sh-defs.i

                Вот, к примеру....

                Код:
                {globals.i}
                {sh-defs.i}
                
                find first acct where acct.bal-acct eq 40817 no-lock.
                run acct-pos in h_base(acct.acct, acct.currency, TODAY, TODAY, chr(251)).
                disp sh-bal.
                такая же ошибка возникает как при запуске программы из поста №3.... странно...

                Комментарий


                • #38
                  Как запускаете процедуру? Из редактора прогресса или из БИСквита (Ctrl+E)?

                  Из БИСквита работать должно, а из редактора прогресса необходимо добавить вначале инклюдник {bislogin.i}

                  Никогда не пользовался запуском процедур с расчетом остатка из редактора прогресса поэтому этот инклюдник опустил.

                  Комментарий


                  • #39
                    bv все правильно заметил - вы, судя по всему, запускаете код из прогрессового редактора, не подключив bislogin.i
                    ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

                    Комментарий


                    • #40
                      все правильно, запускал из редактора прогресс. подключил bislogin.i и заработало!! спасибо bv и fetchxxx.
                      а чем вы пользуетесь при написании кода? редактор прогресс очень неудобный....

                      Комментарий


                      • #41
                        Если нужно выполнить какой-то код "на-лету", использую редактор Progress.
                        В остальных случаях - текстовый редактор в mc или FAR.
                        Если хотите заниматься разработкой всерьез, на мой взгляд, стоит присмотреться к KSV Editor и AppBuilder.
                        ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

                        Комментарий


                        • #42
                          Есть ли какая-то функция которая проверяет признак закрытия счета и возвращает булевое значение? или придется самому писать?

                          Комментарий


                          • #43
                            Может быть и есть. Но проще всего:

                            if acct.close-date <> ?
                            ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

                            Комментарий


                            • #44
                              Сообщение от fetchxxx Посмотреть сообщение
                              Может быть и есть. Но проще всего:

                              if acct.close-date <> ?
                              это да, но я хотел узнать закрыт счет или нет работая с таблицей loan-acct. придется запускать цикл...

                              Комментарий


                              • #45
                                как правильно выводить на экран переменные типа decimal? через display пишет то что на картинке. если пишу format ">>,>>9.99" то значения все нули.. а через Put unformatted тоже показывает нули
                                Вложения

                                Комментарий


                                • #46
                                  Увеличьте разрядность в формате (у вас в переменной - 6 разрядов перед запятой, по-умолчанию формат вывода decimal - 5 разрядов).

                                  display ii format "->99999999.99" к примеру
                                  ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

                                  Комментарий


                                  • #47
                                    Сообщение от fetchxxx Посмотреть сообщение
                                    Увеличьте разрядность в формате (у вас в переменной - 6 разрядов перед запятой, по-умолчанию формат вывода decimal - 5 разрядов).

                                    display ii format "->99999999.99" к примеру
                                    а как бороться с выводом перед разрядом нулей если по формату '->99999999.99 ' предполагается выводить и 100000000.00 и 50000.00 ? и еще как убрать знак числа при выводе на экран?

                                    Комментарий


                                    • #48
                                      Используйте ->>>>>>>>>>>>9.99 - лидирующие нули будут отсекаться.
                                      Убрать знак числа - функция ABS() - возвращать абсолютное значение.
                                      ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

                                      Комментарий


                                      • #49
                                        как можно создать индекс к временной таблице?

                                        пишу команду create index temp-index on temp-table(field1)

                                        в ответ - таблица не найдена или нельзя получить доступ..... может кто-то поможет?

                                        Комментарий


                                        • #50
                                          написал код который ищет остатки на ссудных счетах кред.договоров юрлиц и заносит о них информацию во временную таблицу. считает очень долго - болше 15 минут. дальше не стал ждать.
                                          несмотря на использование индексов для всех 3 таблиц loan, loan-acct и acct никакого ускорения поиска я не наблюдаю.

                                          может кто подскажет какие еще условия добавить чтоб оптимизировать поиск?

                                          for each loan where loan.close-date eq ? and loan.contract eq "Кредит" and loan.cust-cat eq "Ю" use-index loan-cust.
                                          for each loan-acct where loan-acct.cont-code eq loan.cont-code and loan-acct.contract eq loan.contract and loan-acct.acct-type eq "кредит" and loan-acct.currency eq loan.currency use-index acct-type .

                                          for each acct where acct.acct-cat eq 'b' and acct.cust-cat eq 'Ю' and acct.contract eq loan.contract and acct.close-date eq ? and acct.currency eq loan-acct.currency use-index acct-cat .

                                          if acct.acct eq loan-acct.acct then
                                          do:
                                          acct1=loan-acct.acct.
                                          run acct-pos in h_base(acct1,loan-acct.currency,today,today,chr(251)).

                                          create tempt.
                                          tempt.ndog=loan.cont-code.
                                          tempt.acctkred=acct1.
                                          tempt.ostkred=abs(sh-bal).
                                          tempt.idclient=loan.cust-id.
                                          end.
                                          end.
                                          end.
                                          end.

                                          Комментарий


                                          • #51
                                            shumamura,

                                            Зачем вы делаете "for each loan-acct"? Вам же нужен конкретный номер счета, в данном случае ссудный, значит можно обойтись find last (LAST возьмет последний ссудный счет, если их было несколько. например, счет менялся при пролонгации). И for each acct тоже не обязателен, если нужен остаток по счету.

                                            Вот правильный пример (без помещения выборки в temp-table).

                                            Код:
                                            {globals.i}
                                            
                                            {getdate.i}
                                            {sh-defs.i}
                                            for each loan where
                                                loan.close-date eq ? and
                                                loan.cust-cat eq "Ю" and
                                                loan.contract eq "Кредит"
                                                no-lock:
                                            
                                                find last loan-acct where
                                                    loan-acct.cont-code eq loan.cont-code and
                                                    loan-acct.contract eq loan.contract and
                                                    loan-acct.acct-type eq "Кредит"
                                                no-lock no-error.
                                            
                                                if avail(loan-acct) then do:
                                                    run acct-pos in h_base( loan-acct.acct,
                                                                            loan-acct.currency,
                                                                            end-date,
                                                                            end-date,
                                                                            chr(251)).
                                                   disp loan-acct.acct sh-bal.
                                                end.
                                            end.
                                            ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

                                            Комментарий


                                            • #52
                                              вместо today лучше запрашивать дату (getdate.i в нашем случае, либо getdates.i, если нужен период дат, например, для получения оборотов по счету.)
                                              ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

                                              Комментарий


                                              • #53
                                                Сообщение от fetchxxx Посмотреть сообщение
                                                shumamura,

                                                Зачем вы делаете "for each loan-acct"? Вам же нужен конкретный номер счета, в данном случае ссудный, значит можно обойтись find last (LAST возьмет последний ссудный счет, если их было несколько. например, счет менялся при пролонгации). И for each acct тоже не обязателен, если нужен остаток по счету.

                                                Вот правильный пример (без помещения выборки в temp-table).

                                                Код:
                                                {globals.i}
                                                
                                                {getdate.i}
                                                {sh-defs.i}
                                                for each loan where
                                                    loan.close-date eq ? and
                                                    loan.cust-cat eq "Ю" and
                                                    loan.contract eq "Кредит"
                                                    no-lock:
                                                
                                                    find last loan-acct where
                                                        loan-acct.cont-code eq loan.cont-code and
                                                        loan-acct.contract eq loan.contract and
                                                        loan-acct.acct-type eq "Кредит"
                                                    no-lock no-error.
                                                
                                                    if avail(loan-acct) then do:
                                                        run acct-pos in h_base( loan-acct.acct,
                                                                                loan-acct.currency,
                                                                                end-date,
                                                                                end-date,
                                                                                chr(251)).
                                                       disp loan-acct.acct sh-bal.
                                                    end.
                                                end.
                                                цикл for по acct и loan-acct использовал именно и для того чтобы чтобы найти этот незакрытый ссудный счет. но если Last найдет то что нужно то это значительно ускорит выполнение программы! (вся беда была в том что я не знал как пользоваться find last ((( а подскажите тогда что находит find next ? следующую за первой найденной записью?)) и еще бывает ли такое что по кред.договору могут быть открыты несколько действующих ссудных счетов? (хотя это на мой взгляд не имеет смысла но все же... )

                                                Комментарий


                                                • #54
                                                  Прошу коллективного разума

                                                  Поспорила с другом на 100$. Я работала в других программах, в вашей программе не трудилась.

                                                  Вопрос: Есть ли возможность в вашей программе вытянуть по хронологии создания дат анкету клиента?

                                                  Комментарий


                                                  • #55
                                                    Можно, но только для тех полей и реквизитов которые установлены как темпорируемые и/или если для таблиц клиентов включено сохранение истории изменений как основной таблицы так и необходимых допреквизитов.

                                                    Комментарий


                                                    • #56
                                                      Сообщение от bv Посмотреть сообщение
                                                      Можно, но только для тех полей и реквизитов которые установлены как темпорируемые и/или если для таблиц клиентов включено сохранение истории изменений как основной таблицы так и необходимых допреквизитов.
                                                      Спасибо!

                                                      Интересует поле "дата регистрации ЮЛ". Это поле темпорируемое?

                                                      Комментарий


                                                      • #57
                                                        как можно создать индекс к временной таблице?

                                                        Код:
                                                        Defines a temporary database table. Temporary tables are stored on disk in a temporary database 
                                                        and are available for the duration of the procedure that defines them.
                                                        
                                                        SYNTAX
                                                        
                                                        -----------------------------------------------------------
                                                        DEFINE [[NEW [GLOBAL] ] SHARED] TEMP-TABLE temp-table-name [NO-UNDO] 
                                                          [LIKE table-name [USE-INDEX index-name [AS PRIMARY]]...]
                                                          [FIELD field-name {{AS data-type}|{LIKE field}} [field-options]]...
                                                          [INDEX index-name [IS [UNIQUE] [PRIMARY] [WORD-INDEX] ] 
                                                            {index-field [ASCENDING|DESCENDING]}...]...
                                                        -----------------------------------------------------------
                                                        Example

                                                        Код:
                                                        DEFINE TEMP-TABLE temp-item
                                                           FIELD cat-page LIKE item.cat-page
                                                           FIELD inventory LIKE item.price LABEL "Inventory Value"
                                                           INDEX cat-page IS PRIMARY cat-page ASCENDING
                                                           INDEX inventory-value inventory DESCENDING.

                                                        Комментарий


                                                        • #58
                                                          Посмотрите у себя в метасхеме - на сколько помню это допреквизит RegDate и по умолчанию он не темпорированый.

                                                          За сохранение истории ДР таблицы отвечает реквизит HistoryFields у нас он для класса cust-corp был * т.е. все изменения любого ДР сохраняется в истории, единственное вытащить эту историю для отчета нетривиально.

                                                          Комментарий


                                                          • #59
                                                            Сообщение от shumamura Посмотреть сообщение
                                                            цикл for по acct и loan-acct использовал именно и для того чтобы чтобы найти этот незакрытый ссудный счет. но если Last найдет то что нужно то это значительно ускорит выполнение программы! (вся беда была в том что я не знал как пользоваться find last ((( а подскажите тогда что находит find next ? следующую за первой найденной записью?)) и еще бывает ли такое что по кред.договору могут быть открыты несколько действующих ссудных счетов? (хотя это на мой взгляд не имеет смысла но все же... )
                                                            NEXT

                                                            Finds the next record in the table that meets the specified characteristics of the record. If no record has been found, FIND NEXT behaves like FIND FIRST. If the buffer named in the record was preselected in a DO or REPEAT statement, FIND locates the next record in that preselected subset of records.
                                                            К одному кредитному договору (либо к течению) в одно время может быть привязан только один ссудный счет.
                                                            ИБС БИСКВИТ: Внедрение, консалтинг: www.reunico.ru

                                                            Комментарий


                                                            • #60
                                                              Сообщение от fetchxxx Посмотреть сообщение
                                                              NEXT

                                                              Finds the next record in the table that meets the specified characteristics of the record. If no record has been found, FIND NEXT behaves like FIND FIRST. If the buffer named in the record was preselected in a DO or REPEAT statement, FIND locates the next record in that preselected subset of records.
                                                              т.
                                                              А можете как-нибудь выслать тот источник, откуда вы берете описания операторов и команд?

                                                              Комментарий

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