Histórico da Página
...
Linha de Produto: | Microsiga Protheus® |
---|---|
Segmento: | Backoffice |
Módulo: | Financeiro |
Idiomas: | Português |
Função: | Portal do Cliente |
02. DESCRIÇÃO PCBROWSE
Aviso | ||
---|---|---|
| ||
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 em data ainda a ser informada. Essa página poderá sofrer alterações até a data de liberação da funcionalidade! |
O ponto de entrada PCBROWSE permite incluir opções de menu para listagem de itens customizados ao Portal do Cliente - SIGAFIN.
...
O ponto de entrada deve retornar um array com o json de configuração de cada menu que deseja adicionar, o json de cada posição do array deve conter as seguintes propriedades da seguinte forma:.
03. CONFIGURAÇÃO
Configuração necessário 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á carregado.
Propriedade | Obrigatoriedade | Descrição | ||
---|---|---|---|---|
tituloMenu | Obrigatório | Titulo apresentado no menu. | ||
iconeMenu | Opcional | Ícone para o menu. Lista de ícones PO UI que podem ser usados nesta propriedade. https://po-ui.io/guides/icons | ||
tituloPagina | Obrigatório | Titulo apresentado na pagina. | ||
funcaoQuery | Obrigatório | Nome da user function que vai retornar a query para buscar os dados. | ||
tabela | Obrigatório | Alias da tabela utilizada para tratamento interno. | ||
colunas | Obrigatório se não enviar fields | Lista Array de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada. | ||
fieldslegendas | Opcional | Configuração das legendas. Array com value, color e label. | ||
campoLegendas | Opcional | Campo utilizado para legenda. | ||
tituloLegendas | Opcional | Titulo da legenda. | ||
campoBusca | Opcional | Campo para busca rápida. | ||
camposBuscaAvancada | Opcional | Lista de campos apra busca avançada, o sistema vai utilizar o titulo da SX3. | ||
de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):
| ||||
legendas | Opcional | Configuração das legendas. Array de json com as propriedades value, color e label. (labels do PoTableColumnLabel) | ||
campoLegendas | Opcional | Campo utilizado para legenda. | ||
tituloLegendas | Opcional | Titulo da legenda. | ||
detalhes | Opcional | detalhes | Obrigatório | Json com as propriedades para ser exibido na tela de detalhes do registro. "jDetalhes" |
Estrutura da propriedade detalhes "jDetalhes"
Consulte o item 03.02 Configuração de detalhes. |
03.01. CONFIGURAÇÃO DE PESQUISA
É possível configurar a pesquisa simples e avançada através da configuração:
Propriedade | Obrigatoriedade | Descrição |
---|---|---|
campoBusca | Opcional | Campo para busca rápida. |
camposBuscaAvancada | Opcional | Lista de campos para busca avançada |
, o sistema vai utilizar o titulo da SX3. Se informar |
fieldsBuscaAvancada essa propriedade é ignorada. |
fieldsBuscaAvancada | Opcional | Array de json com os campos do para utilizar na busca avançada. Cada campo deve ter as propriedades property, type e label (PoDynamicFormField):
|
03.02. CONFIGURAÇÃO DE DETALHES
Caso seja configurado os detalhes, será apresentado no item a opção "visualizar" para exibição de informaçõese listagem de itens.
Propriedade | Obrigatoriedade | Descrição |
---|---|---|
tituloPagina | Obrigatório | Titulo apresentado na pagina de detalhes. |
tituloAbaPrincipal | Obrigatório | Titulo apresentado na aba principal. |
camposDetalhes | Obrigatório | Titulo apresentado na aba itens. |
funcaoQueryItens | Obrigatório | User funcion que vai retornar a query dos itens. |
tabelaItens | Obrigatório | Alias dos itens. |
colunas | Obrigatório | Lista de campos do browseque serão apresentados, o sistema vai utilizar o titulo da SX3. Se informar fields fieldsDetalhes essa propriedade é ignorada. |
03. EXEMPLO DE UTILIZAÇÃO
fieldsDetalhes | Opcional | Array de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):
|
tituloAbaItens | Opcional | Titulo apresentado na aba itens. |
funcaoQueryItens | Obrigatório se informado tituloAbaItens | User funcion que vai retornar a query dos itens. |
tabelaItens | Obrigatório se informado tituloAbaItens | Alias dos itens. |
colunas | Obrigatório se informado tituloAbaItens | Lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada. |
fields | Obrigatório se informado tituloAbaItens | Array de json com os campos do browse. Cada campo deve ter as propriedades property, type e label (PoTableColumn):
|
04. USER FUNCTION QUERY
A função passada na propriedade 'funcaoQuery' e 'funcaoQueryItens' será chamada pelo Portal do Cliente para que retorne a query customizada que será utilizada na busca dos itens.
funcaoQuery recebe os parâmetros:
PARAMIXB | Tipo | Descrição |
---|---|---|
1º Posição | Array | Contém um Array com as chaves (FILIAL+CODIGO+LOJA) dos clientes selecionados no portal. Cada posição do Array contém um objeto Json com as propriedades: filial, codigo e loja. |
2º Posição | Caracter | Usuário de login do Portal do cliente |
funcaoQueryItens recebe os parâmetros:
PARAMIXB | Tipo | Descrição |
---|---|---|
1º Posição | Array | Contém um Array com as chaves (FILIAL, CODIGO, LOJA) dos clientes selecionados no portal. Cada posição do Array contém um objeto Json com as propriedades: filial, codigo e loja. |
2º Posição | Caracter | Usuário de login do Portal do cliente |
2º Posição | Json | json da linha selecionada no formato "{ Campo: Valor} " Ex.: "{E1_FILIAL: '01', E1_NUM: '000001'}" |
Retorno do ponto de entrada:
A função deve retornar a query personalizada:
Deverão ser utilizados os Id's:
#QueryFields# Campos do SELECT, existe tratamento para o FIELDS no QueryParam
#QueryWhere# Condições do WHERE, existe tratamento para FILTER no QueryParam
Tipo | Obrigatoriedade | Descrição |
---|---|---|
Caractere | Obrigatório | Query personalizada para listagem dos registros do menu customizado. |
05. EXEMPLO DE UTILIZAÇÃO
Bloco de código | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#Include 'Protheus.ch'
/*/{Protheus.doc} PCBROWSE
Ponto de entrada para adicionar opcoes de menu no Oortal do cliente
@type function
@return array, array de configuracao
/*/
user Function PCBROWSE()
Local aMenu := {} as Array
aAdd(aMenu, MENU1()) // exemplo utilizando colunas SX3
aAdd(aMenu, MENU2()) // exemplo configurando fields
Return aMenu
/*/{Protheus.doc} MENU1
Configuracao do menu
@type function
@return json, configuracao do browse
/*/
Static Function MENU1()
Local jMenu := JsonObject():new() as Json
Local jDetalhes := JsonObject():new() as Json
//titulo apresentado no menu
jMenu['tituloMenu'] := 'Pedidos1'
//icone para o menu, lista de icones https://po-ui.io/guides/icons
jMenu['iconeMenu'] := 'po-icon po-icon-manufacture'
//titulo apresentado na pagina
jMenu['tituloPagina'] := 'Meus Pedidos1'
//user funcion que vai retornar a query de busca
jMenu['funcaoQuery'] := 'PCQRY01'
//alias da tabela utilizada para tratamentos internos
jMenu['tabela'] := 'SC5'
//lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada
jMenu['colunas'] := {'c5_filial', 'c5_condpag', 'c5_num', 'c5_vend1', 'c5_nota', 'c5_emissao'}
//configuracao de legendas, array com value, color e 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 busca rapida, Se informar fieldBusca essa propriedade é ignorada
jMenu['campoBusca'] := 'c5_num'
//lista de campos apra busca avancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignorada
jMenu['camposBuscaAvancada'] := {'c5_filial', 'c5_vend1', 'c5_nota', 'c5_emissao', 'c5_transp'}
//exemplo de configuracao de detalhes
//titulo apresentado na pagina de detalhes
jDetalhes['tituloPagina'] := 'Detalhes do pedido'
//titulo apresentado na aba principal
jDetalhes['tituloAbaPrincipal'] := 'Dados gerais | ||||||||||||
Bloco de código | ||||||||||||
| ||||||||||||
#Include 'Protheus.ch' user Function PCBROWSE() Local aMenu := {} as Array aAdd(aMenu, MENU1()) aAdd(aMenu, MENU2()) Return aMenu Static Function MENU1() Local jMenu := JsonObject():new() as Json Local jDetalhes := JsonObject():new() as Json //titulo apresentado no menu jMenu['tituloMenu'] := 'Pedidos' //icone para o menu, lista de icones https://po-ui.io/guides/icons jMenu['iconeMenu'] := 'po-icon po-icon-manufacture' //titulo apresentado na pagina jMenu['tituloPagina'] := 'Meus Pedidos' //user funcion que vai retornar a query de busca jMenu['funcaoQuery'] := 'PCQRY01' //alias da tabela utilizada para tratamentos internos jMenu['tabela'] := 'SC5' //lista de campos doque serao browseapresentados, o sistema vai utilizar o titulo da SX3. Se informar fieldsfieldsDetalhes essa propriedade é ignorada jMenujDetalhes['colunascamposDetalhes'] := { {'c5_num','c5_filialtipo', 'c5_condpagnota', 'c5_numemissao', 'c5_vend1', 'c5_notatabela', 'c5_emissao'} //configuracao de legendas, array com value, color e 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 busca rapida, Se informar fieldBusca essa propriedade é ignorada jMenu['campoBusca'] := 'c5_num' //lista de campos apra busca avancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignorada jMenu['camposBuscaAvancada'] := {'c5_filial', 'c5_vend1', 'c5_nota', 'c5_emissao', 'c5_transp'} //exemplo de configuracao de detalhes //titulo apresentado na pagina de detalhes jDetalhes['tituloPagina'] := 'Detalhes do pedido' //titulo apresentado na aba principal jDetalhes['tituloAbaPrincipal'] := 'Dados gerais' //lista de campos que serao apresentados, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhes essa propriedade é ignorada jDetalhes['camposDetalhes'] := {'c5_num','c5_tipo', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c5_cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',} //titulo apresentado na aba itens jDetalhes['tituloAbaItens'] := 'Produtos' //user funcion que vai retornar a query dos itens jDetalhes['funcaoQueryItens'] := 'PCITEM' //alias dos itens jDetalhes['tabelaItens'] := 'SC6'cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',} //titulo apresentado na aba itens jDetalhes['tituloAbaItens'] := 'Produtos' //user funcion que vai retornar a query dos itens jDetalhes['funcaoQueryItens'] := 'PCITEM' //alias dos itens jDetalhes['tabelaItens'] := 'SC6' //lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada jDetalhes['colunas'] := {'c6_item', 'c6_produto', 'c6_descri', 'c6_qtdven', 'c6_prcven', 'c6_valor'} jMenu['detalhes'] := jDetalhes return jMenu /*/{Protheus.doc} MENU2 Configuracao do menu utilizando as propriedades fields @type function @return json, configuracao do browse /*/ Static Function MENU2() Local jMenu := JsonObject():new() as Json //Json com as propriedades 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['tabela'] := 'SC5' //lista de campos do browse, utilizado quando nao quer pegar dados da SX3. //deve ser um array de json com as propriedades property, type e label jMenu['fields'] := {} aAdd(jMenu['fields'], prepareField("c5_filial" , "string", "Filial do 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 pagamento")) aAdd(jMenu['fields'], prepareField("c5_nota" , "string", "NF")) //campo para busca rapida, utilizado quando nao quer pegar dados da SX3. //deve ser um array de json com as propriedades property, type e label jMenu['fieldBusca'] := prepareField("c5_num", "string", "Pesquisa por pedido") //lista de campos apra dobusca browseavancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsfieldsBuscaAvancada essa propriedade é ignorada jDetalhesjMenu['colunasfieldsBuscaAvancada'] := {'c6_item', 'c6_produto', 'c6_descri', 'c6_qtdven', 'c6_prcven', 'c6_valor'} aAdd(jMenu['detalhesfieldsBuscaAvancada'] := jDetalhes return jMenu Static Function MENU2() Local jMenu := JsonObject():new() as Json //Json com as propriedades 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['tabela'] := 'SC5' //lista de campos do browse, utilizado quando nao quer pegar dados da SX3. //deve ser um array de json com as propriedades property, type e label jMenu['fields'] := {} aAdd(jMenu['fields'], prepareField("c5_filial", "string", "Filial do 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 pagamento")) aAdd(jMenu['fields'], prepareField("c5_nota", "string", "NF")) //campo para busca rapida, utilizado quando nao quer pegar dados da SX3. //deve ser um array de json com as propriedades property, type e label jMenu['fieldBusca'] := prepareField("c5_num", "string", "Pesquisa por pedido") //lista de campos apra busca avancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsBuscaAvancada essa propriedade é ignorada jMenu['fieldsBuscaAvancada'] := {} aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_emissao", "date", "Data")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial", "string", "Filial")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota", "string", "NF")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_num", "string", "Pedido")) //exemplo de configuracao de detalhes //titulo apresentado na pagina de detalhes jDetalhes['tituloPagina'] := 'Detalhes do pedido' //titulo apresentado na aba principal jDetalhes['tituloAbaPrincipal'] := 'Dados gerais' //Utiliza as propriedades PoDynamicViewField do po-dynamic-view poui. https://po-ui.io/documentation/po-dynamic-view jDetalhes['fieldsDetalhes'] := {}, prepareField("c5_emissao", "date" , "Data")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_filial" , "string", "Filial")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_nota" , "string", "NF")) aAdd(jMenu['fieldsBuscaAvancada'], prepareField("c5_num" , "string", "Pedido")) //exemplo de configuracao de detalhes //titulo apresentado na pagina de detalhes jDetalhes['tituloPagina'] := 'Detalhes do pedido' //titulo apresentado na aba principal jDetalhes['tituloAbaPrincipal'] := 'Dados gerais' //Utiliza as propriedades PoDynamicViewField do po-dynamic-view poui. https://po-ui.io/documentation/po-dynamic-view jDetalhes['fieldsDetalhes'] := {} aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num' , 'string', 'Pedido' , 'Dados' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo' , 'string', 'Tipo do pedido' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_nota' , 'string', 'Nota' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissao', 'date' , 'Data' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1' , 'string', 'Vendedor' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_num' tabela' , 'string', 'Pedido'Tabela de preços' , 'Dados' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipocliente' , 'string', 'Tipo do pedidoCódigo', 'Comprador' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_notalojacli' , 'string', 'NotaLoja' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_emissaotransp' , 'datestring', 'Código transportadora', 'Data' Entrega')) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete' , 'string', 'Valor do frete' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_vend1seguro' , 'string', 'Vendedor'Valor do seguro' )) //titulo apresentado na aba ))itens aAdd(jDetalhes['fieldsDetalhestituloAbaItens'], prepareField('c5_tabela' , := 'string', 'Tabela de preços' )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador' ))Produtos' //user funcion que vai retornar a query dos itens jDetalhes['funcaoQueryItens'] := 'PCITEM' //alias dos itens jDetalhes['tabelaItens'] := 'SC6' //lista de campos do browse, deve ser um array de json com as propriedades property, type e label jDetalhes['fields'] := {} aAdd(jDetalhes['fieldsDetalhesfields'], prepareField('c5c6_lojacliitem' , 'string' , 'Loja' Item')) aAdd(jDetalhes['fields'], prepareField('c6_produto', 'string' , 'Código')) aAdd(jDetalhes['fieldsDetalhesfields'], prepareField('c5c6_transpqtdven' , 'string', 'Código transportadora', 'EntregaQuantidade')) aAdd(jDetalhes['fieldsDetalhesfields'], prepareField('c5c6_freteprcven' , 'stringcurrency', 'Valor do frete' Preço')) aAdd(jDetalhes['fieldsDetalhesfields'], prepareField('c5c6_segurovalor' , 'stringcurrency', 'Valor do seguro' )) //titulo apresentado na aba itens jDetalhes['tituloAbaItens'] := 'Produtos' //user funcion que vai retornar a query dos itens jDetalhes['funcaoQueryItens'] := 'PCITEM' //alias dos itens jDetalhes['tabelaItens'] := 'SC6' //lista de campos do browse, deve ser um array de json com as propriedades property, type e label jDetalhes['fields'] := {} aAdd(jDetalhes['fields'], prepareField('c6_item' , 'string' , 'Item')) aAdd(jDetalhes['fields'], prepareField('c6_produto', 'string' , 'Código')) aAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string' , 'Quantidade')) aAdd(jDetalhes['fields'], prepareField('c6_prcven' , 'currency', 'Preço')) aAdd(jDetalhes['fields'], prepareField('c6_valor' , 'currency', 'Valor')) jMenu['detalhes'] := jDetalhes return jMenu Static Function prepareField(cCampo as Character, cTipo')) jMenu['detalhes'] := jDetalhes return jMenu /*/{Protheus.doc} prepareField funcao auxiliar para preparar as propriedades do 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 nos detalhes) @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 funcao auxiliar para preparar as propriedades da legenda @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, cDivisor as Character) Local jFieldjStatus := JsonObject():new() as Json jField["property"] := cCampo jField["type"] := cTipo jField["label"] := cTitulo if !Empty(cDivisor) jField["divider"] := cDivisor endIf Return jField 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 user function PCITEM() local aSA1 := Paramixb[1] // Clientes local cUser := Paramixb[2] // Login do portal local jFilter := Paramixb[3] // Linha selecionada para os detalhes local cAlias := "SC6" cQuery := " SELECT #QueryFields# " cQuery += " FROM " + RetSqlName(cAlias) + " " + cAlias cQuery += " WHERE " + cAlias + ".D_E_L_E_T_ = ' ' AND " cQuery += " C6_FILIAL jStatus["value"] := cValor jStatus["color"] := cCor jStatus["label"] := cTitulo Return jStatus |
Bloco de código | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#Include 'Protheus.ch' /*/{Protheus.doc} PCQRY01 Query para listar os itens do 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 do 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 os 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 = '" + jFilter['C5_FILIAL'] + "' AND " aSA1[nCli][3]+"')" next cQuery += ")" cQuery += " C6_NUM =#QueryWhere# '" + jFilter['C5_NUM'] + "'" cQuery += " #QueryWhere# " return cQuery User function PCQRY01() Return cQuery /*/{Protheus.doc} PCITEM Query para listar os detalhes do item do PE PCBROWSE @type function @return character, query /*/ user function PCITEM() local aSA1 := Paramixb[1] //{{"D MG ", "000002", "02"}, {"D RJ ", "000002", "12"}} local cLogin Clientes local cUser := Paramixb[2] // Login do portal local jFilter := Paramixb[23] // Login do portal local cQuery := "" Linha selecionada para os detalhes local cAlias := "SC5SC6" local nCli := 1 local cOr := "" cQuery := " SELECT #QueryFields# " cQuery += " FROM " + RetSqlName(cAlias) + " SC5 " cQuery += " WHERE SC5" + cAlias cQuery += " WHERE " + cAlias + ".D_E_L_E_T_ = ' ' AND " cQuery += "(" for nCli := 1 to len(aSA1) if (nCli > 1) cOr := " OR " endIf cQuery += cOr + "(SC5.C5_CLIENTE C6_FILIAL = '" + aSA1[nCli][2]jFilter['C5_FILIAL'] + "' AND SC5.C5_LOJACLI" cQuery += " C6_NUM = '" + aSA1[nCli][3]+"')" next cQuery += ")" jFilter['C5_NUM'] + "'" cQuery += " #QueryWhere# " Returnreturn cQuery |