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
...
Aviso | ||
---|---|---|
| ||
O ponto de entrada foi liberado através do pacote de expedição continua do módulo financeiro após Outubro. |
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.
03. CONFIGURAÇÃO
Parâmetros disponibilizados no ponto de entrada:
PARAMIXB | Tipo | Descrição |
---|---|---|
1º Posição | Character | Usuário de login do Portal do cliente. |
Configuração necessário para que seja carregada a opcao 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 Título 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 Título apresentado na paginapágina. | ||
funcaoQuery | Obrigatório | Nome da user function User Function que vai retornar a query para buscar os dados. | ||
tabelaorderQuery | Opcional | Campo no qual a ordenação da tabela vai se basear. | ||
tabela | Obrigatório | Alias da tabela | Obrigatório | Alias da tabela utilizada para tratamento interno. |
colunas | Obrigatório se não enviar fields | Array de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada. | ||
fields | Opcional | Array 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 Título da legenda. | ||
detalhes | Opcional | Json com as propriedades para ser exibido na tela de detalhes do registro. Consulte o item 03.03 02 Configuração de detalhes. |
...
É possível configurar a pesquisa simple 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. 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 Título apresentado na pagina página de detalhes. | |||
tituloAbaPrincipal | Obrigatório | Titulo Título apresentado na aba principal. | |||
camposDetalhes | Obrigatório | Lista de campos que serão apresentados, o sistema vai utilizar o titulo da SX3. Se informar ffieldsDetalhes fieldsDetalhes essa propriedade é ignorada. | |||
fieldsDetalhes | Opcional | Array de json com os campos do browse. Cada campo deve ter as propriedades property, type e label . (PoTableColumn) | |||
tituloAbaItens | 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. | |||
:
| |||||
orderQueryItens | Opcional | Campo no qual a ordenação da tabela vai se basear. | |||
tituloAbaItens | Opcional | Título 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 | colunas | Obrigatório | Lista de campos do browse, o sistema vai utilizar o titulo título da SX3. Se informar fields essa propriedade é ignorada. |
fields | Obrigatório se informado tituloAbaItens | Array de json com os campos do browse. Cada Cada campo deve ter as propriedades property, type e label . (PoTableColumn) |
04. USER FUNCTION QUERY
:
|
04. USER FUNCTION QUERY
A função passada na propriedade 'funcaoQuery' e 'funcaoQueryItens' será chamada pelo Portal do Cliente para A função passada na propriedade 'funcaoQuery' e 'funcaoQueryItens' serão chamadas pelo Portal do cliente par que retorne a query customizada para 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 |
2º Posição | Json | json Json da linha selecionada no formato "{ Campo: Valor } " Ex.: "{ E1_FILIAL: '01', E1_NUM: '000001' }" |
...
A função deve retornar a query personalizada:
Deverá Deverão ser utilizado 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
...
Bloco de código | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#Include 'Protheus.ch' user Function PCBROWSE() Local aMenu := {} as Array aAdd(aMenu, MENU1()) aAdd(aMenu, MENU2()) Return aMenu /*/{Protheus.doc} PCBROWSE Ponto de entrada para adicionar opcoes de menu no Portal do cliente @type function @return array, array de configuracao /*/ User Function PCBROWSE() Local cUser := PARAMIXB[1] as Character // Codigo do usuario logado no portal. 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'] := 'PedidosPedidos1' //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 PedidosPedidos1' //user funcion que vai retornar a query de busca jMenu['funcaoQuery'] := 'PCQRY01' //alias da tabela utilizada para tratamentos internos jMenu['tabelafuncaoQuery'] := 'SC5PCQRY01' //lista de campos do browse, o sistema vai utilizar o titulo da SX3. Se informar fields essa propriedade é ignorada jMenu['colunas'] //campo que vai ser ordenado jMenu['orderQuery'] := {'c5C5_filial', 'c5_condpag', 'c5_num', 'c5_vend1', 'c5_nota', 'c5_emissao'} //configuracao de legendas, array com value, color e label jMenu['legendasEMISSAO DESC' //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'] := {} 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'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("DN", "color-0501", "Dev.ComprasNormal")) aAdd AAdd(jMenu['legendas'], prepareStatus("BC", "color-0602", "Utiliza proveedorCompl.PrecIo/Cantidad")) jMenu['campoLegendas'] := 'c5_tipo' AAdd(jMenu['tituloLegendaslegendas'] := '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' , 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 queapra seraobusca apresentadosavancada, o sistema vai utilizar o titulo da SX3. Se informar fieldsDetalhesfieldsBuscaAvancada essa propriedade é ignorada jDetalhes jMenu['camposDetalhescamposBuscaAvancada'] := {'c5_numfilial', 'c5_tipovend1', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c5_cliente', 'c5_lojacli', 'c5_transp', 'c5_frete', 'c5_seguro',} transp'} //exemplo de configuracao de detalhes //titulo apresentado na abapagina de itens detalhes jDetalhes['tituloAbaItenstituloPagina'] := 'ProdutosDetalhes do pedido' //user funcion que vai retornar//titulo aapresentado queryna dosaba itens jDetalhes['funcaoQueryItens'] := 'PCITEM' //alias dos itens principal jDetalhes['tabelaItenstituloAbaPrincipal'] := 'SC6Dados gerais' //lista de campos doque serao browseapresentados, o sistema vai utilizar o titulo da SX3. Se informar fieldsfieldsDetalhes essa propriedade é ignorada jDetalhes['colunascamposDetalhes'] := {'c6_item'c5_num','c5_tipo', 'c5_nota', 'c5_emissao', 'c5_vend1', 'c5_tabela', 'c6c5_produtocliente', 'c6c5_descrilojacli', 'c6c5_qtdventransp', 'c6c5_prcvenfrete', 'c6c5_valorseguro',} jMenu['detalhes //titulo apresentado na aba itens jDetalhes['tituloAbaItens'] := jDetalhes 'Produtos' return jMenu Static Function MENU2() Local jMenu := JsonObject():new() as Json //Json com as propriedades esperadas. Local jDetalhes := JsonObject():new() as Json jMenu['tituloMenu'] //user funcion que vai retornar a query dos itens jDetalhes['funcaoQueryItens'] := 'Pedidos2PCITEM' jMenu['iconeMenu'] //campo que := 'po-icon po-icon-manufacture' jMenu['tituloPaginavai ser ordenado jDetalhes['orderQueryItens'] := 'Meusc6_item Pedidos2desc' jMenu['funcaoQuery'] := 'PCQRY01' jMenu['tabela'] //alias dos itens jDetalhes['tabelaItens'] := 'SC5SC6' //lista de campos do browse, utilizadoo quandosistema naovai querutilizar pegaro dadostitulo da SX3. //deve serSe uminformar arrayfields deessa jsonpropriedade com as propriedades property, type e label jMenu['fieldsé ignorada jDetalhes['colunas'] := {} 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'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['orderQuery'] := 'C5_DATA1 ASC' 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(jDetalhes AAdd(jMenu['fieldsDetalhesfields'], prepareField('"c5_num' filial" , '"string'", 'Pedido'"Filial do pedido")) AAdd(jMenu['fields'], prepareField("c5_num" , 'Dados' "string", "Pedido")) )) aAdd(jDetalhesAAdd(jMenu['fieldsDetalhesfields'], prepareField('"c5_tipo'vend1" , '"string'", 'Tipo do pedido' )) aAdd(jDetalhes['fieldsDetalhes"Vendedor")) AAdd(jMenu['fields'], prepareField("c5_condpag", "string", "Forma de pagamento")) AAdd(jMenu['fields'], prepareField('"c5_nota'" , '"string', 'Nota' ", "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 )) aAdd(jDetalhesjMenu['fieldsDetalhesfieldBusca'], := prepareField('"c5_emissao', 'date' , 'Data' )) aAdd(jDetalhes['fieldsDetalhesnum", "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_vend1' , 'string', 'Vendedor' )) aAdd(jDetalhes['fieldsDetalhesemissao", "date" , "Data")) AAdd(jMenu['fieldsBuscaAvancada'], prepareField('"c5_tabela'filial" , '"string'", 'Tabela de preços' )) aAdd(jDetalhes['fieldsDetalhes"Filial")) AAdd(jMenu['fieldsBuscaAvancada'], prepareField('"c5_cliente'nota" , '"string', 'Código', 'Comprador' ", "NF")) )) aAdd(jDetalhesAAdd(jMenu['fieldsDetalhesfieldsBuscaAvancada'], prepareField('"c5_lojacli'num" , '"string', 'Loja' ", "Pedido")) //exemplo de configuracao de detalhes //titulo apresentado na pagina de detalhes jDetalhes['tituloPagina'] := 'Detalhes do pedido' //titulo apresentado na aba )) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Código transportadora', 'Entrega')) aAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete' , 'string', 'Valor do frete' )) aAddprincipal 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_seguronum' , 'string', 'Valor do seguroPedido' )) //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['fieldsDados' )) AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_tipo' , 'string', 'Tipo do pedido' )) AAdd(jDetalhes['fieldsDetalhes'], prepareField('c6c5_itemnota' , 'string' , 'Item')) aAdd', 'Nota' )) AAdd(jDetalhes['fieldsfieldsDetalhes'], prepareField('c6c5_produtoemissao', 'stringdate' , 'Código')) aAdd(jDetalhes['fields'], prepareField('c6_qtdven' , 'string' , 'Quantidade')) aAdd(jDetalhes['fieldsData' )) AAdd(jDetalhes['fieldsDetalhes'], prepareField('c6c5_prcvenvend1' , 'currencystring', 'Preço'Vendedor' )) aAdd AAdd(jDetalhes['fieldsfieldsDetalhes'], prepareField('c6c5_valortabela' , 'currencystring', 'Valor')) jMenu['detalhes'] := jDetalhes return jMenu 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 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 = '" + jFilter['C5_FILIAL'] + "' AND " cQuery += " C6_NUM = '" + jFilter['C5_NUM'] + "'" cQuery += " #QueryWhere# " return cQuery User function PCQRY01() local aSA1 := Paramixb[1] //{{"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 += "(" 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 Tabela de preços' )) AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_cliente', 'string', 'Código', 'Comprador' )) AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_lojacli', 'string', 'Loja' )) AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_transp' , 'string', 'Código transportadora', 'Entrega')) AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_frete' , 'string', 'Valor do frete' )) AAdd(jDetalhes['fieldsDetalhes'], prepareField('c5_seguro' , 'string', '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 /*/{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) Local jStatus := JsonObject():new() as Json jStatus["value"] := cValor jStatus["color"] := cCor jStatus["label"] := cTitulo Return jStatus |
Bloco de código | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#Include 'Protheus.ch' | ||||||||||||
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 = '" + aSA1[nCli][3]+"')" next cQuery += ")" cQuery += " #QueryWhere# " Return cQuery /*/{Protheus.doc} PCITEMPCQRY01 Query para listar os detalhesitens do item do PE PCBROWSE @type function @return character, query /*/ userUser functionFunction PCITEMPCQRY01() local Local aSA1 := Paramixb[1] // Clientes Array de clientes {{"D MG ", "000002", "02"}, {"D RJ local cUser ", "000002", "12"}} Local cLogin := Paramixb[2] // Login do portal Local cQuery := "" Local localcAlias jFilter := Paramixb[3] // Linha selecionada para os detalhes local cAlias:= "SC5" Local nCli := 1 Local cOr := "SC6" cQuery := " SELECT #QueryFields# " cQuery += " FROM " + RetSqlName(cAlias) + " SC5 " cQuery += " FROM " + RetSqlName(cAlias) + " " + cAlias cQuery += " WHERE " + cAlias + ".D_E_L_E_T_ = ' ' AND " cQuery += " C6_FILIALWHERE 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 = '" + jFilter['C5_FILIAL'aSA1[nCli][2] + "' AND " cQuery += " C6_NUMSC5.C5_LOJACLI = '" + jFilter['C5_NUM'] + "'" aSA1[nCli][3]+"')" Next cQuery += ")" cQuery += " #QueryWhere# " return cQuery user function Return cQuery /*/{Protheus.doc} PCITEM Query para listar os detalhes do item do PE PCBROWSE @type function @return character, query /*/ User Function PCITEM() localLocal aSA1 := Paramixb[1] // Clientes localLocal cUser := Paramixb[2] // Login do portal localLocal jFilter := Paramixb[3] // Linha selecionada para os detalhes 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 |