Documentazione
< Indietro
Print

SALSCRIPT

sono dei pezzi di codice sviluppati dai tecnici per personalizzare Stratega™ senza dover modificare i codici sorgenti; normalmente non permettono di implementare grosse modifiche, ma attraverso di essi si possono impostare valori di default di alcuni campi, o variarne alcuni in funzione di valori presenti su altri campi. Si attivano su eventi predefiniti presenti su ogni campo (o Tab o l’intera form) come ad esempio la modifica di un campo, o la validazione di una riga di un documento o la verifica dei dati prima della conferma;

“Oggetto” – nome dell’oggetto su cui attivare i codici

“Azione” – elenco delle azioni disponibili in base all’oggetto

“Elenco salscript attivati” – elenco di tutti gli salscript salvati

“Script” – il codice all’interno dell’oggetto+azione

“Item explorer” – elenco degli oggetti nella form da copiare e mettere nell’oggetto

Cursori da poter utilizzare:

  • hSqlTable
  • hSqlUser
  • hSqlTmp

Variabili globali:

  • gdTODAY – Data odierna
  • gnANNO – Anno corrente
  • gnANNOCOMP – Anno di competenza fiscale
  • gbValidateCustom – Variabile da settare a FALSE se si vuole bloccare il codice salscript
  • gsCODAZI – Codice azienda
  • sPROFILI_CODICE – Nome utente Stratega
  • sPROFILI_GRUPPO – Gruppo di utente Stratega

