miércoles, diciembre 05, 2012

SQL: buscar por rangos de fecha con campos mes y año separados.

Tengo una tabla con campo año y mes por separado. Se requiere seleccionar un rango de fechas.
Por ejemplo de Septiembre de 2011 a Mayo de 2012.
BD: SQL Server 2000

 Opcion 1: (SIN FUNCIONAR) 
Esta consulta no nos devuelve nada debido a que mes es un campo numérico.

select anio, mes from ventas
where (anio>=2011 and mes>=9) and (anio<=2012 and mes<=5)


Opcion 2: (no me gustó) 
Esta opción nos trae todos los registros de 2011 y 2012, después con código php se pueden usar strtotime y después filtrar los registros que necesitamos.

select anio, mes from ventas
where (anio>=2011) and (anio<=2012)

Opcion 3: (sin funcionar)
Intentando concatenar los campos

select anio, mes,(anio+'-'+mes+'-01')

Opcion 4: (sin funcionar)
Concatenando los campos utilizando cast, casi solucionado pero le agrega un espacio en el mes.

select anio, mes, convert (varchar(10),cast(anio as char(4))+'-'+cast(mes as char(2))+'-01',120) 
from ventas

Opcion 5: (SOLUCIONADO)
Concatenando los campos utilizando las funciones cast, right y convert


select anio, mes,  
convert (varchar(10),cast(anio as char(4))+'-'+right('0'+ rtrim(mes), 2)+'-01',120)
from ventas
WHERE
     convert (varchar(10),cast(anio as char(4))+'-'+right('0'+ rtrim(mes), 2)+'-01',120) >='2011-09-01'
and  convert (varchar(10),cast(anio as char(4))+'-'+right('0'+ rtrim(mes), 2)+'-01',120) <='2012-05-01'



Happy Coding!

martes, octubre 30, 2012

Si los lenguajes de programación fueran una religión….


Si los lenguajes de programación fueran una religión….

C sería el Judaísmo – Es viejo, restrictivo, pero la mayor parte del mundo está familiarizado con sus normas y las respeta. El problema es que no te puedes convertir, o estás desde el principio, o crees que es una locura por completo. También cuando las cosas van mal la gente desea culpar al mundo con sus problemas.

Java sería el Cristianismo Fundamentalista – Teóricamente está basado en C, pero se pasa por alto tantas de las antiguas leyes, que no se parece en absoluto. En su lugar, añade su propio conjunto de normas nuevas e inflexibles, las cuales los creyentes piensan que son muy superiores a las originales. Y no solamente estan seguros de que sea el mejor idioma del mundo, sino que desean quemar a aquellos que estén en desacuerdo.

PHP sería en Cristianismo de Cafetería – Se pelea con Java por la supremacía del mercado web. Coge algunos aspectos de C y Java, pero sólo los que le gustan. Probablemente no sea tan coherente como otros lenguajes, pero por lo menos te permite mucha más libertad y mantiene la idea principal de las cosas. También, el concepto “GOTO Hell” ha sido abandonado.

C++ sería el Islamismo – Se basa en C, y no solamente mantiene todas sus leyes, sino que añade un nuevo grupo de normas complejas encima de las anteriores. Es tan versátil que puede utilizarse para hacer cualquier cosa, desde las atrocidades más gigantescas, hasta las mayores obras de arte. Sus seguidores están convencidos de que es el “Lenguaje Universal Definitivo”, y se enfadarán con aquellos que no estén de acuerdo. También, si insultas a su fundador o fundadores, probablemente seas maltratado hasta la muerte por los seguidores radicales.

C# sería el Mormonismo – A simple vista, es lo mismo que Java, pero un vistazo más en profundidad hará que te des cuenta de que está controlado por una única corporación (la cual muchos seguidores de Java opinan que es maléfica) y que muchos conceptos teológicos son bastante diferentes  Tienes la impresión de que sería bonito si todos los seguidores de Java dejasen de discriminarte por utilizarlo.

Lisp sería el Budismo Zen – No hay sintaxis, no hay dogma centralizado, no hay deidades. El universo entero está a tu alcance – si estás lo suficientemente iluminado. Algunos dicen que no es un lenguaje en absoluto, otros, que es el único lenguaje que tiene sentido.

Haskell sería el Taoísmo – Es tan diferente del resto de lenguajes que la gente no sabe cómo se puede producir algu útil. Sus seguidores creen que es el verdadero camino hacia el conocimiento, pero ese conocimiento está bastante por encima de cualquier mortal.

Erlang sería el Hinduísmo – Es otro lenguaje extraño que no parece que pueda ser útil para nada, pero a diferencia del resto de lenguajes modernos, está construido alrededor del concepto de varias deidades.

Perl sería el Vudú – Una serie incomprensible de hechizos arcanos que envuelve tu sangre y corrompe permanentemente tu alma. Utilizado normalmente cuando tu jefe te pide un trabajo urgente y son las 21h del Viernes.

