Обсуждение:Автоматическая печать документов в БОУРМ

0 (0)
  • Развернуть Обсуждение:Автоматическая печать документов в БОУРМ ( Обсуждение примера  25.07.2002 21:36 )
    0(0)
    Макросы действия после приема, реализующие автоматическую печать платежных документов (aftrcv.mac) и писем (aftrcLet.mac)
    Посмотреть пример
    >> Ответить
    • Развернуть Автоматическая печать документов в БОУРМ ( Aeast  02.03.2004 11:32 )
      0(0)
      Я попробовал ввести отрывок из примера
      filename = cbPrintMsg(CurrentRecord,3);
      run (GetEnv("COMSPEC"),"/c copy "+filename+" LPT1");
      return true;

      У меня есть переназначение Novell на LPT1 сетевого принтера
      ошибки при обработке документа БОУРМ не выдает но и ничего не печатает. Как решить вопрос , чтобы печать проходила?

      Алексей
      aost@mak.orl.ru

      >> Ответить
      • Развернуть Автоматическая печать документов в БОУРМ (+) ( Дмитрий В  03.03.2004 09:03 )
        0(0)
        Посмотрите в RSCB.INI следующий параметр:

        ; Признак запрета формирования файлов результата выполнения макросов (0/1)
        ; DisableMacroOutput=1 - файл результата не формируется (обработка сообщений
        ; в этом режиме будет выполняться быстрее)
        ; DisableMacroOutput=0 - файл результата формируется

        >> Ответить
      • Развернуть А если так попробовать? ( Terapevt  04.03.2004 08:31 )
        0(0)
        run(GetEnv("Comspec"), "/c nprint " + FileName + " /S=NWсервер /Q=очередь /NB /NFF /C=1 /NNOTIFY > nul");
        >> Ответить
        • Развернуть Автоматическая печать документов в БОУРМ ( Aeast  09.03.2004 10:36 )
          0(0)
          Пробовал не работает
          У меня стоит Novell 5.0
          У принтера есть общий доступ
          Находится он в другом контексте чем ПК с которого я хотел бы печатать из DOS строки или DOS приложения

          Пробовал такую строку -- не работает!!!
          f:\public\nprint c:\22.txt /Q=.Q4VAL.buch.mak-bank_orel /NB /NFF /C=1 /NNOTIFY

          Пробовал с командой COPY --- такая же история

          Подскажите что еще посмотреть... Я пробовал на этой машине просто из
          FAR отправить напечать не работает...

          Может кто еще подскажет варианты ....?

          Алексей!
          aost@mak.orl.ru
          >> Ответить
          • Развернуть Re: Автоматическая печать документов в БОУРМ (+) ( Terapevt  10.03.2004 08:04 )
            0(0)

            > Я пробовал на этой машине просто из
            > FAR отправить на печать не работает...

            Ну, раз из командной строки ничего не печатает, то чего же Вы хотите от БОУРМ?
            Настраивайте печать, доступы, права и прочую сетевую лабудень.
            >> Ответить
    • Развернуть Хочу заметить, что печатать из макроса действия после приема - не самое лучшее решение (+) ( <B>Alex</B>  12.03.2004 16:07 )
      0(0)
      Это плохо, потому, что в этом случае печать запускается внутри транзакции, соответственно, если с печатью возникают какие-либо проблемы, скажем, вылазит виндовый MessageBox и ждет от юзера нажатия на OK, то этого самого юзера ждет уже не только процедура печати, но и все параллельно запущенные копии БОУРМ, т.к. их транзакции ждут завершения той первой транзакции, а она ждет завершения печати, а печать ждет юзера... Все усугубляется, если БОУРМ 5.2 запущен как сервис ОС без возможности взаимодействия с десктопом (а это практически всегда так), в этом случае MessageBox не видно на экране, а физического юзера вообще нет, соответственно печать висит на всегда.

      В БОУРМ начиная с 5.20.012.1 предусмотрен штатный механизм автоматической печати, он запускается из process.mac после выполнения шага действия после приема и после транзакции. Это не предотвращает зависаний одного из процессов сервиса из-за виндовых MessageBox'ов внешних систем, но по крайней мере предотвращает ступор всех параллельных процессов.

      Реально все реализовано в макросах, поэтому все то же самое можно сделать в любой более ранней версии БОУРМ. Для этого надо в process.mac и processm.mac вставить строки:

      в начало:
       ...
       import "autoprnt";
       ...
      

      в macro mainPostProcess:
       ...
            el*/if(processId == clbcipridDo)
              cbMakeAndSendReceipt(CurrentRecord,CurrentRecord.state,"",resultDesc);
              autoPrintMsg(CurrentRecord,resultCode,resultDesc);
            end;
       ...
      

      И создать макрофайл autoPrnt.mac, примерно следующего сожержания:
       import constant;
      
        macro autoPrintMsg(rec,resultCode:integer,resultDesc:string)
          /* Пример для автоматической печати после загрузки в банк */
      /*    var StructName=strlwr(FileName(rec));
          if(NOT ( /* печатаем только нужные нам формы */
             ((StructName == strlwr(clbcStructNamePaymentDoc)) /*AND
              ((rec.form == 1)    OR
               (rec.form == 2)    OR
               (rec.form == 1001) OR
               (rec.form == 1002)
              )*/ /* для платежных печатаем все формы */
             ) OR
             ((StructName == strlwr(clbcStructNameInfoMessage)) AND
              ((rec.form == 3)    OR /* ВОбя4 - Поручение на обязательную продажу валюты    */
               (rec.form == 4)    OR /* зВал4 - Запрос на покупку продажу валюты            */
               (rec.form == 1002) OR /* зВып  - Запрос на получение выписки                 */
               (rec.form == 1003) OR /* ВОбяз - Поручение на обязательную продажу валюты    */
               (rec.form == 1004) OR /* зВал  - Запрос на конвертацию                       */
               (rec.form == 1005) OR /* зВыпИ - Запрос на получение инкрементальной выписки */
               (rec.form == 1006) OR /* зРепл - Запрос на обновление справочников           */
               (rec.form == 1007) OR /* Письм - Письмо                                      */
               (rec.form == 1008) OR /* Отзыв - Отзыв документа/сообщения                   */
               (rec.form == 1009) OR /* ВПокп - Поручение на покупку валюты                 */
               (rec.form == 1010)    /* ВПрод - Поручение на продажу валюты                 */
              )
             )))
            return; end;
      
          var filename=cbPrintMsg(rec,1);
      
      /*    /* Можно печатать так: */
          var printerName=" prn";
          run(GetEnv("COMSPEC"),"/c copy " + filename + printerName);*/
      
          /* а можно печатать этак: */
          cbPrintFile(filename); /* Печатаем на принтер, заданный в настройках "Параметры станции" */
          */
        end;
      

      Саму реализацию посылки на печать надо править уже в autoPrnt.mac.
      >> Ответить
      • Развернуть А если печать идет через PlatVis.mac? ( Bratsk  15.03.2004 12:08 )
        0(0)
        и именно в нем вся реализация посылки на печать, то как здесь быть?
        Если не затруднит - опишите подробнее.
        >> Ответить
      • Развернуть Автоматическая печать документов в БОУРМ ( Aeast  17.03.2004 09:14 )
        0(0)
        Cпасибо за очень важное замечание насчет не печати из avtrcv.mac

        Все понятно непонятно как работать должна функция(макрос) cbprintfile()
        Я почему спрашиваю.... У меня принтер NDPS Novell и просто командой copy или print печать не проходит, может в настройках очереди что не так..
        Может есть пример такой функции..

        С уважением Алексей
        Орел
        aost@mak.orl.ru

        >> Ответить
        • Развернуть cbPrintFile - это внутренняя ф-ция БОУРМ 5.20.013 и выше (+) ( <B>Alex</B>  17.03.2004 13:55 )
          0(0)
          version 5.20.013, 13.10.2003
          ...
           - В макросы проэкспортирована ф-ция cbPrintFile:
               cbPrintFile(fileName:string[, AltPrint:bool])
             Ф-ция печатает файл fileName используя стандартный механизм печати, с
             учетом настроек принтеров, ESC последовательностей, баннеров и 
             т.д. Необязательный параметр AltPrint позволяет использовать
             альтернативную процедуру печати (AltPrint = true), по умолчанию
             используется стандартная процедура. Ф-ция не возвращает никакого
             значения. Переключать настройки печати можно стандартными RSL
             процедурами GetPRNInfo/SetPRNInfo (см. документацию по RSL).
          ...
          

          В 5.1 ее соответственно нет, так что там печатать придется старыми способами :( А насчет печати на новеловый принтер - скорее всего действительно что то в нетвари не настроено. Если уж фар/copy не печатает, то и никто не сможет. К сожалению в настройке нетвари ничем помочь не могу, тут я не спец.

          >> Ответить
          • Развернуть Проблема Автоматической печати остается!!! ( Aeast  17.03.2004 15:25 )
            0(0)
            Я вставил все что необходимо в макросы process.mac; processm.mac
            Привожу результат
            == process.mac ==========================================
            import cbmFormFields,"constant", "autoprnt" ;/*,"debug","utils"*/

            macro mainPreProcess(processId:integer):bool
            /*
            Макрос предобработки возвращает признак можно ли в настоящее время
            выполнять заданный шаг (processId) или нет.
            Если макрос вернул true - шаг будет выполнен,
            иначе его выполнение будет отложено до следующего цикла обработки.
            */
            /* if(processId == 0)
            return cbSetReturnDesc("Проба отказа приема"); end;*/
            /* RECORD CurrentRecord(clbpdoc);
            println("mainPreProcess(",processId,")");
            dbgPrintRec(CurrentRecord);*/
            return true;
            end;

            macro mainPostProcess(processId:integer,resultCode:integer,resultDesc:string):bool
            /*
            Макрос постобработки возвращает признак можно ли выполнять следующий шаг
            обработки сообщения прямо сейчас или нет. Иначе говоря, нужно ли
            выполнять все шаги за один проход или за несколько циклов
            автоматической обработки.
            Если макрос вернул true - все шаги выполняются за один проход,
            иначе в одном проходе выполняется только один шаг и после его
            выполнения производится переход к обработке следующего сообщения.
            */
            RECORD CurrentRecord(clbpdoc);
            /* println("mainPostProcess(",processId,",",resultCode,",",resultDesc,")");
            dbgPrintRec(CurrentRecord);*/
            /* if(resultCode != clbclrcOk)
            NetSend("",string("pdoc id=",CurrentRecord.id,", resultCode=",resultCode,", resultDesc=",resultDesc)); end;*/
            /* Заполняем дату, время получения сообщения в банке: */
            if((CurrentRecord.primary == clbcMsgPrimary) AND (processId == clbcipridStorage))
            cbSetFieldByName(CurrentRecord,"payerBankDeliveryDate",date());
            cbSetFieldByName(CurrentRecord,"payerBankDeliveryTime",cbTimeEx());
            end;
            if((resultCode == 84) AND (CurrentRecord.lastProcessTryCount < 5))
            CurrentRecord.mode=clbcMsgModeAuto;
            return false;
            end;
            if(CurrentRecord.primary != clbcMsgPrimary)
            return true; end; /* для отправляемых подтверждения не надо слать :-) */
            if(resultCode != clbclrcOk)
            /* if(processId != clbcipridDo) /* раньше на макро действия после приема отказы не слались */*/
            cbMakeAndSendReceipt(CurrentRecord,clbcRcpTypeRejected,"",resultDesc); /*end;*/ */ */ */
            else
            /* if(processId == clbcipridInsertion)
            cbMakeAndSendReceipt(CurrentRecord,clbcRcpTypeReceived,"",resultDesc);
            elif(processId == clbcipridStorage)
            cbMakeAndSendReceipt(CurrentRecord,clbcRcpTypeAccepted,"",resultDesc);
            elif(processId == clbcipridMacroCheck)
            cbMakeAndSendReceipt(CurrentRecord,clbcRcpTypeChecked,"",resultDesc);
            el*/
            if(processId == clbcipridDo)
            cbMakeAndSendReceipt(CurrentRecord,CurrentRecord.state,"",resultDesc);
            autoPrintMsg(CurrentRecord,resultCode,resultDesc);
            end;
            end;
            return true;
            end;


            == process.mac ==========================================

            == Autoprnt.mac ==========================================

            import constant;

            macro autoPrintMsg(rec,resultCode:integer,resultDesc:string)
            /* Пример для автоматической печати после загрузки в банк */
            var StructName=strlwr(FileName(rec));
            if(NOT ( /* печатаем только нужные нам формы */
            ((StructName == strlwr(clbcStructNamePaymentDoc)) /*AND
            ((rec.form == 1) OR
            (rec.form == 2) OR
            (rec.form == 1001) OR
            (rec.form == 1002)
            )*/ /* для платежных печатаем все формы */
            ) OR
            ((StructName == strlwr(clbcStructNameInfoMessage)) AND
            ((rec.form == 3) OR /* ВОбя4 - Поручение на обязательную продажу валюты */
            (rec.form == 4) OR /* зВал4 - Запрос на покупку продажу валюты */
            (rec.form == 1002) OR /* зВып - Запрос на получение выписки */
            (rec.form == 1003) OR /* ВОбяз - Поручение на обязательную продажу валюты */
            (rec.form == 1004) OR /* зВал - Запрос на конвертацию */
            (rec.form == 1005) OR /* зВыпИ - Запрос на получение инкрементальной выписки */
            (rec.form == 1006) OR /* зРепл - Запрос на обновление справочников */
            (rec.form == 1007) OR /* Письм - Письмо */
            (rec.form == 1008) OR /* Отзыв - Отзыв документа/сообщения */
            (rec.form == 1009) OR /* ВПокп - Поручение на покупку валюты */
            (rec.form == 1010) /* ВПрод - Поручение на продажу валюты */
            )
            )))
            return; end;

            var filename=cbPrintMsg(rec,1);

            /* /* Можно печатать так: */
            var printerName=" prn";
            run(GetEnv("COMSPEC"),"/c copy " + filename + printerName);*/

            /* а можно печатать этак: ВОТ ТАК и ХОТЕЛОСЬ БЫ!!! */
            cbPrintFile(filename); /* Печатаем на принтер, заданный в настройках "Параметры станции" */

            end;

            == Autoprnt.mac ==========================================

            После приема тестаового документа в БОУРМ тишина на принтере и нет сообщений об ошибках. Документ загружен и все..
            Еще хотел уточнить а что это за параметр в файле \OBJ\rscb.ini

            ; Признак запрета формирования файлов результата выполнения макросов (0/1)
            ; DisableMacroOutput=1 - файл результата не формируется (обработка сообщений
            ; в этом режиме будет выполняться быстрее)
            ; DisableMacroOutput=0 - файл результата формируется

            Это для лога "0" ставится или для самой печати...???

            Алексей,
            Орел,
            aost@mak.orl.ru
            >> Ответить
            • Развернуть Судя по логам, что Вы присылали в поддержку (+) ( <B>Alex</B>  17.03.2004 22:36 )
              0(0)
              Вы оставили незакомментаренной ф-цию cbPrintFile - эта ф-ция есть только в версии 5.2 (см. выше), в 5.1 ее нет вообще. Поэтому и возникают ошибки компиляции. Удалите строки с cbPrintFile и у Вас все должно заработать. Отправляйте на принтер другими способами, не cbPrintFile!!!
              >> Ответить