Árvore de páginas

El uso compartido de archivos se basa en el concepto de sucursales. Cada empresa registrada puede tener n sucursales donde los datos incluidos por cada sucursal, como por ejemplo, archivo de productos, cliente, etc., pueden ser compartidos con las otras sucursales. Este recurso solamente es posible debido a la existencia del campo "XX_FILIAL" ("XX" representa el nombre del archivo) en todos los archivos del sistema.

 


El modo de operación de cada archivo, compartido o exclusivo, está definido en el archivo SX2 del diccionario de datos.

 

 
Si el modo de acceso es compartido, cuando un nuevo registro se incluye, el campo XX_FILIAL recibirá el valor " " (dos caracteres en blanco) y su contenido será visible por cualquier usuario de cualquier sucursal.

 


Si el modo es exclusivo, cuando se incluye un nuevo registro, el campo recibirá el código alfanumérico de la sucursal (en el siguiente ejemplo, "01" o "02" ) y será visible únicamente para los usuarios de la sucursal que este incluyó.

 


Ejemplo:

 

 

El archivo XX está con el modo de acceso definido como exclusivo en el SX2, por lo tanto, sus registros serán visibles únicamente para la sucursal que los incluyó. Vea el siguiente ejemplo:

 

XX_FILIAL

XX_CODIGO

XX_DESCRI

01

30

DESTORNILLADOR

01

22

DESTORNILLADOR DE ESTRELLA

02

21

TALADRO BOSCH

02

12

TALADRO BLACK & DECKER

01

31

TALADRO DREMEL

01

90

SIERRA DE VAIVÉN

02

48

PLOMADA

02

13

SERRUCHO

 

 

 


 

 

 

Los usuarios de la Sucursal 01 tendrán acceso únicamente a los datos cuyo registro tiene el contenido "01" en el campo XX_FILIAL. Ya los usuarios de la Sucursal 02, accederán a los datos de los registros con el valor "02" en el campo XX_FILIAL.

 

 

En la Gestión de empresas, existen algunas particularidades, que deben tomarse en cuenta en su desarrollo. Para una mejor comprensión sobre la función Gestión de empresas, a continuación se realiza una breve explicación de los niveles que estarán disponibles en la Línea de Productos Microsiga Protheus.

 


 

  • Grupo de empresas: Nivel superior que controla el diccionario de datos en el Microsiga Protheus. Ejemplo: SX1??0.DBF – el código de grupo sustituirá los puntos de interrogación.
  • Empresas: Nivel que identifica las empresas que forman parte del grupo, es decir, ahora es posible utilizar más de una empresa para el mismo diccionario de datos.
  • Unidades de negocio: Nivel que identifica las unidades de negocios de las empresas. De esta manera, es posible definir un nivel de control entre las empresas y sucursales.
  • Sucursal: Nivel que identifica las sucursales de las unidades de negocios o de las empresas.

 


Al crear estos niveles, podemos utilizar diversas empresas, unidades de negocios y sucursales compartiendo información entre sí.

 

 
El único nivel obligatorio para la Línea de Productos Microsiga Protheus es la sucursal con un mínimo de dos dígitos, pudiendo llegar a doce dígitos, los otros niveles deben utilizarse de acuerdo con la necesidad de cada cliente.

 


A partir de este momento, explicaremos el vínculo entre los niveles:

 


En el archivo de Grupo de empresas, el administrador del Sistema debe definir el layout utilizado para la cumplimentación de la empresa, unidad de negocios y sucursal, que no debe sobrepasar de doce caracteres.

 


Ejemplo: EEUUFFFF
En el ejemplo anterior, definimos que la información grabada en los campos sucursales se identificarán de la siguiente manera:
EE – Dos dígitos para la empresa.
UU – Dos dígitos para la unidad de negocios.
FFFF – Cuatro dígitos para la sucursal.
Algunas reglas que los desarrolladores deben seguir:

 


 

  1. Utilizar las siguientes directrices para que el programa acepte las modificaciones de tamaño del campo Sucursal:

 


FWGETTAMFILIAL-> Retorna el tamaño utilizado para la Sucursal (Sustituye el tamaño fijo de 2)
Ejemplo:
// FWGETTAMFILIALSample.prw
AAdd(aStr, {"XU_FILIAL", "C", FWGETTAMFILIAL, 0})
En este caso, todos los lugares que estén utilizando el tamaño 2 fijo deben modificarse para que se haga flexible el cambio de tamaño.
FWGETCODFILIAL -> Retorna el código de la Sucursal marcada (Sustituye la utilización del M0_CODFIL)
A partir del momento que se define que el tamaño del campo SUCURSAL puede aumentarse, el tamaño físico del campo M0_CODFIL será 12, de esta manera, para utilizar el contenido correcto, debe utilizarse la variable FWGETCODFILIAL en lugar del campo M0_CODFIL.
Ejemplo:
// FWGETCODFILIALSample.prw
FWGETCODFILIAL = "1234"

 

Sucursal con tamaño 4 y sin los caracteres especiales - CORRECTO

 

 

Para el tratamiento en diccionarios de datos, no es posible la utilización de los strings informados, pues, esta solo se sustituye en tiempo de compilación. De esta manera, en el caso del diccionario de datos deben utilizarse las siguientes funciones:

 


 

  1. FWSizeFilial() -> Retorna el tamaño utilizado para la Sucursal (Sustituye el tamaño fijo de 2)

  2. FWCodFil() -> Retorna el código de la Sucursal marcada (Sustituye la utilización del M0_CODFIL)

 

  1. Todos los nuevos campos referentes a la Sucursal deben incluirse en el grupo de campo "033" (Sucursal).

 

  1. Para la actualización de campos concatenados, en el cual, la sucursal forma parte del contenido del campo, debe crearse una función con la sigla del módulo + "UpdFConj()" que retornará un array con la siguiente estructura:


aArray[n,1]=Alias
aArray[n,2]=Campo
aArray[n,3]=Tamaño original del campo (Debe informarse el tamaño estándar y no debe considerarse el aumento o disminución del campo sucursal)
aArray[n,4]=Indica la posición en que se inicia la grabación del campo sucursal (Opcional. En caso de no que no exista este nivel, el campo solamente se aumentará.)
aArray[n,5]=Bloque de códigos con la función de actualización de los datos que se ejecutará cuando la posición 4 sea igual a 0 (cero).
Este bloque de códigos recibirá como parámetro la siguiente información:
cAlias,cField,nRealSize,nFilIni,nOldSize,nNewSize.
Ejemplo de cumplimentación:
// ConcatenatedBranchUpdateSample.prw
{ |cAlias,cField,nRealSize,nFilIni,nOldSize,nNewSize|FunUpdRA( cAlias,cField,nRealSize,nFilIni,nOldSize,nNewSize ) }
Function GPEUpdFConj()
Local aFields := {}
Aadd(aFields, { "SRA", "RA_P1FILP2", 14, 7 } ) // Ejemplo: "PARTE101PARTE2"
Aadd(aFields, { "SRA", "RA_FILUSR", 8, 1 } ) // Ejemplo: "01PARTE2"
Aadd(aFields, { "SRA", "RA_123456", 8, 0, { cAlias, cField, nRealSize, nFilIni, nOldSize, nNewSize| FunUpdRA(cAlias, cField,n RealSize, nFilIni, nOldSize, nNewSize) }} )
Return aFieds
Function FunUpdRA(cAlias, cField, nRealSize, nFilIni, nOldSize, nNewSize)
// Tratamientos necesarios y actualización del contenido en la base de datos
Return


 

  1. Funciones auxiliares para el desarrollo y estandarización de los programas:

 


 

  • FWSizeFilial - Retorna el tamaño del campo Sucursal.
  • FWCodFil - Retorna el código de la sucursal.
  • FWModeAccess - Retorna el modo de uso compartido.
  • FWGrpCompany - Retorna el grupo.
  • FWAllGrpCompany - Retorna los grupos de empresas.
  • FWCompany - Retorna la empresa.
  • FWAllCompany - Retorna las empresas del grupo de empresas.
  • FWUnitBusiness - Retorna la unidad de negocio.
  • FWAllUnitBusiness - Retorna las unidades de negocios para el grupo y la empresa.
  • FWFilial - Retorna la sucursal.
  • FWAllFilial - Retorna las sucursales para el grupo de empresas.
  • FWLoadSM0 - Carga la información de las sucursales.
  • FWSM0Layout - Retorna el layout.
  • FWXFilial - Retorna el string.
  • FWGrpName - Retorna el nombre del grupo de empresas.
  • FWFilialName - Retorna el nombre de la sucursal.
  • FWFilRazSocial - Retorna la Razón social.
  • FWArrFilAtu - Retorna toda la información referente a la empresa, unidad de negocio y sucursal.
  • FWFilialStatus - Retorna el estatus de la sucursal marcada.
  • FWCodEmp - Retorna el código de la empresa.
  • FWPesqSM0 - Muestra las sucursales disponibles para el grupo de la empresa actual.
  • FWUnitName - Retorna el nombre de la Unidad de negocios.
  • FWCompanyName - Retorna el nombre de la empresa.
  • FWFilExist - Verifica si la sucursal existe.
  • FWEmpName - Nombre de la empresa.
  • FWFilName - Nombre de la sucursal.


 

 

  1. Los programas que utilizan la barrida en la tabla SM0 (While), deben utilizar la función FWLoadSM0() que retorna un array con todas la información del SIGAMAT.

 


 Ejemplo:

 


 // FWLoadSM0Sample.prw
aSM0 := FWLoadSM0()
For nI := 1 To Len(aSM0)
//Tratamientos deseados con la información del SIGAMAT
Next nI

 

 

  1. Para retornar la información de una sucursal específica, utilice la función FWArrFilAtu().

 


Ejemplo:

 

 


 // FWArrFilAtuSample.prw
aFil := FWArrFilAtu(cEmpAnt, cFilAnt)
aFil := FWArrFilAtu("04", "E01U01F03")
7 El entorno Gestión de personal ya utilizaba el concepto de multiempresas, de esta manera, para utilizar la empresa debe verificarse si la empresa existe configurada para el grupo y si no lo está, colar el contenido del propio grupo para mantener el legado.
Ejemplo:
// FWLoadSM0LegacySample.prw
aSM0 := FWLoadSM0()
For nI := 1 To Len(aSM0)
If !Empty(aSM0[nI,SM0_EMPRESA])
cEmp := aSM0[nI,SM0_EMPRESA]
Else
cEmp := aSM0[nI,SM0_GRPEMP]
EndIf
// Utiliza la variable cEmp
Next nI

 

Estas reglas deben utilizarse en el sistema de personalizaciones. De esta manera es muy importante revisar las personalizaciones de los clientes antes de comenzar a utilizar la Gestión de empresas.

 

 

En conclusión, la Gestión de empresas, presente en la Línea de Productos Microsiga Protheus, permite compartir las definiciones del "Modelo de datos" entre las empresas configuradas en el sistema, además de introducir el concepto de Unidad de negocio.

  • Sem rótulos