jueves, 10 de noviembre de 2016

ACTUALIZAR DATOS SAP B1 SDK DI API C# objetos


        SAPbobsCOM.Company MiconexionCatalogo = new SAPbobsCOM.Company();/*se usa para las empresa que es la principal*/
   public void Actualizar_Sincronizado(string Objeto,string Codigo,string userSAP,string passSAP)
        {
            SAPbobsCOM.Company MiconexionCatalogo = new SAPbobsCOM.Company();
            MiconexionCatalogo.CompanyDB = "PRINCIPAL";
            MiconexionCatalogo.DbUserName = "USERBD";
            MiconexionCatalogo.DbPassword = "PASSWORD";
            MiconexionCatalogo.UserName = "ManagerSAP";/*userSAP;usuario SAP*/
            MiconexionCatalogo.Password = "ADMIN";/*passSAP;Password SAP*/
            MiconexionCatalogo.Server = "LOCALHOST";
            MiconexionCatalogo.DbServerType = SAPbobsCOM.BoDataServerTypes.dst_MSSQL2005;
            if (Objeto=="SN" )
            {
                if (MiconexionCatalogo.Connect() != 0)
                {
                    RtxtLog.Text = RtxtLog.Text + "Error al Conectar a SAP: " + Miconexion.GetLastErrorDescription().ToString() + "\n";
                }
                else
                {
                    SAPbobsCOM.BusinessPartners Socio;
                    Socio = (SAPbobsCOM.BusinessPartners)MiconexionCatalogo.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners);
                    Socio.GetByKey(Codigo);
                    Socio.UserFields.Fields.Item("U_dato").Value = 1;
                    Socio.Update();
                }
                MiconexionCatalogo.Disconnect();
            }
            else if(Objeto=="Art")
            {
                if (MiconexionCatalogo.Connect() != 0)
                {
                    RtxtLog.Text = RtxtLog.Text + "Error al Conectar a SAP: " + Miconexion.GetLastErrorDescription().ToString() + "\n";
                }
                else
                {
                    SAPbobsCOM.Items Articulo;
                    Articulo = (SAPbobsCOM.Items)MiconexionCatalogo.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oItems);
                    Articulo.GetByKey(Codigo);
                    Articulo.UserFields.Fields.Item("U_dato1").Value = 1;
                    Articulo.Update();
                }
                MiconexionCatalogo.Disconnect();
            }
            else if(Objeto=="Agente")
            {
                if (MiconexionCatalogo.Connect() != 0)
                {
                    RtxtLog.Text = RtxtLog.Text + "Error al Conectar a SAP: " + Miconexion.GetLastErrorDescription().ToString() + "\n";
                }
                else
                {
                    SAPbobsCOM.SalesPersons Agente;
                    Agente = (SAPbobsCOM.SalesPersons)MiconexionCatalogo.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oSalesPersons);
                    Agente.GetByKey(Convert.ToInt32(Codigo));
                    Agente.UserFields.Fields.Item("U_Dato").Value=1;
                    Agente.Update();
                }
                MiconexionCatalogo.Disconnect();
            }
        }
        private void eventLog1_EntryWritten(object sender, System.Diagnostics.EntryWrittenEventArgs e)
        {
        }
    }

PROGRAMAR AGREGAR DIRECCIONES BUSINESS PARTNER SAP B1 DI API C#

                        /*para agregar direcciones que exista en el cliente*/
                        sqlconAddress.Open();
                        string sQueryAddress;
                        sQueryAddress = "SELECT [Address], [CardCode], [Street], [Block], [ZipCode], [City], [Country]," +
                         "[State],[LineNum],[TaxCode],[AdresType] FROM CRD1 WHERE CardCode='" + CardCode + "' ORDER BY LineNum";
                        SqlCommand cmdAddress;
                        SqlDataReader drAddress;
                        cmdAddress = new SqlCommand(sQueryAddress, sqlconAddress);
                        drAddress = cmdAddress.ExecuteReader();
                        if (drAddress.HasRows)
                        {
                            while (drAddress.Read())
                            {
                                MiSocio.Addresses.Add();
                                MiSocio.Addresses.SetCurrentLine(Convert.ToInt32(drAddress["LineNum"].ToString()));
                                MiSocio.Addresses.AddressName = drAddress["Address"].ToString();
                                MiSocio.Addresses.Street = drAddress["Street"] == null ? string.Empty : drAddress["Street"].ToString();
                                MiSocio.Addresses.Block = drAddress["Block"] == null ? string.Empty : drAddress["Block"].ToString();
                                MiSocio.Addresses.Country = drAddress["Country"].ToString();
                                MiSocio.Addresses.ZipCode = drAddress["ZipCode"] == null ? string.Empty : drAddress["ZipCode"].ToString();
                                MiSocio.Addresses.City = drAddress["City"].ToString();
                                MiSocio.Addresses.State = drAddress["State"] == null ? string.Empty : drAddress["State"].ToString();
                                MiSocio.Addresses.TaxCode = drAddress["TaxCode"] == null ? string.Empty : drAddress["TaxCode"].ToString();
                                switch (drAddress["AdresType"].ToString())
                                {
                                    case "B":
                                        MiSocio.Addresses.AddressType = BoAddressType.bo_BillTo;
                                        break;
                                    case "S":
                                        MiSocio.Addresses.AddressType = BoAddressType.bo_ShipTo;
                                        break;
                                }
                            }
                        }
                        drAddress.Close();
                        sqlconAddress.Close();
                        /*termina de agregar direcciones*/
                        /*para agregar Agentes que exista en el cliente*/