Funzioni:

  • Call fnUserPBDefineEx(NumPulsante, Titolo, Icona)
    •  Attiva pulsante custom
  • Call fnUserPBDefineExTooltip(NumPulsante, Titolo, Descrizione, Icona)
    • Attiva pulsante custom con descrizione
  • Call SalEnableWindow(nome_form.nome_campo)
    • Abilitare campo
  • Call SalEnableWindow(nome_form.nome_tabella.nome_campo)
    • Abilitare tabella
  • Call SalDisableWindow(nome_form.nome_campo)
    • Disabilitazione campo
  • Call SalDisableWindow(nome_form.nome_tabella.nome_campo)
    • Disabilitazione tabella
  • Call SalShowWindow(nome_form.nome_tabella.nome_campo)
    • Visualizzazione di un campo
  • Call SalHideWindow(frmGsOrdcli.tblORDCCC.colORDCCC_MIS2)
    • nascondere una tabella, colonna … campo
  • Call SalFmtSetPicture( frmGsOrdcli.tblORDCCC.colORDCCC_QUANTIT2, ‘#0,000’ )
    • settare un formato diverso
  • Call SalTblSetColumnTitle(colonna, “NOME”)
    • cambiare il nome ad una colonna
  • Call SalTblSetColumnTitle(colonna, “NOME”)
    • cambiare il nome ad una colonna
  • Call fnMessageBox (“Attenzione Cliente con fatture di Acconto!”, “Stratega”, 0)
    • Inviare messaggio di avviso
  • LEGGERE VALORE DA SETUP INI:
    • VALORE NUMERICO: VARIABILE = fnLoadNumberFromIni (SEZIONE, CHIAVE)
    • VALORE STRINGA : VARIABILE = fnLoadStringFromIni (SEZIONE, CHIAVE)

Alcuni esempi di codice:

quando devo avere la stessa form attiva su più programmi devo ricavare l’handle e anteporlo al nome form

Window Handle: HWndFTAnaartCla

Set HWndFTAnaartCla = fnGetHWndFormInTab( frmGsAnaart, ‘frmGsAnaartCla’)

—————————————————————————-

MANDARE UN MESSAGGIO AD UNA VIDEATA/OGGETTO

Call SalSendMsg (NOME OGGETTO , MESSAGGIO, PARAMETRO1, PARAMETRO2)

ES Call SalSendMsg(frmGsBolven, PM_NewRec, 0, 0)

——————————————————————————

lettura di un numero di caratteri da una sttring e trasformazione in numero

Number: nDeposito

Set nDeposito = SalStrToNumber ( SalStrRightX ( DESCRIZIONE , Numero-Di-Caratteri  ))

SalStrRightX   -> legge i caratteri partendo da destra (es. SalStrRightX(“prova 001”, 3) = “001”)

SalStrToNumber -> converte da Stringa a Numerico (Es. SalStrToNumber (“003”)  = 3)

——————————————————————————

Fare la somma dei valori di una colonna

Set frmUGsOrdcli.dfTOT_NETTO = SalTblColumnSum( frmUGsOrdcli.tblWU_ORDCCC_PESI, SalTblQueryColumnID(frmUGsOrdcli.tblWU_ORDCCC_PESI.colWU_ORDCCC_PESI_NETTO_RIGA), 0, ROW_MarkDeleted | ROW_Hidden )

——————————————————————————

Data consegna = a 3 giorni più della data documento (come fare su un campo data per aumentare o diminuire i giorni)

Call frmGsOrdcli.dfORDCTT_DATCON.fnSetValueDateTime(frmGsOrdcli.dfORDCTT_DATDOC + 3)

——————————————————————————

COPIA DI UN CAMPO AD UN ALTRO SENZA SCATENARE EVENTI DI CLASSE

Set frmGsOffcli.dfOFFCTT_DATCON = frmGsOffcli.dfOFFCTT_DATDOC

COPIA DI UN CAMPO AD UN ALTRO FACENDO SCATENARE EVENTI DI CLASSE

Call frmGsOffcli.dfOFFCTT_DATCON. fnSetValueDateTime(frmGsOffcli.dfOFFCTT_DATDOC)

——————————————————————————

SETTARE UNA COMBO BOX AD UN VALORE(INDICE)

Call frmGsOffcli.cmbOFFCTT_UFFICIO.fnSetValueNum(1)

——————————————————————————

SETTARE UN CAMPO DATA ALLA DATA ODIERNA

Call frmGsOffcli.dfOFFCTT_DATCON. fnSetValueDateTime(gdTODAY)

——————————————————————————

RICERCA TRAMITE SQL DI UNA INFORMAZIONE; SE NON LA TROVA MESSAGGIO DI ERRORE:

Call SqlPrepareAndExecute( hSqlTable, “SELECT TOP 1 * FROM FATVTT WHERE CONTO = :frmGsFatven.dfFATVTT_CONTO AND EXISTS (SELECT * FROM FATVCC WHERE KEYRIF = FATVTT.KEYRIF AND FATVCC.CODART = ‘F.ACCONTO’ AND FATVTT.DATDOC <= :frmGsFatven.dfFATVTT_DATDOC ) AND CODAZI = :gsCODAZI “)

——————————————————————————

DISABILITAZIONE TAB

Su: CreateComplete

Il testo sottostante, partendo dalla form dell’anagrafica articoli, disattiva il tab produzione se l’utente non è

abilitato ad utilizzare il livello 200.

Number: nConta

Call SqlPrepareAndExecute(hSqlTmp,”SELECT COUNT(*) INTO :nConta FROM PROFILIRANGE WHERE  (CODICE IN  (SELECT GRUPPO FROM PROFILI WHERE CODICE = :sPROFILI_CODICE) OR CODICE = :sPROFILI_CODICE) AND DALIV = 200″)

Call SqlFetchNext(hSqlTmp,nSqlStatus)

If nConta = 0

   Call frmGsAnaart.fnTABDelete(‘tabProduzione’, TRUE)

EndIf

——————————————————————————

CONTROLLO SU CAMPO NUMERICO PER NON VALIDARE MASCHERA

Su: ApplayIsPossible

L’esempio blocca la conferma di un’offerta se manca l’agente, o è 999

If frmGsOffcli.dfOFFCTT_AGENTE.fnGetValueNum() = 0

      Call fnMessageBox(“Inserire l’Agente prima di procedere con il Salvataggio dell’offerta”, “Stratega”, 0)

      set gbValidateCustom = FALSE

Else

    If frmGsOffcli.dfOFFCTT_AGENTE.fnGetValueNum() = 999

      Call fnMessageBox(“Assegnare Segnalatore corretto prima di procedere con il Salvataggio dell’offerta”, “Stratega”, 0)

      set gbValidateCustom = FALSE

    EndIf

EndIf

——————————————————————————

CREARE DELLE REGOLE IN BASE ALL’UTENTE

Es. quando faccio nuovo inserito e sono uno di questi utenti mi viene impostato il tipo documento 44 e mi viene bloccato per non poterlo cambiare

If sPROFILI_CODICE = ‘UTENTE1’ or sPROFILI_CODICE = ‘UTENTE2’ OR sPROFILI_CODICE = ‘GRUPPO1’ OR sPROFILI_CODICE = ‘GRUPPO2’
   Call frmGsOrdcli.cmbORDCTT_TIPDOC.fnSetValueNum (44)
   Call SalSendMsg ( frmGsOrdcli.cmbORDCTT_TIPDOC, SAM_Validate, 0 , 0)
   Call SalDisableWindow ( frmGsOrdcli.cmbORDCTT_TIPDOC )
EndIf

——————————————————————————

CONTROLLO SU RIGA “DOCUMENTO”: MANCA CAMPO E PER NON VALIDARE MASCHERA

If frmGsOrdfor.tblORDFCC.colORDFCC_TIPRIGA.fnGetValueNum() != 3

  If frmGsOrdfor.tblORDFCC.colORDFCC_CONTO.fnGetValueString() = STRING_Null

    Call fnMessageBox(“Per il codice articolo ” || frmGsOrdfor.tblORDFCC.colORDFCC_CODART || ” manca il Conto”, “Stratega”, MB_IconStop)

    Set gbValidateCustom = FALSE

  EndIf

EndIf

——————————————————————————

INVIO MESSAGGIO DI VALIDAZIONE CAMPO

Call SalPostMsg(frmGsAnaart.dfARTPROD_UM_MAG, SAM_Validate, 0, 0)

——————————————————————————

CHIUDERE UNA FORM

Call SalSendMsg( frmGsMovcon, SAM_Close, 0, 0 )

——————————————————————————

CREAZIONE DI UNA FORM IN TAB CON CAMPI VARIABILI ED ASSOCIARLA ALLA MASTER FORM

Su frmGsANACLITEST-CreateComplete

Number: nNewPage
Window Handle: hWndTab
Window Handle: hWndCustom
Boolean: bFlagSalScript

Set hWndTab = frmGsANACLITEST.tab1
Set frmGsANACLITEST.tab1.i_bSilentChange = TRUE
Set nNewPage = SalTabPageCount( hWndTab )
Call SalTabAddPage( hWndTab, nNewPage, ‘ALTRI DATI UTENTE’)
Set bFlagSalScript = 1 ! — per dimostrare on off script
If bFlagSalScript

Set hWndCustom = SalCreateWindowEx( frmTBLCUSTOM, frmGsANACLITEST, 0, 0, 0, 0, CREATE_AsChild )
Call SalTabAttachWindow( hWndTab, nNewPage, hWndCustom )
Call hWndCustom.frmTBLCUSTOM.fnDynFormInit( ‘ANACLI’, ‘ANACLI.CONTO’,’:§dfANACLI_CONTO’, TRUE )
Call hWndCustom.frmTBLCUSTOM.fnDynTabSetPage( 0,’Prima Pagina’ )
Call hWndCustom.frmTBLCUSTOM.fnDynTabSetPage( 1,’Seconda Pagina’ )
Call hWndCustom.frmTBLCUSTOM.fnDynTabSetPage( 2,’Terza Pagina’ )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.dfString01’, DT_LongString, TRUE, ‘PRIMO’, 0 )
Call hWndCustom. frmTBLCUSTOM.dfString01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘STRING01’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
Call hWndCustom.frmTBLCUSTOM.dfString01.fnDynAttributesExtra( ‘TABIVA’, ‘ANAGRA’, ‘CODICE’, STRING_Null, STRING_Null, TRUE )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.dfDate01’, DT_DateTime, FALSE, ‘CAMPO DATA’, 0 )
Call hWndCustom.frmTBLCUSTOM.dfDate01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘DATE01’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.dfNumber01’, DT_Number, FALSE, ‘CAMPO NUMERO’, 0 )
Call hWndCustom.frmTBLCUSTOM.dfNumber01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘NUMBER01’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.mlMultiLine01’, DT_LongString, FALSE, ‘CAMPO NOTE’, 0 )
Call hWndCustom.frmTBLCUSTOM.mlMultiLine01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘STRING04’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
Call hWndCustom.frmTBLCUSTOM.fnDynObjectResize( hWndCustom.frmTBLCUSTOM.mlMultiLine01, 10,3)
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.cmbFromListAlfa01’, DT_String, FALSE, ‘COMBO IVA’, 1 )
Call hWndCustom.frmTBLCUSTOM.cmbFromListAlfa01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘STRING02’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
Call hWndCustom.frmTBLCUSTOM.cmbFromListAlfa01.fnDynAttributesExtra( ‘TABIVA’, ‘ANAGRA’, ‘CODICE’, STRING_Null, STRING_Null, TRUE )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.cmbFromListAlfa02’, DT_String, FALSE, ‘TERZO’, 1 )
Call hWndCustom.frmTBLCUSTOM.cmbFromListAlfa02.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘STRING03’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
Call hWndCustom.frmTBLCUSTOM.cmbFromListAlfa02.fnDynAttributesExtra( ‘TABIVA’, ‘ANAGRA’, ‘CODICE’, STRING_Null, STRING_Null, TRUE )
!
Call hWndCustom.frmTBLCUSTOM.fnDynFormEnableItem( ‘frmTBLCUSTOM.cbCheck01’, DT_Number, FALSE, ‘VERO/FALSO’, 2 )
Call hWndCustom.frmTBLCUSTOM.cbCheck01.fnDynAttributes( FALSE, STRING_Null, ‘TBLCUSTOM’, ‘NUMBER02’, TRUE, TRUE, FALSE, STRING_Null, NUMBER_Null )
! — Attivo la prima pagina del Tab
Call SalTabSetActivePage(hWndCustom.frmTBLCUSTOM.tab01, 0 )
Set frmGsANACLITEST.tab1.i_bSilentChange = FALSE
EndIf

