Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. DATOS GENERALES

Línea de producto:

Microsiga Protheus®

Segmento:

Backoffice

Módulo:

Financiero

Idiomas:

Portugués

Función: 

Portal del cliente

02. DESCRIPCIÓN

...

Aviso
titleFuncionalidad en desarrolloAtenção

El punto de entrada PCBROWSE está en etapa de desarrollo y muy pronto entrará en prueba con clientes piloto, por lo tanto, aún no está liberado en ningún release del Protheus.Se liberará por medio de un se liberó por medio del paquete de expedición acumulado continua del módulo financiero Financiero después del mes de Octubreoctubre.

El punto de entrada PCBROWSE permite incluir opciones de menú para el listado de ítems personalizados en elPortal del cliente - SIGAFIN.

El punto de entrada debe devolver un array con el json de configuración de cada menú que desea agregar.

03. CONFIGURACIÓN

Parámetros puestos a disposición en el punto de entrada:


PARAMIXB

Tipo

Descripción

1º Posición

Character

Usuario de login del Portal del cliente.

...

Propiedad

Obligatoriedad

Descripción

tituloMenu

Obligatorio

Título mostrado en el menú.

iconeMenu

Opcional

Ícono para el menú. Lista de íconos PO UI que pueden utilizarse en esta propiedad. https://po-ui.io/guides/icons

tituloPagina

Obligatorio

Titulo mostrado en la página.

funcaoQuery

Obligatorio

Nombre de la user function que User Function que devolverá la query para buscar los datos.

orderQuery

Opcional

Campo en el cual se basará el orden de la tabla.

tabla

Obligatorio

Alias de la tabla utilizada para tratamiento interno.

columnas

Es obligatorio si no se envían fields

Array de campos del browse, el sistema utilizará el título de la SX3. Si se informan fields, se ignorará esta propiedad.

fields

Opcional

Array de json con los campos del browse. Cada campo debe tener las propiedades property, type y label (PoTableColumn):

  • property: string con el nombre del campo.
  • type: string con el tipo del campo (Tipos aceptados: currency, date, number, string).
  • label: string que contiene el título del campo.

leyeendas

Opcional

Configuración de las leyendas. Array de json con las propiedades  value, color y label. (labels del PoTableColumnLabel)

campoLegendas

Opcional

Campo utilizado para leyenda.

tituloLegendas

Opcional

Título de la leyenda.

detalles

Opcional

Json con las propiedades para que se muestre en la pantalla de  detalles del registro. Consulte el ítem 03.02 Configuración de detalles.


03.01. CONFIGURACIÓN DE BÚSQUEDA

Es posible configurar la búsqueda simple y avanzada por medio de la configuración:

Propiedad

Obligatoriedad

Descripción

campoBusca

Opcional

Campo para búsqueda rápida.

camposBuscaAvancada

Opcional

Lista de campos para búsqueda avanzada, el sistema utilizará el título de la SX3. Si se informa fieldsBuscaAvancada , se ignorará esta propiedad.

fieldsBuscaAvancada

Opcional

Array de json con los campos para utilizar en la búsqueda avanzada. Cada campo debe tener las propiedades property, type y label (PoDynamicFormField):

  • property: string con el nombre del campo.
  • type: string con el tipo de campo (Tipos aceptados: currency, date, number, string).
  • label: string que contiene el título del campo.

03.02. CONFIGURACIÓN DE DETALLES

Si se configuran los detalles, se muestra en el ítem la opción "visualizar" para la exhibición de las informacionesy el listado de ítems.

...

Propiedad

Obligatoriedad

Descripción

tituloPagina

Obligatorio

Título que se muestra en la página de detalles.

tituloAbaPrincipal

Obligatorio

Título que se muestra en la solapa principal.

camposDetalhes

Obligatorio

Lista de campos que se mostrarán, el sistema utilizará el título de la SX3. Si se informa fieldsDetalhes , se ignorará esta propiedad.

fieldsDetalhes

Opcional

Array de json con los campos del browse. Cada campo debe tener las propiedades property, type y label (PoTableColumn):

  • property: string con el nombre del campo.
  • type: string con el tipo de campo (Tipos aceptadoss: date, number, string).
  • label: string que contiene el título del campo.
  • divider: string con el título para la definición de la sección (Los campos agregados después de este, formarán parte de esta división/sección).

