jueves, 12 de septiembre de 2019

Ejecutar script sql desde cmd

Bienvenidos a este blog, esta semana les quiero compartir otro ejemplo de archivos BAT para ejecutar una consulta a una base de datos SQL con la instrucción sqlcmd.

El comando sqlcmd es de Microsfot y nos funciona para ejecutar consultas desde un archivo esta es la definición que da Microsoft
La utilidad sqlcmd es una utilidad de la línea de comandos para la ejecución ad hoc e interactiva de instrucciones y scripts de Transact-SQL y para la automatización de tareas de scripting de Transact-SQL. Para usar sqlcmd interactivamente, o para compilar archivos de script que se ejecutan mediante sqlcmd, los usuarios deben estar familiarizados con Transact-SQL. La utilidad sqlcmd se usa normalmente de las formas siguientes:

Ejemplo:


Objetivo: Ejecutar un query a una base de datos para obtener las facturas timbradas a clientes y crear un archivo csv de salida y alojarlo en una carpeta

Código

Necesitamos 2 archivos

Uno que sea el archivo BAT en mi caso lo llame sqltimbrados.bat  y dentro las siguientes lineas

sqlcmd -i C:\CFDIxml\SAT3.3\UUID_QAD\sqljob.sql -o W:\einvoicemx\folios.csv
if errorlevel 1  

echo == An error occurred


la primera linea es para que llame el comando sqlcmd al archivo que contiene el query o consulta a sql y con el parametro -o le indicamos que deje la salida al archivo folios.csv en una unidad mapeada en la computadora así que no solo pueden dejar archivos en su propia computadora puede ser en alguna otra maquina en la que estén en red. 

Archivo 2 es donde esta la consulta a la base de datos el archivo lo llame sqljob.sql y contiene lo siguiente

SELECT FolioSAT, ',' ,
  (CONVERT(varchar(10),year(FechaComprobante))+'/'+ serie + folio) as factura
FROM [ASFacturaCloud].[dbo].[Comprobante] 
WHERE esprueba = 0 AND
( confirmacion IS NULL OR 
confirmacion = '' )
;
UPDATE [ASFacturaCloud].[dbo].[Comprobante] SET Confirmacion = 'EXPORTED-TO-QAD'
WHERE esprueba = 0 AND 
AND  ( confirmacion IS NULL OR 
confirmacion = '' ) 

;




En mi consulta esta dividido en 2 partes, la primera es el query para obtener los datos y en la segunda un update para marcar que registros leyó el query para no volverlo a tomar.

En el primer select obtengo 3 columnas, el folio del SAT, el folio de la factura como lo requiero que es concatenando o uniendo el Año de timbrado más "/" una diagonal , mas la serie, mas el folio y a ese campo le llamo Factura, el archivo de salida se ve así





Adicional a estos 2 archivos, configure una tarea programada para ejecutar el archivo bat de manera diaria, de esta forma tengo un proceso automático, que podría haberse realizado también con un store procedure en la base de datos y crear un Job en la Base de datos, pero como tengo SQL Server Express no tengo la función de Job, así que me parece una muy buena alternativa la que les mostré. 



Usos de este script, puede ser para generar respaldos de la base de datos, para enviar información a otro sistema mediante una red mapeada, generar consulta de información para reportes. 

Espero les sea de utilidad este post y nos compartan, nos leemos la próxima semana. 

martes, 3 de septiembre de 2019

Como programar en Java

Bienvenidos a un nuevo post de nuestro blog, vamos a platicar acerca de Java uno de los lenguajes de programación más populares del mundo, creo que me atrevería a decir que por lo menos hemos tenido contacto con un programa de Java en nuestro día.



Java es un lenguaje orientado a objetos con muchas librerías, hay programas en Páginas WEB, en dispositivos mobiles, en celulares, en tablets, en aviones, en camiones de pasajeros, en televisiones smart tv, etc. ...

Este lenguaje es de Sun Microsoft (Oracle) y fue lanzado en 1995

Cabe mencionar que no es lo mismo Java que Javascript, son lenguajes diferentes si tienen cosas parecidas pero no es el mismo concepto ni la misma forma de programación. 

Para programar Java, necesitamos instalar el kit de Java o JDK https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html y cuando yo aprendí a programar utilice el IDE de Eclipse y Netbeans y recientemente instale Android Studio para preparar otro post en este blog hay otros más como Jdeveloper y JCreator.

Bueno y porque usaba Eclipse, esto es porque primero que nada es gratuito es decir no hay que pagar licencia, te permite descargar varios plugins que sirven para facilitarte el proceso de programación, se pude simular aplicaciones móviles, puedes programar otros lenguajes y al igual que Delphi para pascal el tema de crear ventanas, botones es mucho más fácil que hacerlo sin ver las pantallas, te permite dar formatos especiales hay plugins que le dan texturas especiales, etc.