EJEMPLO SUBIR CONTACTOS SAP B1 SDK DI API EN C#

SAPbobsCOM.BusinessPartners MiSocio;
         MiSocio = (SAPbobsCOM.BusinessPartners)Miconexion.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oBusinessPartners);
                    SAPbobsCOM.BPAddresses Direcciones;
                    Direcciones =MiSocio.Addresses;          

sqlconContact.Open();
                        string sQueryContact;
                        sQueryContact = "SELECT [CardCode], [Name], [Position], [Address], [Tel1], [Tel2], [Cellolar], [Fax], [E_MailL], [Pager],"+
                            "[Notes1], [Notes2], [Password], [BirthPlace], [Gender], [Profession], [BirthCity], [Active] FROM OCPR WHERE CardCode='"+CardCode+"'";
                        SqlCommand cmdContact;
                        SqlDataReader drContact;
                        cmdContact = new SqlCommand(sQueryContact, sqlconContact);
                        drContact = cmdContact.ExecuteReader();
                        if (drContact.HasRows)
                        {
                            int registro = 0;
                            while (drContact.Read())
                            {
                                MiSocio.ContactEmployees.Add();
                                MiSocio.ContactEmployees.SetCurrentLine(registro);
                                MiSocio.ContactEmployees.Name = drContact["Name"].ToString();
                                MiSocio.ContactEmployees.Pager = drContact["Pager"] == null ? string.Empty : drContact["Pager"].ToString();
                                MiSocio.ContactEmployees.Remarks1 = drContact["Notes1"].ToString();
                                MiSocio.ContactEmployees.Remarks2 = drContact["Notes2"].ToString();
                                MiSocio.ContactEmployees.Phone1 = drContact["Tel1"].ToString();
                                MiSocio.ContactEmployees.Phone2 = drContact["Tel2"].ToString();
                                MiSocio.ContactEmployees.Address = drContact["Address"].ToString();
                                MiSocio.ContactEmployees.Position = drContact["Position"].ToString();
                                MiSocio.ContactEmployees.MobilePhone = drContact["Cellolar"].ToString();
                                MiSocio.ContactEmployees.E_Mail = drContact["E_mailL"].ToString();
                                switch(drContact["Active"].ToString())
                                {
                                    case "Y":
                                        MiSocio.ContactEmployees.Active = BoYesNoEnum.tYES;
                                        break;
                                    case "N":
                                        MiSocio.ContactEmployees.Active = BoYesNoEnum.tNO;
                                        break;
                                }
                                registro++;
                            }
                        }
                        drContact.Close();
                        sqlconContact.Close();

EJEMPLO RELLENAR UN LISTBOX DESDE UNA VISTA SQL

      rellenar_list_box("SincroSN", LstClte, "Cardcode");



 public void rellenar_list_box(string vista,ListBox namelist,string campo)/*Rellena los listbox de articulos, agentes y socios*/
        {
            sqlcon = new SqlConnection("server=localhost;Initial Catalog=principaBD;uid=VISTA;pwd=****");
            sqlcon.Open();
            string sQuery;
            sQuery = "SELECT * from "+vista+"";
            SqlCommand cmd;
            SqlDataReader dr;
            cmd = new SqlCommand(sQuery, sqlcon);
            dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                namelist.Items.Add(dr[campo].ToString());
            }
            dr.Close();
            sqlcon.Close();
        }

TRANSACCIONES SAP B1