orderQueryItens

Opcional

Campo en el cual se basará el orden de la tabla.

tituloAbaItens

Opcional

Título que se muestra en la solapa Ítems.

funcaoQueryItens

Es obligatorio si se informa tituloAbaItens

User funcion Funcion que devolverá la query de los ítems.

tabelaItens

Es obligatorio si se informa tituloAbaItens

Alias dos itens.

columnas

Es obligatorio si se informa tituloAbaItens

Lista de campos del browse, el sistema utilizará el título de la SX3. Si se informa fields , se ignorará esta propiedad.

fields

Es obligatorio si se informa tituloAbaItens

Array de json con los campos del browse. Cada campo debe tener las propiedades property, type y label (PoTableColumn):

  • property: string con el nombre del campo.
  • type: string con el tipo do campo (Tipos aceptados: date, number, string).
  • label: string que contiene el título del campo.

04. USER FUNCTION QUERY

La función pasada en la propiedad 'funcaoQuery' y 'funcaoQueryItens' se llamará por el Portal del cliente para que devuelva la query personalizada que se utilizará en la búsqueda de los ítems. 

funcaoQuery recibe los parámetros: 

PARAMIXB

Tipo

Descripción

1º Posición

Array

Contiene un Array con las claves (SUCURSAL+CÓDIGO+TIENDA) de los clientes seleccionados en el portal. 

Cada posición del Array contiene un objeto Json con las propiedades: sucursal, código y tienda.

2º Posición

Carácter

Usuario de login del Portal del cliente

funcaoQueryItens recibe los parámetros: 

PARAMIXB

Tipo

Descripción

1º Posición

Array

Contiene un Array con las claves (SUCURSAL, CÓDIGO, TIENDA) de los clientes seleccionados en el portal. 

Cada posición del Array contiene un objeto Json con las propiedades: sucursal, código y tienda.

2º Posición

Carácter

Usuario de login del Portal del cliente

2º Posición

Json

json Json de la línea seleccionada en el formato "{ Campo: Valor} " Ej.: "{E1_FILIAL: '01', E1_NUM: '000001'}"

Devolución del punto de entrada:

La función debe devolver la query personalizada:

...

Tipo

Obligatoriedad

Descripción

Carácter

Obligatorio

Query personalizada para listado de los registros del menú personalizado.

05. EJEMPLO DE UTILIZACIÓN

Bloco de código
languagejava
themeMidnight
firstline1
titlePCBROWSE
linenumberstrue
collapsetrue
#Include 'Protheus.ch'
 
/*/{Protheus.doc} PCBROWSE
    PuntoPonto de entrada para agregaradicionar opcionesopcoes de menúmenu enno el Portal deldo cliente
    @type function
    @return array, array de configuraciónconfiguracao
/*/
userUser Function PCBROWSE()
    Local cUser := PARAMIXB[1] as Character // CódigoCodigo deldo usuario conectadologado alno portal.
    Local aMenu := {} as Array

    aAddAAdd(aMenu, MENU1()) // ejemploexemplo utilizando columnascolunas SX3
    aAddAAdd(aMenu, MENU2()) // ejemploexemplo configurando fields
Return aMenu
 
