O controle de numeração do El control de numeración del Protheus utiliza a Tabela la Tabla ASCII para definição definición de sequênciasecuencia. Antigamente utilizava-se o Antiguamente se utilizaba el Hard Lock conectado ao al servidor. Posteriormente esse controle foi migrado para as Tabelas este control se migró a las Tablas SXE / SXF físicas no diretório do ambienteen el directorio del entorno. A partir do del Protheus V12 o el controle de numeração deve numeración debe ser exclusivamente via vía License Server (Release 25 inclusive já ya valida no en el momento do del Upgrade para não permitir virada do release sem uso do no permitir el cierre del release sin uso del License - DFRM1-16558). Além do fato de o desempenho ser muito superior neste modelo em relação ao modelo nas tabelas SXE/SXF, existe também o fato de que as tabelas SXE/SXF serem gerenciadas pelo FileSystem, e por conta disto podem ser corrompidas em casos de encerramentos inesperados, como quedas de energia. A numeração das tabelas em License Server é armazenada em memória, enquanto o License Server está ativo. Quando o serviço do License Server é parado, é criado um arquivo chamado LSNumber.val na pasta do Application Server. Neste arquivo são gravadas as últimas sequências das chaves em uso no License, das tabelas que possuem numeração automática. Quando o License é reiniciado, esses dados são lidos deste arquivo e carregados em memória novamente, para dar continuidade na sequência da numeração automática. Además del hecho de que el desempeño es muy superior en este modelo con relación al modelo en las tablas SXE/SXF, también las tablas SXE/SXF son administradas por el FileSystem, por causa de esto pueden corromperse en caso de cierres inesperados, como caídas de energía. La numeración de las tablas en License Server se almacena en la memoria, mientras el License Server está activo. Cuando se para el servicio do License Server, se crea un archivo llamado LSNumber.val en la carpeta del Application Server. En este archivo se graban las últimas secuencias de las claves en uso en el License, de las tablas que tienen numeración automática. Cuando se reinicia el License, estos datos son leídos de este archivo y cargados en la memoria nuevamente, para dar continuidad en la secuencia de la numeración automática. Vea todos los detalles en: Numeración automática por el Todos os detalhes em: Numeração automática pelo License Server Deck of Cards |
---|
| Card |
---|
id | License |
---|
label | PASSO PASO 1 - License Server |
---|
| seu controle numeração devidamente o Verifique no arquivo en el archivo appserver.ini como está preenchida a chave cómo está completada la clave (ENABLENUMER) da sessão de la sesión [licenseserver]. Deve Debe estar configurado: Enablenumber Enablenumber=1 o que indica controle no lo cual indica control en el License Server (Enablenumber=0 indica controle pelas antigas tabelas control por las antiguas tablas SXE/SXF):
Nota |
---|
| [LICENSESERVER] Enable=1 Port=5555 ShowStatus=1 ENABLENUMBER= 0 ou 1 ENABLENUMBER= 0 = SXE e SXF ENABLENUMBER= 1 = License Server |
Informações |
---|
| olocações - Se não existir a linha Enablenumber na seção Si no existiera la línea Enablenumber en la sección [LicenseServer], assume-se o padrão, que é numeração no se asume el estándar, que es numeración en el License Server.
- Caso identifique Si identifica que ainda aún está configurado como SXE/SXF recomendamos que faça um backup das tabelas SXE e se recomienda que realice una copia de seguridad de las tablas SXE y SXF antes de alterar pois, ao alterar o modo de numeração para o modificar, pues al modificar el modo de numeración al modo License Server (Enablenumber=0 para Enablenumber=1) as tabelas las tablas SXE e SXF serão deletadas no momento em que acessar a primeira rotina que utilize numeração automática, e nesse momento, o License Server irá buscar a última numeração de cada tabela com numeração automática, e carregar em memória. Após a alteração, caso a numeração esteja na ordem incorreta, utilizar a rotina APCFG110 para acertar (abordada a seguir).
O usuário que inicializa o serviço do Protheus Server (que usa License Server) deve ser o ADMINISTRADOR. y SXF se borrarán en el momento en el que acceda a la primera rutina que utilice numeración automática, y en este momento, el License Server buscará la última numeración de cada tabla con numeración automática y cargarla en la memoria. Después de la modificación, si la numeración estuviera en el orden incorrecto, utilice la rutina APCFG110 para ajustar (abordada a continuación).
- El usuario que inicializa el servicio del Protheus Server (que utiliza License Server) debe ser el ADMINISTRADOR.
- Asegúrese de estar con BUILD, LIB y versión del LS - License Server actualizados (LS debe ser igual o Certifique-se de estar com BUILD e LIB e versão do LS - License Server atualizados (LS deve ser igual ou superior a 1.03.014). Detalhes em: Habilitada geração do arquivo Detalles en: Se habilitó la generación del archivo LSNumber.val
Com Con esta atualização volta a ser gravado o arquivo actualización vuelve a grabarse el archivo LSNumber.val (quando o cuando se encierra correctamente el servidor de licenças é encerrado corretamente, via console ou no fim do serviço). Esse arquivo grava a última sequência disponível para as chaves em uso no License, quando o servidor de licenças é reiniciado esses dados são carregados para a aplicação e no momento de obter a próxima sequência serão considerado os dados que estiverem nesse arquivo. A funcionalidade é recomendada pois uma vez que a sequencia estiver corrigida o License irá guardar o conteúdo e continuar sempre a partir dele; ao invés de buscar na tabela do sistema a próxima sequencia para a chave a partir da última numeração gravada.licencias, vía consola o al final del servicio). Este archivo graba la última secuencia disponible para las claves en uso en el License, cuando se reinicia el servidor de licencias estos datos se cargan a la aplicación y en el momento de obtener la próxima secuencia ser considerarán los datos que estuvieran en este archivo. La funcionalidad es recomendada, pues una vez que la secuencia estuviera corregida, el License grabará el contenido y continuará siempre a partir de este; en lugar de buscar en la tabla del sistema la próxima secuencia para la chave a partir de la última numeración grabada. Si estuviera con el License Server anterior a la versión 1.03.014 y con Se estiver com License Server anterior à versão 1.03.014 e com builds superior a 7.00.131227A - 1 1.0.3 entãoentonces, neste en este caso, o sistema não irá gravar o arquivo LSNumber.val e passará a buscar na Tabela a maior numeração já gravada para dar sequência. Detalhes em: Criação do el sistema no grabará el archivo LSNumber.val y buscará en la Tabla la mayor numeración grabada para dar secuencia. Detalles en: Creación del LSNumber.val / Numeração Numeración automática pelo por el License Server Ou sejaEs decir, o el License Server irá varrer a Tabela em questão (exemplo SC5) no Banco de Dados e irá se basear na maior numeração que possui gravada e incrementar em +1 Exemplo: A sequência do campo está na numeração realizará un barrido en la referida Tabla (ejemplo SC5) en la Base de datos y se basará en la mayor numeración que tiene grabada e incrementar en +1 Ejemplo: La secuencia del campo está en la numeración 000096 , 000097 , 000098 , 000099 , 000100 .... MasPero, por algum algún motivo, essa tabela já possui um registro gravado com a numeração 142535. Ao reiniciar o LS, irá varrer a tabela para encontrar a última numeração e como o número 142535 é maior que o 000100, seguirá a numeração a partir do 142535 respeitando a regra da maior numeração que possui gravada e incrementar em +1 Observação: Para ambientes que possuam lacunas na numeração automática como exemplificado acima, é possível utilizar o ponto de entrada CRIASXE, que consegue varrer a tabela e setar a numeração. Mais informações: ADVPL - Ponto de Entrada CRIASXE. esta tabla tiene un registro grabado con la numeración 142535. Al reiniciar el LS, realizará un barrido en la tabla para encontrar la última numeración y como el número 142535 es mayor que 000100, seguirá la numeración a partir de 142535 respetando la regla de la mayor numeración que tiene grabada e incrementar en +1 Observación: Para entornos que tengan lagunas en la numeración automática como se ejemplificó anteriormente, es posible utilizar el punto de entrada CRIASXE, que consigue realizar un barrido en la tabla y marcar la numeración. Más información: ADVPL - Punto de entrada CRIASXE.
Múltiples entornos utilizando el mismo License Server: Si su estructura tuviera más de un Appserver / más de una carpeta System apuntando al mismo License Server, la numeración de una base puede influir en la otra. Por eso, es necesario configurar la clave SpecialKey en el archivo Múltiplos Ambientes utilizando o mesmo License Server: Quando sua estrutura possui mais de um Appserver / mais de uma pasta System apontando para o mesmo License Server, a numeração de uma base pode influenciar na outra. Por isso, é necessário configurar a chave SpecialKey no arquivo appserver.ini de cada base, para que cada ambiente possua uma chave diferente no entorno tenga una clave diferente en el License Server. Esse cenário é encontrado por exemplo quando se possui mais de um ambiente (exemplo ambiente de Produção e ambiente de Teste) apontando para o mesmo banco de dados e o mesmo License Server (configuração no ini do server). Veja como configurar a chave SpecialKeyAmbiente DBF: Se os ambientes forem DBF/CDX eles devem apontar para endereços no X2_PATH, obrigatoriamente, diferentes. Este escenario se encuentra por ejemplo cuando se tiene más de un entorno (ejemplo entorno de Producción y entorno de Prueba) apuntando a la misma base de datos y el mismo License Server (configuración en el ini del server). Vea cómo configurar la clave SpecialKey Entorno DBF: Si los entornos fueran DBF/CDX estos deben apuntar a direcciones en el X2_PATH, obligatoriamente diferentes. Entorno TOP: Si los entornos fueran TOPConnect/TOTVSDBAcess, los alias de los entornos, obligatoriamente deben ser Ambiente TOP: Se os ambientes forem TOPConnect/TOTVSDBAcess, os alias dos ambientes devem ser, obrigatoriamente, diferentes.
|
|
Card |
---|
default | true |
---|
id | FormulárioFormulario |
---|
label | PASSO PASO 2 - Função no dicionárioFunción en el diccionario |
---|
| o Formulário (a tabela / rotina) em questão possui realmente a função de numeração Nem No todas as Tabelas / as Rotinas do Protheus possuem por padrão a função de sugerir numeração las Tablas / Rutinas del Protheus tienen por estándar la función de sugerir numeración automática. Para que, por exemploejemplo, cadastro de clientes, traga na inclusão automaticamente o próximo número disponível, utiliza-se a seguinte sintaxe no inicializador padrão (SX3) do el registro de clientes traiga en la inclusión automáticamente el próximo número disponible, se utiliza la siguiente sintaxis en el inicializador estándar (SX3) del campo A1_COD: GetSx8Num("SA1","A1_COD") É necessário verificar se o X3 do ¡Es necesario verificar si el X3 del campo que deseja desea está com esta informação no inicializador padrão! Na maioria das vezes o inicializador padrão do campo está cadastrado con esta información en el inicializador estándar! En la mayoría de las veces el inicializador estándar del campo está registrado como: GetSx8Num("SA1")Os inicializadores GetSx8Num e GetSxeNum tem o mesmo funcionamento e objetivo, porém caso necessário incluir em algum campo que não seja por padrão, o mais utilizado a partir da release 12.125 é a GetSx8Num, pois as tabelas SXE/SXF não estão disponíveis para acesso direto no Los inicializadores GetSx8Num y GetSxeNum tienen el mismo funcionamiento y objetivo, sin embargo, si fuera necesario incluir en algún campo que no sea estándar, el más utilizado a partir de la release 12.125 es GetSx8Num, pues las tablas SXE/SXF no están disponibles para acceso directo en el Lobo Guará.
Aviso |
---|
title | ObservaçãoObservación |
---|
| Particularmente se o si el caso for fuera referente ao Cadastro al Registro de Cliente cliente SA1 é es importante verificar também se a configuração não está Nativa do también si la configuración no es Nativa del módulo SIGALOJA:SIGALOJA Geração do Generación del código de cliente a partir do CPFdel RCPF/CNPJRCPJ)
Com relação ao uso da função Con relación al uso de la función A030INICPD() no en el Inicializador padrão estándar de A1_COD, é um tratamento para o código do cliente caso exista integração com o es un tratamiento para el código del cliente si existiera integración con RM Sistemas, o que depende da configuração do parâmetro lo cual depende de la configuración del parámetro MV_RMCLASS, se você não tem esta integração, a função não terá efeito no seu processosi no tiene esta integración, la función no tendrá efecto en su proceso. |
Aviso |
---|
| Esta configuração no Esta configuración en el SX3 para geração generación automática de numeração sequencial deve numeración secuencial debe ser utilizada apenas solamente por campos nos quais já consta a definição no nativo do Protheus. Não deve ser incluída manualmente em campos que não possuem este controle automático por padrão (como por exemplo no campo C5_NUM). Isto porque, este tratamento por si só não trata abandono de numeração reservada não utilizada (este tratamento é realizado no código fonte das rotinas). Ou seja, ao reservar a próxima numeração clicando em en los cuales consta la definición en el nativo del Protheus. No debe incluirse manualmente en campos que no tienen este control automático por estándar (como por ejemplo en el campo C5_NUM). Porque este tratamiento por sí solamente no trata abandono de numeración reservada no utilizada (este tratamiento se realiza en el código fuente de las rutinas). Es decir, al reservar la próxima numeración haciendo clic en "Incluir"(registro 000010 por exemplo) mas não efetivar a gravação, abandonando o registro, depois de já ter sido utilizada a numeração seguinte (depois de outra instância ter gravado a 000011 por exemplo) serão provocadas lacunas fazendo com que o controle automático se perca. Desta forma, seria necessário verificar a possibilidade de uso de ponto de entrada na rotina que deseja implementar o uso de numeração automática para o fiel comportamento da ferramenta, de forma a tratar abandonos de reserva de numeração. No Portal gestão de Vendas devido a utilização de threads, que permanece ativa aguardando novas execuções a utilização GetSx8Num(), não é possível a utilização desta função pois não é encerrada as threads mantendo a mesma numeração ou ocorrendo abandono de numerações. Nesse caso, para capturar o próximo número para o campo A1_COD, é possível realizar uma customização utilizando a função de usuário (User Function) na chamada do campo do Inicializador padrão (X3_RELACAO). Isso permitirá controlar o momento em que a ação está vindo do Portal de Gestão de Vendas, possibilitando o tratamento e a validação do retorno para apresentação correta da numeração no PGV. ejemplo) pero no hacer efectiva la grabación, abandonando el registro, después de haberse realizado la numeración siguiente (después que otra instancia grabó la 000011 por ejemplo) se provocarán lagunas haciendo que se pierda el control automático. De esta manera, sería necesario verificar la posibilidad de uso de punto de entrada en la rutina que desea implementar el uso de numeración automática para el fiel comportamiento de la herramienta para tratar abandonos de reserva de numeración. En el Portal de Gestión de ventas debido a la utilización de threads, donde permanece activa la utilización GetSx8Num() esperando nuevas ejecuciones, no es posible la utilización de esta función, pues no se encierran las threads manteniendo la misma numeración u ocurriendo abandono de numeraciones. En este caso, para capturar el próximo número para el campo A1_COD, es posible realizar una personalización utilizando la función de usuario (User Function) en la activación del campo del Inicializador estándar (X3_RELACAO). Esto permitirá controlar el momento en el que la acción está viniendo del Portal de Gestión de ventas, permitiendo el tratamiento y la validación de la devolución para la presentación correcta de la numeración en el PGV. A continuación, indicamos un ejemplo de función, pero recordemos que solamente es un ejemplo, si fuera necesario personalizar, solicite el acompañamiento de su analista programador:
Bloco de código |
---|
title | Ejemplo de User Function |
---|
| #Include 'TOTVS.ch'
User Function NextSA1Cod()
Local cNum := GETSXENUM("SA1","A1_COD")
DbSelectArea("SA1")
SA1->(DbSetOrder(1))
While (DbSeek(xFilial("SA1")+cNum))
ConfirmSX8()
cNum := GETSXENUM("SA1","A1_COD")
Enddo
DbCloseArea()
RollbackSx8()
Return cNum |
|
|
Card |
---|
default | true |
---|
id | Ajuste da numeração de la numeración automática |
---|
label | PASSO PASO 3 - Ajuste Configurador |
---|
| da numeração Para acertar a numeração automática, quando ela sai de ordem por algum motivo, deve-se executar a rotina APCFG110 pelo Configurador.ajustar la numeración automática, cuando esta sale del orden por algún motivo, debe ejecutarse la rutina APCFG110 por el Configurador. Primero verifique el último/mayor número grabado en la Tabla Verifique primeiramente o último/maior número gravado na Tabela (registro "000004" por exemploejemplo) a partir da qual deseja dar sequência (Atente-se à numeração de acordo com a Filialde la cual desea dar secuencia (Tenga en cuenta la numeración de acuerdo con la Sucursal).
Informações |
---|
title | Observação | Observación |
---|
| Supongamos que el Suponhamos que o License Server seja parado pare de forma inesperada, como uma queda de energia ou fechamento inadequado, o arquivo não é gerado, e não reinicialização do License, as informações da última numeração são lidas diretamente das tabelas no banco e carregadas em memória.una caída de energía o cierre inadecuado, el archivo no se genera, y en la reinicialización del License, las informaciones de la última numeración son leídas directamente de las tablas en la base y cargadas en la memoria. Es decir, si hubiera una numeración discrepante en la secuencia de la tabla, como por ejemplo, alguna numeración iniciada con una letra, en medio a una secuencia de números (en la base de datos, las letras vienen después de los números, entonces el código iniciado con letra va a considerarse el último número de la secuencia, después de cualquier Ou seja, se houver uma numeração discrepante na sequência da tabela, como por exemplo, alguma numeração iniciada com uma letra, em meio a uma sequência de números (no banco de dados, as letras vem depois dos números, então o código iniciado com letra vai ser considerado o último número da sequência, depois de qualquer número), toda vez que o servidor é reiniciado sem execução do processo correto (via console ou no fim do serviço), esse código será carregado com base nessa numeração "incorreta" do banco.se reinicia el servidor sin ejecución del proceso correcto (vía consola o al final del servicio), este código se cargará con base en esta numeración "incorrecta" de la base. |
Vamos a tomar, como ejemplo, la numeración automática en el campo A1_COD de la tabla Vamos tomar, como exemplo, a numeração automática no campo A1_COD da tabela de Clientes (SA1). Na imagem abaixo, note que existem 4 clientes cadastrados, portanto a última numeração é En la siguiente imagen, observe que existen 4 clientes registrados, por lo tanto, la última numeración es 000004:
Na rotina En la rutina APCFG110, a numeração deverá estar conforme a imagem abaixola numeración debe estar de acuerdo con la siguiente imagen:
- Na seção En la sección inferior (antiga antigua SXF) - Numeros em Números en uso/ Numeros Números liberados: Exibe a Muestra la última numeração numeración sugerida / a por sugerir (ainda não gravada) → neste exemploaún no grabada) → en este ejemplo, 000005.
- Na seção En la sección superior (antiga antigua SXE) - Proximos numeros: Exibe a numeração seguinte, ou seja (última numeração sugerida / a sugerir (ainda não gravadaPróximos números: Muestra la numeración siguiente, es decir (última numeración sugerida / por sugerir (aún no grabada)) + 1 → neste exemploen este ejemplo, 000006.
- Se por algum motivo, ao incluir um Novo Cliente na rotina Al incluir un Nuevo cliente en la rutina de Clientes, a próxima numeração não estiver sendo 000005, então deve clicar 2 vezes no número que está em Números em uso, alterar para o que seria o próximo, e na área Próximos números inserir o subsequente correto. Com isso é redefinida a ordem que o sistema de numeração automática deve si por algún motivo la próxima numeración no fuera 000005, entonces debe hacer clic 2 veces en el número que está en Números en uso, modificar para el que sería el próximo, y en el área Próximos números incluir el subsiguiente correcto. Con esto se redefine el orden que el sistema de numeración automática debe seguir.
Informações |
---|
title | ObservaçãoObservación |
---|
| Certifique-se Asegúrese de que, tanto na seção inferior quanto na superior exista apenas uma linha (um registro) de sugestão da numeração para o ALIAS. Se houver registro duplicado, com ALIAS e Chave idênticos, reinicie o License Server e valide se foi ajustado de modo a possuir apenas uma linha (Dúvidas ou dificuldades nesse procedimento, acionar o Suporte Framework Protheus).en la sección inferior como en la superior, exista solamente una línea (un registro) de sugerencia de la numeración para el ALIAS. Si hubiera registro duplicado, con ALIAS y Clave idénticos, reinicie el License Server y valide si se ajustó para tener solamente una línea (Dudas o dificultades en este procedimiento, active al Soporte Framework Protheus). |
|
|
|