case when t0.transtype=18 or t0.transtype=19 then 'Servicios Tours' end as 'cod art',
case when t0.transtype=18 then 'Factura Servicios'
when t0.transtype=19 then 'Nota de Crédito'
when t0.transtype=30 then 'A/D Reclasificacion'
when t0.transtype=-3 then 'saldos finales'
when t0.transtype=59 then 'entrada de mercancía'
when t0.transtype=46 then 'pago de aceredor'
when t0.transtype=20 then 'Entrada de mercancía op'
else t0.transtype end as 'descripcion',

pedido en ordenes
oitm
articulos
maximos
minimos
consumo en el mes (suma total salidas)
pedidos articulo
suma total de stock, actual.
15--entrega
16--devoluciones
13--Factura de deudores
14--nota de crédito de clientes
132--Factura de correccion

20--Entrada de mercancias
21--Devolucion de mercancias
18---Factura de proveedores
19--nota de crédito proveedores

-2 -- saldo incial
58--actualizacion de stock
59--Entrada de mdercancias
67--traslados
68--instrucciones de produccion

-1 -- Transaccion (todas)
162 -- Revalorizacion de inventario
69-- Precio al desembarque

COMANDOS MAS USADOS SQL

COLLATE Latin1_General_CI_AS // cuando el lenguaje cambia de una bd a otra y queremos comparar datos entre ellas.

CONVERT (TIPODATO,DATO).


DATEDIFF(D,FECHA1,FECHA2) >1


ISNULL(dato,0)  //cuando un valor de el datos es nulo, lo pone en 0.

DATENAME(dw,FECHA) DW NOMBRE DIA,MONTH MES,

DATEPART(DAY, FECHA) ordinal del día 1, 2,3,4,



CONEXIONES ELIMINAR DE LA BD SQL SERVER

USE master
GO

SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''

Set @DBName = 'pruebasres'
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)

IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END

LINKEAR SERVIDORES SQL

sp_linkedservers



 EXEC sp_addlinkedserver
   @server='cadsap',
   @srvproduct='',
   @provider='SQLNCLI10',
   @datasrc='SERVER'


   SELECT top 10 * FROM [SERVER].[BDPRINCIPAL].[dbo].[ocrd]
   where registrationDAte >= '20130814'

EJEMPLO DE CURSORES SQL SERVER (CUANTO EXISTE TRIGGER EN LA TABLA)



DECLARE @id_venta int
 DECLARE venta_cursor CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR
select convert(int,Vista_Aux.dbo.Maestro.Observaciones)
from Vista_Aux.dbo.Maestro;


OPEN venta_cursor

FETCH NEXT FROM venta_cursor
INTO @id_venta

WHILE @@FETCH_STATUS = 0
BEGIN
 UPDATE Ventas
set
ventas.id_cajero=1,
ventas.fecha=m.fechaticket,
ventas.descuento=m.descuentototal,
ventas.tipo_de_cambio=m.tc,
ventas.status_pago=1
from ventas as v
inner join Vista_Aux.dbo.Maestro as m on v.id_venta=convert(int,m.Observaciones)
where  v.id_venta=@id_venta
    FETCH NEXT FROM venta_cursor
    INTO @id_venta
END
CLOSE venta_cursor;
DEALLOCATE venta_cursor;

ECLARE @id_dev char(10)
 DECLARE dev_cursor CURSOR FOR  
SELECT [id_venta]
  FROM [Vista_Aux].[dbo].[Devoluciones];
 
OPEN dev_cursor
 
FETCH NEXT FROM dev_cursor  
INTO @id_dev
 
WHILE @@FETCH_STATUS = 0
BEGIN
 UPDATE Ventas
set status_pago=-1
where id_venta=@id_dev
    FETCH NEXT FROM dev_cursor  
    INTO @id_dev
END  
CLOSE dev_cursor;
DEALLOCATE dev_cursor;


jueves, 23 de julio de 2015

Administering microsofot SQL SERVER databases notas 20462


nota dia 1.


SYSTEM CONFIGURATION CHECKER , (CHECQAR LA PC)
INSTALL UPGRADE ADVISOR.
SERVIDOR DE SQL STAND ALONE INSTALLATIN OR CARACTERISTICA
FILE STREAM
inplace upgrade,planchado.
veritifcar que los servicios sql esten corriendo
en caso de que esten fallando setup bootstrap \lap
  
379

notas 2

integrated services
analizes services
reporting services

OTLP procesamiento para transacciones en linea.
insert , delete, update.
tipo de bases de datos.
select

llave primaria.
NORMALIZAR, separar la información en entidades.
y mantenerla unidas en relaciones.


notas  3.