/*/{Protheus.doc} MENU1
    ConfiguraciónConfiguracao deldo menúmenu
    @type function
    @return json, configuraciónconfiguracao deldo browse
/*/
Static Function MENU1()
    Local jMenu     := JsonObject():new() as Json
    Local jDetalhes := JsonObject():new() as Json

    //títulotitulo presentadoapresentado enno el menúmenu
    jMenu['tituloMenu'] := 'Pedidos1'

    //icone para o menu, lista de icones https://po-ui.io/guides/icons
    jMenu['iconeMenu']  := 'po-icon po-icon-manufacture'

    //títulotitulo presentadoapresentado enna la páginapagina
    jMenu['tituloPagina'] := 'MisMeus pedidos1Pedidos1'

    //user funcion que vai devolveráretornar laa query de búsquedabusca
    jMenu['funcaoQuery'] := 'PCQRY01'

    //campo que vai seser ordenaráordenado
    jMenu['orderQuery']  := 'C5_EMISSAO DESC'

    //alias deda latabela tabla utilizada para tratamientostratamentos internos
    jMenu['tabela'] := 'SC5'

    //lista de campos deldo browse, elo sistema utilizarávai elutilizar títuloo detitulo lada SX3. SiSe seinformar informa fields seessa ignorarápropriedade estaé propiedadignorada
    jMenu['colunas'] := {'c5_filial', 'c5_condpag', 'c5_num', 'c5_vend1', 'c5_nota', 'c5_emissao'}
     
    //configuraciónconfiguracao de leyendaslegendas, array concom value, color ye label
    jMenu['legendas'] := {}

    aAddAAdd(jMenu['legendas'], prepareStatus("N", "color-01", "Normal"))
    aAddAAdd(jMenu['legendas'], prepareStatus("C", "color-02", "Compl.PrecIo/Cantidad"))
    aAddAAdd(jMenu['legendas'], prepareStatus("I", "color-03", "Compl.ICMS"))
    aAddAAdd(jMenu['legendas'], prepareStatus("P", "color-04", "Compl.IPI"))
    aAddAAdd(jMenu['legendas'], prepareStatus("D", "color-05", "Dev.Compras"))
    aAddAAdd(jMenu['legendas'], prepareStatus("B", "color-06", "Utiliza proveedor"))

    jMenu['campoLegendas']  := 'c5_tipo'
    jMenu['tituloLegendas'] := 'Tipo'
 
    //campo para búsqueabusca rápidarapida, SiSe seinformar informa fieldBusca, seessa ignorarápropriedade estaé propiedadignorada
    jMenu['campoBusca'] := 'c5_num'

    //lista de campos paraapra búsquedabusca avanzadaavancada, elo sistema utilizarávai elutilizar títuloo detitulo lada SX3. SiSe se informainformar fieldsBuscaAvancada, seessa ignorarápropriedade estaé propiedadignorada
    jMenu['camposBuscaAvancada'] := {'c5_filial', 'c5_vend1', 'c5_nota', 'c5_emissao', 'c5_transp'}
     
    //ejemploexemplo de configuraciónconfiguracao de detallesdetalhes
    //títulotitulo presentadoapresentado enna lapagina página de detallesdetalhes
    jDetalhes['tituloPagina'] := 'DetallesDetalhes deldo pedido'

    //títulotitulo presentadoapresentado enna laaba solapa principal
    jDetalhes['tituloAbaPrincipal'] := 'DatosDados generalesgerais'

    //lista de campos que seserao presentaránapresentados, elo sistema utilizarávai elutilizar títuloo detitulo lada SX3. SiSe se informainformar fieldsDetalhes, seessa ignorarápropriedade estaé propiedadignorada
    jDetalhes['camposDetalhes'] := {'c5_num','c5_tipo', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c5_cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',}
 
    //títulotitulo presentadoapresentado enna laaba solapa ítemsitens
    jDetalhes['tituloAbaItens'] := 'Produtos'

    //user funcion que devolverávai retornar laa query dedos los ítemsitens
    jDetalhes['funcaoQueryItens'] := 'PCITEM'

    //campo que serávai ser ordenado
    jDetalhes['orderQueryItens'] := 'c6_item desc'

    //alias dedos los ítemsitens
    jDetalhes['tabelaItens'] := 'SC6'

    //lista de campos deldo browse, elo sistema utilizarávai elutilizar títuloo detitulo lada SX3. SiSe seinformar informa fields, seessa ignorarápropriedade estaé propiedadignorada
    jDetalhes['colunas'] := {'c6_item', 'c6_produto', 'c6_descri', 'c6_qtdven', 'c6_prcven', 'c6_valor'}
     
    jMenu['detalhes'] := jDetalhes
 
returnReturn jMenu
 
/*/{Protheus.doc} MENU2
    ConfiguraciónConfiguracao deldo menúmenu utilizando lasas propiedadespropriedades fields
    @type function
    @return json, configuraciónconfiguracao deldo browse
/*/
Static Function MENU2()
    Local jMenu     := JsonObject():new() as Json //Json concom lasas propiedadespropriedades esperadas.
    Local jDetalhes := JsonObject():new() as Json
 
    jMenu['tituloMenu']   := 'Pedidos2'
    jMenu['iconeMenu']    := 'po-icon po-icon-manufacture'
    jMenu['tituloPagina'] := 'Meus Pedidos2'
    jMenu['funcaoQuery']  := 'PCQRY01'
    jMenu['orderQuery']   := 'C5_DATA1 ASC'
    jMenu['tabela']       := 'SC5'
 
    //lista de campos deldo browse, utilizado cuandoquando nonao sequer quierepegar utilizardados datosda de la SX3.
    //debedeve ser unum array de json concom lasas propiedadespropriedades property, type ye label
    jMenu['fields'] := {}

    aAddAAdd(jMenu['fields'], prepareField("c5_filial" , "string", "SucursalFilial deldo pedido"))
    aAddAAdd(jMenu['fields'], prepareField("c5_num"    , "string", "Pedido"))
    aAddAAdd(jMenu['fields'], prepareField("c5_vend1"  , "string", "Vendedor"))
    aAddAAdd(jMenu['fields'], prepareField("c5_condpag", "string", "Forma de pagopagamento"))
    aAddAAdd(jMenu['fields'], prepareField("c5_nota"   , "string", "FactNF"))
 
    //campo para búsquedabusca rápidarapida, utilizado cuandoquando nonao sequer quierepegar utilizar datos de ladados da SX3.
    //debedeve ser unum array de json concom lasas propiedadespropriedades property, type ye label
    jMenu['fieldBusca'] := prepareField("c5_num", "string", "BúsquedaPesquisa por pedido")
 
    //lista de campos paraapra búsquedabusca avanzadaavancada, elo sistema utilizarávai elutilizar títuloo detitulo lada SX3. SiSe seinformar informa fieldsBuscaAvancada, seessa ignorarápropriedade estaé propiedadignorada
    jMenu['fieldsBuscaAvancada'] := {}

    aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date"  , "FechaData"))
    aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial" , "string", "SucursalFilial"))
    aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota"   , "string", "FactNF"))
    aAddAAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_num"    , "string", "Pedido"))
 
    //ejemploexemplo de configuraciónconfiguracao de detallesdetalhes
    //títulotitulo presentadoapresentado enna la páginapagina de detallesdetalhes
    jDetalhes['tituloPagina'] := 'DetallesDetalhes deldo pedido'

    //títulotitulo presentadoapresentado enna la solapaaba principal
    jDetalhes['tituloAbaPrincipal'] := 'DatosDados generalesgerais'

    //SeUtiliza utilizanas las propiedadespropriedades PoDynamicViewField do po-dynamic-view poui. https://po-ui.io/documentation/po-dynamic-view
    jDetalhes['fieldsDetalhes'] := {}
     aAdd  

	AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num'    , 'string', 'Pedido'            , 'DatosDados'     ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo'   , 'string', 'Tipo dedo pedido'                  ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota'   , 'string', 'FacturaNota'                            ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date'  , 'FechaData'                            ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1'  , 'string', 'Vendedor'                        ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tabela' , 'string', 'ListaTabela de preciospreços'                ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador'             ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'TiendaLoja'                            ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Cód Emp de TransporteCódigo transportadora', 'Entrega'))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete'  , 'string', 'Valor dedo fletefrete'                  ))
    aAddAAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_seguro' , 'string', 'Valor dedo seguro'                 ))
 
    //títulotitulo presentadoapresentado enna laaba solapa ítemsitens
    jDetalhes['tituloAbaItens'] := 'ProductosProdutos'

    //user funcion que vai devolveráretornar laa query dedos los ítemsitens
    jDetalhes['funcaoQueryItens'] := 'PCITEM'

    //alias de losdos ítemsitens
    jDetalhes['tabelaItens'] := 'SC6'

    //lista de campos deldo browse, debedeve ser unum array de json concom lasas propiedadespropriedades property, type ye label
    jDetalhes['fields'] := {}

    aAddAAdd(jDetalhes['fields'], prepareField('c6_item'   , 'string'  , 'ÍtemItem'))
    aAddAAdd(jDetalhes['fields'], prepareField('c6_produto', 'string'  , 'Código'))
    aAddAAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string'  , 'CantidadQuantidade'))
    aAddAAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'PrecioPreço'))
    aAddAAdd(jDetalhes['fields'], prepareField('c6_valor'  , 'currency', 'Valor'))
 
    jMenu['detalhes'] := jDetalhes