——————————————————————————

COLONNE CUSTOM AGGIUNTIVE

colCustomString01

colCustomString02

colCustomString03

colCustomNumber01

colCustomNumber02

colCustomDate01

PER ATTIVARE UNA COLONNA

fnDynAttributes (p_bShow, p_sTitle, p_sTableName, p_sColumnName, p_bPartecipaWhere, p_bUpdatable, p_bPrimaryKey, p_sLinkBind, p_nColumnPos)

ATTIVA LE COLONNE DINAMICHE SULLE TABELLE

Boolean: p_bShow

               ! Indica se l’oggetto deve essere visibile (TRUE) o meno (FALSE)

String: p_sTitle

               ! Titolo della colonna dinamica

String: p_sTableName

               ! Proprietà dell’oggetto: Nome della tabella associata

String: p_sColumnName

               ! Proprietà dell’oggetto: Nome della colonna associata

Boolean: p_bPartecipateWhere

               ! Proprietà dell’oggetto: Flag Partecipa a funzionalità QBE

                                            TRUE – Partecipa

                                            FALSE – Non partecipa

Boolean: p_bUpdatable

               ! Proprietà dell’oggetto: Flag Modificabile

                                            TRUE – Modificabile

                                            FALSE – Non Modificabile

Boolean: p_bPrimaryKey

               ! Proprietà dell’oggetto: Flag Chiave primaria

                                            TRUE – Oggetto che compone la chiave primaria

                                            FALSE – Oggetto che NON compone la chiave primaria

