Saltar al contenido

Sobreescribir Factura en pdf.


Recommended Posts

publicado

Buenos días colegas. Espero se encuentren bien de salud.

En el Sistema de Facturación que he estado trabajando y que el profesor JSD me ha estado ayudando necesito hacer algo que realmente no encuentro cómo hacerlo.

Yo Guardo las Facturas en PDF en un a carpeta (D:\Facturación\Facturas), pero cuando necesito hacerle una modificación (FrmModificarFactura) a una Factura "X", necesito que me sobre escriba el archivo ya existente pero con los cambios que se le haya hecho a dicha factura. Intenté hacerlo con el condicional IF, pero parece que algo no estoy haciendo correctamente y necesito resolver este problema.

Ejemplo: Yo confeccioné la Factura Nº 16 Fincimex, pero posteriormente me dí cuenta que hubo un error y modifiqué un Item, como es lógico eso me modifica el importe y necesito Guardar esa Factura, pero ya existe en D:\Facturación\Facturas\Factura Nº 16 Fincimex y lo que busco es que me sobre escriba ese archivo, manteniendo el mismo número de Factura y Cliente.

Yo tengo un código en el botón PDF que lo que hace es ir hasta la Hoja1 (Factura), toma el Número de Factura y el Nombre del cliente, lo concatena y lo guarda, pero como es obvio esto no me sirve...

El código que estoy usando para guardar las facturas es:

Private Sub CommandButton10_Click()
Dim NumeroFactura As String
Dim RutaArchivo As String
Dim cliente As String

Hoja1.Activate

NumeroFactura = Hoja1.Range("D7")
cliente = Hoja1.Range("C8")
RutaArchivo = "D:\Facturación\Facturas\Factura Nº " & NumeroFactura & " " & cliente & ""
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo

MsgBox "Factura exportada y guardada con éxito", vbInformation, "Sistemas COLOSSUS"
End Sub

Por otro lado, ya específicamente para el profesor JSD, en el Formulario FrmModificarFactura existen varios objetos que al cargar dicho Formulario no se muestran, o sea, es como si estuvieran en su propiedad  .Visible=False, pero no veo que así sea, de hecho veo en el código que le está asignado un grupo de acciones...Los Objetos son: CLI, Reset, Icono Modificar y Añadir... Necesito saber si cumplen alguna función o usted lo creo pero después no lo utilizó. Recuerde que no soy versado en este tema y existen muchas cosas que no sé y mientras más entienda un código más aprendo que finalmente es mi principal objetivo.


 

Facturación BM v4.0.0 JSD.xlsm

publicado
hace 56 minutos , pinoji dijo:

Por otro lado, ya específicamente para el profesor JSD, en el Formulario FrmModificarFactura existen varios objetos que al cargar dicho Formulario no se muestran, o sea, es como si estuvieran en su propiedad  .Visible=False, pero no veo que así sea, de hecho veo en el código que le está asignado un grupo de acciones...Los Objetos son: CLI, Reset, Icono Modificar y Añadir... Necesito saber si cumplen alguna función o usted lo creo pero después no lo utilizó. Recuerde que no soy versado en este tema y existen muchas cosas que no sé y mientras más entienda un código más aprendo que finalmente es mi principal objetivo.

Ahora mismo no te preocupes por eso más adelante te explico la función que le daremos a cada cosa

publicado
hace 57 minutos , pinoji dijo:

Yo Guardo las Facturas en PDF en un a carpeta (D:\Facturación\Facturas), pero cuando necesito hacerle una modificación (FrmModificarFactura) a una Factura "X", necesito que me sobre escriba el archivo ya existente pero con los cambios que se le haya hecho a dicha factura. Intenté hacerlo con el condicional IF, pero parece que algo no estoy haciendo correctamente y necesito resolver este problema.

Si puedo te lo miro este fin de semana

 

publicado

Hola profesor, espero se encuentre bien de salud. Qué placer contar con usted nuevamente.

Sí, yo vi en sus recomendaciones el tema de la impresión e hice los arreglos pertinentes, pero en este caso específico que le comento, por más que lo intenté no me dio resultado. He seguido haciendo las validaciones (faltan otras que seguiré cuando retorne el archivo), pero en sentido general no creo que le falte mucho, al menos de un primer momento, porque más adelante quiero aprender el tema de Ribbon y agregar todas las opciones, pero eso no es tan importante como el funcionamiento del proyecto y lo está haciendo muy bien. Estoy muy contento con funciona, es sencillo e intuitivo y cumple con mis expectativas y para el rol que fue hecho.

Ah, lo olvidaba, debo agregarle una Opción más, que es mediante Application.GetOpenFileName tener acceso a la carpeta donde se encuentran archivadas las facturas en .pdf para poder visualizarlas o imprimirlas en el momento que desee o necesite.

Estos son detalles que poco a poco iré adecuando, incluso, esto de Facturar en nuevo para mí y no se los problemas que se me puedan presentar desde el punto de vista propio de este trabajo.

Gracias mil por sus esfuerzos.

Mis respetos.

Pino

publicado
hace 57 minutos , pinoji dijo:

Ah, lo olvidaba, debo agregarle una Opción más, que es mediante Application.GetOpenFileName tener acceso a la carpeta donde se encuentran archivadas las facturas en .pdf para poder visualizarlas o imprimirlas en el momento que desee o necesite.

Se puede hacer desde el mismo archivo sin necesidad de acceder a la carpeta, pero poco a poco....

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.