proceso de ETL.
EXTRACT/TRANSFORM/LOAD
COPIAR O MOVER ENTRE SERVIDORES
EXPORTING QUERY DATA TO A FILE
IMPORTAING TABLA DATA FROM A FILE.
TRANSFORMAR ESTRUCTURA DE DATOS.

import and export wizard
sql server integration services
bulk copy program
BULK INSERT
OPEN ROWSET (BULK)
IMPROVING THE PERFORMANCE OF DATA TRANSFERS
DESHABILITARLOS CONSTRAINTS, INDICES Y TRIGGERS
MINIMIZAR LOS BLOQUEOS.
 CONSIDERAR EL USO DE TABLOCK TO SPEED UP THE IMPORT
SE RECOMIENDA QUE LA BASE DE DATOS ESTE BULK_LOGGED or SIMPLE

bulk insert , de archivo de txt a sql, pero no de sql a txt.
bcp si.

componente principales del SSIS
control flow
data flow


monitorear nuestro servidor SQL
performance monitor.

select * from sales.customer with (nolock).


set lock_timeout 2000
sp_lock para ver bloqueos.

select * from sys.dm_
sp_who
sp_who2 mas datos.
sp_helpdb, cuantas bases de datos.

profiler , toda la actividad //ocupa interfaz grafica
sql traces atraves de comando
profiler en pruebas
traces en servidor
tuning adivosr analiza carga de trabajo, contra una bd de datos.
recomendaciones de como mejorar querys.


modulo no. 9 , seguridad de SQL
autenticacion. validar que esa persona sea la que dice ser.
un password y un usuario.
autorizacion.que es lo que puede hacer con los recursos que tenemos.

autenticacion
windows
mixto

login ,... windows
login sql .. no es necesario que exista en windows.
login para un grupo.
opoliticas de password
son las politicas de AD
login a nivel de servidor

roles de servidor.
apartir de 2012 se pueden crear roles de servidor.
-login// conectarse servidor
-crear usuario//conectarse a la bd.
en la bd carpeta seguridad.
dbo /sysadmin
guest/deshabilitada predeterminada.
roles de bd.
*db_owner // puede hacer todo.
*db_backupoperator//respaldos de esa bd.
*db_datareader // select de todas las tablas y vistas
*db_datawriter // delete e insert, update.

roles , forma de agrupar usuarios para asignarle permisos.
permisos ( grant , deny, revoke)
siempre cuando se contrapongan permisos va a ser deny, la más
restrictiva la que gana.
los permisos a nivel de columna sobreescriben sobre las columnas.
execute.
databaseroles..
with grant// hacer select y otorgar permisos.
//revoke en cascada y quitar permisos a quienes se los había dado.
esquema sirve para agrupar objetos.
dentro de un esquema se pueden agrupar tablas.
dbo. esquema default.

role batman ---necesita tener permisos sobre esquemas.
servidor.db.schema.objeto

resolución de nombres. select * from ventas.t1
 si no tienes resolucion de nombre.
esquema busca primero en equema del usuario
 y luego en el default.
create server role application admin
go
alter server role application_admin
add member [adventureworks\database_manager]
go
GRANT ALTER ANY LOGIN TO APPLICATION_ADMIN;
GRANT VIew
------------------------------------------
auditoria acceso a datos y encriptar...
auditoria apartir 2008
-common criteria auditing
-SQL TRACE
-DML TRIGGERS
-SQL SERVER AUDIT

*COMMON CUANDO SE NECESITA ISO
*HABILITAR COMMON CRITERIA...
PROPIEDADES
SECURITY /HABILITAR C2 AUDIT TRACING
SECURITY /ENABLE COMMON CRITERIA

*SQL SERVER PROFILER IS USED TO TRACE
SENT TO THE SERVER AND ERRORS RETURNED
TRIGGERS DISPARADORES INSERT,DELETE O UPDATE.
-DML.--DATA MANIPULATION DATA.
-DDL ,CREATE ,ALTER, DROP (LANGUAGE DEFINATION), TABLAS.
LIMITACIONES..
PERFORMANCE IMPACT
DESHABILITAR TRIGGER
NO AUDITA SELECT
PUEDE HABER PROBLEMAS TRIGGER.

SQL SERVER AUDIT ( APARTIR DE 2008)
AUDIT, ESPECIFICACIONES, ACCIONES Y GRUPO DE ACCIONES.

security audit /bd
nombre, delay,(no puede registrar el evento)fai operation
---------------------------------------------------------
encriptar bases de datos
llave maestra //encriptan
transparent date encryption

create master key encryption by password =''
create certificate servercertificate with subject =''

create database encryption key
with algorithm =AES_128
encryption by server certificate servercertificate