returnReturn jMenu
 
/*/{Protheus.doc} prepareField
    funciónfuncao auxiliar para preparar lasas propiedadespropriedades deldo field
    @type function
    @param cCampo, character, campo
    @param cTipo, character, tipo (string, date, number)
    @param cTitulo, character, titulo
    @param cDivisor, character, titulo do divisor (utilizado ennos los detallesdetalhes)
    @return json, json de field
/*/
Static Function prepareField(cCampo as Character, cTipo as Character, cTitulo as Character, cDivisor as Character)
    Local jField       := JsonObject():new() as Json

    jField["property"] := cCampo
    jField["type"]     := cTipo
    jField["label"]    := cTitulo

    ifIf !Empty(cDivisor)
        jField["divider"] := cDivisor
    endIfEndIf

Return jField
 
/*/{Protheus.doc} prepareStatus
    funciónfuncao auxiliar para preparar lasas propiedadespropriedades deda la leyendalegenda
    @type function
    @param cValor, character, valor
    @param cCor, character, cor
    @param cTitulo, character, label
    @return variant, rconfiguracao de legenda
/*/
Static Function prepareStatus(cValor as Character, cCor as Character, cTitulo as Character)
    Local jStatus  jStatus  := JsonObject():new() as Json

    jStatus["value"] := cValor
    jStatus["color"] := cCor
    jStatus["label"] := cTitulo