Lua sería Wicca – Un lenguaje panteónico que puede ser fácilmente adaptado por diferentes culturas y lugares. Su código es muy liberal y permite el uso de técnicas que podrían ser descritas como “mágicas” por los que están acostumbrados a lenguajes más tradicionales. Tiene una conexión muy fuerte con la Luna.

Ruby sería el Neo-Paganismo – Una mezcla de diferentes lenguajes e ideas batidas y convertidas en algo que se podría denominar “lenguaje”. Sus seguidores crecen rápido, y aunque todo el mundo los mira de forma sospechosa, son bien intencionados y no tienen intención de hacer daño a nadie.

Python sería el Humanismo – Es simple, sin restricciones, y todo lo que necesitas tener es sentido común. Muchos de sus seguidores dicen que se sienten liberados de las tonterías impuestas por otros lenguajes, y que han redescubierto el placer de programar. Hay algunos que dicen que es una forma de pseudo-código.

COBOL sería el Paganismo Ancestral – Hubo un tiempo en el cual dominaba sobre vastas regiones y era importante, pero actualmente está muerto, para nuestro bien. Aunque muchos estaban asustados de los rituales que pedían sus deidades, algunos insisten en mantenerlo vivo a día de hoy.

APL sería la Cienciología – Hay un montón de gente que dice ser su seguidor, pero tú siempre has sospechado que es una gigantesca y elaborada broma que se fué de control.

LOLCODE sería el Pastafarismo – Una creencia esotérica nacida en Internet que nadie se toma en serio, a pesar de todos los esfuerzos para desarrollarlo y expandirlo.

Visual Basic sería el SatanismoSólamente que no necesitas vender tu alma.


Texto tomado de: http://yophpro.com

miércoles, agosto 29, 2012

Como beneficiarse con los descuentos de "EL BUEN FIN" en septiembre sin usar la tarjeta de crédito

No, no pienses que estoy loco! 

En los meses de junio, julio y agosto muchas empresas comienzan a prepararse para las ventas de fin de año (navidad, día de reyes, "el buen fin"). 

Si las grandes empresas se preparan para vendernos sus productos y beneficiarse con nuestro dinero, ¿Que tan malo es que nosotros los consumidores tambien comencemos a preparar nuestros gastos para aprovechar los descuentos?.

- ¿Que es el buen Fin?
Para los que desconozcan que es el buen fin les dejo estos enlaces
http://www.elbuenfin.org/que-es-el-buen-fin/
http://es.wikipedia.org/wiki/Buen_Fin

OJO: No aliento el consumo mercadologico de fin de año.

Hace cuanto tiempo que deseas cambiar aquellos viejos electrodomesticos y/o muebles del hogar; Refrigerador,  estufa, sala, television, estereo, comedor, computadora vieja o algun otro.

La mayoría de los articulos mencionados son elevados en precio, por lo cual se nos dificulta pagarlos de contado, y es por ello que en muchas ocasiones recurrimos a las tarjetas de crédito.

Hay tiendas que manejan sistema de apartado. La mayoría de las veces no cobran comision por cancelacion.

Estas son algunas de las tiendas que manejan sistema de apartado, si conoces alguna más haznoslo saber en los comentarios para agregarla en la lista.

Idea Interior www.ideainterior.com

  • Puedes dejar uno o varios articulos apartados siempre y cuando sumen el monto minimo, en la mayoría de los negocios es de $800 o $1,000..
  • Para realizar un apartado debes de cubrir un 10% de enganche.
  • En la mayoría de los establecimientos puedes dividir los pagos en semanales, quincenales o mensuales y los pagas hasta en 3 meses.


En las compras con tarjeta de credito primero te llevas el articulo y despues lo pagas, y si te atrasas te cobran intereses.

En la compra por sistema de apartado primero pagas y despues te llevas el articulo, no pagas intereses moratorios, puedes cancelar en el momento que quieras[1].

[1]En algunos establecimientos hay que cubrir una cuota de penalización.
- Ok, hay tiendas con sistema de apartado, pero y eso que tienes que ver con "El buen fin"?.

Pues es sencillo, cuando sacas un articulo en apartado, lo que hacen en el establecimiento es "congelar" el precio con el que lo apartaste. 

Así si el articulo sube de precio, no pagaras la diferencia al momento de liquidarlo.
Y al contrario, si al momento de liquidar el artículo su precio es mas bajo, te respetan el precio actual.

Y es aquí en donde podemos aprovechar ese "beneficio".
Por ejemplo:

Suponiendo que es 01/sep/2012 vas a comprar un refrigerador de $5,000, y tienes planeado dar 6 pagos quincenales.


- Espera, en el título dice "Como beneficiarse con los descuentos de "EL BUEN FIN" en septiembre sin usar la tarjeta de crédito" y hasta aquí yo no me he beneficiado en nada.

No desesperes, es sencillo. 

En el buen fin del 2011 los establecimientos realizaron descuentos del 10% o 20%.

El buen fin del 2012 será el proximo 16, 17, 18 y 19 de Noviembre. Es casi seguro que aplicaran los mismos descuentos del año pasado.

