- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Funções AdvPL
- Após impressão não retorna para a rotina
Perguntas Após impressão não retorna para a rotina
- Maceulus
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 23
- Obrigados Recebidos: 0
9 anos 2 meses atrás #29447
por Maceulus
Após impressão não retorna para a rotina foi criado por Maceulus
Boa tarde amigos.
A função abaixo é chamada pela função SetKey na opção visualizar da rotina TECA040 (base instalada).
O problema é que após chamada pelo F8 a função faz a impressao da etiqueta corretamente e volta para o browse da TECA040 e fica travada, não perminto sequer fechar a rotina.
Fiz teste comentando todo o fonte e deixei apenas um MSGALERT no inicio e deu certo, então presumisse que é algo com a dialog ou com a função TMSPrinter. Alguém tem alguma sugestão?
//////// Impressao de Etiquetas com QrCode
User Function QrCodeEq(_cCodCli,_cLoja,_cModelo,_cNumSer)
Default _cCodCli :=""
Default _cLoja :=""
Default _cModelo :=""
Default _cNumSer :=""
Private oDlg := MSDIALOG():Create()
Private oQrCode
Private nWidth := 250 //200
Private nHeight := 250 //200
Private cImagem := ""
Private oPrint := TMSPrinter():New( "TESTE" )
Private oFont1 := TFont():New('Verdana',,-12,.t.,.t.,,,,,.f. )
Private oFont5 := TFont():New('Verdana',,-06,.t.,.t.,,,,,.f. )
Private vCliente := Space(07)
Private vModelo := Space(06)
Private vSerie := Space(05)
Private vSeparador := Space(02)
Private vLink := space(110)
Private cCliente := Space(09)
Private cModelo := Space(30)
Private cSerie := Space(20)
Private cLink := Space(115)
Private cNomeCli := Space(30)
Private vPos := Space(1)
Private nOpca := 0
Private oDlg2, oVar, obtnok, obtnCancel
Define MSDialog oDlg2 Title OemToAnsi("Etiquetas de Equipamentos") From 0,0 To 130,250 Pixel
@05,10 To 30,118 Pixel
@15,20 Say "Informe a posição da etiqueta :" Pixel Of oDlg2
@13,98 MSGet vPos Picture "@!" Size 15,10 Pixel Of oDlg2
@40,25 Button oBtnOk Prompt "&Ok" Size 30,15 Pixel ;
Action(nOpca:=1,oDlg2:End()) Of oDlg2
@40,75 Button oBtnCancel Prompt "&Cancelar" Size 30,15 Pixel ;
Action(nOpca:=2,oDlg2:End()) Of oDlg2
Activate MSDialog oDlg2 Centered
If nOpca = 2
Return
endif
DBSelectArea("SA1")
DBSetOrder(1)
IF !DBSeek(xFilial("SA1")+_cCodCli+_cLoja)
MsgStop("Cliente e Loja não encontrados !!!","MULTH")
Return (.F.)
Endif
cCliente := SUBSTRING(_cCodCli+"-"+_cLoja+" - ",1,13)
cNomeCli := ALLTRIM(SA1->A1_NOME)
cModelo := ALLTRIM(_cModelo)
cSerie := ALLTRIM(_cNumSer)
vCliente := "cliente="
vModelo := "modelo="
vSerie := "serie="
vSeparador := "&"
vLink := " www.multh.com.br/c-t/ ?"
vLink += vCliente+cCliente+cNomeCli+vSeparador+vModelo+cModelo+vSeparador+vSerie+cSerie
oQrCode := FwQrCode():New({25,25,nWidth,nHeight},oDlg,vLink)
cImagem := oQrCode:oQrCode:cBmpFile
oPrint:SetPaperSize(9)
oPrint:SetPortrait()
oPrint:StartPage()
If vPos = "1"
// ETIQUETA Nº 1
oPrint:SayBitMAP( 250, 650, cImagem, 250, 250 )
oPrint:Say( 375,1050, cModelo ,oFont1,100 )
oPrint:Say( 500,1050, cSerie ,oFont1,100 )
ElseIf vPos = "2"
// ETIQUETA Nº 2
oPrint:SayBitMAP( 850, 650, cImagem, 250, 250 )
oPrint:Say( 975, 1050, cModelo ,oFont1,100 )
oPrint:Say(1100, 1050, cSerie ,oFont1,100 )
Endif
oPrint:EndPage()
oPrint:End()
oPrint:Preview()
MS_FLUSH()
Close(oDlg)
Return
A função abaixo é chamada pela função SetKey na opção visualizar da rotina TECA040 (base instalada).
O problema é que após chamada pelo F8 a função faz a impressao da etiqueta corretamente e volta para o browse da TECA040 e fica travada, não perminto sequer fechar a rotina.
Fiz teste comentando todo o fonte e deixei apenas um MSGALERT no inicio e deu certo, então presumisse que é algo com a dialog ou com a função TMSPrinter. Alguém tem alguma sugestão?
//////// Impressao de Etiquetas com QrCode
User Function QrCodeEq(_cCodCli,_cLoja,_cModelo,_cNumSer)
Default _cCodCli :=""
Default _cLoja :=""
Default _cModelo :=""
Default _cNumSer :=""
Private oDlg := MSDIALOG():Create()
Private oQrCode
Private nWidth := 250 //200
Private nHeight := 250 //200
Private cImagem := ""
Private oPrint := TMSPrinter():New( "TESTE" )
Private oFont1 := TFont():New('Verdana',,-12,.t.,.t.,,,,,.f. )
Private oFont5 := TFont():New('Verdana',,-06,.t.,.t.,,,,,.f. )
Private vCliente := Space(07)
Private vModelo := Space(06)
Private vSerie := Space(05)
Private vSeparador := Space(02)
Private vLink := space(110)
Private cCliente := Space(09)
Private cModelo := Space(30)
Private cSerie := Space(20)
Private cLink := Space(115)
Private cNomeCli := Space(30)
Private vPos := Space(1)
Private nOpca := 0
Private oDlg2, oVar, obtnok, obtnCancel
Define MSDialog oDlg2 Title OemToAnsi("Etiquetas de Equipamentos") From 0,0 To 130,250 Pixel
@05,10 To 30,118 Pixel
@15,20 Say "Informe a posição da etiqueta :" Pixel Of oDlg2
@13,98 MSGet vPos Picture "@!" Size 15,10 Pixel Of oDlg2
@40,25 Button oBtnOk Prompt "&Ok" Size 30,15 Pixel ;
Action(nOpca:=1,oDlg2:End()) Of oDlg2
@40,75 Button oBtnCancel Prompt "&Cancelar" Size 30,15 Pixel ;
Action(nOpca:=2,oDlg2:End()) Of oDlg2
Activate MSDialog oDlg2 Centered
If nOpca = 2
Return
endif
DBSelectArea("SA1")
DBSetOrder(1)
IF !DBSeek(xFilial("SA1")+_cCodCli+_cLoja)
MsgStop("Cliente e Loja não encontrados !!!","MULTH")
Return (.F.)
Endif
cCliente := SUBSTRING(_cCodCli+"-"+_cLoja+" - ",1,13)
cNomeCli := ALLTRIM(SA1->A1_NOME)
cModelo := ALLTRIM(_cModelo)
cSerie := ALLTRIM(_cNumSer)
vCliente := "cliente="
vModelo := "modelo="
vSerie := "serie="
vSeparador := "&"
vLink := " www.multh.com.br/c-t/ ?"
vLink += vCliente+cCliente+cNomeCli+vSeparador+vModelo+cModelo+vSeparador+vSerie+cSerie
oQrCode := FwQrCode():New({25,25,nWidth,nHeight},oDlg,vLink)
cImagem := oQrCode:oQrCode:cBmpFile
oPrint:SetPaperSize(9)
oPrint:SetPortrait()
oPrint:StartPage()
If vPos = "1"
// ETIQUETA Nº 1
oPrint:SayBitMAP( 250, 650, cImagem, 250, 250 )
oPrint:Say( 375,1050, cModelo ,oFont1,100 )
oPrint:Say( 500,1050, cSerie ,oFont1,100 )
ElseIf vPos = "2"
// ETIQUETA Nº 2
oPrint:SayBitMAP( 850, 650, cImagem, 250, 250 )
oPrint:Say( 975, 1050, cModelo ,oFont1,100 )
oPrint:Say(1100, 1050, cSerie ,oFont1,100 )
Endif
oPrint:EndPage()
oPrint:End()
oPrint:Preview()
MS_FLUSH()
Close(oDlg)
Return
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Funções AdvPL
- Após impressão não retorna para a rotina
Tempo para a criação da página:0.113 segundos