Ejemplo enviar mail con Java

Vamos a trabajar con el IDE Ecplise 


Primero creamos una pantalla que tenga 3 campos de ingresos, el titulo del mensaje, el correo al que se enviara el mensaje y el mensaje a enviar.
Ademas de un Botón que sea el que envié el correo.Para el paso a paso de como crear la ventana, les comparto la liga http://codigosjavachemo.blogspot.com/2012/01/mi-primer-frame-en-eclipse.html esta muy bien explicado.
Para poder trabajar las ventanas como lo hacemos con Delphi o con Visual Studio, bajamos otro complemento que se llama Windows Builder Pro

Seleccionamos en el Menu Help->Market Place Eclipse

O desde Help->Install New Software
La liga de un video que explica paso a paso como instalarlo https://www.youtube.com/watch?v=oeswfZz4IW0, debe quedarles así su pantalla
Vamos agregar la librería mailx, vamos a las propiedades del proyecto, selecionados Java Build Path y presionamos el boton add External Jar


Programa

MyInterface.java

import javax.swing.*;
public class MyInterface extends JFrame {

     public MyInterface() {
     setTitle("EnviarMail");
     setSize(300,300);
     }

}

mainVentana.java

public class mainVentana {

public static void main(String[] args) {
// TODO Auto-generated method stub
        MiInterface v = new MiInterface();
        /* v.setVisible(true); */
}

}

MiInterface.java

import java.awt.EventQueue;



import javax.swing.JFrame;

import javax.swing.JTextField;

import javax.swing.JPanel;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.util.Properties;

import javax.mail.*;

import javax.mail.internet.*;

public class MiInterface {



 private JFrame frame;

 private JTextField textField;

 private JTextField textField_1;



 /**

  * Launch the application.

  */

 public static void main(String[] args) {

  EventQueue.invokeLater(new Runnable() {

   public void run() {

    try {

     MiInterface window = new MiInterface();

     window.frame.setVisible(true);

    } catch (Exception e) {

     e.printStackTrace();

    }

   }

  });

 }



 /**

  * Create the application.

  */

 public MiInterface() {

  initialize();

 }



 /**

  * Initialize the contents of the frame.

  */

 private void initialize() {

  frame = new JFrame();

  frame.setBounds(100, 100, 450, 300);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  frame.getContentPane().setLayout(null);



  JPanel panel = new JPanel();

  panel.setBounds(10, 11, 414, 30);

  frame.getContentPane().add(panel);



  JLabel lblNewLabel = new JLabel("Titulo Mensaje");

  panel.add(lblNewLabel);



  textField = new JTextField();

  panel.add(textField);

  textField.setColumns(25);



  JPanel panel_1 = new JPanel();

  panel_1.setBounds(10, 40, 414, 48);

  frame.getContentPane().add(panel_1);



  JLabel lblCorreo = new JLabel("Correo");

  panel_1.add(lblCorreo);



  textField_1 = new JTextField();

  panel_1.add(textField_1);

  textField_1.setColumns(25);



  JPanel panel_2 = new JPanel();

  panel_2.setBounds(10, 99, 414, 24);

  frame.getContentPane().add(panel_2);



  JLabel lblMensaje = new JLabel("Mensaje");

  panel_2.add(lblMensaje);



  JPanel panel_3 = new JPanel();

  panel_3.setBounds(10, 116, 424, 109);

  frame.getContentPane().add(panel_3);



  JTextArea textArea = new JTextArea();

  textArea.setTabSize(5);

  textArea.setColumns(30);

  textArea.setRows(5);

  panel_3.add(textArea);



  JPanel panel_4 = new JPanel();

  panel_4.setBounds(10, 222, 414, 39);

  frame.getContentPane().add(panel_4);



  JButton btnEnviarMail = new JButton("Enviar Mail");

  btnEnviarMail.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent arg0) {
      String var_tex = textArea.getText();
      String var_tex2 = textField_1.getText();
      String var_tex3 = textField.getText();
   
   if ( var_tex.length() < 1 || var_tex2.length() < 1 || 
var_tex3.length() < 1 )   {
   JOptionPane.showMessageDialog(frame, "Datos incompletos");
   return;
   }

       
   }

  });

  panel_4.add(btnEnviarMail);

 }

}



Ejecución



Para serles sincera Java es de los lenguajes que más trabajo me cuesta programar, primero porque no lo utilizo casi nada, por estar muy acostumbrada a la programación estructurada, me es más complicado utilizar tantos objetos como los que Java utiliza, a mi punto de vista es más sencillo utilizar C#, Delphi para desarrollos de aplicaciones que utilizar Java.

