<?xml version="1.0" encoding="utf-8"?>
<ManualTopic ID="/baanerp/ti/onlinemanual/100002" xml:lang="es">
   <Header>
      <Title>Editor de restricciones</Title>
   </Header>
   <GeneralSection>
      <GeneralSection>
         <SectionTitle>Sintaxis de expresiones de restricción</SectionTitle>
         <Paragraph>La sintaxis de expresiones de restricción es un subconjunto de la sintaxis de ERP LN Herramientas. Puede componer expresiones de restricción con las siguientes instrucciones básicas.</Paragraph>
         <List>
            <ListIntro>Operadores aritméticos:</ListIntro>
            <ListItem>* (multiplicación)</ListItem>
            <ListItem>/ (división)</ListItem>
            <ListItem>+ (suma)</ListItem>
            <ListItem>- (resta)</ListItem>
            <ListItem>\ (resto tras la división)</ListItem>
            <ListItem>&amp; (vectores alfanuméricos vinculantes)</ListItem>
         </List>
         <List>
            <ListIntro>Operadores lógicos:</ListIntro>
            <ListItem>o</ListItem>
            <ListItem>y</ListItem>
            <ListItem>no</ListItem>
         </List>
         <List>
            <ListIntro>Operadores relacionales:</ListIntro>
            <ListItem>=  (igual que)</ListItem>
            <ListItem>&gt; (mayor que)</ListItem>
            <ListItem>&gt;= (mayor o igual que)</ListItem>
            <ListItem>&lt;&gt; (no igual a)</ListItem>
            <ListItem>&lt; (menor que)</ListItem>
            <ListItem>&lt;= (menor o igual que)</ListItem>
         </List>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Expresiones de dominio</SectionTitle>
         <Paragraph>A es {a1,a2,a3-a4,..} significa: (A=a1 o A=a2 o A &gt;= a3 y A &lt;= a4, etc.).</Paragraph>
         <Paragraph>La sintaxis de expresión de ámbito es una anotación abreviada de expresiones lógicas referentes al ámbito de una variable.</Paragraph>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Prioridad en las expresiones</SectionTitle>
         <Paragraph>Los operadores aritméticos tienen una prioridad mayor que las operaciones relacionales.</Paragraph>
         <Paragraph>Las operaciones relacionales tienen una prioridad mayor que los operadores lógicos.</Paragraph>
         <Paragraph>La secuencia de prioridad para operadores aritméticos: * / \ + -</Paragraph>
         <Paragraph>La secuencia de prioridad para operadores lógicos: no, y, o</Paragraph>
         <Paragraph>Los paréntesis ('()') pueden utilizarse para cambiar la secuencia de prioridad de operadores aritméticos y lógicos.</Paragraph>
         <ExampleSection>
            <SectionTitle> Ejemplo</SectionTitle>
            <Paragraph>3 + 4 * 5 = 23</Paragraph>
            <Paragraph>(3 + 4) * 5 = 35</Paragraph>
         </ExampleSection>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Expresiones booleanas</SectionTitle>
         <Paragraph>Las expresiones booleanas pueden tener el valor verdadero o falso (1 o 0). Esto puede aplicarse en restricciones, especialmente en expresiones condicionales.</Paragraph>
      </GeneralSection>
      <ExampleSection>
         <SectionTitle> Ejemplo</SectionTitle>
         <Paragraph>If not e then ' significa:</Paragraph>
         <Paragraph>If e = false then'</Paragraph>
         <Paragraph>o If e = 0 then'</Paragraph>
      </ExampleSection>
      <GeneralSection>
         <SectionTitle>Construcciones If-then-else</SectionTitle>
         <Paragraph>En las restricciones se pueden utilizar construcciones if-then-else extensas. La agrupación de sentencias está permitida.</Paragraph>
         <ExampleSection>
            <SectionTitle> Ejemplo</SectionTitle>
            <Paragraph>If expresión 1</Paragraph>
            <Paragraph>then expresión 2</Paragraph>
            <Paragraph>else expresión 3</Paragraph>
            <Paragraph>endif</Paragraph>
         </ExampleSection>
         <Paragraph>Una construcción if-then-else siempre se cierra con una sentencia endif. La sentencia else no es obligatoria. Las sentencias if, else y endif siempre empiezan en una nueva línea. Las expresiones (condicionales) pueden dividirse en varias líneas. Una restricción de validación se puede definir sin sentencias if-then-else; esta restricción debe comenzar por c:.</Paragraph>
         <Paragraph>Una restricción puede incluir comentarios utilizando el signo |. Durante el proceso de configuración, puede generar mensajes mediante la variable de mensaje (hasta 80 x 25 líneas de texto).</Paragraph>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Variables de restricción</SectionTitle>
         <Paragraph>Las variables globales y locales pueden utilizarse en expresiones de restricción. Las variables globales son características de productos y variables de restricción definidas por el usuario declaradas como globales. Las variables definidas previamente por el configurador de productos, como la especificación, la visualización, la longitud, la anchura, etc., son locales. Las variables locales conservan su valor durante todo el proceso de configuración, a menos que se cambien sus valores.</Paragraph>
         <List>
            <ListIntro>Una variable de restricción puede tener las siguientes declaraciones de tipo:</ListIntro>
            <ListItem>cadena (alfanumérica)          (por ejemplo: cadena máquina global)</ListItem>
            <ListItem>largo  (enteros)               (por ejemplo: largo  i)</ListItem>
            <ListItem>doble  (fracciones)            (por ejemplo: doble  j)</ListItem>
         </List>
         <Paragraph>Las variables de restricción definidas por el usuario siempre deben declararse en la parte superior de la restricción. Todas las variables se inicializan antes de ejecutarse la restricción: las variables alfanuméricas se borran y las variables numéricas adoptan el valor cero. Las variables globales introducción y validando se inicializan con el valor verdadero.</Paragraph>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Utilización de variables de restricción</SectionTitle>
         <Paragraph>Las características de producto se deben proporcionar con corchetes de apertura y de cierre ([......]) en las expresiones de restricción. Las variables restantes pueden utilizarse directamente en expresiones. Las variables alfanuméricas (vectores de cadenas) pueden indexarse según la anotación: (startposition[;longitud]).</Paragraph>
      </GeneralSection>
      <ExampleSection>
         <SectionTitle> Ejemplo</SectionTitle>
         <Paragraph>[color] = "rojo"</Paragraph>
         <Paragraph>validando = verdadero</Paragraph>
         <Paragraph>Los valores de las variables pueden ser alfanuméricos o numéricos. Los valores alfanuméricos deben escribirse entre comas ("...."). Los valores numéricos pueden especificarse directamente. La coma decimal es una coma (',').</Paragraph>
      </ExampleSection>
      <ExampleSection>
         <SectionTitle> Ejemplo</SectionTitle>
         <Paragraph>máquina(1;2) = "A5"</Paragraph>
         <Paragraph>volumen = 28.673</Paragraph>
         <Paragraph>Las constantes verdadero/falso pueden utilizarse para expresiones booleanas.</Paragraph>
      </ExampleSection>
      <GeneralSection>
         <SectionTitle>Funciones aritméticas</SectionTitle>
         <List>
            <ListItem>round(X,Y,Z): produce un valor redondeado de X; Y es el número de decimales y Z es el método de redondeo (0 = a la baja, 1 = normal, 2 = al alza)</ListItem>
            <ListItem>val(A): crea un valor numérico de la cadena A (val("8,7") = 8,7)</ListItem>
            <ListItem>abs(X): calcula el valor absoluto de X (abs(-10,3) = 10,3)</ListItem>
            <ListItem>int(X): crea el valor entero de X (int(11,6) = 11)</ListItem>
            <ListItem>pow(X,Y): eleva X a la potencia de Y (pow(10,2) = 100)</ListItem>
            <ListItem>sqrt(X): crea la raíz cuadrada de X (sqrt(16) = 4)</ListItem>
            <ListItem>min(X,Y): crea el valor más pequeño de X e Y (min(6,10) = 6)</ListItem>
            <ListItem>max(X,Y): crea el valor más grande de X e Y (max(6,10) = 10)</ListItem>
            <ListItem>pi: constante con valor PI (3,1415926...)</ListItem>
         </List>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Funciones trigonométricas</SectionTitle>
         <List>
            <ListItem>sin(X), cos(X), tan(X): produce el seno, el coseno o la tangente de X (radiales)</ListItem>
            <ListItem>asin(X), acos(X), atan(X): produce el arcoseno, el arcocoseno o la arcotangente de X</ListItem>
            <ListItem>hsin(X), hcos(X), htan(X): produce el seno, el coseno o la tangente hiperbólicos de X</ListItem>
         </List>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Funciones logarítmicas</SectionTitle>
         <List>
            <ListItem>exp(X): eleva e a la potencia de X</ListItem>
            <ListItem>log(X): produce un logaritmo natural de X con base e</ListItem>
            <ListItem>log10(X): produce un valor logarítmico de X con base de potencias de 10</ListItem>
         </List>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Funciones de cadena</SectionTitle>
         <List>
            <ListItem>edit(X,Y): da forma al valor numérico X según el formato Y (edit(10,3,"ZZZ9V,99") = "10,30"</ListItem>
            <ListItem>str(X): coloca valor numérico en cadena (str(10,3) = "10,3")</ListItem>
            <ListItem>len(X): produce longitud de cadena X (len("abc") = 3)</ListItem>
            <ListItem>strip(X): borra espacios después del último carácter (strip("A ") "A")</ListItem>
            <ListItem>pos(X,Y): produce posición de cadena Y en cadena X desde la izquierda</ListItem>
            <ListItem>rpos(X,Y): produce posición de cadena Y en cadena X desde la derecha</ListItem>
         </List>
      </GeneralSection>
      <GeneralSection>
         <SectionTitle>Funciones de fecha</SectionTitle>
         <List>
            <ListItem>fecha(): produce el número de días entre el día 0 y la fecha actual</ListItem>
            <ListItem>date(a,m,d): produce el número de días entre el día 0 y la fecha especificada</ListItem>
         </List>
      </GeneralSection>
      <ExampleSection>
         <SectionTitle> Ejemplo</SectionTitle>
         <Paragraph>date(1995,06,01) = 728445</Paragraph>
      </ExampleSection>
   </GeneralSection>
</ManualTopic>