Return jStatus
Bloco de código
languagecpp
themeMidnight
firstline1
titleFUNCTION QUERY
linenumberstrue
collapsetrue
#Include 'Protheus.ch'  

/*/{Protheus.doc} PCQRY01
	Query para listar losos ítemsitens deldo PE PCBROWSE
	@type function
	@return character, query
/*/
User functionFunction PCQRY01()
	localLocal aSA1   := Paramixb[1] // Array de clientes {{"D MG    ", "000002", "02"}, {"D RJ    ", "000002", "12"}}
	localLocal cLogin := Paramixb[2] // Login deldo portal 
	localLocal cQuery := ""
	localLocal cAlias := "SC5"
	localLocal nCli   := 1
	localLocal cOr    := ""

	cQuery := " SELECT #QueryFields#  "
	cQuery += " FROM " + RetSqlName(cAlias) + " SC5 "
	cQuery += " WHERE SC5.D_E_L_E_T_ = ' ' AND "
	cQuery += "("

	// lógica para filtro utilizando losos código de clientes
	forFor nCli := 1 to len(aSA1)

		ifIf (nCli > 1)
			cOr := " OR "
		endIfEndIf

		cQuery +=  cOr + "(SC5.C5_CLIENTE = '" + aSA1[nCli][2] + "' AND SC5.C5_LOJACLI = '" + aSA1[nCli][3]+"')" 
	nextNext

	cQuery += ")"
	cQuery += " #QueryWhere# "

Return cQuery

/*/{Protheus.doc} PCITEM
	Query para listar losos detalhes deldo ítemitem deldo PE PCBROWSE
	@type function
	@return character, query
/*/
userUser functionFunction PCITEM()
    localLocal aSA1    := Paramixb[1] // Clientes
    localLocal cUser   := Paramixb[2] // Login deldo portal
    localLocal jFilter := Paramixb[3] // LíneaLinha seleccionadaselecionada para losos detallesdetalhes
    localLocal cAlias  := "SC6"

    cQuery := " SELECT #QueryFields#  "
    cQuery += " FROM " + RetSqlName(cAlias) + " " + cAlias
    cQuery += " WHERE  " + cAlias + ".D_E_L_E_T_ = ' ' AND "
    cQuery += " C6_FILIAL = '" + jFilter['C5_FILIAL'] + "' AND "
    cQuery += " C6_NUM = '" + jFilter['C5_NUM'] + "'"
    cQuery += " #QueryWhere# "
returnReturn cQuery