Hay algo adicional que no les he comentado en otros ejemplos de programas y es la importancia de hacer pruebas de nuestros desarrollos, el probar, el cachar los errores el realizar la mayor cantidad de escenarios de pruebas puede evitar accidentes y se los menciono en este post, porque Java al ser un lenguaje muy utilizado en nuestro día a día es muy importante considerar el tema de testing, les dejo la liga de una noticia de un accidente de avión causado por un error de software.

Hay personas en el área de sistemas que únicamente se dedican a probar que son como el némesis de un programador, que tienen la visión y misión  de destruir los programas, un desarrollador siempre va buscar cumplir el objetivo de los programas y hacer su código limpio, seguro y eficiente, pero un tester hará hasta lo imposible porque falle, para explicarlo mejor les dejó los siguientes memes.



Lo que quiero concluir es que el área de sistemas es muy amplia y hay muchos enfoques diferentes que necesitan, no solo esta el de programar.
Espero nos dejen sus comentarios y nos compartan, buena semana.

jueves, 29 de agosto de 2019

Como programar en C# o C Sharp

Hola bienvenidos a otra semana de nuestro blog de programación para todos, porque nunca es muy tarde para aprender ni muy temprano para tener una pasión en la vida.

Esta semana quiero platicarles de un lenguaje muy popular, C# o C Sharp  es un lenguaje orientado a objetos de la familia de Microsoft en la plataforma .NET es similar en algunas cosas a C, C++, Java 

Este lenguaje es muy popular ya que la mayoría de computadoras en el mundo tienen sistema operativo Windows, por lo que al ser de la misma familia la ejecución de los programas de .NET es muy amplia. 

En general como todos los programas orientados a objetos, ya cuenta con varias librerías que nos facilitan la vida y nos ayudan a nuestros programas, solo que hay algunas librerías que son de paga es decir se paga un licenciamiento anual.

Algo con lo que siempre hay que vivir en la programación es con el manejo de cadenas de texto, conversión de datos, manejo de formatos, longitud de los campos, todo esto lo maneja C#, manejo de excepciones en general.

En especifico con .NET siempre debemos considerar que Framework tenemos instalado (que es la versión con la que compilamos nuestros programas) , Collection (que es el formato o standar utilizado para fechas, monedas) 

Para aprender más les recomiendo cursos con Debite, Coursera, Microsoft

Para poder programar en la plataforma de .NET necesitamos instalar la suite de programación que se llama Visual Studio la cual es de paga, pero Microsoft ha liberado una versión para estudiantes y colaboradores abiertos, el instalador lo pueden descargar en https://visualstudio.microsoft.com/es/downloads/ pueden utilizar Visual Studio Code o Visual Studio Community. 



Una vez instalado pueden crear sus proyectos de lo que quieras, APP, Software de punto de venta, software WEB, aplicaciones Windows, Reportes con Reporting Framework



Veamos un ejemplo


Objetivo:

Vamos hacer un formulario que nos permita ingresar nuestro nombre, dirección  y fotografía 

Programa

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {

            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
            this.openFileDialog1.Filter = "images files (*.jpg)|"; 
            this.openFileDialog1.ShowDialog();
            pictureBox1.ImageLocation = openFileDialog1.FileName;
            
        }

    }

}


Observaciones de como programar en C#
  • Es programación orientada a objetos, por lo que casi siempre ya existe la librería o el objeto que nos hace más fácil la programación
  • Los comentarios se colocan entre /*  Comentarios */
  • En el botón de Subir Foto es donde colocamos el código, solo dando doble click sobre el formulario
  • utilizamos el objeto OpenFileDialog para poder abrir una pantalla para buscar nuestra fotografía
  • Al objeto pictureBox le asignamos el nombre del archivo y en las propiedades de objeto le pusimos Behavior, SizeMode StretchImage, para que ajustara la imagen
  • Cada segmento de un ciclo o de un IF va entre llaves {} 
  • Cada fin de línea o instrucción debe llevar ;

La parte del Formulario son

3 etiquetas para colocar los nombres de los campos
2 botones, uno para subir la fotografía y otro para crear la credencial
2 textbox que es donde ingresaremos los datos
1 Picturebox donde pondremos la imagen que suba
1 OpenFileDialog

Como se ve nuestra forma en Visual Studio




Como se ve el código


Ejecución de Programa


Para ejecutar solo necesitamos el programa ejecutable una vez después de construir la aplicación


Como complemento pueden intentar guardar estos datos en una base de datos.
Si han leído otros post de este blog, estas pantallas le resultaran similares a las que vimos en Object Pascal, porque Visual Studio es un IDLE como lo es Delphi.
Espero les haya interesado este lenguaje y tengan la inquietud para aprender más y hacer sus propios programas, espero dejen sus comentarios y compartan con sus amigos este blog. 

Entrada destacada

Como Programar HTML,Como crear página WEB, HTML para principiantes

Hola programadores Esta semana voy a escribir acerca de como programar con HTML (HyperText Markup Language) , el cual es un lenguaje ...