Page 1 of 1

Ayuda con impresion por TDosPrn

Posted: Fri Mar 25, 2011 11:50 pm
by JoseGS
Hola amigos del foro:
Necesito ayuda con el siguiente codigo que utilizo para imprimir etiquetas en impresora matricial. El problema es que no logro hacer que se impriman mas de 10 etiquetas al mismo tiempo. No envia error ni nada, simplemente solo imprime 10 o menos etiquetas a la vez... Ya he verificado y si hace el ciclo mas de 10 veces cuando es necesario...

Este mismo codigo lo usaba antes en FW23 y funcionaba muy bien...

Gracias de antemano
Saludos

FOR X=1 TO NUM
oPrn:=TDosPrn():New((aCONFIG[50]))
oPrn:StartPage()
IF aET[4] // SOLO CODIGO
oPrn:Command("27,67,6","27,119,1")
oPrn:SAY(3,1,PADC(ALLTRIM(INVENT->CODIGO1),25))
oPrn:Command("27,119,0")
ELSE
oPrn:Command("27,67,6","27,15")
IF aET[1]
oPrn:SAY(1,3,aConfig[5])
ENDIF
oPrn:SAY(2,3," CODIGO: "+INVENT->CODIGO1 +" INT: "+INVENT->CODIGO2)
oPrn:SAY(3,3,"DESCRIP: "+SUBSTR(INVENT->DESCRIP1,1,50))
IF aET[2] // PRECIO
oPrn:SAY(4,3," PRECIO: "+TRANSFORM(INVENT->PRECIO1,'9,999.99')+' PRV:'+aETIQ[4]+' '+DTOC(dFEC)+' '+IF(aET[3],INVENT->UBICACION,''))
ELSE
oPrn:SAY(4,3," PRV:"+aETIQ[4]+' '+DTOC(dFEC)+' '+IF(aET[3],INVENT->UBICACION,''))
ENDIF
ENDIF
oPrn:EndPage()
oPrn:End()
NEXT

Re: Ayuda con impresion por TDosPrn

Posted: Sat Mar 26, 2011 8:29 pm
by sysctrl2
Yo uso un poco diferente la class tdosprn, quizas debas de iniciar la class antes del FOR ..NEXT,
checa mi codigo y comparalo con el tuyo,
en mi aplicacion han llegado a imprimir hasta 10 mil etiquetas y sin problemas, mejor el usuario se cansa jejeje.
saludos..

Code: Select all

  * Programa   :SysCtrl Labels,
* Funcion    :programa para la impresion de etiquedas
* Desarrollo :programado el dia martes 07 de diciembre del 2005 al 08 de dic. 2005
* autor: Cesar Cortes Cruz
* SysCtrl Software

#include "fivewin.ch"

//----------------------------------------------------------------------------//
static nCuantos
static oGet
static oSay

Function _Main()
   local cTitulo := "Impresion de etiquetas "
   local oWnd
   local cSoftWare := "SysCtrl Labels ..."
   local oFont2
   local nFor

   nCuantos := 1

   SET _3DLOOK ON

   USE LABELS new shared

   Define FONT oFont2 NAME GetSysFont() SIZE 0, -12 BOLD

   DEFINE WINDOW oWnd TITLE cTitulo + labels->cia

   @ 2, 2 BUTTON "Imprimir" SIZE 120, 25 OF oWnd ACTION _prnLabels()
   @ 4, 2 BUTTON "Configurar" SIZE 120, 25 OF oWnd ACTION ( _config() )
   @ 6, 2 BUTTON "Salir" SIZE 120, 25 OF oWnd ACTION ( msginfo("Bye.Bye.", "") ,oWnd:end() )

   DEFINE MESSAGE OF oWnd PROMPT cSoftWare CENTERED ;
          DATE KEYBOARD COLOR '*rb+/w' FONT oFont2

     ACTIVATE WINDOW oWnd
   labels->( dbcloseArea() )
    oFont2:end()
return nil

function _prnLabels()
   local cTitulo := "Impresion de etiquetas ..."
   local oDlg
   local oFont
   local aBtn[2]

   DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-12

   DEFINE DIALOG oDlg RESOURCE 'DIALOG_1' TITLE cTitulo font oFont //brush oBrush
   redefine SAY oSay id 52 prompt "" of oDlg

   REDEFINE GET oGet VAR nCuantos       ID 101 OF oDlg  PICTURE "999999" ;
      valid nCuantos > 0 

   REDEFINE BUTTON aBtn[1] ID 201 OF oDlg ACTION ( _imprimelas() ,oDlg:end() )
   REDEFINE BUTTON aBtn[2] ID 202 OF oDlg ACTION ( oDlg:end())

   Activate dialog oDlg centered

   oFont:end()

return (.T.)

function _imprimelas()
   local oPrn
   local nFor
   if !msgyesno('Impresion de etiquetas ... '+chr(13)+;
         "Continuar ... ?",'Confirmar impresion')
      return .t.
   endif

   CursorWait()

   oPrn := TDosPrn():New( "LPT1" ) //iniciamos el objeto tdosprn.

   oPrn:command( "27","67", "6" ) //la etiqueta mide una pulgada y el salto es cada 6 renglones.
   oPrn:command( "27","48" ) //Condensando los renglones,
   oPrn:command("15") //letra condensada

   for nFor := 1 to nCuantos
      oPrn:say(0,5, field->nombre )
      oPrn:say(1,5, field->direccion )
      oPrn:say(2,5, alltrim(field->colonia)+" " + alltrim( field->localidad)  )
      oPrn:say(3,5, alltrim( field->telefono ) )
      oPrn:say(4,5, alltrim( field->telfax ) )
      oPrn:say(5,5, alltrim( field->rfc ) )
      oSay:settext( "Imprimiendo etiquetas " + str(nFor, 6) )
      oSay:refresh()
      sysrefresh()
   next

   oPrn:say(6,0, CHR(27)+"2" ) //obligamos a que la impresora haga un reset
   oPrn:end()   //matamos el objeto de impresion ...

   CursorArrow()

return (.T.)

function _config() //aqui se configuran los datos que se imprimen en la etiqueta..
   local oDbf
   local cTitulo := "Datos que se imprimen en la etiqueta ..."
   local oGet[10]
   local oFont
   local oDlg
   local oBtn
   dbselectArea("labels")
   database oDbf
   oDbf:load()
   DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-12
   DEFINE DIALOG oDlg RESOURCE 'DIALOG_2' TITLE cTitulo font oFont //brush oBrush
   REDEFINE GET oGet[1] VAR oDbf:nombre      ID 101 OF oDlg
   REDEFINE GET oGet[2] VAR oDbf:direccion   ID 102 OF oDlg
   REDEFINE GET oGet[3] VAR oDbf:colonia     ID 103 OF oDlg
   REDEFINE GET oGet[4] VAR oDbf:localidad   ID 104 OF oDlg
   REDEFINE GET oGet[5] VAR oDbf:telefono    ID 105 OF oDlg
   REDEFINE GET oGet[6] VAR oDbf:telfax      ID 106 OF oDlg
   REDEFINE GET oGet[7] VAR oDbf:rfc          ID 107 OF oDlg

   REDEFINE BUTTON oBtn ID 201 OF oDlg ACTION ( oDbf:save() ,oDlg:end() )

   Activate dialog oDlg centered

return (.T.)

//----------------------------------------------------------------------------//  

Re: Ayuda con impresion por TDosPrn

Posted: Sun Mar 27, 2011 1:25 am
by JoseGS
Gracias amigo, voy a probar...

saludos