String: p_sLinkBind

               ! Proprietà dell’oggetto: Definizione del Link al quale l’oggetto fa riferimento per il valore

Number: p_nColumnPos

               Posizione della colonna

PER ATTIVARE LA DECODIFICA

fnDynAttributesExtra(p_sDecodTable, p_sDecodColumn, p_sDecodKey, p_sDecodWhere, p_sDecodBind, p_bDecodAcceptIfNull)

QUALIFICA LA DECODIFICA DELLE COLONNE DINAMICHE SULLE TABELLE         

String: p_sDecodTable

          ! Proprietà dell’oggetto: Indica la tabella usata per decodificare il campo

String: p_sDecodColumn

          ! Proprietà dell’oggetto: Indica la colonna che decodifica il campo

String: p_sDecodKey

          ! Proprietà dell’oggetto: Indica il campo chiave usato per la decodifica

String: p_sDecodWhere

          ! Proprietà dell’oggetto: Indica ca condizione where per la select di decodifica

String: p_sDecodBind

          ! Proprietà dell’oggetto: Indica il data field sul quale decodificare (se NULL viene gestito dinamicamente)

Boolean: p_bDecodAcceptIfNull

          ! Proprietà dell’oggetto: Indica se il campo deve accettare valori nulli nonostante la decodifica

                              TRUE = Accetta

                              FALSE = Non Accetta

Indice contenuti