sabato 1 luglio 2017

SMARTFORMS: formato data.

Nelle stampa con Smartforms, il formato in cui viene esposta in stampa una variabile di tipo data, dipende da vari fattori.

In alcuni casi dal formato data definito a livello di utente nella SU01:




Quindi se un utente lavora sempre per uno stesso paese dove il formato data è differente da quello Italiano, per esempio negli USA il formato abituale è MM.GG.AAAA oppure in Cina è AAAA.MM.GG, si può impostare a livello utente e la stampa di moduli Smartforms avviene nel formato corretto.

Si presentano però casi di utenti che lavorano normalmente per la divisione Italiana, ma saltuariamente devono lanciare stampe di documenti per altri paesi, per esempio la Cina.

Ho provato a vedere se da Smartforms erano consentiti dei formati data differenti in fase di output, ma ho trovato davvero poche possibilità di gestione del formato.

Per cui in un primo momento ho pensato di duplicare i campi di output della data, inserire delle condizioni a livello di paese e, per la data nel formato Cinese, scrivere qualche riga di codice.

Duplicato il campo data:

Inserito delle condizioni in modo che una si attivi per ordini con paese fornitore diverso da Cina e una per paese uguale Cina:


ho aggiunto una variabile e scritto una parte di codice che richiami una FORM:


Questa la FORM comune che viene chiamata in diversi punti


il codice per facilitare eventuale copia:

*&---------------------------------------------------------------------*
*&      Form  DATA_YYYYMMDD
*&---------------------------------------------------------------------*
FORM DATA_YYYYMMDD   USING i_data i_sep
                  CHANGING va_data.

concatenate i_data+0(4) i_data+4(2) i_data+6(2)
       INTO va_data SEPARATED BY i_sep.

ENDFORM.                    "DATA_YYYYMMDD

Ecco il risultato di una stampa ordine di acquisto per un fornitore Cinese:


Però, cercando meglio nel web, ho visto che è possibile impostare il formato data da utilizzare abbinato al paese (inizialmente avevo provato ma non funzionava poichè l'impostazione per il paese Cina era il default come l'Italia).

Per modificare il formato utilizzare per paese:

Transazione OY01

selezionare CN e vedere il dettaglio


impostare il nuovo formato e salvare


Nota: è una modifica di customizing per cui sarà necessario includerla in una CR.

Nella parte di inizializzazione è poi sufficiente, in base al paese o alla organizzazione, scegliere il formato data paese da utilizzare:

IF str_lfa1-land1 = 'CN'.
  SET COUNTRY 'CN'.
ENDIF.

ed il formato data riportato in stampa risulterà corretto senza dover duplicare le strutture e gestire le varie condizioni: molto più semplice!

Dopo aver modificato, per il paese Cina, il formato data con la OY01, ci siamo però accorti che alcuni documenti prendevano il nuovo formato sebbene nello SMARTFORMS non fosse contenuto il comando SET COUNTRY!
Sto parlando per esempio di fatture da Italia verso clienti Cinesi e l'ufficio contabilità mi ha confermato che le fatture da società Italia devono avere sempre data in formato Italiano.

Investigando un po' ho scoperto che dipende dal programma di lancio dello SMARTFORMS.

Per esempio per le fatture il programma è lo standard RLB_INVOICE, che ad un certo punto esegue:

    PERFORM set_print_param USING    ls_addr_key
                                     ls_dlv-land
                            CHANGING ls_control_param
                                     ls_composer_param
                                     ls_recipient
                                     ls_sender
                                     cf_retcode.

dove ls_dlv-land contiene il paese del cliente (CN)

Nella FORM SET_PRINT_PARAM troviamo poi:

  CALL FUNCTION 'WFMC_PREPARE_SMART_FORM'
    EXPORTING
      PI_NAST       = NAST
      PI_COUNTRY    = IS_DLV-LAND
      PI_ADDR_KEY   = IS_ADDR_KEY
      PI_REPID      = LF_REPID
      PI_SCREEN     = XSCREEN
    IMPORTING
      PE_RETURNCODE = CF_RETCODE
      PE_ITCPO      = LS_ITCPO
      PE_DEVICE     = LF_DEVICE
      PE_RECIPIENT  = CS_RECIPIENT
      PE_SENDER     = CS_SENDER.

dove IS_DLV-LAND contiene sempre il paese del cliente (CN)

infine nel FM WFMC_PREPARE_SMART_FORM c'è il comando

  SET COUNTRY pi_country.  

in questo caso quindi non vale l'impostazione a livello di utente, ma prende l'impostazione del paese destinatario del documento.

Per risolvere ho inserito, nella parte INIZIALIZZ. dello SMARTFORMS fatture e solo per l'org.commerciale IT, il comando

  SET COUNTRY 'IT'.  

Attenzione quindi, se cambiate l'impostazione a livello di paese, all'impatto sui documenti stampati con destinazione quel paese.

Nessun commento:

Posta un commento