En el caso del ejemplo:

Si aplicaran un descuento del 20%. 
El refrigerador costaría $4,000.

Para esta fecha ya llevaríamos abonados ($4,250), y hasta sale sobrando. 

El sobrante te lo pueden regresar en efectivo o en monedero electrónico depende de las políticas de la empresa.

Para que te hagan válido el descuento hay que ir al establecimiento y decir que deseas liquidar tu apartado. 

Si tienen dudas, sugerencias o saben de otros establecimientos que pueden aplicar ponganlo en los comentarios.

Les comparto el archivo en gDocs que realiza el calculo en base al  costo del articulo.
http://ht.ly/dk21R

jueves, agosto 16, 2012

Administrar la recepción de CFD/CFDI - Script que lee XML de un Comprobante Fistal Digital

Hoy en día la preocupación de la mayoría de las empresas se concentra en la generación de Comprobantes Fiscales Digitales basados en las normas del SAT. En este nicho ya hay bastantes pesonas y empresas trabajando.
Sin embargo no he visto o desconozco una herramienta que ayude a administrar la RECEPCION DE CFD's.

Me ha pasado que despues de comprar en diferentes negocios, cada empresa genera un archivo xml con nombre generico, que es de utilidad para ellos. Al tener varias facturas la administración se vuelve complicada.
Una manera de administrar estos comprobantes digitales es renombrarlos utilizando algun layout, ya sea de manera manual o con un proceso automatico

Este script ayuda a leer un CFD para despues formatear el nombre del archivo de la siguiente manera:
Fecha_RFCemisor_serie_folio_subtotal_iva_total

Fecha: Fecha en que se generó el comprobante
RFCemisor: RFC de quien emite el cfd/cfdi
Serie y Folio: Numero de Serie y folio de la factura
Subtotal, iva, total: Importes de la factura.

Aquí el código:
Emisor);
  $rfc = trim ($arrejemplo["@attributes"]['rfc']  );
  $nombre = trim ($arrejemplo["@attributes"]['nombre'] );

 #Convierte objeto Impuestos en array
 $arrejemplo = get_object_vars ($objejemplo->Impuestos);
  $iva = trim ($arrejemplo["@attributes"]['totalImpuestosTrasladados']);
  // $nombre = $arrejemplo["@attributes"]['nombre'];

 #Formatea los valores numericos
 $tam_num  = 8;
 $relleno ='0';
 $subTotal = str_pad($subTotal ,$tam_num,$relleno,STR_PAD_LEFT);
 $iva  = str_pad($iva  ,$tam_num,$relleno,STR_PAD_LEFT);
 $total  = str_pad($total ,$tam_num,$relleno,STR_PAD_LEFT);

 echo $fecha."_".$rfc."_".$serie.$folio."_".$subTotal."_".$iva."_".$total;
?>
Una vez que se tienen estos archivos renombrados es mucho más fácil encontrar el comprobante de una compra.
En mi caso hago en la linea de comandos de windows:
dir /b /s *.xml > listaCFD.txt

El cual me genera el listado de mis comprobantes, esta lista la paso a un excel, y este excel es mucho más facil de comprender para mi contador.



ToDo List:

- Leer el directorio que contiene los archivos xml
- Renombrar el xml.
- Generar y/o actualizar automaticamente el listado de excel
- Validar en el SAT la autenticidad del CFD


miércoles, agosto 08, 2012

Agregar separador en archivo por posiciones con SED


Una vez instalado el comando SED en Windows.

Tenemos el archivo prueba.txt que contiene:


 
Para mostrar de la linea 5 a la 8

type prueba.txt | sed -n "5,8p"


Para mostrar de la linea 10 al final del archivo
type prueba.txt | sed -n "10,$p"

USAR SED POR POSICIONES.


Tenemos el archivo prueba con el siguiente contenido.
Prueba.txt
abbcccddddeeeeefffff
12345678901234567890
23456789012345678901
34567890123456789012
45678901234567890123
56789012345678901234
67890123456789012345
78901234567890123456
89012345678901234567
90123456789012345678
01234567890123456789
12345678901234567890
23456789012345678901
34567890123456789012
45678901234567890123
56789012345678901234
67890123456789012345
78901234567890123456

Necesitamos dar formato a cada linea del archivo por posiciones y agregar un separador, en este caso punto y coma.

 
Para ello se utilize el siguiente commando.
Commando:
sed  "s/^(.{1})(.*)/\2;\1/"  prueba.txt

^         = Inicio de la linea
{1}       = Posicion 1
(.{1})    = Primer Campo
(.*)      = segundo campo con el resto de la linea
\2;\1     = Imprime el segundo campo, punto y coma y al final el primer campo.

Para que se pueda ejecutar sin errores se agregan diagonales invertidas a los paréntesis y llaves.

sed  "s/^\(.\{1\}\)\(.*\)/\2;\1/"  prueba.txt
 

Happy Conding!

.