...
Línea de | Produtoproducto: | Microsiga Protheus® |
Segmento: | Backoffice | |
Módulo: | Financeiro Financiero | |
Idiomas: | PortuguêsPortugués | |
Función: | Portal do Clientedel cliente |
...
| Aviso | |||
|---|---|---|---|
| |||
El punto O ponto de entrada PCBROWSE está em fase de desenvolvimento em breve entrará em testes com clientes piloto, portanto ainda não está liberada em nenhum release do Protheus! Será liberado através de pacote de expedição acumulado do módulo financeiro após Outubro. |
...
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 paquete de expedición acumulado del módulo financiero después del mes de Octubre. |
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.
...
PARAMIXB | Tipo | DescriçãoDescripción | |||
1º | PosiçãoPosición | Character | Usuário Usuario de login | do del Portal | do del cliente. |
Configuração necessário Configuración necesaria para que seja carregada a opção de menu no portal do cliente. Caso alguma informação obrigatória, função de usuário informada não compilada ou erro de execução ocorra o menu não será carregadose cargue la opción de menú en el portal del cliente. Si alguna información obligatoria, función de usuario informada no compilada o error de ejecución ocurriera, no se cargará el menú.
Propiedad | ObrigatoriedadeObligatoriedad | DescriçãoDescripción | ||
tituloMenu | Obrigatório | Obligatorio | Título mostrado en el menúTitulo apresentado no menu. | |
iconeMenu | Opcional | Ícone Ícono para o menuel menú. Lista de íconesíconos PO UI que podem ser usados nesta propriedadepueden utilizarse en esta propiedad. https://po-ui.io/guides/icons | ||
tituloPagina | Obrigatório Obligatorio | Titulo apresentado na paginamostrado en la página. | ||
funcaoQuery | Obrigatório | Obligatorio | Nome da Nombre de la user function que vai retornar a devolverá la query para buscar os dadoslos datos. | |
orderQuery | Opcional | Campo no qual a ordenação da tabela vai se basear. | ||
| tabela | Obrigatório | Alias da tabela utilizada para tratamento interno. | ||
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 | colunas | Obrigatório se não enviar fields | Array de campos do del browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignoradael sistema utilizará el título de la SX3. Si se informan fields, se ignorará esta propiedad. |
fields | Opcional | Array de json com os con los campos do del browse. Cada campo deve ter as propriedades debe tener las propiedades property, type e y label (PoTableColumn):
| ||
| legendas leyeendas | Opcional | Configuração das legendas Configuración de las leyendas. Array de json com as propriedadescon las propiedades value, color ey label. (labels dodel PoTableColumnLabel) | ||
campoLegendas | Opcional | Campo utilizado para legendaleyenda. | ||
tituloLegendas | Opcional | Titulo da legendaTítulo de la leyenda. | ||
| detalhes detalles | Opcional | Json com as propriedades para ser exibido na tela de detalhes do con las propiedades para que se muestre en la pantalla de detalles del registro. Consulte o item el ítem 03.02 Configuração Configuración de detalhesdetalles. |
...
...
É possível configurar a pesquisa simples e avançada através da configuração:
Es posible configurar la búsqueda simple y avanzada por medio de la configuración:
Propiedad | Obligatoriedad | Descripción | Propriedade | Obrigatoriedade | Descrição|
|---|---|---|---|---|---|
campoBusca | Opcional | Campo para busca búsqueda rápida. | |||
camposBuscaAvancada | Opcional | Lista de campos para busca avançadabúsqueda avanzada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignoradael sistema utilizará el título de la SX3. Si se informa fieldsBuscaAvancada , se ignorará esta propiedad. | |||
fieldsBuscaAvancada | Opcional | Array de json com os con los campos do para utilizar na busca avançadaen la búsqueda avanzada. Cada campo deve ter as propriedades debe tener las propiedades property, type e y label (PoDynamicFormField):
|
...
...
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 | ObrigatoriedadeObligatoriedad | DescriçãoDescripción | |
tituloPagina | Obrigatório | Obligatorio | Título que se muestra en la página de detalles Titulo apresentado na pagina de detalhes. |
tituloAbaPrincipal | Obrigatório | Obligatorio | Título que se muestra en la solapa Titulo apresentado na abaprincipal. |
camposDetalhes | Obrigatório Obligatorio | Lista de campos que serão apresentadosse mostrarán, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhes essa propriedade é ignoradael sistema utilizará el título de la SX3. Si se informa fieldsDetalhes , se ignorará esta propiedad. | |
fieldsDetalhes | Opcional | Array de json com oscon los campos dodel browse. Cada campo deve ter as propriedadesdebe tener las propiedades property, type ey label (PoTableColumn):
| |
orderQueryItens | Opcional | Campo no qual a ordenação da tabela vai se basearen el cual se basará el orden de la tabla. | |
tituloAbaItens | Opcional Titulo | apresentado na aba itens Título que se muestra en la solapa Ítems. | |
funcaoQueryItens | Obrigatório Es obligatorio si se informadoinforma tituloAbaItens | User funcion que vai retornar a query dos itensdevolverá la query de los ítems. | |
tabelaItens | Obrigatório Es obligatorio si se informadoinforma tituloAbaItens | Alias dos itens. | |
| colunas columnas | Obrigatório Es obligatorio si se informadoinforma tituloAbaItens | Lista de campos do del browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignoradael sistema utilizará el título de la SX3. Si se informa fields , se ignorará esta propiedad. | |
fields | Obrigatório Es obligatorio si se informadoinforma tituloAbaItens | Array de json com os con los campos do del browse. Cada campo deve ter as propriedades debe tener las propiedades property, type e y label (PoTableColumn):
|
...
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.
...
PARAMIXB | Tipo | DescriçãoDescripción | |||
1º | PosiçãoPosición | Array | Contém um Array com as chaves (FILIAL+CODIGO+LOJA) dos clientes selecionados no Contiene un Array con las claves (SUCURSAL+CÓDIGO+TIENDA) de los clientes seleccionados en el portal. Cada | posição do Array contém um objeto Json com as propriedades: filial, codigo e lojaposición del Array contiene un objeto Json con las propiedades: sucursal, código y tienda. | |
2º | PosiçãoPosición | CaracterCarácter | Usuário Usuario de login | do del Portal | do del cliente |
...
PARAMIXB | Tipo | DescriçãoDescripción | |||
1º | PosiçãoPosición | Array | Contém um Array com as chaves (FILIAL, CODIGO, LOJA) dos clientes selecionados no Contiene un Array con las claves (SUCURSAL, CÓDIGO, TIENDA) de los clientes seleccionados en el portal. Cada | posição do Array contém um objeto Json com as propriedades: filial, codigo e lojaposición del Array contiene un objeto Json con las propiedades: sucursal, código y tienda. | |
2º | PosiçãoPosición | CaracterCarácter | Usuário Usuario de login | do del Portal | do del cliente |
2º | PosiçãoPosición | Json | json | da linha selecionada no de la línea seleccionada en el formato "{ Campo: Valor} " | ExEj.: "{E1_FILIAL: '01', E1_NUM: '000001'}" |
...
A função deve retornar a La función debe devolver la query personalizada:
Deverão ser utilizados os Id'sDeben utilizarse los Id:
#QueryFields# Campos
...
del SELECT, existe
...
tratamiento para
...
el FIELDS
...
en el QueryParam
#QueryWhere#
...
Condiciones del WHERE, existe
...
tratamiento para FILTER
...
en el QueryParam
Tipo | ObrigatoriedadeObligatoriedad | DescriçãoDescripción |
| Caractere Carácter | Obrigatório Obligatorio | Query personalizada para listagem dos registros do menu customizadolistado de los registros del menú personalizado. |
...
...
| Bloco de código | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#Include 'Protheus.ch'
/*/{Protheus.doc} PCBROWSE
PontoPunto de entrada para adicionaragregar opcoesopciones de menú menuen noel OortalPortal dodel cliente
@type function
@return array, array de configuracaoconfiguración
/*/
user Function PCBROWSE()
Local cUser := PARAMIXB[1] as Character // CodigoCódigo dodel usuario logadoconectado noal portal.
Local aMenu := {} as Array
aAdd(aMenu, MENU1()) // exemploejemplo utilizando colunascolumnas SX3
aAdd(aMenu, MENU2()) // exemploejemplo configurando fields
Return aMenu
/*/{Protheus.doc} MENU1
ConfiguracaoConfiguración dodel menumenú
@type function
@return json, configuracaoconfiguración dodel browse
/*/
Static Function MENU1()
Local jMenu := JsonObject():new() as Json
Local jDetalhes := JsonObject():new() as Json
//titulotítulo presentado apresentadoen noel menumenú
jMenu['tituloMenu'] := 'Pedidos1'
//icone para o menu, lista de icones https://po-ui.io/guides/icons
jMenu['iconeMenu'] := 'po-icon po-icon-manufacture'
//titulotítulo presentado apresentadoen nala paginapágina
jMenu['tituloPagina'] := 'MeusMis Pedidos1pedidos1'
//user funcion que vai retornardevolverá ala query de buscabúsqueda
jMenu['funcaoQuery'] := 'PCQRY01'
//campo que vaise ser ordenadoordenará
jMenu['orderQuery'] := 'C5_EMISSAO DESC'
//alias de dala tabelatabla utilizada para tratamentostratamientos internos
jMenu['tabela'] := 'SC5'
//lista de campos dodel browse, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. SeSi se informarinforma fields essase propriedadeignorará éesta ignoradapropiedad
jMenu['colunas'] := {'c5_filial', 'c5_condpag', 'c5_num', 'c5_vend1', 'c5_nota', 'c5_emissao'}
//configuracaoconfiguración de legendasleyendas, array comcon value, color ey label
jMenu['legendas'] := {}
aAdd(jMenu['legendas'], prepareStatus("N", "color-01", "Normal"))
aAdd(jMenu['legendas'], prepareStatus("C", "color-02", "Compl.PrecIo/Cantidad"))
aAdd(jMenu['legendas'], prepareStatus("I", "color-03", "Compl.ICMS"))
aAdd(jMenu['legendas'], prepareStatus("P", "color-04", "Compl.IPI"))
aAdd(jMenu['legendas'], prepareStatus("D", "color-05", "Dev.Compras"))
aAdd(jMenu['legendas'], prepareStatus("B", "color-06", "Utiliza proveedor"))
jMenu['campoLegendas'] := 'c5_tipo'
jMenu['tituloLegendas'] := 'Tipo'
//campo para buscabúsquea rapidarápida, SeSi se informarinforma fieldBusca, essase propriedadeignorará éesta ignoradapropiedad
jMenu['campoBusca'] := 'c5_num'
//lista de campos aprapara buscabúsqueda avancadaavanzada, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. SeSi se informarinforma fieldsBuscaAvancada, essase propriedadeignorará éesta ignoradapropiedad
jMenu['camposBuscaAvancada'] := {'c5_filial', 'c5_vend1', 'c5_nota', 'c5_emissao', 'c5_transp'}
//exemploejemplo de configuracaoconfiguración de detalhesdetalles
//titulotítulo presentado apresentadoen nala paginapágina de detalhesdetalles
jDetalhes['tituloPagina'] := 'DetalhesDetalles dodel pedido'
//titulotítulo presentado apresentadoen nala abasolapa principal
jDetalhes['tituloAbaPrincipal'] := 'DadosDatos geraisgenerales'
//lista de campos que seraose apresentadospresentarán, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. Si Sese informarinforma fieldsDetalhes, essase propriedadeignorará éesta ignoradapropiedad
jDetalhes['camposDetalhes'] := {'c5_num','c5_tipo', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c5_cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',}
//titulotítulo presentado apresentadoen nala abasolapa itensítems
jDetalhes['tituloAbaItens'] := 'Produtos'
//user funcion que vaidevolverá retornarla aquery queryde doslos itensítems
jDetalhes['funcaoQueryItens'] := 'PCITEM'
//campo que vaiserá ser ordenado
jDetalhes['orderQueryItens'] := 'c6_item desc'
//alias de doslos itensítems
jDetalhes['tabelaItens'] := 'SC6'
//lista de campos dodel browse, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. Si Sese informarinforma fields, essase propriedadeignorará éesta ignoradapropiedad
jDetalhes['colunas'] := {'c6_item', 'c6_produto', 'c6_descri', 'c6_qtdven', 'c6_prcven', 'c6_valor'}
jMenu['detalhes'] := jDetalhes
return jMenu
/*/{Protheus.doc} MENU2
ConfiguracaoConfiguración dodel menumenú utilizando aslas propriedadespropiedades fields
@type function
@return json, configuracaoconfiguración dodel browse
/*/
Static Function MENU2()
Local jMenu := JsonObject():new() as Json //Json comcon aslas propriedadespropiedades 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 dodel browse, utilizado cuando no quandose naoquiere querutilizar pegardatos dadosde dala SX3.
//devedebe ser umun array de json comcon aslas propriedadespropiedades property, type ey label
jMenu['fields'] := {}
aAdd(jMenu['fields'], prepareField("c5_filial" , "string", "FilialSucursal dodel pedido"))
aAdd(jMenu['fields'], prepareField("c5_num" , "string", "Pedido"))
aAdd(jMenu['fields'], prepareField("c5_vend1" , "string", "Vendedor"))
aAdd(jMenu['fields'], prepareField("c5_condpag", "string", "Forma de pagamentopago"))
aAdd(jMenu['fields'], prepareField("c5_nota" , "string", "NFFact"))
//campo para buscabúsqueda rapidarápida, utilizado cuando no quandose naoquiere querutilizar pegardatos dadosde dala SX3.
//devedebe ser umun array de json comcon aslas propriedadespropiedades property, type ey label
jMenu['fieldBusca'] := prepareField("c5_num", "string", "PesquisaBúsqueda por pedido")
//lista de campos aprapara buscabúsqueda avancadaavanzada, oel sistema vaiutilizará utilizarel otítulo titulode dala SX3. Si Sese informarinforma fieldsBuscaAvancada, essase propriedadeignorará éesta ignoradapropiedad
jMenu['fieldsBuscaAvancada'] := {}
aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date" , "DataFecha"))
aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial" , "string", "FilialSucursal"))
aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota" , "string", "NFFact"))
aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_num" , "string", "Pedido"))
//exemploejemplo de configuracaoconfiguración de detalhesdetalles
//titulotítulo presentado apresentadoen nala paginapágina de detalhesdetalles
jDetalhes['tituloPagina'] := 'DetalhesDetalles dodel pedido'
//titulotítulo presentado apresentadoen nala abasolapa principal
jDetalhes['tituloAbaPrincipal'] := 'DadosDatos geraisgenerales'
//UtilizaSe utilizan aslas propriedadespropiedades PoDynamicViewField do po-dynamic-view poui. https://po-ui.io/documentation/po-dynamic-view
jDetalhes['fieldsDetalhes'] := {}
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num' , 'string', 'Pedido' , 'DadosDatos' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo' , 'string', 'Tipo dode pedido' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota' , 'string', 'NotaFactura' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date' , 'DataFecha' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1' , 'string', 'Vendedor' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tabela' , 'string', 'TabelaLista de preçosprecios' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'LojaTienda' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Código transportadoraCód Emp de Transporte', 'Entrega'))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete' , 'string', 'Valor dode freteflete' ))
aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_seguro' , 'string', 'Valor dode seguro' ))
//titulotítulo presentado apresentadoen nala abasolapa itensítems
jDetalhes['tituloAbaItens'] := 'ProdutosProductos'
//user funcion que vaidevolverá retornarla aquery queryde doslos itensítems
jDetalhes['funcaoQueryItens'] := 'PCITEM'
//aliasalias de doslos itensítems
jDetalhes['tabelaItens'] := 'SC6'
//lista de campos dodel browse, devedebe ser umun array de json comcon aslas propriedadespropiedades property, type ey label
jDetalhes['fields'] := {}
aAdd(jDetalhes['fields'], prepareField('c6_item' , 'string' , 'ItemÍtem'))
aAdd(jDetalhes['fields'], prepareField('c6_produto', 'string' , 'Código'))
aAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string' , 'QuantidadeCantidad'))
aAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'PreçoPrecio'))
aAdd(jDetalhes['fields'], prepareField('c6_valor' , 'currency', 'Valor'))
jMenu['detalhes'] := jDetalhes
return jMenu
/*/{Protheus.doc} prepareField
funcaofunción auxiliar para preparar aslas propriedadespropiedades dodel 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 en noslos detalhesdetalles)
@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
if !Empty(cDivisor)
jField["divider"] := cDivisor
endIf
Return jField
/*/{Protheus.doc} prepareStatus
funcaofunción auxiliar para preparar aslas propiedades propriedadesde dala legendaleyenda
@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 := JsonObject():new() as Json
jStatus["value"] := cValor
jStatus["color"] := cCor
jStatus["label"] := cTitulo
Return jStatus |
| Bloco de código | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#Include 'Protheus.ch'
/*/{Protheus.doc} PCQRY01
Query para listar oslos itensítems dodel PE PCBROWSE
@type function
@return character, query
/*/
User function PCQRY01()
local aSA1 := Paramixb[1] // Array de clientes {{"D MG ", "000002", "02"}, {"D RJ ", "000002", "12"}}
local cLogin := Paramixb[2] // Login dodel portal
local cQuery := ""
local cAlias := "SC5"
local nCli := 1
local cOr := ""
cQuery := " SELECT #QueryFields# "
cQuery += " FROM " + RetSqlName(cAlias) + " SC5 "
cQuery += " WHERE SC5.D_E_L_E_T_ = ' ' AND "
cQuery += "("
// lógica para filtro utilizando oslos código de clientes
for nCli := 1 to len(aSA1)
if (nCli > 1)
cOr := " OR "
endIf
cQuery += cOr + "(SC5.C5_CLIENTE = '" + aSA1[nCli][2] + "' AND SC5.C5_LOJACLI = '" + aSA1[nCli][3]+"')"
next
cQuery += ")"
cQuery += " #QueryWhere# "
Return cQuery
/*/{Protheus.doc} PCITEM
Query para listar oslos detalhes dodel itemítem dodel PE PCBROWSE
@type function
@return character, query
/*/
user function PCITEM()
local aSA1 := Paramixb[1] // Clientes
local cUser := Paramixb[2] // Login dodel portal
local jFilter := Paramixb[3] // LinhaLínea selecionadaseleccionada para oslos detalhesdetalles
local 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# "
return cQuery
|