alter database curso
set encryption on

backup certificate servercertificate to file='C:\SEG\SERVERCERT.CER'
WITH PRIVATE KEY (FILE ='C:\SEG\AW.PVK' , ENCRYPTION BY PASSWORD='')
integridad en las bases de datos.
planes de mantenimiento.

constrainst  -- validar un tipo de dato.

integridad fisica a nivel de disco.
integridad a nivel logico.
DBCC CHECKDB DATABASENAME
should be run frequently
opciones de reparación.
no es lo ideal, puede haber perdida de datos.
repair_rebuild
repair_allow_data_loss
single user, procesos para reparar con check dbcc
table scan
SQL SERVER READS ALL DATA PAGES
INDEX
  SQL SERVER USES INDEX PAGES TO FIND ROWS.
CLUSTERED INDEX Y NONCLUSTERED. EN UNA TABLA SOLO 1 INDICE TIPO CUSTLER.
999 INDICES NONCLUSTERED
INDICES OPTIMIZAR BÚSQUEDAS..
EN TABLAS PEQUEÑAS NO CONVIENE GENERAR INDICES.
MANTENIMIENTO.
SE FRAGMENTAN, SE SEPARA.

SYS.DM_DB_INDEX_PHYSICAL_STATS
QUE TAN FRAGMENTADO ESTA UN INDICE..
FRAMENTACION DE UN 30% HACIA ARRIBA , RECONSTRUIR.
FRAGMENTACION ES -30% REORGANIZAR.
REBUILD O REORGANIZER.




 

viernes, 17 de julio de 2015

error cuando trata de abrir un tipo de archivo bloqueado por la configuración de la directiva de Registro en Word

abrir opciones y luego ir a opciones/centro de confianza/ configuración de confianza/configuración de bloqueo de archivos y desde ahí desmarcar la versión.
https://support.microsoft.com/es-mx/kb/922849 mas amplia información para office 2013 y office 2007, este último tienes que entrar al registro de Windows.

jueves, 16 de julio de 2015

permisos para usar Debugger sql error SQL Debugging: Unable to start T-SQL Debugging. Could not attach to SQL Server process

Cuando no puedes usar el debugger de SQL  necesitas agregar este query en MSSQL. para poder tener permisos de sysadmin en security. SQL SERVER 2008

sp_addsrvrolemember 'Domain\Name', 'sysadmin'
 
habilitar puerto TCP 135.

jueves, 5 de marzo de 2015

ejemplo funcion lookup reporting services

para poder comparar la información dentro de dos bases de datos diferentes sin tener que utilizar un stored procedure en alguna de las dos bases de datos se puede utilizar La función LOOKUP.

esta función es muy buena cuando necesitas por ejemplo de una base enlazar a la información de otra base de datos.

la sintaxis es la siguiente:

Lookup(source_expression, destination_expression, result_expression, dataset)
Sus parámetros corresponden:


source_expression
(Variant) Una expresión que se evalúa en el ámbito actual y que especifica el nombre o la clave que se buscará. Por ejemplo, =Fields!ProdID.Value.
destination_expression
(Variant) Una expresión que se evalúa para cada fila de un conjunto de datos y que especifica el nombre o la clave que se hará coincidir. Por ejemplo, =Fields!ProductID.Value.
result_expression
(Variant) Una expresión que se evalúa para la fila del conjunto de datos donde source_expression = destination_expression y que especifica el valor que se recuperará. Por ejemplo, =Fields!ProductName.Value.
dataset
Una constante que especifica el nombre de un conjunto de datos del informe. Por ejemplo, "Productos".

 el ejemplo es que cuando quiero comparar las ventas que extraigo de una base de datos ajena a la base de datos contable quiero comparar que todo sea correcto.

las líneas blancas y las líneas rojas son diferentes bases de datos, los dataset están del lado izquierdo.

de hecho comparo tres bases de datos, para esto también verifico el scope o el agrupado del matrix de cada uno de ellos.
las expresiones quedan así.

=IIF(Fields!empresa.Value="CD0",Lookup(Fields!Tienda.Value,Fields!TIENDA.Value, Fields!DocTotalFC.Value, "cadacad"),Lookup(Fields!Tienda.Value,Fields!TIENDA.Value,Fields!DocTotalFC.Value, "cajaadv"))

en mi primer nivel esta la empresa, en el segundo es es la tienda.

Me funciono perfecto únicamente que ya a nivel de detalle tendría que tener otra consulta para hacerlo línea por línea el lookup.


Espero que este ejemplo le pueda servir a alguien.