<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:media="http://search.yahoo.com/mrss/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SAPB1-Desarrollo archivos - Itop</title>
	<atom:link href="https://itop.es/tag/sapb1-desarrollo/feed/" rel="self" type="application/rss+xml" />
	<link>https://itop.es/tag/sapb1-desarrollo/</link>
	<description>Consultora tecnológica en Tenerife</description>
	<lastBuildDate>Tue, 30 Jun 2026 11:18:06 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://itop.es/wp-content/uploads/2023/01/itop-favicon-web.svg</url>
	<title>SAPB1-Desarrollo archivos - Itop</title>
	<link>https://itop.es/tag/sapb1-desarrollo/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Hasta 170.000€ de subvención para implantar un #ERP en tu #PYME en #Canarias.</title>
		<link>https://itop.es/blog/item/convocatoria-de-subvenciones-a-empresas-de-alta-tecnologia-e-intensivas-en-conocimiento-en-areas-prioritarias-de-la-ris3-eatic.html</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 30 Mar 2017 09:07:29 +0000</pubDate>
				<category><![CDATA[Información de interés]]></category>
		<category><![CDATA[ERP]]></category>
		<category><![CDATA[SAPB1-Compras]]></category>
		<category><![CDATA[SAPB1-Desarrollo]]></category>
		<category><![CDATA[SAPB1-Finanzas]]></category>
		<category><![CDATA[SAPB1-Reporting]]></category>
		<category><![CDATA[subvención]]></category>
		<guid isPermaLink="false">https://migracion.itop.es/?p=815</guid>

					<description><![CDATA[<p>Beneficiarios: PYMEs que estén válidamente constituidas en el momento de la presentación de la solicitud, tengan residencia fiscal o un establecimiento permanente en la Comunidad Autónoma de Canarias y cuenten con uno o más empleados a la fecha de solicitud. (Menos 250 empleados y volumen anual de negocios inferior a 50 millones euros).</p>
<p>La entrada <a href="https://itop.es/blog/item/convocatoria-de-subvenciones-a-empresas-de-alta-tecnologia-e-intensivas-en-conocimiento-en-areas-prioritarias-de-la-ris3-eatic.html">Hasta 170.000€ de subvención para implantar un #ERP en tu #PYME en #Canarias.</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Plazo máximo solicitud: 19 de abril de 2017 a 14:00h.</p>



<p class="wp-block-paragraph">Importe mínimo proyecto:&nbsp;86.000,00 Euros aproximadamente.&nbsp;</p>



<p class="wp-block-paragraph">Importe subvención: Hasta 70% (Mínimo: 60.000,00; Máximo: 174.990,00)</p>



<p class="wp-block-paragraph">Gastos subvencionables: Inmovilizado material e inmaterial + Consultoría externa + gastos auditoría.&nbsp;</p>



<p class="wp-block-paragraph">Convocatoria de subvenciones a empresas de alta tecnología e intensivas en conocimiento en áreas prioritarias de la RIS3. (EATIC)</p>



<p class="wp-block-paragraph">Subvención RIS3 va dirigida exclusivamente a PYMES, menos de 250 empleados y volumen de negocios inferior a 50 millones euros anual.</p>



<p class="wp-block-paragraph">Los proyectos subvencionables deberán estar encuadrados con los objetivos generales y objetivos específicos de las prioridades de la RIS3.</p>



<p class="wp-block-paragraph">Se considerará susceptible de ayuda aquellos proyectos en los que se desarrollen o utilicen conocimientos y tecnologías novedosas a nivel sectorial -de índole científica, tecnológica, empresarial o de otro tipo- para la elaboración de productos, procesos o servicios nuevos o mejorados.</p>



<p class="wp-block-paragraph">En ningún caso serán subvencionables las actuaciones rutinarias de las empresas para la mejora de la calidad de productos, el aumento de las capacidades de producción o servicio, modificación o adaptación de procesos productivos o productos existentes que no supongan una innovación sustancial.</p>



<p class="wp-block-paragraph">La intensidad de la ayuda será de un máximo del 70% del gasto elegible. Los límites máximo y mínimo de la inversión a subvencionar por proyecto se determinarán en cada convocatoria.</p>



<p class="wp-block-paragraph">Los límites mínimo y máximo de subvención a conceder por proyecto subvencionado son 60.000 € y 174.990 €, respectivamente.</p>



<p class="wp-block-paragraph">En cada convocatoria se establecerá la dotación presupuestaria correspondiente. En caso de gastos sujetos a tramitación anticipada, las ayudas quedan sometidas a la condición suspensiva de existencia de crédito adecuado y suficiente en el momento de la resolución de concesión.</p>



<p class="wp-block-paragraph">El importe acumulado total de ayudas recibidas por empresa no podrá superar durante cualquier período de tres ejercicios fiscales los 200.000 euros, o los 100.000 euros si se trata de ayudas de mínimis concedidas a una empresa que realice por cuenta ajena operaciones de transporte de mercancías por carretera. En cualquier caso, los beneficiarios deberán cumplir lo dispuesto en el Reglamento (UE) no 1407/2013, de la Comisión, de 18 de diciembre de 2013, relativo a la aplicación de los artículos 107 y 108 del Tratado de Funcionamiento de la Unión Europea a las ayudas de mínimis.</p>



<h2 class="wp-block-heading">Las prioridades (áreas prioritarias) de la RIS3 son:</h2>



<h3 class="wp-block-heading">1. Liderazgo inteligente del turismo:</h3>



<ul class="wp-block-list">
<li>Mejora de la competitividad y productividad del producto turístico canario. </li>



<li>Diversificación productiva basada en el turismo.</li>
</ul>



<h3 class="wp-block-heading">2. Canarias, referente atlántico inteligente:</h3>



<ul class="wp-block-list">
<li>Canarias, conocimiento, tecnología y centro de operaciones para la cooperación al desarrollo. </li>



<li>Canarias, plataforma de negocios y centro financiero del Atlántico medio.</li>



<li>Canarias, referente cultural y ambiental atlántico.</li>



<li>Canarias, centro nodal del Atlántico medio.</li>
</ul>



<h3 class="wp-block-heading">3. Valorización socioeconómica de la I+D, especialización y fortalecimiento en astrofísica y espacio, ciencias marítimo-marinas, biotecnología y biomedicina asociadas a la biodiversidad y enfermedades tropicales:</h3>



<ul class="wp-block-list">
<li>Especialización y fortalecimiento en los ámbitos prioritarios. </li>



<li>Generación de conocimiento y potenciación de la excelencia. </li>



<li>Transferencia de conocimiento y tecnología e incremento de la participación privada en I+D. </li>



<li>Desarrollo del capital humano y atracción de talento de excelencia.</li>
</ul>



<h3 class="wp-block-heading">4. Agenda Digital:</h3>



<ul class="wp-block-list">
<li>Crecimiento digital.</li>



<li>Infraestructuras de acceso de nueva generación. </li>
</ul>



<h3 class="wp-block-heading">5. Crecimiento verde y sostenibilidad:</h3>



<ul class="wp-block-list">
<li>Economía baja en carbono, desarrollo industrial y eficiencia energética. </li>



<li>Eco-innovación, agricultura, pesca y protección del medio ambiente. </li>



<li>Bioeconomía basada en la biodiversidad canaria. </li>



<li>Canarias laboratorio natural.</li>
</ul>



<p class="wp-block-paragraph"><a href="http://www.gobiernodecanarias.org/boc/2017/031/001.html">BASES REGULADORAS AQUÍ.</a></p>
<p>La entrada <a href="https://itop.es/blog/item/convocatoria-de-subvenciones-a-empresas-de-alta-tecnologia-e-intensivas-en-conocimiento-en-areas-prioritarias-de-la-ris3-eatic.html">Hasta 170.000€ de subvención para implantar un #ERP en tu #PYME en #Canarias.</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Gestión de eventos en SAP Business One</title>
		<link>https://itop.es/blog/item/gestion-de-eventos-en-sap-business-one.html</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 28 Aug 2013 00:00:00 +0000</pubDate>
				<category><![CDATA[ERP]]></category>
		<category><![CDATA[Addons]]></category>
		<category><![CDATA[SAPB1-Desarrollo]]></category>
		<guid isPermaLink="false">https://migracion.itop.es/?p=809</guid>

					<description><![CDATA[<p>En SAP Business One se producen gran cantidad de eventos cuando un usuario interactúa con la aplicación cliente.<br />Todos estos eventos son comunicados a las aplicaciones de terceros (addons) que se hayan conectado a la interfaz de usuario mediante la API de interfaz de usuario: UI API.</p>
<p>Entre otros, los eventos comunicados pueden ser pulsaciones de teclas, cambio de idioma, creación de una factura de ventas, abrir una ventana de datos maestros de interlocutor comercial, pulsar un botón, etc…<br />En este artículo nos centraremos en gestionar mejor la comunicación de tus addons con los eventos que más nos interese.</p>
<p>La entrada <a href="https://itop.es/blog/item/gestion-de-eventos-en-sap-business-one.html">Gestión de eventos en SAP Business One</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En la documentación oficial de SAP existe gran cantidad de información y multitud de ejemplos sobre cómo se pueden gestionar los eventos que ocurren en un cliente SAP Business One.</p>



<p class="wp-block-paragraph">Sin embargo, en este post hablaré sobre los conceptos teóricos básicos en los que se apoya dicha gestión para que el lector pueda contar con una visión global e introductoria.</p>



<p class="wp-block-paragraph">En SAP Business One se producen gran cantidad de eventos cuando un usuario interactúa con la aplicación cliente.Todos estos eventos son comunicados a las aplicaciones de terceros (addons) que se hayan conectado a la interfaz de usuario mediante la API de interfaz de usuario: UI API. Entre otros, los eventos comunicados pueden ser pulsaciones de teclas, cambio de idioma, creación de una factura de ventas, abrir una ventana de datos maestros de interlocutor comercial, pulsar un botón, etc…</p>



<p class="wp-block-paragraph">Debido a esta gran cantidad de eventos comunicados, es importante realizar un filtro para que SAP Business One sólo comunique a nuestro addon los eventos que realmente estamos interesados en gestionar. Cuando SAP Business One comunica un evento a un addon, éste es comunicado en dos instantes de tiempo diferentes:</p>



<ul class="wp-block-list">
<li>Antes de que SAP Business One ejecute la acción correspondiente al evento comunicado.</li>



<li>Después de que SAP Business One haya ejecutado la acción correspondiente al evento comunicado.</li>
</ul>



<p class="wp-block-paragraph">Por ejemplo, durante la creación de una factura de ventas:</p>



<ul class="wp-block-list">
<li>SAP Business One enviará un evento de creación a nuestro addon antes de crear la factura en la base de datos, por lo que podríamos realizar comprobaciones adicionales.</li>



<li>SAP Business One enviará un evento de creación a nuestro addon después de crear la factura en la base de datos, por lo que podríamos realizar actualizaciones adicionales.</li>
</ul>



<p class="wp-block-paragraph">Además de poder trabajar en cualquiera de estos dos instantes de tiempo, también podemos decidir si la acción que va a ejecutar SAP Business One debe ser finalmente ejecutada o no.</p>



<p class="wp-block-paragraph">Por ejemplo, en el caso de la creación de una factura de ventas podemos realizar una comprobación de alguna condición particular y en caso de que no se satisfaga, cancelar la creación de la factura en el sistema, modificar dicha factura, crear un borrador o cualquier otra cosa que cumpla con nuestros requisitos.</p>
<p>La entrada <a href="https://itop.es/blog/item/gestion-de-eventos-en-sap-business-one.html">Gestión de eventos en SAP Business One</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modificando la interfaz de usuario  de SAP Business One</title>
		<link>https://itop.es/blog/item/modificando-la-interfaz-de-usuario-de-sap-business-one.html</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 13 Aug 2013 00:00:00 +0000</pubDate>
				<category><![CDATA[ERP]]></category>
		<category><![CDATA[Interfaz de usuario]]></category>
		<category><![CDATA[SAPB1-Desarrollo]]></category>
		<guid isPermaLink="false">https://migracion.itop.es/?p=920</guid>

					<description><![CDATA[<p>Siempre es interesante poder modificar la UI (interfaz de usuario) para realizar tareas básicas de manera más sencilla.</p>
<p>En este post detallaremos en solo 3 acciones un ejemplo práctico y útil del tipo de cosas que podemos hacer.</p>
<p>La entrada <a href="https://itop.es/blog/item/modificando-la-interfaz-de-usuario-de-sap-business-one.html">Modificando la interfaz de usuario  de SAP Business One</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Aunque en la documentación de SAP B1 existen incontables ejemplos de cómo modificar la interfaz de usuario de SAP Business One, voy a exponer un pequeño ejemplo para exponer los pasos fundamentales en los que se basa el trabajo con la UI API (API de interfaz de usuario).</p>



<p class="wp-block-paragraph">Como ejemplo simple lo que haremos será añadir un botón al formulario de ofertas de venta y gestionaremos la pulsación de dicho botón para que se muestre el mensaje “Hola Mundo”. Para conseguirlo será necesario lo siguiente:</p>



<ol class="wp-block-list">
<li>Capturar el evento de carga del formulario de oferta de ventas</li>



<li>Añadir el botón al formulario de oferta de ventas</li>



<li>Gestionar la pulsación del botón para que muestre el mensaje “Hola Mundo” al ser pulsado.</li>
</ol>



<h2 class="wp-block-heading">1. Capturar el evento de carga del formulario de oferta de ventas</h2>



<p class="wp-block-paragraph">SAP Business One comunica a las aplicaciones de terceros “AddOns” los eventos que se producen en su interfaz antes y después de ejecutar la correspondiente acción.</p>



<p class="wp-block-paragraph">Así por ejemplo, al cargar un formulario de oferta de ventas, se notifica a las aplicaciones conectadas dicho evento antes de cargarse el formulario y después de haberse cargado.</p>



<p class="wp-block-paragraph">Además de esto, también es posible cancelar la ejecución de la acción correspondiente si el evento es capturado antes de dicha acción. Capturaremos el evento de carga de un formulario de “Oferta de ventas” mediante un código.</p>



<figure class="wp-block-image"><img decoding="async" src="images/Blog/ERP/Capturar-evento-carga-formulario--oferta-ventas-itop.png" alt=""/></figure>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">2. Añadir el botón al formulario de oferta de ventas</h2>



<p class="wp-block-paragraph">A efectos expositivos añadiremos el botón al formulario a través de código, aunque es posible y recomendable usar XML para modificar/crear cualquier elemento de la interfaz de usuario.</p>



<figure class="wp-block-image"><img decoding="async" src="images/Blog/ERP/Aadir-botn-formulario--oferta--ventas-itop.png" alt=""/></figure>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">3. Gestionar la pulsación del botón para que muestre el mensaje “Hola Mundo” al ser pulsado</h2>



<p class="wp-block-paragraph">Al pulsar el botón capturaremos el evento de pulsación ITEM_PRESSED y mostraremos el mensaje al usuario.</p>



<figure class="wp-block-image"><img decoding="async" src="images/Blog/ERP/Gestionar-pulsacin-botn--mensaje-Hola--Mundo-itop.png" alt=""/></figure>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image"><img decoding="async" src="images/Blog/ERP/boton-saludar-itop.png" alt=""/></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Este post sólo pretende ofrecer una idea sobre la capacidad de modificación de la interfaz de usuario de SAP Business One y de cómo se pueden realizar algunas tareas muy básicas.</p>
<p>La entrada <a href="https://itop.es/blog/item/modificando-la-interfaz-de-usuario-de-sap-business-one.html">Modificando la interfaz de usuario  de SAP Business One</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>5 consejos básicos de desarrollo sobre el SDK de SAP Business One</title>
		<link>https://itop.es/blog/item/5-consejos-basicos-de-desarrollo-sobre-el-sdk-de-sap-b1.html</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 16 Apr 2013 00:00:00 +0000</pubDate>
				<category><![CDATA[ERP]]></category>
		<category><![CDATA[consejos]]></category>
		<category><![CDATA[desarollo]]></category>
		<category><![CDATA[sap business one]]></category>
		<category><![CDATA[SAPB1-Desarrollo]]></category>
		<category><![CDATA[SDK]]></category>
		<guid isPermaLink="false">https://migracion.itop.es/?p=679</guid>

					<description><![CDATA[<p>En este post, hablaremos brevemente sobre el desarrollo usando el SDK de SAP Business One(DI API y UI API).</p>
<p>La entrada <a href="https://itop.es/blog/item/5-consejos-basicos-de-desarrollo-sobre-el-sdk-de-sap-b1.html">5 consejos básicos de desarrollo sobre el SDK de SAP Business One</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Probablemente estos consejos ya los tengáis en cuenta o no os hagan falta, pero en mi caso me hubiera gustado tenerlos asimilados al empezar a desarrollar. </p>
<p>1 Usar las herramientas disponibles en la DI API para modificar el contenido y/o el esquema de la base de datos.</p>
<p>Esto más que un consejo, se trata de una “ley”, puesto que como todos sabemos es una condición indispensable para que nuestros clientes no pierdan el soporte de SAP. Usando la DI API, tanto sus objetos de negocio como el objeto Recordset, debemos ser capaces de actualizar y leer la información de las tablas estándar y de nuestras propias tablas (UDTs) o nuestros campos (UDFs).</p>
<p>2 Dejar un log “claro” de los errores que se suceden en nuestro addon.</p>
<p>A la hora de corregir los errores que surgen a un usuario de nuestro addon, es de mucha ayuda el contar con una tabla UDT (por ejemplo) a la que podamos acceder para comprobar el estado de la pila de llamadas del addon en el momento de la excepción.</p>
<p>3 Usar siempre bloques try catch finally.</p>
<p>Debemos tratar de “blindar” nuestro código mediante el uso de bloques “try catch finally”, con el objetivo de que no se produzcan excepciones no controladas que provoquen la interrupción y desconexión de nuestro addon sin dar información al usuario.</p>
<p>Esta captura de excepciones es especialmente sensible a la hora de introducir datos, ya sea a través de la interfaz de usuario o a través de interfaces con otros sistemas.</p>
<p>4 Liberar los objetos COM cuando hayamos terminados de usarlos.</p>
<p>Supongamos que necesitamos usar un Recordset para ejecutar una determinada consuta. En el momento en que hayamos ejecutado dicha consulta y extraído la información necesaria, debemos liberar nuestro Recordset, haya o no ocurrido una excepción:</p>
<pre>Recordset rs = null;

try

{

rs = kernel.Company.GetBusinessObject(BoObjectTypes.BoRecordset) as Recordset;

rs.DoQuery("SELECT ...");

if (rs.RecordCount &gt; 0)

//Procesar la información del recordset

}

catch (Exception ex)

{

//Procesar la excepción y dejar log del error

}

finally

{

if (rs != null) //Liberamos el Recordset haya habido o no excepción

System.Runtime.Interop.Marshall.ReleaseComObject(rs);

}
</pre>
<p>5 Congelar y DESCONGELAR los formularios propios durante los momentos de refresco de la información. </p>
<p>Hay que tener en cuenta que si se produce una excepción durante el proceso también debemos descongelar nuestro formulario. Algo así podría valer:  </p>
<pre>Form oForm = null;

try

{

oForm = kernel.Application.Forms.ActiveForm;

oForm.Freeze(true);

//Trabajar con oForm para (por ejemplo)

//cargar información desde la base de datos

}

catch (Exception ex)

{

//Procesar la excepción y dejar log del error

}

finally

{

if (oForm != null) //Descongelamos el formulario haya habido o no excepción

oForm.Freeze(false);

} <br /><br /></pre>
<p><iframe src="//www.youtube.com/embed/PbDOw9q_CpE" width="560" height="314" allowfullscreen="allowfullscreen"></iframe></p>
<p>La entrada <a href="https://itop.es/blog/item/5-consejos-basicos-de-desarrollo-sobre-el-sdk-de-sap-b1.html">5 consejos básicos de desarrollo sobre el SDK de SAP Business One</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>UDF y búsquedas formateadas</title>
		<link>https://itop.es/blog/item/udf-busquedas-formateadas-sap-business-one.html</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 27 Dec 2012 00:00:00 +0000</pubDate>
				<category><![CDATA[ERP]]></category>
		<category><![CDATA[Interfaz de usuario]]></category>
		<category><![CDATA[SAPB1-Desarrollo]]></category>
		<guid isPermaLink="false">https://migracion.itop.es/?p=1021</guid>

					<description><![CDATA[<p>SAP Business one puede ser adaptado a las necesidades específicas de un cliente en particular de múltiples maneras. Estas posibilidades se podrían agrupar en:</p>
<ol>
<li>Uso de las múltiples opciones de parametrización estándar disponibles en el producto. Tomando determinadas decisiones durante la implantación, podemos configurar SAP Business One para que, por ejemplo, use como método de valoración de nuestro inventario, el criterio del peso medio variable o del último precio de compra.
</li>
<li>Se pueden agregar elementos a la base de datos estándar siguiendo las reglas definidas por SAP. Podemos crear nuevos campos (llamados campos UDF: user defined fields) que nos pueden ayudar a almacenar la información cómo y dónde el cliente necesita verla. También se pueden crear nuevas tablas (llamadas tablas UDT: user defined tables) e incluso crear nuevos objetos con determinadas funciones predefinidas que nos pueden facilitar la labor de desarrollar nuevos datos maestros o documentos (UDO: user defined objects). En este apartado podemos incluir la creación de búsquedas formateadas (formatted searches) que permiten asociar el resultado de una consulta SQL a un campo de la base de datos, de este modo podemos, por ejemplo, asociar una lista de valores a un campo, ya sea estándar o UDF, sin necesidad de desarrollo.
</li>
<li>Uso del kit de desarrollo (SDK) disponible para SAP Business One, pudiendo interactuar tanto con la base de datos a través de su interfaz de datos: DI API, o con la interfaz de usuario a través de la UI API</li>
</ol>
<p>La entrada <a href="https://itop.es/blog/item/udf-busquedas-formateadas-sap-business-one.html">UDF y búsquedas formateadas</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En este post me he planteado explicar un pequeño ejemplo que ilustre varias formas de conseguir que una empresa pueda conocer el saldo de un cliente, en el momento en el que se va a introducir en el sistema un pedido de ventas de dicho cliente.</p>



<p class="wp-block-paragraph">De forma estándar, una de las opciones podría consistir en seleccionar el cliente desde la pantalla de pedido, navegamos a sus datos maestros haciendo uso de la “flecha naranja” correspondiente y visualizamos el saldo en la parte superior derecha de sus datos maestros.&nbsp;&nbsp; Otra opción estándar es “parametrizar” nuestra lista de selección de clientes del pedido (conocida como ChooseFromList) para que ya incluya el saldo de todos los clientes disponibles en nuestra base de datos.</p>



<p class="wp-block-paragraph">Otra opción podría ser añadir un campo nuevo al documento de pedido (campo UDF) y asignar una búsqueda formateada a dicho campo para que se actualice con la selección del cliente y muestre el saldo de forma automática.</p>



<p class="wp-block-paragraph">Para lograr esto seguiremos los siguientes pasos:</p>



<p class="wp-block-paragraph">1. Creación de un nuevo campo UDF para los documentos de pedido:&nbsp; Introducimos la siguiente información para nuestro nuevo campo:&nbsp; Podemos comprobar que nuestro campo ha sido creado, si abrimos un nuevo pedido y nos aseguramos de tener activada la opción de visualizar campos definidos por el usuario&nbsp;</p>



<p class="wp-block-paragraph">2. Crear la consulta SQL que nos permita extraer el saldo de un cliente determinado.</p>



<p class="wp-block-paragraph">3. Una vez hemos creado nuestra consulta SQL, la grabaremos en el Query Manager, pero antes de ello sustituiremos el valor del criterio de filtrado “CARDCODE=C30000” por el valor de código de cliente que procederá del documento de pedido. Esto lo podemos lograr haciendo uso de la etiqueta $ que nos permitirá acceder a valores del documento que se está usando y aún no han sido almacenado en la base de datos. En este caso necesitamos el campo CardCode, de la tabla ORDR. Por lo tanto lo sustituiremos en nuestra consulta.</p>



<p class="wp-block-paragraph">4. Asignaremos nuestra búsqueda formateada al campo UDF creado y haremos que se actualice automáticamente al seleccionar un nuevo cliente desde pedido:&nbsp; Pulsamos “Shift + F2” desde “Saldo cliente” y seleccionamos las siguientes opciones:&nbsp;</p>



<p class="wp-block-paragraph">Con esto habremos conseguido que tras seleccionar un cliente en nuestros documentos de pedido, se cargue automáticamente su saldo en nuestro nuevo campo “Saldo IC”.</p>



<p class="wp-block-paragraph">Esto ha sido un pequeño ejemplo de uso de las posibilidades de personalización de SAP Business One.</p>
<p>La entrada <a href="https://itop.es/blog/item/udf-busquedas-formateadas-sap-business-one.html">UDF y búsquedas formateadas</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Desactivación y activación temporal de filtros</title>
		<link>https://itop.es/blog/item/desactivacion-activacion-temporal-filtros-sap-business-one.html</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 06 Jul 2011 00:00:00 +0000</pubDate>
				<category><![CDATA[ERP]]></category>
		<category><![CDATA[activación]]></category>
		<category><![CDATA[desactivación]]></category>
		<category><![CDATA[filtros]]></category>
		<category><![CDATA[sap business one]]></category>
		<category><![CDATA[SAPB1-Desarrollo]]></category>
		<guid isPermaLink="false">https://migracion.itop.es/?p=763</guid>

					<description><![CDATA[<p>Es posible limitar el número de eventos que SAP Business One envía a nuestro addon para su gestión.</p>
<p>Limitar el número de eventos que recibe nuestro addon permite que aquellos eventos que no necesiten ser gestionados, no empeoren el rendimiento de la aplicación y por lo tanto mejore la experiencia del usuario.</p>
<p>La entrada <a href="https://itop.es/blog/item/desactivacion-activacion-temporal-filtros-sap-business-one.html">Desactivación y activación temporal de filtros</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Es posible que sea interesante en algún momento desactivar el envío de eventos de SAP B1 a nuestra aplicación, realizar alguna labor y volver a activar el envío de eventos.</p>
<p>Este tipo de estrategias suele resultar adecuado cuando gestionamos con nuestro addon diferentes eventos que están relacionados y que pueden causar efectos colaterales no deseados.</p>
<p>Para poder desactivar y activar temporalmente los filtros haremos uso de XML y de los métodos presentes en la clase de la UI API <em>Application</em> 1. En el constructor de nuestra clase.</p>
<p>La variable «filtros» ha sido declarada globalmente a la clase: <code>private EventFilters filtros;</code> En el lugar donde desactivemos y activemos los filtros escribiremos.</p>
<p>El método setFiltros() contiene este código.</p>
<p>Usando esta estrategia podemos centrarnos en gestionar los eventos que nos interesan sin preocuparnos por la recepción accidental de otros en nuestro addon.</p>
<p>La entrada <a href="https://itop.es/blog/item/desactivacion-activacion-temporal-filtros-sap-business-one.html">Desactivación y activación temporal de filtros</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Búsqueda eficiente en Control «matrix»</title>
		<link>https://itop.es/blog/item/busqueda-eficiente-control-matrix-sap-business-one.html</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 26 May 2011 00:00:00 +0000</pubDate>
				<category><![CDATA[ERP]]></category>
		<category><![CDATA[Canarias]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[control matrix]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[sap business one]]></category>
		<category><![CDATA[SAPB1]]></category>
		<category><![CDATA[SAPB1-Desarrollo]]></category>
		<guid isPermaLink="false">https://migracion.itop.es/?p=716</guid>

					<description><![CDATA[<p>Entre mis pruebas usando el SDK de SAP Business One, he estado intentando averiguar la forma más eficiente para buscar y seleccionar dentro de un control “matrix” (cargado usando dbdatasources) una fila que cumple un criterio específico.</p>
<p> La idea era replicar el formulario de Listas de precios del estándar añadiendo dos columnas para vincular a los artículos, además de los precios, dos descuentos que se usarán a nivel de línea en los documentos.</p>
<p>La entrada <a href="https://itop.es/blog/item/busqueda-eficiente-control-matrix-sap-business-one.html">Búsqueda eficiente en Control «matrix»</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Es decir, tenemos una matriz con información de precios de artículos (replicando el formulario del estándar para las listas de precios), tenemos un edittext para hacer búsquedas en la matriz (al igual que el estándar), introducimos un código de artículo en el edittext y pulsamos en un botón de buscar para realizar una búsqueda del código de artículo en la matriz de forma eficiente.</p>
<p> En mi caso estaba tratando con cerca de 2400 registros que se cargan velozmente usando el método del control Matrix: ”loadfromdatasource”. A continuación expongo mis experiencias:</p>
<ul>
<li>El óptimo sería usar el dbdatasource de la columna por la que queremos buscar para hacer un query(conditions) con el valor que tenemos y seleccionar en la matriz la fila que se corresponde con el valor seleccionado en el dbdatasource. Pude comprobar que el query(conditions) tarda un tiempo despreciable para encontrar cuál es la línea del dbdatasource adecuada.
<p> El problema es que una vez encontrada la línea del dbdatasource que se está buscando no hay forma de saber con qué línea del control Matrix se corresponde. Por lo tanto, para poder saber la línea de la matrix que debía marcar, me dispuse a cargar en el dbdatasource la información de índice de cada fila. Esto lo hice de dos maneras:</li>
</ul>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Con un datatable de los de ado .net: Tardaba 44 segundos en cargar el formulario después de haber ejecutado el loadfromdatasource.
</li>
<li>Usar arraylist cargado en el momento del form también retrasa la carga demasiado (en comparación con loadfromdatasource):</li>
</ul>
</li>
</ul>
<p>Código usado:</p>
<pre lang="csharp">Form f = kernel.cargarForm("XML\ITOP_PRECIOS.xml", "ITOP_PRECIOS" + FormUID);
   inicializarFormItopDtos(f, lista);
   DateTime antes = DateTime.Now;
   ArrayList listaAux = new ArrayList();
   for (int i = 0; i &lt; f.DataSources.DBDataSources.Item("ITM1").Size; i++) {
      listaAux.Add(i);
   }
   TimeSpan tarda = DateTime.Now - antes;
   kernel.Application.MessageBox("Tarda: " + tarda.TotalSeconds.ToString(), 0, "", "", "");</pre>
<p>Resultado carga form rellenando arraylist:</p>
<p>Rellenando un userdatasoure y usando mtx.addRow() en lugar de loadfromdatasource: Tardaba 74 segundos en cargar el formulario.</p>
<ul>
<li>Después de los resultados anteriores (Carga de formulario demasiado lenta) me planteé desechar la búsqueda con Query(conditions), por lo que llegué a estas dos alternativas:</li>
</ul>
<ul>
<li style="list-style-type: none;">
<ul>
<li>Búsqueda por ui api en la matrix…. Opción demasiado lenta.</li>
<li>Búsqueda en los datasources: Lo mejor que he encontrado. Haciendo una búsqueda secuencial en la columna que corresponda del dabdatasource adecuado se obtienen unos resultados muy buenos con los 2400 registros:
<ul>
<li>Último registro (empieza por f)</li>
<li>Registro no existente</li>
<li>Registro intermedio.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>El código usado es el siguiente:</p>
<pre lang="csharp">private void seleccionarFila(Matrix mtx, DBDataSource dbds, string columna, string codigoABuscar, string celdaFocoDestino) {
   int i = 0;
   DateTime antes = DateTime.Now;
   while ((i &lt; dbds.Size) &amp;&amp; (!dbds.GetValue(columna, i).Trim().StartsWith(codigoABuscar)))
   i++;
   if (i &lt; dbds.Size) {
      mtx.SelectRow(i + 1, true, false);
      mtx.Columns.Item(celdaFocoDestino).Cells.Item(i + 1).Click(BoCellClickType.ct_Regular, 0);
   }
   else
   kernel.Application.MessageBox("Código: " + codigoABuscar + " no encontrado", 1, "", "", "");
   TimeSpan tarda = DateTime.Now - antes;
   kernel.Application.MessageBox("Tarda: " + tarda.TotalSeconds.ToString(), 0, "", "", "");
}</pre>
<p>La entrada <a href="https://itop.es/blog/item/busqueda-eficiente-control-matrix-sap-business-one.html">Búsqueda eficiente en Control «matrix»</a> se publicó primero en <a href="https://itop.es">Itop</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
