primer commit de toda la solucion y proyecto Factura Negociable

This commit is contained in:
GEORGE committed 2026-05-21 15:16:34 -05:00
commit bbc9fedba6
27 files changed
+5092

No files matched your search

+202
View File
@@ -0,0 +1,202 @@
# Rules in this file were initially inferred by Visual Studio IntelliCode from the Template Studio codebase.
# You can modify the rules from these initially generated values to suit your own policies.
# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference.
[*.cs]
#Core editorconfig formatting - indentation
#use soft tabs (spaces) for indentation
indent_style = space
#Formatting - new line options
#place else statements on a new line
csharp_new_line_before_else = true
#require braces to be on a new line for lambdas, methods, control_blocks, types, properties, and accessors (also known as "Allman" style)
csharp_new_line_before_open_brace = all
#Formatting - organize using options
#sort System.* using directives alphabetically, and place them before other usings
dotnet_sort_system_directives_first = true
#Formatting - spacing options
#require NO space between a cast and the value
csharp_space_after_cast = false
#require a space before the colon for bases or interfaces in a type declaration
csharp_space_after_colon_in_inheritance_clause = true
#require a space after a keyword in a control flow statement such as a for loop
csharp_space_after_keywords_in_control_flow_statements = true
#require a space before the colon for bases or interfaces in a type declaration
csharp_space_before_colon_in_inheritance_clause = true
#remove space within empty argument list parentheses
csharp_space_between_method_call_empty_parameter_list_parentheses = false
#remove space between method call name and opening parenthesis
csharp_space_between_method_call_name_and_opening_parenthesis = false
#do not place space characters after the opening parenthesis and before the closing parenthesis of a method call
csharp_space_between_method_call_parameter_list_parentheses = false
#remove space within empty parameter list parentheses for a method declaration
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
#place a space character after the opening parenthesis and before the closing parenthesis of a method declaration parameter list.
csharp_space_between_method_declaration_parameter_list_parentheses = false
#Formatting - wrapping options
#leave code block on separate lines
csharp_preserve_single_line_blocks = false
#Style - Code block preferences
#prefer curly braces even for one line of code
csharp_prefer_braces = true:suggestion
#Style - expression bodied member options
#prefer expression bodies for accessors
csharp_style_expression_bodied_accessors = true:warning
#prefer block bodies for constructors
csharp_style_expression_bodied_constructors = false:suggestion
#prefer expression bodies for methods
csharp_style_expression_bodied_methods = when_on_single_line:silent
#prefer expression-bodied members for properties
csharp_style_expression_bodied_properties = true:warning
#Style - expression level options
#prefer out variables to be declared before the method call
csharp_style_inlined_variable_declaration = false:suggestion
#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them
dotnet_style_predefined_type_for_member_access = true:suggestion
#Style - Expression-level preferences
#prefer default over default(T)
csharp_prefer_simple_default_expression = true:suggestion
#prefer objects to be initialized using object initializers when possible
dotnet_style_object_initializer = true:suggestion
#Style - implicit and explicit types
#prefer var over explicit type in all cases, unless overridden by another code style rule
csharp_style_var_elsewhere = true:suggestion
#prefer var is used to declare variables with built-in system types such as int
csharp_style_var_for_built_in_types = true:suggestion
#prefer var when the type is already mentioned on the right-hand side of a declaration expression
csharp_style_var_when_type_is_apparent = true:suggestion
#Style - language keyword and framework type options
#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
#Style - Language rules
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning
csharp_style_var_for_built_in_types = true:warning
#Style - modifier options
#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods.
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
#Style - Modifier preferences
#when this rule is set to a list of modifiers, prefer the specified ordering.
csharp_preferred_modifier_order = public,private,protected,internal,static,async,readonly,override,sealed,abstract,virtual:warning
dotnet_style_readonly_field = true:warning
#Style - Pattern matching
#prefer pattern matching instead of is expression with type casts
csharp_style_pattern_matching_over_as_with_null_check = true:warning
#Style - qualification options
#prefer events not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_event = false:suggestion
#prefer fields not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_field = false:suggestion
#prefer methods not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_method = false:suggestion
#prefer properties not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_property = false:suggestion
csharp_indent_labels = one_less_than_current
csharp_using_directive_placement = outside_namespace:silent
csharp_prefer_simple_using_statement = true:warning
csharp_style_namespace_declarations = file_scoped:warning
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent
[*.{cs,vb}]
dotnet_style_operator_placement_when_wrapping = beginning_of_line
tab_width = 4
indent_size = 4
end_of_line = crlf
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
[*.{cs,vb}]
#Style - Unnecessary code rules
csharp_style_unused_value_assignment_preference = discard_variable:warning
#### Naming styles ####
# Naming rules
dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
# Symbol specifications
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =
# Naming styles
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_compound_assignment = true:warning
dotnet_style_prefer_simplified_interpolation = true:suggestion
+99
View File
@@ -0,0 +1,99 @@
# ==========================================
# Visual Studio 2022
# Solo código fuente + bin/x64/Debug
# ==========================================
# ----------------------------
# Carpetas temporales
# ----------------------------
.vs/
TestResults/
packages/
# ----------------------------
# Ignorar compilados generales
# ----------------------------
[Bb]in/
[Oo]bj/
x86/
x64/
Debug/
Release/
# ----------------------------
# EXCEPCIÓN:
# Mantener bin/x64/Debug
# ----------------------------
!bin/
!bin/x64/
!bin/x64/Debug/
# Mantener contenido interno
!bin/x64/Debug/**
# ----------------------------
# Ignorar ejecutables y binarios
# incluso dentro de Debug
# ----------------------------
*.exe
*.dll
*.pdb
*.cache
*.ilk
*.obj
*.lib
*.exp
*.ipch
*.aps
*.ncb
*.suo
*.user
*.userosscache
*.sln.docstates
# ----------------------------
# Archivos NuGet
# ----------------------------
*.nupkg
.nuget/
# ----------------------------
# Publicaciones
# ----------------------------
publish/
app.publish/
# ----------------------------
# Logs
# ----------------------------
*.log
# ----------------------------
# Rider / Resharper
# ----------------------------
_ReSharper*/
*.DotSettings.user
# ----------------------------
# Archivos de sistema
# ----------------------------
.DS_Store
Thumbs.db
# ----------------------------
# Configuración local sensible
# ----------------------------
appsettings.Development.json
secrets.json
# ----------------------------
# OPCIONAL:
# Ignorar proyectos no revisados
# ----------------------------
CrearEntrega/
CrearEntregaDropShip
DescargarExportacion
netActualizacionLotes
OrdenImpresion
VisualizadorCargos
FacturaNegociable/Instalador/*
+16
View File
@@ -0,0 +1,16 @@
{
"version": "1.0",
"components": [
"Microsoft.Component.MSBuild",
"Microsoft.NetCore.Component.Runtime.6.0",
"Microsoft.NetCore.Component.SDK",
"Microsoft.VisualStudio.Component.ManagedDesktop.Core",
"Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites",
"Microsoft.VisualStudio.Component.NuGet",
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
"Microsoft.VisualStudio.Component.Windows10SDK",
"Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging",
"Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs",
"Microsoft.VisualStudio.Workload.ManagedDesktop"
]
}
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="8fb06cb64d019a17" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.2.0" newVersion="3.0.2.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Drawing.Common" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.5.5631.0" newVersion="2.5.5631.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+190
View File
@@ -0,0 +1,190 @@
namespace FacturaNegociable
{
#region 'Menu SAP'
public static class SAPMenu
{
public const string New = "1282";
public const string Find = "1281";
}
#endregion
#region 'Archivos de Formularios'
public static class Archivos
{
public const string ArchivoFormularioFacturaNegociable = "formularioFacturaNegociable.srf";
public const string ArchivoFormularioWebBrowser = "formularioWebBrowser.srf";
}
#endregion
#region 'Menu Usuario'
public static class MenuUsuario
{
public const string MenuPrincipal = "mnuFRN00";
public const string MenuFacturaNegociable = "mnuFRN01";
}
#endregion
#region 'Tipos Formulario de Usuario'
public static class UserFormType
{
public const string FormularioFacturaNegociable = "fn001";
public const string FormularioWebBrowser = "wb365";
}
#endregion
#region 'Codigos de Documento Electronico'
public static class CodigosDocumentoElectronico
{
public const string FacturaElectronica = "33";
public const string FacturaNoAfectaElectronica = "34";
public const string BoletaElectronica = "39";
public const string BoletaNoAfectaElectronica = "41";
public const string LiquidacionFacturaElectronica = "43";
public const string FacturaDeCompraElectronica = "46";
public const string GuiaDespachoElectronica = "52";
public const string NotaDebitoElectronica = "56";
public const string NotaCreditoElectronica = "61";
public const string FacturaExportacionElectronica = "110";
public const string NotaDebitoExportacionElectronica = "111";
public const string NotaCreditoExportacionElectronica = "112";
public static string[] All = { FacturaElectronica, FacturaNoAfectaElectronica, BoletaElectronica, BoletaNoAfectaElectronica,
LiquidacionFacturaElectronica, FacturaDeCompraElectronica, GuiaDespachoElectronica, NotaDebitoElectronica,
NotaCreditoElectronica, FacturaExportacionElectronica, NotaDebitoExportacionElectronica,
NotaCreditoExportacionElectronica };
}
#endregion
#region 'Formularios SAP'
public static class SAPFormType
{
public const string OfertaVentas = "149";
public const string PedidoCliente = "139";
public const string Entrega = "140";
public const string Devolucion = "180";
public const string SolicitudAnticipoCliente = "65308";
public const string FacturaAnticipoCliente = "65300";
public const string FacturaDeudores = "133";
public const string FacturaExentaDeudores = "65302";
public const string NotaDebitoCliente = "65303";
public const string Boleta = "65304";
public const string BoletaExenta = "65305";
public const string FacturaExportacion = "65307";
public const string NotaCreditoCliente = "179";
public const string FacturaReservaCliente = "60091";
public const string FacturaDeudorPago = "60090";
public const string SolicitudCompra = "1470000200";
public const string OfertaCompra = "540000988";
public const string Pedido = "142";
public const string EntradaMercancias = "143";
public const string DevolucionMercancias = "182";
public const string SolicitudAnticipoProveedor = "65309";
public const string FacturaAnticipoProveedor = "65301";
public const string FacturaProveedor = "141";
public const string NotaDebitoProveedor = "65306";
public const string NotaCreditoProveedor = "181";
public const string FacturaReservaProveedor = "60092";
public const string EntradaMercanciasInventario = "721";
public const string SalidaMercanciasInventario = "720";
public const string SolicitudTraslado = "1250000940";
public const string TransferenciaStock = "940";
public static string[] All = { OfertaVentas, PedidoCliente, Entrega, Devolucion, SolicitudAnticipoCliente, FacturaAnticipoCliente, FacturaDeudores, NotaDebitoCliente, Boleta,
FacturaExportacion, NotaCreditoCliente, FacturaReservaCliente,
SolicitudCompra, OfertaCompra, Pedido, EntradaMercancias, DevolucionMercancias, SolicitudAnticipoProveedor, FacturaAnticipoProveedor, FacturaProveedor,
NotaDebitoProveedor, NotaCreditoProveedor,FacturaReservaProveedor,
EntradaMercanciasInventario, SalidaMercanciasInventario, SolicitudTraslado, TransferenciaStock};
public static string[] WithFolio = {Entrega, FacturaAnticipoCliente, FacturaDeudores, NotaDebitoCliente, Boleta, BoletaExenta, FacturaExportacion, NotaCreditoCliente,
FacturaReservaCliente, FacturaDeudorPago, FacturaExentaDeudores,
SalidaMercanciasInventario, TransferenciaStock,
DevolucionMercancias, FacturaProveedor};
public static string[] VentasFolio = {Entrega, FacturaAnticipoCliente, FacturaDeudores, NotaDebitoCliente, Boleta, BoletaExenta, FacturaExportacion, NotaCreditoCliente,
FacturaReservaCliente, FacturaDeudorPago, FacturaExentaDeudores};
public static string[] InventarioFolio = { SalidaMercanciasInventario, TransferenciaStock };
public static string[] ComprasFolio = { DevolucionMercancias, FacturaProveedor };
}
#endregion
#region 'Colores'
public static class Colores
{
public static int White = (System.Drawing.Color.White.R) | (System.Drawing.Color.White.G << 8) | (System.Drawing.Color.White.B << 16);
public static int Black = (System.Drawing.Color.Black.R) | (System.Drawing.Color.Black.G << 8) | (System.Drawing.Color.Black.B << 16);
public static int Blue = (System.Drawing.Color.Blue.R) | (System.Drawing.Color.Blue.G << 8) | (System.Drawing.Color.Blue.B << 16);
public static int Yellow = (System.Drawing.Color.Yellow.R) | (System.Drawing.Color.Yellow.G << 8) | (System.Drawing.Color.Yellow.B << 16);
public static int Red = (System.Drawing.Color.Red.R) | (System.Drawing.Color.Red.G << 8) | (System.Drawing.Color.Red.B << 16);
public static int Green = (System.Drawing.Color.Green.R) | (System.Drawing.Color.Green.G << 8) | (System.Drawing.Color.Green.B << 16);
public static int Orange = (System.Drawing.Color.Orange.R) | (System.Drawing.Color.Orange.G << 8) | (System.Drawing.Color.Orange.B << 16);
public static int LightGray = (System.Drawing.Color.LightGray.R) | (System.Drawing.Color.LightGray.G << 8) | (System.Drawing.Color.LightGray.B << 16);
public static int GreenYellow = (System.Drawing.Color.GreenYellow.R) | (System.Drawing.Color.GreenYellow.G << 8) | (System.Drawing.Color.GreenYellow.B << 16);
}
#endregion
#region Recursos
public static class B1Resources
{
public static string MENU1288 = "1288_MENU";
public static string MENU1291 = "1291_MENU";
public static string MENU1304 = "1304_MENU";
public static string MENU1289 = "1289_MENU";
public static string SBERROR = "SB_ERROR";
public static string SBSUCCESS = "SB_SUCCESS";
public static string SBWARNING = "SB_WARNING";
public static string RIGHTBLACKTRIANGLE = "RIGHT_TRIANGLE";
public static string LUPA = "7427_MENU";
public static string DISKETE = "516_MENU";
public static string IMPRESORA = "520_MENU";
public static string BLOQUEAR_PANTALLA = "524_MENU";
public static string PARAMETRIZACION_FORMULARIO = "580_MENU";
public static string EXCEL = "7169_MENU";
public static string WORD = "7170_MENU";
public static string PDF = "7176_MENU";
public static string BARCODE = "6163_MENU";
public static string LICENSELOCK = "BUTTON_LICENSE_LOCK";
public static string LICENSEUNLOCK = "BUTTON_LICENSE_UNLOCK";
public static string ADDSTEPICON = "ADD_STEP_ICON";
public static string ADDTENPLATEICON = "ADD_TEMPLATE_ICON";
public static string NOVACLOSE = "BUTTON_NOVA_CLOSE";
public static string NOVAMAXIMIZE = "BUTTON_NOVA_MAXIMIZE";
public static string EMPTYTASK = "MEMPTYTASK";
public static string FULLDOC = "MFULLDOC";
public static string FULLSTACK = "MFULLTASK";
public static string LOCKT = "MLOCKT";
public static string MVMARK = "MVMARK";
public static string MXMARK = "MXMARK";
public static string NUMERO_1 = "I20116";
public static string NUMERO_2 = "I20117";
public static string NUMERO_3 = "I20118";
public static string NUMERO_4 = "I20119";
public static string MENSAJE = "6657_MENU";
public static string FLECHA_DERECHA = "6164_MENU";
}
#endregion
}
+23
View File
@@ -0,0 +1,23 @@
using SAPbouiCOM;
namespace FacturaNegociable.DataModel
{
public class Columna
{
public int Posicion
{
get; set;
}
public string Nombre
{
get; set;
}
public BoFieldsType Tipo { get; set; } = BoFieldsType.ft_AlphaNumeric;
public int Largo { get; set; } = 10;
public bool RightJustified { get; set; } = false;
public bool Editable { get; set; } = false;
public BoColumnSumType SumType { get; set; } = BoColumnSumType.bst_None;
public bool Sortable { get; set; } = false;
}
}
+79
View File
@@ -0,0 +1,79 @@
using System.Collections.Generic;
using System.Xml.Serialization;
namespace FacturaNegociable.DataModel
{
[XmlRoot(ElementName = "DataTable")]
public class DataTable
{
[XmlElement(ElementName = "Rows")]
public Rows Rows
{
get; set;
}
[XmlAttribute(AttributeName = "Uid")]
public string Uid
{
get; set;
}
[XmlText]
public string Text
{
get; set;
}
}
[XmlRoot(ElementName = "Row")]
public class Row
{
[XmlElement(ElementName = "Cells")]
public Cells Cells
{
get; set;
}
}
[XmlRoot(ElementName = "Rows")]
public class Rows
{
[XmlElement(ElementName = "Row")]
public List<Row> Row
{
get; set;
}
}
[XmlRoot(ElementName = "Cell")]
public class Cell
{
[XmlElement(ElementName = "ColumnUid")]
public string ColumnUid
{
get; set;
}
[XmlElement(ElementName = "Value")]
public string Value
{
get; set;
}
}
[XmlRoot(ElementName = "Cells")]
public class Cells
{
[XmlElement(ElementName = "Cell")]
public List<Cell> Cell
{
get; set;
}
}
}
+76
View File
@@ -0,0 +1,76 @@
using System;
using System.ComponentModel;
namespace FacturaNegociable.DataModel
{
public class Factura
{
public string Seleccionado { get; set; } = string.Empty;
public string DocNum { get; set; } = string.Empty;
public string BoeKey { get; set; } = string.Empty;
public string DocEntry { get; set; } = string.Empty;
public DateTime FechaContabilizacion
{
get; set;
}
public DateTime FechaVencimiento
{
get; set;
}
public string Moneda { get; set; } = string.Empty;
public double Total
{
get; set;
}
public double PaidSum
{
get; set;
}
public double PaidToDate
{
get; set;
}
public double Saldo
{
get; set;
}
public string GroupNum { get; set; } = string.Empty;
public string CardCode { get; set; } = string.Empty;
public string Cliente { get; set; } = string.Empty;
public string LicTradNum { get; set; } = string.Empty;
public string Indicator { get; set; } = string.Empty;
public string Serie { get; set; } = string.Empty;
public string Numero { get; set; } = string.Empty;
public int Cargo { get; set; } = 0;
public string Xml { get; set; } = string.Empty;
public string Banco { get; set; } = string.Empty;
public string Cuota { get; set; } = string.Empty;
public string Cuotas { get; set; } = string.Empty;
public string BankCode { get; set; } = string.Empty;
public double Amount
{
get; set;
}
public DateTime FechaNegociada
{
get; set;
}
public string Correo
{
get; set;
} = string.Empty;
public string Direccion
{
get; set;
} = string.Empty;
public string Ubigeo { get; set; } = string.Empty;
public int MesaPartes { get; set; } = 0;
public string FechaMesaPartes { get; set; } = string.Empty;
public string Planilla { get; set; } = string.Empty;
public string TipoCobranza { get; set; } = string.Empty;
public string TipoVenta { get; set; } = string.Empty;
}
}
@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FacturaNegociable.DataModel
{
public class FacturaNegociableBBVA
{
public string TipoComprobante { get; set; } = string.Empty;
public string RucProveedor { get; set; } = string.Empty;
public string Serie { get; set; } = string.Empty;
public string Numeracion { get; set; } = string.Empty;
public string FechaVencimiento { get; set; } = string.Empty;
public string DepartamentoProveedor { get; set; } = string.Empty;
public string ProvinciaProveedor { get; set; } = string.Empty;
public string DistritoProveedor { get; set; } = string.Empty;
public string DomicilioProveedor { get; set; } = string.Empty;
public string DepartamentoAdquiriente { get; set; } = string.Empty;
public string ProvinciaAdquiriente { get; set; } = string.Empty;
public string DistritoAdquiriente { get; set; } = string.Empty;
public string DomicilioAdquiriente { get; set; } = string.Empty;
public string TipoPago { get; set; } = string.Empty;
public string NumeroCuota { get; set; } = string.Empty;
public string FechaComunicacionAdquiriente { get; set; } = string.Empty;
public string FechaAceptacion { get; set; } = string.Empty;
public string FechaPago { get; set; } = string.Empty;
public double ImporteNetoPendientePago { get; set; } = 0.00;
public string ClausulasEspeciales { get; set; } = string.Empty;
public string Observaciones { get; set; } = string.Empty;
}
}
@@ -0,0 +1,32 @@
namespace FacturaNegociable.DataModel
{
public class FacturaNegociableBCP
{
public string TipoProducto { get; set; } = string.Empty;
public string Moneda { get; set; } = string.Empty;
public string NumeroCuentaCorriente { get; set; } = string.Empty;
//public double ImporteTotalPlanilla { get; set; } = 0.00;
public string TipoComprobante { get; set; } = string.Empty;
public string RucProveedor { get; set; } = string.Empty;
public string Serie { get; set; } = string.Empty;
public string Numeracion { get; set; } = string.Empty;
public string FechaVencimiento { get; set; } = string.Empty;
public string DepartamentoProveedor { get; set; } = string.Empty;
public string ProvinciaProveedor { get; set; } = string.Empty;
public string DistritoProveedor { get; set; } = string.Empty;
public string DomicilioProveedor { get; set; } = string.Empty;
public string DepartamentoAdquiriente { get; set; } = string.Empty;
public string ProvinciaAdquiriente { get; set; } = string.Empty;
public string DistritoAdquiriente { get; set; } = string.Empty;
public string DomicilioAdquiriente { get; set; } = string.Empty;
public string TipoPago { get; set; } = string.Empty;
public string NumeroCuota { get; set; } = string.Empty;
public string FechaComunicacionAdquiriente { get; set; } = string.Empty;
public string FechaAceptacion { get; set; } = string.Empty;
public string FechaPago { get; set; } = string.Empty;
public double ImporteNetoPendientePago { get; set; } = 0.00;
public int ClausulaProrroga { get; set; } = 0;
public string ClausulasEspeciales { get; set; } = string.Empty;
public string Observaciones { get; set; } = string.Empty;
}
}
+11
View File
@@ -0,0 +1,11 @@
using System.Globalization;
namespace FacturaNegociable.DataModel
{
public class State
{
public CultureInfo Result {
get; set;
}
}
}
+141
View File
@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>FacturaNegociable</RootNamespace>
<AssemblyName>FacturaNegociable</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.2.5\lib\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml.Framework, Version=3.0.2.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.Framework.3.0.2\lib\net46\DocumentFormat.OpenXml.Framework.dll</HintPath>
</Reference>
<Reference Include="SAPBusinessOneSDK, Version=1.1.0.1, Culture=neutral, PublicKeyToken=c7c3cb60e45d119f, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\..\..\Program Files\sap\SAP Business One\SAPBusinessOneSDK.dll</HintPath>
</Reference>
<Reference Include="SpreadsheetLight, Version=3.4.7.0, Culture=neutral, PublicKeyToken=32fbb46dc1730c57, processorArchitecture=MSIL">
<HintPath>..\packages\SpreadsheetLight.3.4.7\lib\SpreadsheetLight.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Drawing.Common.8.0.4\lib\net462\System.Drawing.Common.dll</HintPath>
</Reference>
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Packaging, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Packaging.4.7.0\lib\net46\System.IO.Packaging.dll</HintPath>
</Reference>
<Reference Include="System.Management" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Constantes.cs" />
<Compile Include="DataModel\Columna.cs" />
<Compile Include="DataModel\DataTable.cs" />
<Compile Include="DataModel\Factura.cs" />
<Compile Include="DataModel\FacturaNegociableBBVA.cs" />
<Compile Include="DataModel\FacturaNegociableBCP.cs" />
<Compile Include="DataModel\State.cs" />
<Compile Include="FolderBrowserDialogWrapper.cs" />
<Compile Include="FormularioFacturaNegociable.cs" />
<Compile Include="FormularioWebBrowser.cs" />
<Compile Include="Funciones.cs" />
<Compile Include="Menu.cs" />
<Compile Include="OpenFileDialogWrapper.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="WindowWrapper.cs" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -0,0 +1,210 @@
using System;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Management;
using System.Threading;
using System.Windows.Forms;
using ThreadState = System.Threading.ThreadState;
namespace FacturaNegociable
{
public static class FolderBrowserDialogWrapper
{
#region Private members
private const string SapProcessName = "SAP Business One";
private static string folderName;
#endregion
/// <summary>
/// Determina el número de instancias actuales de Business One en la computadora.
/// </summary>
/// <returns>Número encontrado de instancias</returns>
public static int IsBusinessOneRunning()
{
var returnValue = 0;
var userName = Environment.UserName;
folderName = string.Empty;
try
{
var processes = Process.GetProcessesByName(SapProcessName);
for (var i = 0; i <= processes.Length - 1; i++)
{
var processUserName = GetProcessUserName(processes[i]);
if (processUserName != userName)
{
continue;
}
returnValue++;
}
}
catch (Exception ex)
{
Program.sbo_application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
return returnValue;
}
/// <summary>
/// Muestra un diálogo estándar FileBrowser para obtener un nombre de archivo del usuario
/// </summary>
/// <param name="fileFilter">
/// The file Filter.
/// </param>
/// <returns>
/// Nombre de archivo si está seleccionado, más cadena. Vacio
/// </returns>
public static string SelectPath()
{
string returnValue = string.Empty;
try
{
var showFolderBrowserThread = new Thread(ShowFolderBrowser);
if (showFolderBrowserThread.ThreadState == ThreadState.Unstarted)
{
showFolderBrowserThread.SetApartmentState(ApartmentState.STA);
}
showFolderBrowserThread.Start();
showFolderBrowserThread.Join();
while (showFolderBrowserThread.ThreadState == ThreadState.Running)
{
Application.DoEvents();
}
if (false == string.IsNullOrEmpty(folderName))
{
returnValue = folderName;
}
}
catch (Exception ex)
{
Program.sbo_application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
return returnValue;
}
private static void ShowFolderBrowser()
{
var userName = Environment.UserName;
var folderBrowser = new FolderBrowserDialog();
folderName = string.Empty;
try
{
Process currentProcess = Process.GetCurrentProcess();
int parentProcessId = -1;
Process parentProcess = GetParent(currentProcess);
if (parentProcess == null)
{
Program.sbo_application.StatusBar.SetText("No hay proceso padre.", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
else
{
parentProcessId = parentProcess.Id;
var myWindow = new WindowWrapper(parentProcess.MainWindowHandle);
var ret = folderBrowser.ShowDialog(myWindow);
if (ret == DialogResult.OK)
{
folderName = folderBrowser.SelectedPath;
}
else
{
Application.ExitThread();
}
}
}
catch (Exception ex)
{
Program.sbo_application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
finally
{
folderBrowser.Dispose();
GC.Collect();
}
}
public static Process GetParent(this Process process)
{
try
{
using (var query = new ManagementObjectSearcher(
"SELECT * " +
"FROM Win32_Process " +
"WHERE ProcessId=" + process.Id))
{
return query
.Get()
.OfType<ManagementObject>()
.Select(p => Process.GetProcessById((int)(uint)p["ParentProcessId"]))
.FirstOrDefault();
}
}
catch
{
return null;
}
}
private static string GetProcessUserName(Process process)
{
var returnValue = string.Empty;
var query = string.Format(
CultureInfo.InvariantCulture,
"Select * from Win32_Process Where ProcessID = '{0}'",
process.Id);
var sq = new ObjectQuery(query);
using (var searcher = new ManagementObjectSearcher(sq))
{
ManagementObjectCollection processList = searcher.Get();
if (0 == processList.Count)
{
return string.Empty;
}
foreach (var o in processList)
{
var managementObject = (ManagementObject)o;
var args = new object[2];
// Invoca el método y rellena el var con el nombre de usuario y el dominio
managementObject.InvokeMethod("GetOwner", args);
if (null != args[0])
{
returnValue = args[0].ToString();
break;
}
}
}
return returnValue;
}
}
}
File diff suppressed because it is too large. Load diff
+122
View File
@@ -0,0 +1,122 @@
using System;
using System.Xml;
namespace FacturaNegociable
{
public static class FormularioWebBrowser
{
#region Formulario
public struct Formulario
{
public struct DataSources
{
public struct DBDataSources
{
}
public struct UserDataSources
{
public const string US = "US";
}
public struct DataTables
{
public const string DataTable = "DT_0";
}
}
public struct Items
{
public struct Item
{
public const string WebBrowser = "wb";
}
}
}
#endregion
public static void FormLoad(string fullpathfile, string tittle, SAPbobsCOM.Company oCompany, ref SAPbouiCOM.Application oApplication, out bool bBubbleEvent)
{
bBubbleEvent = true;
SAPbouiCOM.FormCreationParams oFormCreationPackage;
SAPbouiCOM.Form Form;
SAPbouiCOM.Item oItem;
SAPbouiCOM.WebBrowser oWebBrowser;
oFormCreationPackage = (SAPbouiCOM.FormCreationParams)oApplication.CreateObject(SAPbouiCOM.BoCreatableObjectType.cot_FormCreationParams);
try
{
XmlDocument xmlForm = new XmlDocument();
xmlForm.Load(Archivos.ArchivoFormularioWebBrowser);
oFormCreationPackage.XmlData = xmlForm.InnerXml;
oFormCreationPackage.UniqueID = "UF" + Funciones.Random().ToString();
Form = oApplication.Forms.AddEx(oFormCreationPackage);
if (tittle != string.Empty)
Form.Title = tittle;
oItem = Form.Items.Item(Formulario.Items.Item.WebBrowser);
oItem.Left = 5;
oItem.Top = 5;
oItem.Height = Form.ClientHeight - 5;
oItem.Width = Form.ClientWidth - 5;
oWebBrowser = (SAPbouiCOM.WebBrowser)oItem.Specific;
oWebBrowser.Url = fullpathfile;
Form.Visible = true;
}
catch (Exception e)
{
oApplication.StatusBar.SetText(e.ToString(), SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
}
public static void HandleItemEvent(string FormUID, ref SAPbouiCOM.ItemEvent oItemEvent, SAPbobsCOM.Company oCompany, ref SAPbouiCOM.Application oApplication, out bool bBubbleEvent)
{
bBubbleEvent = true;
switch (oItemEvent.EventType)
{
case SAPbouiCOM.BoEventTypes.et_FORM_RESIZE:
FormResize(FormUID, ref oItemEvent, oCompany, ref oApplication, out bBubbleEvent);
break;
}
}
public static void FormResize(string FormUID, ref SAPbouiCOM.ItemEvent oItemEvent, SAPbobsCOM.Company oCompany, ref SAPbouiCOM.Application oApplication, out bool bBubbleEvent)
{
bBubbleEvent = true;
SAPbouiCOM.Form Form;
SAPbouiCOM.Item Item;
Form = oApplication.Forms.Item(FormUID);
if (!oItemEvent.BeforeAction)
{
for (int i = 0; i < Form.Items.Count; i++)
{
if (Form.Items.Item(i).UniqueID == Formulario.Items.Item.WebBrowser)
{
Item = Form.Items.Item(Formulario.Items.Item.WebBrowser);
Item.Left = 5;
Item.Top = 5;
Item.Height = Form.ClientHeight - 5;
Item.Width = Form.ClientWidth - 5;
break;
}
}
}
}
}
}
+94
View File
@@ -0,0 +1,94 @@
using SAPbouiCOM;
using System;
using System.Security;
using System.Text.RegularExpressions;
namespace FacturaNegociable
{
public static class Funciones
{
public static long Random()
{
long _aleatorio = -1;
long _minimo = 1;
long _maximo = 1000;
Random r = new Random();
_aleatorio = (_minimo - _maximo) * r.Next() + _maximo;
return _aleatorio;
}
public static void LoadComboQuery(string _query, ref SAPbouiCOM.ComboBox oComboBox, string fieldValue, string fieldDesc, SAPbobsCOM.Company oCompany)
{
SAPbouiCOM.ValidValues oValidValues;
SAPbobsCOM.Recordset oRecordset;
oRecordset = (SAPbobsCOM.Recordset)oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset);
oRecordset.DoQuery(_query);
oValidValues = oComboBox.ValidValues;
while (oComboBox.ValidValues.Count > 0)
{
oComboBox.ValidValues.Remove(0, SAPbouiCOM.BoSearchKey.psk_Index);
}
if (string.Equals(fieldDesc, string.Empty))
{
while (!oRecordset.EoF)
{
oValidValues.Add(oRecordset.Fields.Item(fieldValue).Value.ToString(), "");
oRecordset.MoveNext();
}
}
else
{
while (!oRecordset.EoF)
{
oValidValues.Add(oRecordset.Fields.Item(fieldValue).Value.ToString(), oRecordset.Fields.Item(fieldDesc).Value.ToString());
oRecordset.MoveNext();
}
}
}
public static SAPbouiCOM.DataTable GetDataTableFromCLF(SAPbouiCOM.ItemEvent oEvent, SAPbouiCOM.Form oForm)
{
SAPbouiCOM.ChooseFromListEvent oChooseFromListEvent;
SAPbouiCOM.ChooseFromList oChooseFromList;
string ItemUid;
oChooseFromListEvent = (SAPbouiCOM.ChooseFromListEvent)oEvent;
ItemUid = oChooseFromListEvent.ChooseFromListUID;
oChooseFromList = oForm.ChooseFromLists.Item(ItemUid);
return oChooseFromListEvent.SelectedObjects;
}
public static string CleanString(string imputText)
{
string result = string.Empty;
//string pattern = @"\b[A-Z]\w*\b";
result = Regex.Replace(imputText, "[^A-Za-z0-9 _]", "");
return result;
}
public static SecureString ConvertToSecureString(string password)
{
if (password == null)
throw new ArgumentNullException("password");
unsafe
{
fixed (char* passwordChars = password)
{
var securePassword = new SecureString(passwordChars, password.Length);
securePassword.MakeReadOnly();
return securePassword;
}
}
}
}
}
+69
View File
@@ -0,0 +1,69 @@
using SAPbouiCOM.Framework;
using System;
using System.Xml;
namespace FacturaNegociable
{
public class Menu
{
public void AddMenuItems()
{
try
{
RemoveMenus();
var menuXml = new XmlDocument();
menuXml.Load("menu.xml");
Application.SBO_Application.LoadBatchActions(menuXml.InnerXml);
//SAPbouiCOM.MenuItem menu = Application.SBO_Application.Menus.Item(MenuUsuario.MenuPrincipal);
//menu.Image = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "creditcard.bmp");
}
catch (Exception)
{
}
}
public void RemoveMenus()
{
SAPbouiCOM.Menus oMenus = Application.SBO_Application.Menus;
if (oMenus.Exists(MenuUsuario.MenuFacturaNegociable))
{
oMenus.RemoveEx(MenuUsuario.MenuFacturaNegociable);
}
}
public void SBO_Application_MenuEvent(ref SAPbouiCOM.MenuEvent menuEvent, out bool BubbleEvent)
{
BubbleEvent = true;
try
{
switch (menuEvent.MenuUID)
{
case MenuUsuario.MenuFacturaNegociable:
FormularioFacturaNegociable.FormLoad(ref menuEvent, Program.sbo_company, ref Program.sbo_application, out BubbleEvent);
break;
default:
break;
}
}
catch (Exception ex)
{
Program.sbo_application.StatusBar.SetText("MenuEvent " + ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
}
}
}
+264
View File
@@ -0,0 +1,264 @@
using System;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Management;
using System.Threading;
using System.Windows.Forms;
using ThreadState = System.Threading.ThreadState;
namespace FacturaNegociable
{
public static class OpenFileDialogWrapper
{
#region Private members
private const string SapProcessName = "SAP Business One";
private static string fileName;
private static string filter = "All files(*.*)|*.*";
#endregion
/// <summary>
/// Determina el número de instancias actuales de Business One en la computadora.
/// </summary>
/// <returns>Número encontrado de instancias</returns>
public static int IsBusinessOneRunning()
{
var returnValue = 0;
var userName = Environment.UserName;
fileName = string.Empty;
try
{
var processes = Process.GetProcessesByName(SapProcessName);
for (var i = 0; i <= processes.Length - 1; i++)
{
var processUserName = GetProcessUserName(processes[i]);
if (processUserName != userName)
{
continue;
}
returnValue++;
}
}
catch (Exception ex)
{
Program.sbo_application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
//if (Debugger.IsAttached)
//{
// Debugger.Break();
//}
}
return returnValue;
}
/// <summary>
/// Muestra un diálogo estándar FileBrowser para obtener un nombre de archivo del usuario
/// </summary>
/// <param name="fileFilter">
/// The file Filter.
/// </param>
/// <returns>
/// Nombre de archivo si está seleccionado, más cadena. Vacio
/// </returns>
public static string FindFile(string fileFilter = "")
{
string returnValue = string.Empty;
if (!string.IsNullOrEmpty(fileFilter))
{
filter = fileFilter;
}
try
{
var showFolderBrowserThread = new Thread(ShowFolderBrowser);
if (showFolderBrowserThread.ThreadState == ThreadState.Unstarted)
{
showFolderBrowserThread.SetApartmentState(ApartmentState.STA);
}
showFolderBrowserThread.Start();
showFolderBrowserThread.Join();
while (showFolderBrowserThread.ThreadState == ThreadState.Running)
{
Application.DoEvents();
}
if (false == string.IsNullOrEmpty(fileName))
{
returnValue = fileName;
}
}
catch (Exception ex)
{
Program.sbo_application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
return returnValue;
}
private static void ShowFolderBrowser()
{
var userName = Environment.UserName;
var openFile = new OpenFileDialog();
fileName = string.Empty;
try
{
openFile.Multiselect = false;
openFile.Filter = filter;
int filterIndex = 0;
try
{
filterIndex = 0;
}
catch (Exception)
{
}
openFile.FilterIndex = filterIndex;
openFile.RestoreDirectory = true;
///////////////////////////////
Process currentProcess = Process.GetCurrentProcess();
int parentProcessId = -1;
Process parentProcess = GetParent(currentProcess);
if (parentProcess == null)
{
Program.sbo_application.StatusBar.SetText("No hay proceso padre.", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
else
{
parentProcessId = parentProcess.Id;
//var myWindow = new WindowWrapper(Process.GetProcessById(parentProcessId).MainWindowHandle);
var myWindow = new WindowWrapper(parentProcess.MainWindowHandle);
var ret = openFile.ShowDialog(myWindow);
if (ret == DialogResult.OK)
{
fileName = openFile.FileName;
}
else
{
Application.ExitThread();
}
}
///////////////////////////////
//Process[] runningProcesses = Process.GetProcesses();
//int currentSessionID = Process.GetCurrentProcess().SessionId;
//Program.archivoLog.EscribirLog($"Process.GetCurrentProcess().SessionId = {currentSessionID}");
//Process[] sameAsThisSession = runningProcesses.Where(p => p.SessionId == currentSessionID).ToArray();
//Program.archivoLog.EscribirLog($"sameAsThisSession Length = {sameAsThisSession.Length}");
//foreach (Process p in sameAsThisSession)
//{
// Program.archivoLog.EscribirLog($"ProcessName = {p.ProcessName} | Id = {p.Id} | SessionId = {p.SessionId} | ProcessUserName = {GetProcessUserName(p)}");
//}
}
catch (Exception ex)
{
Program.sbo_application.StatusBar.SetText(ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
finally
{
openFile.Dispose();
GC.Collect();
}
}
public static Process GetParent(this Process process)
{
try
{
using (var query = new ManagementObjectSearcher(
"SELECT * " +
"FROM Win32_Process " +
"WHERE ProcessId=" + process.Id))
{
return query
.Get()
.OfType<ManagementObject>()
.Select(p => Process.GetProcessById((int)(uint)p["ParentProcessId"]))
.FirstOrDefault();
}
}
catch
{
return null;
}
}
private static string GetProcessUserName(Process process)
{
var returnValue = string.Empty;
var query = string.Format(
CultureInfo.InvariantCulture,
"Select * from Win32_Process Where ProcessID = '{0}'",
process.Id);
var sq = new ObjectQuery(query);
using (var searcher = new ManagementObjectSearcher(sq))
{
ManagementObjectCollection processList = searcher.Get();
if (0 == processList.Count)
{
return string.Empty;
}
foreach (var o in processList)
{
var managementObject = (ManagementObject)o;
var args = new object[2];
// Invoca el método y rellena el var con el nombre de usuario y el dominio
managementObject.InvokeMethod("GetOwner", args);
if (null != args[0])
{
returnValue = args[0].ToString();
break;
}
}
}
return returnValue;
}
}
}
+200
View File
@@ -0,0 +1,200 @@
using System;
using SAPbouiCOM;
namespace FacturaNegociable
{
static class Program
{
#region VariablesGlobales
public static System.Globalization.NumberFormatInfo oNumberFormatInfo = new System.Globalization.NumberFormatInfo();
public static string RightClickColumn = null;
public static int RightClickRow = -1;
public static string RightClickItemUID = null;
public static bool ModalFormIsOpen = false;
public static SAPbobsCOM.Company sbo_company;
public static SAPbouiCOM.Application sbo_application;
public static SAPbouiCOM.ProgressBar sbo_progressbar = null;
//public static FileLogger archivoLog = new FileLogger();
#endregion
/// <summary>
/// Punto de entrada principal para la aplicación.
/// </summary>
[STAThread]
static void Main(string[] args)
{
try
{
SAPbouiCOM.Framework.Application oApp = null;
if (args.Length < 1)
{
oApp = new SAPbouiCOM.Framework.Application();
}
else
{
oApp = new SAPbouiCOM.Framework.Application(args[0]);
}
sbo_application = SAPbouiCOM.Framework.Application.SBO_Application;
sbo_company = (SAPbobsCOM.Company)sbo_application.Company.GetDICompany();
Program.oNumberFormatInfo.NumberDecimalSeparator = sbo_company.GetCompanyService().GetAdminInfo().DecimalSeparator;
Program.oNumberFormatInfo.NumberGroupSeparator = sbo_company.GetCompanyService().GetAdminInfo().ThousandsSeparator;
Menu MyMenu = new Menu();
MyMenu.AddMenuItems();
oApp.RegisterMenuEventHandler(MyMenu.SBO_Application_MenuEvent);
SAPbouiCOM.Framework.Application.SBO_Application.AppEvent += new SAPbouiCOM._IApplicationEvents_AppEventEventHandler(SBO_Application_AppEvent);
SAPbouiCOM.Framework.Application.SBO_Application.ItemEvent += new SAPbouiCOM._IApplicationEvents_ItemEventEventHandler(SBO_Application_ItemEvent);
SAPbouiCOM.Framework.Application.SBO_Application.FormDataEvent += new SAPbouiCOM._IApplicationEvents_FormDataEventEventHandler(SBO_Application_FormDataEvent);
SAPbouiCOM.Framework.Application.SBO_Application.ReportDataEvent += new SAPbouiCOM._IApplicationEvents_ReportDataEventEventHandler(SBO_Application_ReportDataEvent);
SAPbouiCOM.Framework.Application.SBO_Application.PrintEvent += new SAPbouiCOM._IApplicationEvents_PrintEventEventHandler(SBO_Application_PrintEvent);
SAPbouiCOM.Framework.Application.SBO_Application.RightClickEvent += new SAPbouiCOM._IApplicationEvents_RightClickEventEventHandler(SBO_Application_RightClickEvent);
SAPbouiCOM.Framework.Application.SBO_Application.ProgressBarEvent += new SAPbouiCOM._IApplicationEvents_ProgressBarEventEventHandler(SBO_Application_ProgressBarEvent);
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
SAPbouiCOM.Framework.Application.SBO_Application.StatusBar.SetText($"addon factura negociable {fvi.FileVersion} iniciado con éxito.", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success);
oApp.Run();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
private static void SBO_Application_ProgressBarEvent(ref ProgressBarEvent pVal, out bool BubbleEvent)
{
BubbleEvent = true;
if (pVal.EventType == BoProgressBarEventTypes.pbet_ProgressBarStopped && pVal.BeforeAction)
{
}
}
private static void SBO_Application_AppEvent(SAPbouiCOM.BoAppEventTypes eventType)
{
switch (eventType)
{
case SAPbouiCOM.BoAppEventTypes.aet_ShutDown:
//Exit Add-On
System.Windows.Forms.Application.Exit();
break;
case SAPbouiCOM.BoAppEventTypes.aet_CompanyChanged:
System.Windows.Forms.Application.Exit();
break;
case SAPbouiCOM.BoAppEventTypes.aet_FontChanged:
break;
case SAPbouiCOM.BoAppEventTypes.aet_LanguageChanged:
System.Windows.Forms.Application.Exit();
break;
case SAPbouiCOM.BoAppEventTypes.aet_ServerTerminition:
System.Windows.Forms.Application.Exit();
break;
default:
break;
}
}
private static void SBO_Application_ItemEvent(string FormUID, ref SAPbouiCOM.ItemEvent itemEvent, out bool BubbleEvent)
{
BubbleEvent = true;
try
{
switch (itemEvent.FormTypeEx)
{
case UserFormType.FormularioFacturaNegociable:
FormularioFacturaNegociable.HandleItemEvent(FormUID, ref itemEvent, Program.sbo_company, ref Program.sbo_application, out BubbleEvent);
break;
case UserFormType.FormularioWebBrowser:
FormularioWebBrowser.HandleItemEvent(FormUID, ref itemEvent, Program.sbo_company, ref Program.sbo_application, out BubbleEvent);
break;
default:
break;
}
}
catch (Exception ex)
{
sbo_application.StatusBar.SetText("ItemEvent " + ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
}
private static void SBO_Application_FormDataEvent(ref SAPbouiCOM.BusinessObjectInfo businessObjectInfo, out bool BubbleEvent)
{
BubbleEvent = true;
try
{
switch (businessObjectInfo.FormTypeEx)
{
default:
break;
}
}
catch (Exception ex)
{
sbo_application.StatusBar.SetText("FormDataEvent " + ex.Message, SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Error);
}
}
private static void SBO_Application_ReportDataEvent(ref SAPbouiCOM.ReportDataInfo reportDataInfo, out bool BubbleEvent)
{
BubbleEvent = true;
}
private static void SBO_Application_PrintEvent(ref SAPbouiCOM.PrintEventInfo printeventInfo, out bool BubbleEvent)
{
BubbleEvent = true;
}
private static void SBO_Application_RightClickEvent(ref SAPbouiCOM.ContextMenuInfo eventInfo, out bool BubbleEvent)
{
BubbleEvent = true;
//SAPbouiCOM.Form form;
//form = Program.sbo_application.Forms.Item(eventInfo.FormUID);
try
{
}
catch (Exception ex)
{
Program.sbo_application.MessageBox(ex.Message);
}
}
}
}
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// La información general de un ensamblado se controla mediante el siguiente
// conjunto de atributos. Cambie estos valores de atributo para modificar la información
// asociada con un ensamblado.
[assembly: AssemblyTitle("FacturaNegociable 3_3_0_0")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FacturaNegociable")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Si establece ComVisible en false, los tipos de este ensamblado no estarán visibles
// para los componentes COM. Si es necesario obtener acceso a un tipo en este ensamblado desde
// COM, establezca el atributo ComVisible en true en este tipo.
[assembly: ComVisible(false)]
// El siguiente GUID sirve como id. de typelib si este proyecto se expone a COM.
[assembly: Guid("84776f11-d2b7-4d6e-9a21-d8af0e7bf0d9")]
// La información de versión de un ensamblado consta de los cuatro valores siguientes:
//
// Versión principal
// Versión secundaria
// Número de compilación
// Revisión
//
// Puede especificar todos los valores o usar los valores predeterminados de número de compilación y de revisión
// utilizando el carácter "*", como se muestra a continuación:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.3.0.0")]
[assembly: AssemblyFileVersion("3.3.0.0")]
+63
View File
@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FacturaNegociable.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FacturaNegociable.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
+117
View File
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+26
View File
@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FacturaNegociable.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
+23
View File
@@ -0,0 +1,23 @@
using System;
using System.Windows.Forms;
namespace FacturaNegociable
{
public class WindowWrapper : IWin32Window
{
private readonly IntPtr hwnd;
/// <sumary>
/// Inicializa una nueva instancia de la clase WindowWrapper.
/// </sumary>
public WindowWrapper(IntPtr handle)
{
this.hwnd = handle;
}
/// <summary>
/// Obtiene el control de la ventana administrada por la clase.
/// </summary>
public IntPtr Handle => this.hwnd;
}
}
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="DocumentFormat.OpenXml" version="2.5" targetFramework="net472" />
<package id="DocumentFormat.OpenXml.Framework" version="3.0.2" targetFramework="net472" />
<package id="SpreadsheetLight" version="3.4.7" targetFramework="net472" />
<package id="System.Drawing.Common" version="8.0.4" targetFramework="net472" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net472" />
<package id="System.IO.Packaging" version="4.7.0" targetFramework="net472" />
</packages>
+151
View File
@@ -0,0 +1,151 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33103.184
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "netActualizacionLotes", "netActualizacionLotes\netActualizacionLotes.csproj", "{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrearEntrega", "CrearEntrega\CrearEntrega.csproj", "{03878884-70AB-4B40-97CD-2E07C5FDBE5B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FacturaNegociable", "FacturaNegociable\FacturaNegociable.csproj", "{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrdenImpresion", "OrdenImpresion\OrdenImpresion.csproj", "{83FFBDC1-CCA2-4CEA-8616-01944F557C73}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrearEntregaDropShip", "CrearEntregaDropShip\CrearEntregaDropShip.csproj", "{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DescargarExportacion", "DescargarExportacion\DescargarExportacion.csproj", "{343F5617-ED8B-46F8-B2F8-A027DDB1714C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualizadorCargos", "VisualizadorCargos\VisualizadorCargos.csproj", "{B04B7461-62BB-46F4-9993-F4927841716D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|arm64 = Debug|arm64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|arm64 = Release|arm64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Debug|arm64.ActiveCfg = Debug|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Debug|arm64.Build.0 = Debug|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Debug|x64.ActiveCfg = Debug|x64
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Debug|x64.Build.0 = Debug|x64
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Debug|x86.ActiveCfg = Debug|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Debug|x86.Build.0 = Debug|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Release|Any CPU.Build.0 = Release|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Release|arm64.ActiveCfg = Release|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Release|arm64.Build.0 = Release|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Release|x64.ActiveCfg = Release|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Release|x64.Build.0 = Release|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Release|x86.ActiveCfg = Release|Any CPU
{DC879D0E-37CA-45D2-ACEE-9D09E3F00ADE}.Release|x86.Build.0 = Release|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Debug|arm64.ActiveCfg = Debug|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Debug|arm64.Build.0 = Debug|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Debug|x64.ActiveCfg = Debug|x64
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Debug|x64.Build.0 = Debug|x64
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Debug|x86.ActiveCfg = Debug|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Debug|x86.Build.0 = Debug|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Release|Any CPU.Build.0 = Release|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Release|arm64.ActiveCfg = Release|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Release|arm64.Build.0 = Release|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Release|x64.ActiveCfg = Release|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Release|x64.Build.0 = Release|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Release|x86.ActiveCfg = Release|Any CPU
{03878884-70AB-4B40-97CD-2E07C5FDBE5B}.Release|x86.Build.0 = Release|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Debug|arm64.ActiveCfg = Debug|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Debug|arm64.Build.0 = Debug|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Debug|x64.ActiveCfg = Debug|x64
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Debug|x64.Build.0 = Debug|x64
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Debug|x86.ActiveCfg = Debug|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Debug|x86.Build.0 = Debug|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Release|Any CPU.Build.0 = Release|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Release|arm64.ActiveCfg = Release|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Release|arm64.Build.0 = Release|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Release|x64.ActiveCfg = Release|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Release|x64.Build.0 = Release|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Release|x86.ActiveCfg = Release|Any CPU
{84776F11-D2B7-4D6E-9A21-D8AF0E7BF0D9}.Release|x86.Build.0 = Release|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Debug|arm64.ActiveCfg = Debug|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Debug|arm64.Build.0 = Debug|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Debug|x64.ActiveCfg = Debug|x64
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Debug|x64.Build.0 = Debug|x64
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Debug|x86.ActiveCfg = Debug|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Debug|x86.Build.0 = Debug|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Release|Any CPU.Build.0 = Release|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Release|arm64.ActiveCfg = Release|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Release|arm64.Build.0 = Release|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Release|x64.ActiveCfg = Release|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Release|x64.Build.0 = Release|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Release|x86.ActiveCfg = Release|Any CPU
{83FFBDC1-CCA2-4CEA-8616-01944F557C73}.Release|x86.Build.0 = Release|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Debug|arm64.ActiveCfg = Debug|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Debug|arm64.Build.0 = Debug|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Debug|x64.ActiveCfg = Debug|x64
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Debug|x64.Build.0 = Debug|x64
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Debug|x86.ActiveCfg = Debug|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Debug|x86.Build.0 = Debug|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Release|Any CPU.Build.0 = Release|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Release|arm64.ActiveCfg = Release|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Release|arm64.Build.0 = Release|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Release|x64.ActiveCfg = Release|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Release|x64.Build.0 = Release|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Release|x86.ActiveCfg = Release|Any CPU
{79AF8DD0-FBC4-4EE5-A68D-7CEBDF9748B1}.Release|x86.Build.0 = Release|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Debug|arm64.ActiveCfg = Debug|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Debug|arm64.Build.0 = Debug|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Debug|x64.ActiveCfg = Debug|x64
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Debug|x64.Build.0 = Debug|x64
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Debug|x86.ActiveCfg = Debug|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Debug|x86.Build.0 = Debug|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Release|Any CPU.Build.0 = Release|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Release|arm64.ActiveCfg = Release|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Release|arm64.Build.0 = Release|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Release|x64.ActiveCfg = Release|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Release|x64.Build.0 = Release|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Release|x86.ActiveCfg = Release|Any CPU
{343F5617-ED8B-46F8-B2F8-A027DDB1714C}.Release|x86.Build.0 = Release|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Debug|arm64.ActiveCfg = Debug|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Debug|arm64.Build.0 = Debug|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Debug|x64.ActiveCfg = Debug|x64
{B04B7461-62BB-46F4-9993-F4927841716D}.Debug|x64.Build.0 = Debug|x64
{B04B7461-62BB-46F4-9993-F4927841716D}.Debug|x86.ActiveCfg = Debug|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Debug|x86.Build.0 = Debug|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Release|Any CPU.Build.0 = Release|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Release|arm64.ActiveCfg = Release|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Release|arm64.Build.0 = Release|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Release|x64.ActiveCfg = Release|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Release|x64.Build.0 = Release|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Release|x86.ActiveCfg = Release|Any CPU
{B04B7461-62BB-46F4-9993-F4927841716D}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9B39AC3C-275D-43EB-B95E-A09683DE4E33}
EndGlobalSection
EndGlobal