diff --git a/.gitignore b/.gitignore index cb363074..44011104 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -## Ignore Visual Studio temporary files, build results, and +## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore @@ -388,4 +388,7 @@ FodyWeavers.xsd # JetBrains Rider .idea/ *.sln.iml -© 2021 GitHub, Inc. \ No newline at end of file +© 2021 GitHub, Inc. + + +*.config diff --git a/Common/.vs/config/applicationhost.config b/Common/.vs/config/applicationhost.config index 40cde372..ccdb86cc 100644 --- a/Common/.vs/config/applicationhost.config +++ b/Common/.vs/config/applicationhost.config @@ -155,7 +155,7 @@ - + diff --git a/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache b/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache index f22623aa..51b278d8 100644 --- a/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache +++ b/Common/Hardware/WaterMeter/WaterMeterCore/WaterMeterRegisters/obj/Debug/WaterMeterRegisters.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -5ed75d99ee45ff67821090f1b3dbb001dd9e4fe3 +2060865c94a192d7a90bef853b7068b66f669cb3 diff --git a/Common/Tools/Tools.JsonToXlsHelper/obj/Debug/Tools.JsonToXlsHelper.csproj.CoreCompileInputs.cache b/Common/Tools/Tools.JsonToXlsHelper/obj/Debug/Tools.JsonToXlsHelper.csproj.CoreCompileInputs.cache index 133b97f0..afa1d6ec 100644 --- a/Common/Tools/Tools.JsonToXlsHelper/obj/Debug/Tools.JsonToXlsHelper.csproj.CoreCompileInputs.cache +++ b/Common/Tools/Tools.JsonToXlsHelper/obj/Debug/Tools.JsonToXlsHelper.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -0d85a5b3a7561b41163c20e5dc7713bcd0d65555 +590ff54dbee38af4239a7555d24927a48da34616 diff --git a/LaaProductionWeb/LaaProductionWeb.API.UnitTests/LaaProductionWeb.API.UnitTests.csproj b/LaaProductionWeb/LaaProductionWeb.API.UnitTests/LaaProductionWeb.API.UnitTests.csproj new file mode 100644 index 00000000..61764f10 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API.UnitTests/LaaProductionWeb.API.UnitTests.csproj @@ -0,0 +1,26 @@ + + + + netcoreapp2.1 + + false + + + + + + + + + + + + + + + + ..\..\..\..\..\..\..\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.abstractions\2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Mvc.Abstractions.dll + + + + \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.API.UnitTests/Models/ModelResultTests.cs b/LaaProductionWeb/LaaProductionWeb.API.UnitTests/Models/ModelResultTests.cs new file mode 100644 index 00000000..483c292f --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API.UnitTests/Models/ModelResultTests.cs @@ -0,0 +1,171 @@ +namespace LaaProductionWeb.Tests.Models +{ + using LaaProductionWeb.API.Models; + + using Microsoft.AspNetCore.Mvc; + using Microsoft.AspNetCore.Mvc.ModelBinding; + + using NUnit.Framework; + + using System.Linq; + using System.Reflection; + + public class ModelResultTests + { + [Test] + public void ModelResult_ShouldBeImplicitlyCreated_FromModelStateDictionary() + { + // Act + ModelResult modelResult = default(ModelStateDictionary); + + // Assert + Assert.IsNotNull(modelResult); + } + + [Test] + public void ModelResult_ShouldInitializeModelErrors_WhenCreatedFrom_ModelStateDictionary() + { + // Act + ModelResult modelResult = default(ModelStateDictionary); + + // Assert + Assert.IsNotNull(modelResult.ModelErrors); + } + + [Test] + public void ModelResult_ShouldNotSucceeded_WhenCreatedFrom_ModelStateDictionary() + { + // Act + ModelResult modelResult = default(ModelStateDictionary); + + // Assert + Assert.IsFalse(modelResult.Succeeded); + } + + [Test] + public void ModelResult_ShouldBeImplicitlyCreated_FromOtherObjects() + { + // Act + ModelResult modelResult = default(object); + + // Assert + Assert.IsNotNull(modelResult); + } + + [Test] + public void ModelResult_ShouldSucceeded_WhenCreated_FromOtherObjects() + { + // Act + ModelResult modelResult = default(object); + + // Assert + Assert.IsTrue(modelResult.Succeeded); + } + + [Test] + public void ModelResult_ShouldHaveSameValue_WhenCreated_FromOtherObjects() + { + // Arrange + var value = nameof(ModelResult); + ModelResult modelResult = value; + + // Act + var fieldValue = typeof(ModelResult) + .GetFields(BindingFlags.NonPublic | BindingFlags.Instance) + .FirstOrDefault(x => x.Name == nameof(value)) + ?.GetValue(modelResult); + + // Assert + Assert.AreEqual(value, fieldValue); + } + + [Test] + public void ModelResult_AddModelError_ShuldNotAddError_WhenKeyIsNull() + { + // Arrange + ModelResult modelResult = default(ModelStateDictionary); + var modelErrors = modelResult.ModelErrors; + + // Act + var errorsCountBefore = modelErrors.Count; + modelResult.AddModelError(null, null); + var errorsCountAfter = modelErrors.Count; + + // Assert + Assert.AreEqual(errorsCountBefore, errorsCountAfter); + } + + [Test] + public void ModelResult_AddModelError_ShuldAddErrors_WhenKeyIsNotNull() + { + // Arrange + ModelResult modelResult = default(ModelStateDictionary); + var modelErrors = modelResult.ModelErrors; + + // Act + var errorsCountBefore = modelErrors.Count; + modelResult.AddModelError(string.Empty, null); + var errorsCountAfter = modelErrors.Count; + + // Assert + Assert.Greater(errorsCountAfter, errorsCountBefore); + } + + [Test] + public void ModelResult_AddModelError_ShuldOverrideError_WhenKeyExists() + { + // Arrange + ModelResult modelResult = default(ModelStateDictionary); + var modelErrors = modelResult.ModelErrors; + + // Act + modelResult.AddModelError(string.Empty, "1"); + var valueBefore = modelErrors[string.Empty]; + + modelResult.AddModelError(string.Empty, "2"); + var valueAfter = modelErrors[string.Empty]; + + // Assert + Assert.AreNotEqual(valueBefore, valueAfter); + } + + [Test] + public void ModelResult_ReturnsNotFoundResult_WhenModelResult_IsNull() + { + // Arrange + ModelResult modelResult = null; + + // Act + ActionResult actionResult = modelResult; + + // Assert + Assert.AreEqual(actionResult.GetType(), typeof(NotFoundResult)); + } + + [Test] + public void ModelResult_ReturnsBadRequestObjectResult_WhenCreatedFrom_ModelStateDictionary() + { + // Arrange + ModelResult modelResult = default(ModelStateDictionary); + + // Act + ActionResult actionResult = modelResult; + + // Assert + Assert.AreEqual(actionResult.GetType(), typeof(BadRequestObjectResult)); + } + + [Test] + public void ModelResult_ReturnsOkObjectResult_WhenCreatedWhitValue() + { + // Arrange + ModelResult modelResult = default(string); + + // Act + ActionResult actionResult = modelResult; + + // Assert + Assert.AreEqual(actionResult.GetType(), typeof(OkObjectResult)); + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API.UnitTests/Models/WildcardInputModelTests.cs b/LaaProductionWeb/LaaProductionWeb.API.UnitTests/Models/WildcardInputModelTests.cs new file mode 100644 index 00000000..dec2a46c --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API.UnitTests/Models/WildcardInputModelTests.cs @@ -0,0 +1,145 @@ +namespace LaaProductionWeb.Tests.Models +{ + using LaaProductionWeb.API.Areas.Serach.Models; + + using NUnit.Framework; + + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.Linq; + using System.Reflection; + + public class WildcardInputModelTests + { + private readonly WildcardInputModel model; + private readonly PropertyInfo tokenPropertyInfo; + + public WildcardInputModelTests() + { + this.model = new WildcardInputModel(); + this.tokenPropertyInfo = typeof(WildcardInputModel) + .GetProperty(nameof(WildcardInputModel.Token), BindingFlags.Instance | BindingFlags.Public); + } + + [Test] + public void ModelValidation_ShouldNotValidate_WhenTokenIsNull() + { + // Arrange + var errorMessage = this.ValidateModelWhitValue(default(string)); + + // Act + var attributeMessage = this.GetAttributeMessage(); + + // Assert + Assert.AreEqual(errorMessage, attributeMessage); + } + + [Test] + public void ModelValidation_ShouldNotValidate_WhenTokenIsUnder_1CharLength() + { + // Arrange + var errorMessage = this.ValidateModelWhitValue(string.Empty); + + // Act + var attributeMessage = this.GetAttributeMessage(); + + // Assert + Assert.AreEqual(errorMessage, attributeMessage); + } + + [Test] + public void ModelValidation_ShouldNotValidate_WhenTokenIsOver_50CharsLength() + { + // Arrange + var errorMessage = this.ValidateModelWhitValue(new string('0', 51)); + + // Act + var attributeMessage = this.GetAttributeMessage(); + + // Assert + Assert.AreEqual(errorMessage, attributeMessage); + } + + [Test] + [TestCase("^")] + [TestCase("°")] + [TestCase("\"")] + [TestCase("§")] + [TestCase("$")] + [TestCase("%")] + [TestCase("&")] + [TestCase("/")] + [TestCase("(")] + [TestCase(")")] + [TestCase("=")] + [TestCase("?")] + [TestCase("`")] + [TestCase("´")] + [TestCase("'")] + [TestCase("#")] + [TestCase("*")] + [TestCase("+")] + [TestCase("|")] + [TestCase("\t")] + [TestCase("\n")] + [TestCase("<")] + [TestCase(">")] + [TestCase(".")] + [TestCase(";")] + [TestCase(":")] + [TestCase("_")] + [TestCase("ä")] + [TestCase("ö")] + [TestCase("ü")] + [TestCase("Ä")] + [TestCase("Ö")] + [TestCase("Ü")] + [TestCase("ß")] + public void ModelValidation_ShouldNotValidate_WhenTokenContains_NonWordCharachters(string token) + { + // Arrange + var errorMessage = this.ValidateModelWhitValue(token); + + // Act + var attributeMessage = this.GetAttributeMessage(); + + // Assert + Assert.AreEqual(errorMessage, attributeMessage); + } + + [Test] + [TestCase("0123245 5575689-ARWQGVVJALR fasdkfawe irfoelvm")] + public void ModelValidation_ShouldValidate_WhenTokenIsValidNr(string token) + { + // Arrange + var nullMessage = default(string); + + // Act + var errorMessage = this.ValidateModelWhitValue(token); + + // Assert + Assert.AreEqual(errorMessage, nullMessage); + } + + private string ValidateModelWhitValue(string value) + { + var validationResults = new List(); + var validationContext = new ValidationContext(this.model); + + if (Validator.TryValidateObject(this.model, validationContext, validationResults)) + { + return validationResults + .Where(x => x.MemberNames.Contains(nameof(WildcardInputModel.Token))) + .FirstOrDefault(x => !string.IsNullOrWhiteSpace(x.ErrorMessage)) + ?.ErrorMessage ?? default(string); + } + + return default(string); + } + + private string GetAttributeMessage() where T : ValidationAttribute + => this.tokenPropertyInfo + .GetCustomAttribute() + .ErrorMessage; + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/AreaController.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/AreaController.cs new file mode 100644 index 00000000..8c84bbf0 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/AreaController.cs @@ -0,0 +1,10 @@ +namespace LaaProductionWeb.API.Areas +{ + using Microsoft.AspNetCore.Mvc; + + [ApiController] + [Route("[area]/[controller]")] + public class AreaController : ControllerBase + { + } +} \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Controllers/WildcardController.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Controllers/WildcardController.cs new file mode 100644 index 00000000..8c26f613 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Controllers/WildcardController.cs @@ -0,0 +1,23 @@ +namespace LaaProductionWeb.API.Areas.Serach.Controllers +{ + using LaaProductionWeb.API.Areas.Serach.Models; + using LaaProductionWeb.API.Areas.Serach.Models.Interfaces; + + using Microsoft.AspNetCore.Mvc; + + public class WildcardController : SearchController + { + private readonly IWildcardModel wildcardModel; + + public WildcardController(IWildcardModel wildcardModel) + => this.wildcardModel = wildcardModel; + + [HttpOptions] + public ActionResult Options() + => this.wildcardModel.Options(); + + [HttpGet] + public ActionResult Get([FromQuery] WildcardInputModel model) + => this.wildcardModel.Find(this.ModelState, model); + } +} \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/Interfaces/IWildcardModel.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/Interfaces/IWildcardModel.cs new file mode 100644 index 00000000..b96b23ed --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/Interfaces/IWildcardModel.cs @@ -0,0 +1,14 @@ +namespace LaaProductionWeb.API.Areas.Serach.Models.Interfaces +{ + using LaaProductionWeb.API.Models; + using Microsoft.AspNetCore.Mvc.ModelBinding; + + using System.Collections.Generic; + + public interface IWildcardModel + { + ModelResult> Find(ModelStateDictionary validationState, WildcardInputModel model); + + ModelResult> Options(); + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardInputModel.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardInputModel.cs new file mode 100644 index 00000000..27051b9b --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardInputModel.cs @@ -0,0 +1,33 @@ +namespace LaaProductionWeb.API.Areas.Serach.Models +{ + using System; + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + using System.Linq; + + public class WildcardInputModel + { + private IEnumerable fields = Array.Empty(); + + [Required(ErrorMessageResourceType = typeof(ErrorMessages), ErrorMessageResourceName = nameof(ErrorMessages.Required))] + [StringLength(50, ErrorMessageResourceType = typeof(ErrorMessages), ErrorMessageResourceName = nameof(ErrorMessages.StringLength), MinimumLength = 1)] + [RegularExpression("^[0-9 a-z-A-Z]+$", ErrorMessageResourceType = typeof(ErrorMessages), ErrorMessageResourceName = nameof(ErrorMessages.RegularExpression))] + public string Token { get; set; } + + public string Fields + { + get => string.Join(",", this.fields); + set => this.fields = $"{value}".Split(',', StringSplitOptions.RemoveEmptyEntries); + } + + internal IEnumerable GetRequiredFields(IEnumerable allFields) + { + if (this.fields.Any()) + { + return allFields.Where(x => this.fields.Contains(x, StringComparer.OrdinalIgnoreCase)); + } + + return allFields; + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardModel.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardModel.cs new file mode 100644 index 00000000..a66a7a52 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardModel.cs @@ -0,0 +1,136 @@ +namespace LaaProductionWeb.API.Areas.Serach.Models +{ + using LaaProductionWeb.Data.Interfaces; + using LaaProductionWeb.API.Areas.Serach.Models.Interfaces; + using LaaProductionWeb.API.Models; + + using Microsoft.AspNetCore.Mvc.ModelBinding; + + using System.Collections.Generic; + using System.Linq; + + public class WildcardModel : IWildcardModel + { + public static readonly IEnumerable fields = new[] + { + "Client", + "OrderNo", + "PosNo", + "SerialNo", + "ClientSerialNo", + "KurzBez", + "Typ", + "Nennweite", + "Baulaenge", + "Quantity", + "FabricNo", + "IdentNr", + "PcbId", + "ERAddress", + "GMAddress", + }; + + private readonly ISqlClient sqlClient; + + public WildcardModel(ISqlClient sqlClient) + => this.sqlClient = sqlClient; + + public ModelResult> Find(ModelStateDictionary validationState, WildcardInputModel model) + { + if (validationState.IsValid) + { + var requiredFields = model.GetRequiredFields(fields); + + return sqlClient.ExecuteReader($@" + DECLARE @serienNr TABLE([Nr] VARCHAR(50)); + ----------------------------------------------------------------------------- + -- 1. LOOK FOR SERIAL NUMBER ------------------------------------------------ + ----------------------------------------------------------------------------- + INSERT INTO @serienNr + SELECT [APS].[SerienNr] + FROM [AuftragPositionSerienNr] AS [APS] + WHERE [APS].[SerienNr] LIKE @{nameof(model.Token)} + OR [APS].[KundeneigeneSerienNr] LIKE @{nameof(model.Token)}; + ----------------------------------------------------------------------------- + -- 2. LOOK FOR PCB NUMBER --------------------------------------------------- + ----------------------------------------------------------------------------- + INSERT INTO @serienNr + SELECT [PCBS].[MapPcbIdToSerialNumber_SerialNumber] + FROM [MapPcbIdToSerialNumber] AS [PCBS] + WHERE [PCBS].[MapPcbIdToSerialNumber_PcbId] LIKE @{nameof(model.Token)}; + ----------------------------------------------------------------------------- + -- 3. LOOK FOR FUNK ADDRESS E-REGISTER -------------------------------------- + ----------------------------------------------------------------------------- + INSERT INTO @serienNr + SELECT [ER].[Seriennummer] + FROM [eRegister] AS [ER] + WHERE [ER].[Adresse] LIKE @{nameof(model.Token)}; + ----------------------------------------------------------------------------- + -- 4. LOOK FOR FUNK ADDRESS GENESIS ----------------------------------------- + ----------------------------------------------------------------------------- + INSERT INTO @serienNr + SELECT [GM].[Seriennummer] + FROM [Genesis_Meter] AS [GM] + WHERE [GM].[Adresse] LIKE @{nameof(model.Token)}; + ----------------------------------------------------------------------------- + -- 5. TAKE ORDERS INFO ------------------------------------------------------ + ----------------------------------------------------------------------------- + SELECT DISTINCT + -- KundenNr CustomerNr + [KN].[Name] AS [Client] -- Customer + -- FertigungNr - ProductionOrderNo + , [APS].[AuftragNr] AS [OrderNo] -- CustomerOrderNo + , [APS].[PositionNr] AS [PosNo] + , [APS].[SerienNr] AS [SerialNo] + , [APS].[KundeneigeneSerienNr] AS [ClientSerialNo] -- CustomerSerialNo + , [IDN].[KurzBez] AS [KurzBez] + , [IDN].[Typ] AS [Typ] + , [IDN].[Nennweite] AS [Nennweite] + , [IDN].[Baulaenge] AS [Baulaenge] + , [AP].[Menge] AS [Quantity] + , [APS].[FabNr] AS [FabricNo] + , [IDN].[IdentNr] AS [IdentNr] + , [PCBS].[MapPcbIdToSerialNumber_PcbId] AS [PcbId] + , [ER].[Adresse] AS [ERAddress] -- ErRadioAddress + , [GM].[Adresse] AS [GMAddress] -- GmRadioAddress + FROM [AuftragPositionSerienNr] AS [APS] + LEFT JOIN [AuftragPosition_Gesamt] AS [AP] + ON [AP].[AuftragNr] = [APS].[AuftragNr] + AND [AP].[PositionNr] = [APS].[PositionNr] + LEFT JOIN [Auftrag_Gesamt] AS [AG] + ON [AG].[AuftragNr] = [APS].[AuftragNr] + LEFT JOIN [Kunde] AS [KN] + ON [KN].[KundenNr] = [AG].[KundenNr] + LEFT JOIN [Identnr] AS [IDN] + ON [IDN].[IdentNr] = [AP].[Identnr] + LEFT JOIN [MapPcbIdToSerialNumber] AS [PCBS] + ON [PCBS].[MapPcbIdToSerialNumber_SerialNumber] = [APS].[SerienNr] + LEFT JOIN [eRegister] AS [ER] + ON [ER].[Seriennummer] = [APS].[SerienNr] + LEFT JOIN [Genesis_Meter] AS [GM] + ON [GM].[Seriennummer] = [APS].[SerienNr] + WHERE [APS].[SerienNr] IN (SELECT [Nr] FROM @serienNr)", + parameters => parameters.Add(nameof(model.Token), model.Token), + reader => this.ToWildcardResult(reader, requiredFields)) + .ToList(); + } + + return validationState; + } + + public ModelResult> Options() + => fields.ToList(); + + internal WildcardResult ToWildcardResult(ISqlReader reader, IEnumerable fields) + { + var wildcardResult = new WildcardResult(); + + foreach (var field in fields) + { + wildcardResult[field] = reader.GetValue(field); + } + + return wildcardResult; + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardResult.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardResult.cs new file mode 100644 index 00000000..6db9323f --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/Models/WildcardResult.cs @@ -0,0 +1,8 @@ +namespace LaaProductionWeb.API.Areas.Serach.Models +{ + using System.Collections.Generic; + + public class WildcardResult : Dictionary + { + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/SearchController.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/SearchController.cs new file mode 100644 index 00000000..805ac763 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Serach/SearchController.cs @@ -0,0 +1,9 @@ +namespace LaaProductionWeb.API.Areas.Serach +{ + using Microsoft.AspNetCore.Mvc; + + [Area("Search")] + public class SearchController : AreaController + { + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Controllers/ScannedController.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Controllers/ScannedController.cs new file mode 100644 index 00000000..b9673ee9 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Controllers/ScannedController.cs @@ -0,0 +1,20 @@ +namespace LaaProductionWeb.API.Areas.Shipment.Controllers.Scanned +{ + using LaaProductionWeb.API.Areas.Shipment.Models.Interfaces; + + using Microsoft.AspNetCore.Mvc; + + public class ScannedController : ShipmentController + { + private readonly IScanModel scanModel; + + public ScannedController(IScanModel scanModel) + { + this.scanModel = scanModel; + } + + [HttpGet("Serial/{serialNo}")] + public IActionResult Get([FromRoute] string serialNo) + => this.Ok(serialNo); + } +} \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Models/Interfaces/IScanModel.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Models/Interfaces/IScanModel.cs new file mode 100644 index 00000000..d1256383 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Models/Interfaces/IScanModel.cs @@ -0,0 +1,6 @@ +namespace LaaProductionWeb.API.Areas.Shipment.Models.Interfaces +{ + public interface IScanModel + { + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Models/ScanModel.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Models/ScanModel.cs new file mode 100644 index 00000000..7b17facc --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/Models/ScanModel.cs @@ -0,0 +1,13 @@ +namespace LaaProductionWeb.API.Areas.Shipment.Models +{ + using LaaProductionWeb.API.Areas.Shipment.Models.Interfaces; + using LaaProductionWeb.Data.Interfaces; + + public class ScanModel : IScanModel + { + private readonly ISqlClient sqlClient; + + public ScanModel(ISqlClient sqlClient) + => this.sqlClient = sqlClient; + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/ShipmentController.cs b/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/ShipmentController.cs new file mode 100644 index 00000000..e071794f --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Areas/Shipment/ShipmentController.cs @@ -0,0 +1,9 @@ +namespace LaaProductionWeb.API.Areas.Shipment +{ + using Microsoft.AspNetCore.Mvc; + + [Area("Shipment")] + public class ShipmentController : AreaController + { + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/ErrorMessages.Designer.cs b/LaaProductionWeb/LaaProductionWeb.API/ErrorMessages.Designer.cs new file mode 100644 index 00000000..9fdef62a --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/ErrorMessages.Designer.cs @@ -0,0 +1,90 @@ +//------------------------------------------------------------------------------ +// +// 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. +// +//------------------------------------------------------------------------------ + +namespace LaaProductionWeb.API { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // 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", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class ErrorMessages { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal ErrorMessages() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LaaProductionWeb.API.ErrorMessages", typeof(ErrorMessages).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to Field {0} is not well formatted.. + /// + public static string RegularExpression { + get { + return ResourceManager.GetString("RegularExpression", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Field {0} is required.. + /// + public static string Required { + get { + return ResourceManager.GetString("Required", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Field {0} requires at liest {2} and up to {1} charachters.. + /// + public static string StringLength { + get { + return ResourceManager.GetString("StringLength", resourceCulture); + } + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/ErrorMessages.resx b/LaaProductionWeb/LaaProductionWeb.API/ErrorMessages.resx new file mode 100644 index 00000000..6b389d4c --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/ErrorMessages.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Field {0} is not well formatted. + + + Field {0} is required. + + + Field {0} requires at liest {2} and up to {1} charachters. + + \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.API/LaaProductionWeb.API.csproj b/LaaProductionWeb/LaaProductionWeb.API/LaaProductionWeb.API.csproj new file mode 100644 index 00000000..619e19fa --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/LaaProductionWeb.API.csproj @@ -0,0 +1,38 @@ + + + + netcoreapp2.1 + 1fb61288-8dc8-4657-b44c-193c6aad5f65 + + + + + + + + + + + + + + + True + True + ErrorMessages.resx + + + + + + PublicResXFileCodeGenerator + ErrorMessages.Designer.cs + + + + + + + + + diff --git a/LaaProductionWeb/LaaProductionWeb.API/Models/ApplicationSettings.cs b/LaaProductionWeb/LaaProductionWeb.API/Models/ApplicationSettings.cs new file mode 100644 index 00000000..171493d3 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Models/ApplicationSettings.cs @@ -0,0 +1,21 @@ +namespace LaaProductionWeb.API.Models +{ + /// + /// C# class representation of the appsettings.json file. + /// + public class ApplicationSettings + { + /// + /// Default defined ConnectionStrings section for the appsettings.json + /// + public ConnectionStrings ConnectionStrings { get; set; } + } + + /// + /// Default defined ConnectionStrings section for the appsettings.json + /// + public class ConnectionStrings + { + public string DefaultConnection { get; set; } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Models/ModelResult[T].cs b/LaaProductionWeb/LaaProductionWeb.API/Models/ModelResult[T].cs new file mode 100644 index 00000000..5f3f56f7 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Models/ModelResult[T].cs @@ -0,0 +1,77 @@ +namespace LaaProductionWeb.API.Models +{ + using Microsoft.AspNetCore.Mvc; + using Microsoft.AspNetCore.Mvc.ModelBinding; + + using System.Collections.Generic; + using System.Linq; + + public class ModelResult + { + private readonly T value; + private readonly Dictionary errors; + + private ModelResult(bool succeeded) + { + this.Succeeded = succeeded; + this.errors = new Dictionary(); + } + + private ModelResult(T value) + { + this.Succeeded = true; + this.value = value; + } + + public bool Succeeded { get; } + + public IReadOnlyDictionary ModelErrors + => this.errors; + + public void AddModelError(string key, string value) + { + if (key != null) + { + this.errors[key] = value; + } + } + + public static implicit operator ModelResult(T value) + => new ModelResult(value); + + public static implicit operator ModelResult(ModelStateDictionary modelState) + { + var validationResults = new ModelResult(false); + + if (modelState != null) + { + foreach (var entry in modelState) + { + var errorKey = entry.Key; + var errorValue = entry.Value; + + if (errorValue.ValidationState == ModelValidationState.Invalid && errorValue.Errors.Any()) + { + validationResults.AddModelError(errorKey, errorValue.Errors.First().ErrorMessage); + } + } + } + + return validationResults; + } + + public static implicit operator ActionResult(ModelResult modelState) + { + if (modelState is null) + { + return new NotFoundResult(); + } + else if (modelState.Succeeded) + { + return new OkObjectResult(modelState.value); + } + + return new BadRequestObjectResult(modelState.errors); + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Program.cs b/LaaProductionWeb/LaaProductionWeb.API/Program.cs new file mode 100644 index 00000000..5821390a --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Program.cs @@ -0,0 +1,30 @@ +namespace LaaProductionWeb.API +{ + using Microsoft.AspNetCore; + using Microsoft.AspNetCore.Hosting; + + /// + /// Application startup class contining the method. + /// + public class Program + { + /// + /// Default start point for the application. + /// + /// arguments provided from server on application start. + public static void Main(string[] args) + => CreateWebHostBuilder(args) + .Build() + .Run(); + + /// + /// !Important do not refactor. This method is used from other frameworks, like EntityFramework. + /// + /// arguments provided from for creating the . + /// Created and configured . + public static IWebHostBuilder CreateWebHostBuilder(string[] args) + => WebHost + .CreateDefaultBuilder(args) + .UseStartup(); + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/Properties/launchSettings.json b/LaaProductionWeb/LaaProductionWeb.API/Properties/launchSettings.json new file mode 100644 index 00000000..4b0a3308 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Properties/launchSettings.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:59262", + "sslPort": 44346 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "api/values", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "LaaProductionWeb.API": { + "commandName": "Project", + "launchBrowser": true, + "launchUrl": "api/values", + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.API/Startup.cs b/LaaProductionWeb/LaaProductionWeb.API/Startup.cs new file mode 100644 index 00000000..802cdc0d --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/Startup.cs @@ -0,0 +1,52 @@ +namespace LaaProductionWeb.API +{ + using LaaProductionWeb.Data; + using LaaProductionWeb.Data.Interfaces; + using LaaProductionWeb.API.Areas.Serach.Models; + using LaaProductionWeb.API.Areas.Serach.Models.Interfaces; + using LaaProductionWeb.API.Models; + + using Microsoft.AspNetCore.Builder; + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.Mvc; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; + + public class Startup + { + private readonly IConfiguration configuration; + + public Startup(IConfiguration configuration) + => this.configuration = configuration; + + public void ConfigureServices(IServiceCollection services) + { + var connectionString = this.configuration + .GetConnectionString(nameof(ConnectionStrings.DefaultConnection)); + services.AddTransient(_ => new SqlClient(connectionString)); + services.AddTransient(); + services.Configure(options => + { + options.SuppressModelStateInvalidFilter = true; + }); + services + .AddMvc() + .SetCompatibilityVersion(CompatibilityVersion.Latest); + } + + public void Configure(IApplicationBuilder app, IHostingEnvironment env) + { + app.UseHsts(); + app.UseDeveloperExceptionPage(); + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseCookiePolicy(); + + app.UseMvc(routes => + { + routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}"); + routes.MapRoute(name: "areas", template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); + }); + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.API/appsettings.json b/LaaProductionWeb/LaaProductionWeb.API/appsettings.json new file mode 100644 index 00000000..eb1e246a --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.API/appsettings.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "Data Source=SLASQL01.emea.sensus.net;Initial Catalog=Auftrag;Password=ServiceParingfile;Persist Security Info=True;User ID=ServiceParingfile;" + } +} \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.Data/Interfaces/ISqlClient.cs b/LaaProductionWeb/LaaProductionWeb.Data/Interfaces/ISqlClient.cs index e2a923d8..d5dca1bd 100644 --- a/LaaProductionWeb/LaaProductionWeb.Data/Interfaces/ISqlClient.cs +++ b/LaaProductionWeb/LaaProductionWeb.Data/Interfaces/ISqlClient.cs @@ -3,7 +3,8 @@ using System; using System.Collections.Generic; using System.Data.SqlClient; - + using System.Threading.Tasks; + public interface ISqlClient { int ExecuteNonQuery(string query, Action parameters, SqlInfoMessageEventHandler errorCallback = null); diff --git a/LaaProductionWeb/LaaProductionWeb.Data/Interfaces/ISqlReader.cs b/LaaProductionWeb/LaaProductionWeb.Data/Interfaces/ISqlReader.cs index 038f614b..2d72f6d7 100644 --- a/LaaProductionWeb/LaaProductionWeb.Data/Interfaces/ISqlReader.cs +++ b/LaaProductionWeb/LaaProductionWeb.Data/Interfaces/ISqlReader.cs @@ -7,5 +7,7 @@ string GetString(int index = -1); T GetValue(int index = -1); + + object GetValue(string field); } } \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.Data/LaaProductionWeb.Data.csproj b/LaaProductionWeb/LaaProductionWeb.Data/LaaProductionWeb.Data.csproj index 40cea338..8c648053 100644 --- a/LaaProductionWeb/LaaProductionWeb.Data/LaaProductionWeb.Data.csproj +++ b/LaaProductionWeb/LaaProductionWeb.Data/LaaProductionWeb.Data.csproj @@ -12,6 +12,7 @@ v4.6.2 512 true + true @@ -48,6 +49,7 @@ ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + @@ -56,8 +58,6 @@ - - diff --git a/LaaProductionWeb/LaaProductionWeb.Data/Repositories/Interfaces/IRepository[T].cs b/LaaProductionWeb/LaaProductionWeb.Data/Repositories/Interfaces/IRepository[T].cs deleted file mode 100644 index 7f22f717..00000000 --- a/LaaProductionWeb/LaaProductionWeb.Data/Repositories/Interfaces/IRepository[T].cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace LaaProductionWeb.Data.Repositories.Interfaces -{ - using System.Collections.Generic; - - public interface IRepository - { - int Create(string query, object parameters); - - int Delete(string query, object parameters); - - IEnumerable First(string query, object parameters); - - T Read(string query, object parameters); - - int Update(string query, object parameters); - } -} diff --git a/LaaProductionWeb/LaaProductionWeb.Data/Repositories/Repository[T].cs b/LaaProductionWeb/LaaProductionWeb.Data/Repositories/Repository[T].cs deleted file mode 100644 index 684b90ce..00000000 --- a/LaaProductionWeb/LaaProductionWeb.Data/Repositories/Repository[T].cs +++ /dev/null @@ -1,40 +0,0 @@ -namespace LaaProductionWeb.Data.Repositories -{ - using System.Collections.Generic; - - using LaaProductionWeb.Data.Interfaces; - using LaaProductionWeb.Data.Repositories.Interfaces; - - public abstract class Repository : IRepository - { - private readonly ISqlClient sqlClient; - - protected Repository(ISqlClient sqlClient) - => this.sqlClient = sqlClient; - - public int Create(string query, object parameters) - { - throw new System.NotImplementedException(); - } - - public int Delete(string query, object parameters) - { - throw new System.NotImplementedException(); - } - - public IEnumerable First(string query, object parameters) - { - throw new System.NotImplementedException(); - } - - public T Read(string query, object parameters) - { - throw new System.NotImplementedException(); - } - - public int Update(string query, object parameters) - { - throw new System.NotImplementedException(); - } - } -} diff --git a/LaaProductionWeb/LaaProductionWeb.Data/SqlClient.cs b/LaaProductionWeb/LaaProductionWeb.Data/SqlClient.cs index b8b3a5fe..bcdc38d9 100644 --- a/LaaProductionWeb/LaaProductionWeb.Data/SqlClient.cs +++ b/LaaProductionWeb/LaaProductionWeb.Data/SqlClient.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Data; using System.Data.SqlClient; - + public class SqlClient : ISqlClient { private readonly string connectionString; diff --git a/LaaProductionWeb/LaaProductionWeb.Data/SqlClientExtensions.cs b/LaaProductionWeb/LaaProductionWeb.Data/SqlClientExtensions.cs index 5905afd4..e04fb0e7 100644 --- a/LaaProductionWeb/LaaProductionWeb.Data/SqlClientExtensions.cs +++ b/LaaProductionWeb/LaaProductionWeb.Data/SqlClientExtensions.cs @@ -3,9 +3,13 @@ using LaaProductionWeb.Data.Interfaces; using Microsoft.Extensions.DependencyInjection; - + + using System; using System.Data.SqlClient; using System.Diagnostics; + using System.IO; + using System.Threading.Tasks; + using System.Web; public static class SqlClientExtensions { @@ -29,11 +33,31 @@ sqlConnection.Open(); } + internal static async Task OpenWithErrorHandlingAsync(this SqlConnection sqlConnection, SqlInfoMessageEventHandler messageHandler = null) + { + sqlConnection.FireInfoMessageEventOnUserErrors = true; + sqlConnection.InfoMessage += SqlConnectionInfoMessage; + + if (messageHandler != null) + { + sqlConnection.InfoMessage += messageHandler; + } + + await sqlConnection.OpenAsync(); + } + internal static void SqlConnectionInfoMessage(object sender, SqlInfoMessageEventArgs e) { Debug.WriteLine(e); + Log($"[{DateTime.Now: hh:mm:ss}] Error: {e.Source} - {e.Message}{Environment.NewLine}{string.Join(Environment.NewLine, e.Errors)}"); + // TODO: Handle errors } + + internal static void Log(string message) + { + // File.AppendAllText($"{Environment.CurrentDirectory}/App_Data/{DateTime.Now:yyyy_MM_dd}.log", $"{Environment.NewLine}{message}{Environment.NewLine}"); + } } } diff --git a/LaaProductionWeb/LaaProductionWeb.Data/SqlReader.cs b/LaaProductionWeb/LaaProductionWeb.Data/SqlReader.cs index a5f81cba..3d857fc4 100644 --- a/LaaProductionWeb/LaaProductionWeb.Data/SqlReader.cs +++ b/LaaProductionWeb/LaaProductionWeb.Data/SqlReader.cs @@ -3,16 +3,32 @@ using LaaProductionWeb.Data.Interfaces; using System; + using System.Collections.Generic; using System.Data.SqlClient; + using System.Linq; + using System.Threading.Tasks; public class SqlReader : ISqlReader, IDisposable { private readonly SqlDataReader sqlDataReader; + private readonly IDictionary columns; private int column; - private SqlReader(SqlDataReader sqlDataReader) - => this.sqlDataReader = sqlDataReader; + private SqlReader(SqlDataReader sqlDataReader) + { + this.sqlDataReader = sqlDataReader; + this.columns = new Dictionary(); + + var columnsCount = this.sqlDataReader.FieldCount; + var columns = new string[columnsCount]; + + for (int i = 0; i < columnsCount; i++) + { + var columnName = this.sqlDataReader.GetName(i); + this.columns[columnName] = i; + } + } public void Dispose() { @@ -38,17 +54,7 @@ } internal string[] GetColumns() - { - var columnsCount = this.sqlDataReader.FieldCount; - var columns = new string[columnsCount]; - - for (int i = 0; i < columnsCount; i++) - { - columns[i] = this.sqlDataReader.GetName(i); - } - - return columns; - } + => this.columns.Keys.ToArray(); public string GetString(int index = -1) { @@ -90,6 +96,26 @@ return this.sqlDataReader.Read(); } + internal Task ReadAsync() + { + this.column = 0; + + return this.sqlDataReader.ReadAsync(); + } + + public object GetValue(string field) + { + if (this.columns.TryGetValue($"{field}", out int index)) + { + if (!this.sqlDataReader.IsDBNull(index)) + { + return this.sqlDataReader.GetValue(index); + } + } + + return default(object); + } + public static implicit operator SqlReader(SqlDataReader sqlDataReader) => new SqlReader(sqlDataReader); } diff --git a/LaaProductionWeb/LaaProductionWeb.Data/app.config b/LaaProductionWeb/LaaProductionWeb.Data/app.config index 1696df66..2e74a2ee 100644 --- a/LaaProductionWeb/LaaProductionWeb.Data/app.config +++ b/LaaProductionWeb/LaaProductionWeb.Data/app.config @@ -1,11 +1,11 @@ - + - - + + - \ No newline at end of file + diff --git a/LaaProductionWeb/LaaProductionWeb.Services/AccountService.cs b/LaaProductionWeb/LaaProductionWeb.Services/AccountService.cs index ca28f65b..1f24605d 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/AccountService.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/AccountService.cs @@ -4,6 +4,8 @@ using LaaProductionWeb.Services.Interfaces; using LaaProductionWeb.Services.Models; + using System.Collections.Generic; + public class AccountService : IAccountService { private readonly ISqlClient sqlClient; @@ -11,22 +13,39 @@ public AccountService(ISqlClient sqlClient) => this.sqlClient = sqlClient; - public Employee FindEmployee(string firstName, string lastName) + public Employee FindEmployee(int userId) { + var employeIdentity = this.sqlClient.FirstOrDefault($@" + SELECT TOP 1 + [MitarbeiterNr] + , [Vorname] + ' ' + [Name] + FROM [Mitarbeiter] + WHERE [MitarbeiterNr] = @{nameof(userId)}", + parameters => parameters.Add(nameof(userId), userId), + reader => new KeyValuePair( + key: reader.GetValue(), + value: reader.GetString())); + var permissions = this.sqlClient.ExecuteReader($@" SELECT [MitarbeiterRechte].[Recht] - FROM [Mitarbeiter] - JOIN [MitarbeiterRechte] - ON [MitarbeiterRechte].[MitarbeiterNr] = [Mitarbeiter].[MitarbeiterNr] - WHERE [Vorname] LIKE @{nameof(firstName)} - AND [Name] LIKE @{nameof(lastName)} + FROM [MitarbeiterRechte] + WHERE [MitarbeiterNr] = @{nameof(employeIdentity.Key)} AND [MitarbeiterRechte].[Recht] LIKE 'WEB_%'", - parameters => parameters - .Add(nameof(firstName), firstName) - .Add(nameof(lastName), lastName), + parameters => parameters.Add(nameof(employeIdentity.Key), employeIdentity.Key), reader => reader.GetString()); - return new Employee(permissions); + return new Employee(employeIdentity.Value, permissions); } + + public int Login(string username, string password) + => this.sqlClient.FirstOrDefault($@" + SELECT TOP 1 [MitarbeiterNr] + FROM [Mitarbeiter] + WHERE [Benutzername] LIKE @{nameof(username)} + AND [Kennwort] LIKE @{nameof(password)}", + parameters => parameters + .Add(nameof(username), username) + .Add(nameof(password), password), + reader => reader.GetValue()); } } diff --git a/LaaProductionWeb/LaaProductionWeb.Services/HttpService.cs b/LaaProductionWeb/LaaProductionWeb.Services/HttpService.cs new file mode 100644 index 00000000..48982474 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/HttpService.cs @@ -0,0 +1,80 @@ +namespace LaaProductionWeb.Services +{ + using LaaProductionWeb.Services.Interfaces; + using LaaProductionWeb.Services.Models; + + using System; + using System.Net.Http; + using System.Threading.Tasks; + + public class HttpService : IHttpService + { + private readonly HttpClient httpClient; + + public HttpService(string url) + => this.httpClient = new HttpClient + { + BaseAddress = new Uri(url, UriKind.Absolute) + }; + + public async Task GetAsync(string path) + { + var httpResponseModel = new HttpResponseModel(); + + try + { + using (var httpRequestMessage = new HttpRequestMessage()) + { + httpRequestMessage.Method = HttpMethod.Get; + httpRequestMessage.RequestUri = new Uri(path, UriKind.Relative); + + using (var httpResponseMessage = await this.httpClient.SendAsync(httpRequestMessage)) + { + httpResponseModel.Succeeded = httpResponseMessage.IsSuccessStatusCode; + + if (httpResponseMessage.Content != null) + { + httpResponseModel.Content = await httpResponseMessage.Content?.ReadAsStringAsync(); + } + } + } + } + catch (Exception e) + { + httpResponseModel.Error = e.Message; + } + + return httpResponseModel; + } + + public async Task OptionsAsync(string path) + { + var httpResponseModel = new HttpResponseModel(); + + try + { + using (var httpRequestMessage = new HttpRequestMessage()) + { + httpRequestMessage.Method = HttpMethod.Options; + httpRequestMessage.RequestUri = new Uri(path, UriKind.Relative); + + using (var httpResponseMessage = await this.httpClient.SendAsync(httpRequestMessage)) + { + httpResponseModel.Succeeded = httpResponseMessage.IsSuccessStatusCode; + + if (httpResponseMessage.Content != null) + { + httpResponseModel.Content = await httpResponseMessage.Content?.ReadAsStringAsync(); + } + } + } + } + catch (Exception e) + { + httpResponseModel.Error = e.Message; + } + + return httpResponseModel; + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IAccountService.cs b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IAccountService.cs index 5fc0ee02..04b4a0c8 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IAccountService.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IAccountService.cs @@ -4,6 +4,8 @@ public interface IAccountService : ITransient { - Employee FindEmployee(string firstName, string lastName); + Employee FindEmployee(int userId); + + int Login(string username, string password); } } diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IHttpService.cs b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IHttpService.cs new file mode 100644 index 00000000..ce28dd48 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IHttpService.cs @@ -0,0 +1,13 @@ +namespace LaaProductionWeb.Services.Interfaces +{ + using LaaProductionWeb.Services.Models; + + using System.Threading.Tasks; + + public interface IHttpService + { + Task GetAsync(string path); + + Task OptionsAsync(string path); + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IProtocolService.cs b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IProtocolService.cs index 29d1d68b..30064578 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IProtocolService.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IProtocolService.cs @@ -1,6 +1,7 @@ namespace LaaProductionWeb.Services.Interfaces { using LaaProductionWeb.Services.Models; + using LaaProductionWeb.Services.Models.Reports; using System.Collections.Generic; using System.IO; diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IReportService.cs b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IReportService.cs index 0caad7d8..88dfdb3d 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IReportService.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/IReportService.cs @@ -1,6 +1,6 @@ namespace LaaProductionWeb.Services.Interfaces { - using LaaProductionWeb.Services.Models; + using LaaProductionWeb.Services.Models.Reports; using System.Collections.Generic; @@ -11,5 +11,9 @@ IEnumerable LoadHeliumPressureResults(int testId); byte[] LoadHeliumPressureReportAsCSV(HeliumReportModel model); + + KottmannReportModel LoadKottmannPressureReport(KottmannReportModel model = null); + + byte[] LoadKottmannPressureReportAsCSV(KottmannReportModel model); } } diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/ISingleton.cs b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/ISingleton.cs new file mode 100644 index 00000000..4d625073 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Interfaces/ISingleton.cs @@ -0,0 +1,6 @@ +namespace LaaProductionWeb.Services.Interfaces +{ + public interface ISingleton + { + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/LaaProductionWeb.Services.csproj b/LaaProductionWeb/LaaProductionWeb.Services/LaaProductionWeb.Services.csproj index e9b45418..db420701 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/LaaProductionWeb.Services.csproj +++ b/LaaProductionWeb/LaaProductionWeb.Services/LaaProductionWeb.Services.csproj @@ -40,6 +40,10 @@ ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.7.0.0\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + False + ..\..\..\..\..\..\..\Program Files\dotnet\sdk\NuGetFallbackFolder\newtonsoft.json\11.0.2\lib\netstandard2.0\Newtonsoft.Json.dll + @@ -59,20 +63,28 @@ + + + - - - - - - + + + + + + + + + + + @@ -85,10 +97,13 @@ + + - + + diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Employee.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Employee.cs index 1fa70c8d..dd36fc30 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/Employee.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Employee.cs @@ -5,8 +5,16 @@ public class Employee { - public Employee(IEnumerable permissions) - => this.Permissions = permissions; + public Employee(string name, IEnumerable permissions) + { + this.Name = name; + this.IsValid = !string.IsNullOrWhiteSpace(name); + this.Permissions = permissions ?? Array.Empty(); + } + + public string Name { get; set; } + + public bool IsValid { get; } public IEnumerable Permissions { get; } = Array.Empty(); diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportModel.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportModel.cs deleted file mode 100644 index 6ee3b570..00000000 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportModel.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace LaaProductionWeb.Services.Models -{ - using System; - using System.Collections.Generic; - using System.ComponentModel.DataAnnotations; - using System.Linq.Expressions; - using System.Reflection; - - public class HeliumReportModel - { - public HeliumReportFilter Filter { get; set; } - = new HeliumReportFilter(); - - public IEnumerable Items { get; set; } - = Array.Empty(); - - public static implicit operator HeliumReportModel(HeliumReportFilter filter) - => new HeliumReportModel { Filter = filter }; - - public string Display(Expression> expression) - { - var memberInfo = default(MemberInfo); - - if (expression.Body is MemberExpression memberExpression) - { - memberInfo = memberExpression.Member; - } - else if (expression.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression operandExpression) - { - memberInfo = operandExpression.Member; - } - - return memberInfo - ?.GetCustomAttribute() - ?.Name; - } - } -} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportModelExtensions.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportModelExtensions.cs deleted file mode 100644 index a1fb7c81..00000000 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportModelExtensions.cs +++ /dev/null @@ -1,55 +0,0 @@ -namespace LaaProductionWeb.Services.Models -{ - using System; - using System.ComponentModel.DataAnnotations.Schema; - using System.Linq.Expressions; - using System.Reflection; - - public enum PropertyType - { - Text, - Date, - Bool - } - - public static class HeliumReportModelExtensions - { - - public static HeliumReportFilterProperty Text(this HeliumReportItem model, Expression> expression, int index, int orderBy = 0) - => model.Property(expression, index, PropertyType.Text, orderBy); - - public static HeliumReportFilterProperty DateTime(this HeliumReportItem model, Expression> expression, int index, int orderBy = 0) - => model.Property(expression, index, PropertyType.Date, orderBy); - - public static HeliumReportFilterProperty Boolean(this HeliumReportItem model, Expression> expression, int index, int orderBy = 0) - => model.Property(expression, index, PropertyType.Bool, orderBy); - - public static HeliumReportFilterProperty Property( - this HeliumReportItem model - , Expression> expression - , int index - , PropertyType propertyType - , int orderBy) - { - var memberInfo = default(MemberInfo); - - if (expression.Body is MemberExpression memberExpression) - { - memberInfo = memberExpression.Member; - } - else if (expression.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression operandExpression) - { - memberInfo = operandExpression.Member; - } - - return new HeliumReportFilterProperty - { - Column = memberInfo?.GetCustomAttribute()?.Name, - Property = memberInfo?.Name, - OrderBy = orderBy, - Index = index, - Type = propertyType - }; - } - } -} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/HttpResponseModel.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/HttpResponseModel.cs new file mode 100644 index 00000000..5972fc70 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/HttpResponseModel.cs @@ -0,0 +1,23 @@ +namespace LaaProductionWeb.Services.Models +{ + using Newtonsoft.Json; + + public class HttpResponseModel + { + public bool Succeeded { get; internal set; } + + public string Content { get; internal set; } + + public string Error { get; internal set; } + + public T Deserialize() where T : new () + { + if (!string.IsNullOrWhiteSpace(this.Content)) + { + return JsonConvert.DeserializeObject(this.Content); + } + + return new T(); + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/OrderClientModel.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/OrderClientModel.cs index 61599e2d..d56ae4fc 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/OrderClientModel.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/OrderClientModel.cs @@ -1,6 +1,4 @@ -using System.Web; - -namespace LaaProductionWeb.Services.Models +namespace LaaProductionWeb.Services.Models { public class OrderClientModel { diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/OrderScanModel.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/OrderScanModel.cs index 8a747b6e..99c9f8f4 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/OrderScanModel.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/OrderScanModel.cs @@ -19,10 +19,10 @@ = new Dictionary { { 1, false } }; public string PrintUrl - => $"/Shipments/Print?ordernr={this.OrderNr}&positionnr={this.PositionNr}&palletnr={this.PalletNr}"; + => $"~/Shipments/Print?ordernr={this.OrderNr}&positionnr={this.PositionNr}&palletnr={this.PalletNr}"; public string DownloadUrl - => $"/Shipments/Download?ordernr={this.OrderNr}&positionnr={this.PositionNr}&palletnr={this.PalletNr}"; + => $"~/Shipments/Download?ordernr={this.OrderNr}&positionnr={this.PositionNr}&palletnr={this.PalletNr}"; public void UpdatePalletsCount(int palletsCount) { diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumPressurePoint.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumPressurePoint.cs similarity index 76% rename from LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumPressurePoint.cs rename to LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumPressurePoint.cs index da698ce1..ae504824 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumPressurePoint.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumPressurePoint.cs @@ -1,4 +1,4 @@ -namespace LaaProductionWeb.Services.Models +namespace LaaProductionWeb.Services.Models.Reports { public class HeliumPressurePoint { diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportFilter.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportFilter.cs new file mode 100644 index 00000000..c5e5c47b --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportFilter.cs @@ -0,0 +1,30 @@ +namespace LaaProductionWeb.Services.Models.Reports +{ + public partial class HeliumReportFilter : ReportFilter + { + public HeliumReportFilter() + { + var model = default(HeliumReportItem); + + this.Add(model.Text(x => x.FertigungNr, this.Count)); + this.Add(model.Text(x => x.AuftragNr, this.Count)); + this.Add(model.Text(x => x.PositionNr, this.Count)); + this.Add(model.Text(x => x.SerialNr, this.Count)); + this.Add(model.Text(x => x.IdentNr, this.Count)); + this.Add(model.Text(x => x.HeId, this.Count)); + this.Add(model.Text(x => x.HeTestId, this.Count)); + this.Add(model.Text(x => x.PcbId, this.Count)); + this.Add(model.Text(x => x.Nennweite, this.Count)); + this.Add(model.Text(x => x.Baulaenge, this.Count)); + this.Add(model.Text(x => x.Typ, this.Count)); + this.Add(model.Text(x => x.Druck, this.Count)); + this.Add(model.Text(x => x.Temperatur, this.Count)); + this.Add(model.Text(x => x.HeLakeRate, this.Count)); + this.Add(model.Text(x => x.HeTestPressure, this.Count)); + this.Add(model.Boolean(x => x.IsValid, this.Count)); + this.Add(model.Text(x => x.Text, this.Count)); + this.Add(model.DateTime(x => x.TestDate, this.Count, -1)); + this.Add(model.Text(x => x.Tester, this.Count)); + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportItem.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportItem.cs similarity index 98% rename from LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportItem.cs rename to LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportItem.cs index 541f4580..00127ea7 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportItem.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportItem.cs @@ -1,4 +1,4 @@ -namespace LaaProductionWeb.Services.Models +namespace LaaProductionWeb.Services.Models.Reports { using System; using System.ComponentModel.DataAnnotations; diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportModel.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportModel.cs new file mode 100644 index 00000000..09a7bc53 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/HeliumReportModel.cs @@ -0,0 +1,21 @@ +namespace LaaProductionWeb.Services.Models.Reports +{ + using System; + using System.Collections.Generic; + using System.Linq.Expressions; + + public class HeliumReportModel + { + public HeliumReportFilter Filter { get; set; } + = new HeliumReportFilter(); + + public IEnumerable Items { get; set; } + = Array.Empty(); + + public static implicit operator HeliumReportModel(HeliumReportFilter filter) + => new HeliumReportModel { Filter = filter }; + + public string Display(Expression> expression) + => ReportModelExtensions.Display(expression); + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportFilter.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportFilter.cs new file mode 100644 index 00000000..6ad3be35 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportFilter.cs @@ -0,0 +1,23 @@ +namespace LaaProductionWeb.Services.Models.Reports +{ + public class KottmannReportFilter : ReportFilter + { + public KottmannReportFilter() + { + var model = default(KottmannReportItem); + + this.Add(model.Text(x => x.FertigungsNr, this.Count)); + this.Add(model.Text(x => x.SerialNr, this.Count)); + this.Add(model.Text(x => x.PcbId, this.Count)); + this.Add(model.Text(x => x.Nennweite, this.Count)); + this.Add(model.Text(x => x.Baulaenge, this.Count)); + this.Add(model.Text(x => x.Typ, this.Count)); + this.Add(model.Text(x => x.StartDruck, this.Count)); + this.Add(model.Text(x => x.EndDruck, this.Count)); + this.Add(model.Text(x => x.DruckZeit, this.Count)); + this.Add(model.Boolean(x => x.Dicht, this.Count, -1)); + this.Add(model.DateTime(x => x.Datum, this.Count, -1)); + this.Add(model.DateTime(x => x.Bemerkung, this.Count, -1)); + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportItem.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportItem.cs new file mode 100644 index 00000000..c8b37db1 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportItem.cs @@ -0,0 +1,57 @@ +namespace LaaProductionWeb.Services.Models.Reports +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + + public class KottmannReportItem + { + [Display(Name = "Fertigung Nr.")] + [Column("[DP].[FertigungsauftragNr]")] + public int? FertigungsNr { get; set; } + + [Display(Name = "Serial Nr.")] + [Column("[PCB2SN].[MapPcbIdToSerialNumber_SerialNumber]")] + public int SerialNr { get; set; } + + [Display(Name = "Pcb Id")] + [Column("[PT].[CordonelPressureTest_PcbId]")] + public int PcbId { get; set; } + + [Display(Name = "Nennweite")] + [Column("[ID].[Nennweite]")] + public int? Nennweite { get; set; } + + [Display(Name = "Baulaenge")] + [Column("[ID].[Baulaenge]")] + public int? Baulaenge { get; set; } + + [Display(Name = "Typ")] + [Column("[ID].[Typ]")] + public string Typ { get; set; } + + [Display(Name = "Start Druck")] + [Column("[DP].[StartDruck]")] + public double StartDruck { get; set; } + + [Display(Name = "End Druck")] + [Column("[DP].[EndDruck]")] + public double EndDruck { get; set; } + + [Display(Name = "Zeit")] + [Column("[DP].[Pruefzeit]")] + public int DruckZeit { get; set; } + + [Display(Name = "Dicht")] + [Column("[DP].[Dicht]")] + public bool Dicht { get; set; } + + [Display(Name = "Datum")] + [Column("[DP].[Datum]")] + public DateTime Datum { get; set; } + + [Display(Name = "Bemerkung")] + [Column("[DP].[Bemerkung]")] + public string Bemerkung { get; internal set; } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportModel.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportModel.cs new file mode 100644 index 00000000..95714e28 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/KottmannReportModel.cs @@ -0,0 +1,21 @@ +namespace LaaProductionWeb.Services.Models.Reports +{ + using System; + using System.Collections.Generic; + using System.Linq.Expressions; + + public class KottmannReportModel + { + public KottmannReportFilter Filter { get; set; } + = new KottmannReportFilter(); + + public IEnumerable Items { get; set; } + = Array.Empty(); + + public static implicit operator KottmannReportModel(KottmannReportFilter filter) + => new KottmannReportModel { Filter = filter }; + + public string Display(Expression> expression) + => ReportModelExtensions.Display(expression); + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/PropertyType.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/PropertyType.cs new file mode 100644 index 00000000..e3aeb455 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/PropertyType.cs @@ -0,0 +1,9 @@ +namespace LaaProductionWeb.Services.Models.Reports +{ + public enum PropertyType + { + Text, + Date, + Bool + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportFilter.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportFilter.cs similarity index 57% rename from LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportFilter.cs rename to LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportFilter.cs index a451ff5a..b79c9a14 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportFilter.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportFilter.cs @@ -1,37 +1,12 @@ -namespace LaaProductionWeb.Services.Models +namespace LaaProductionWeb.Services.Models.Reports { using System; using System.Collections.Generic; using System.Globalization; using System.Linq; - public class HeliumReportFilter : List + public class ReportFilter : List { - public HeliumReportFilter() - { - var model = default(HeliumReportItem); - - this.Add(model.Text(x => x.FertigungNr, this.Count)); - this.Add(model.Text(x => x.AuftragNr, this.Count)); - this.Add(model.Text(x => x.PositionNr, this.Count)); - this.Add(model.Text(x => x.SerialNr, this.Count)); - this.Add(model.Text(x => x.IdentNr, this.Count)); - this.Add(model.Text(x => x.HeId, this.Count)); - this.Add(model.Text(x => x.HeTestId, this.Count)); - this.Add(model.Text(x => x.PcbId, this.Count)); - this.Add(model.Text(x => x.Nennweite, this.Count)); - this.Add(model.Text(x => x.Baulaenge, this.Count)); - this.Add(model.Text(x => x.Typ, this.Count)); - this.Add(model.Text(x => x.Druck, this.Count)); - this.Add(model.Text(x => x.Temperatur, this.Count)); - this.Add(model.Text(x => x.HeLakeRate, this.Count)); - this.Add(model.Text(x => x.HeTestPressure, this.Count)); - this.Add(model.Boolean(x => x.IsValid, this.Count)); - this.Add(model.Text(x => x.Text, this.Count)); - this.Add(model.DateTime(x => x.TestDate, this.Count, -1)); - this.Add(model.Text(x => x.Tester, this.Count)); - } - internal SqlExpression OrderBy() { var sqlExpression = new SqlExpression(); @@ -69,8 +44,8 @@ var dateTokens = property .Like .Split(new[] { '-' }) - .Select(x => DateTimeOffset.TryParse($"{x}".Trim(), new CultureInfo("de"), DateTimeStyles.None, out DateTimeOffset date) - ? (DateTimeOffset?)date + .Select(x => DateTimeOffset.TryParse($"{x}".Trim(), new CultureInfo("de"), DateTimeStyles.None, out DateTimeOffset date) + ? (DateTimeOffset?)date : null) .ToArray(); @@ -121,42 +96,5 @@ return sqlExpression.BuildWhere(" AND "); } - - public class SqlExpression - { - private readonly ICollection expressions - = new List(); - - public string Query { get; set; } - - public IDictionary Parameters { get; set; } - = new Dictionary(); - - internal void Add(string expression) - => this.expressions.Add(expression); - - internal void Add(string expression, string propertyName, object propertyValue) - { - this.Parameters[propertyName] = propertyValue; - - this.expressions.Add(expression); - } - - internal SqlExpression BuildOrderBy(string delimiter) - { - this.Query = string.Join(delimiter, this.expressions); - - return this; - } - - internal SqlExpression BuildWhere(string delimiter) - { - this.Query = this.expressions.Any() - ? string.Join(delimiter, this.expressions) - : "1 = 1"; - - return this; - } - } } } diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportFilterProperty.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportFilterProperty.cs similarity index 91% rename from LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportFilterProperty.cs rename to LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportFilterProperty.cs index 8d4beffc..bd025469 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/HeliumReportFilterProperty.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportFilterProperty.cs @@ -1,6 +1,6 @@ -namespace LaaProductionWeb.Services.Models +namespace LaaProductionWeb.Services.Models.Reports { - public class HeliumReportFilterProperty + public class ReportFilterProperty { public int Index { get; set; } diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportModelExtensions.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportModelExtensions.cs new file mode 100644 index 00000000..f2a929ae --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/ReportModelExtensions.cs @@ -0,0 +1,61 @@ +namespace LaaProductionWeb.Services.Models.Reports +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.ComponentModel.DataAnnotations.Schema; + using System.Linq.Expressions; + using System.Reflection; + + public static class ReportModelExtensions + { + public static ReportFilterProperty Text(this T model, Expression> expression, int index, int orderBy = 0) + => model.Property(expression, index, PropertyType.Text, orderBy); + + public static ReportFilterProperty DateTime(this T model, Expression> expression, int index, int orderBy = 0) + => model.Property(expression, index, PropertyType.Date, orderBy); + + public static ReportFilterProperty Boolean(this T model, Expression> expression, int index, int orderBy = 0) + => model.Property(expression, index, PropertyType.Bool, orderBy); + + public static ReportFilterProperty Property(this T model, Expression> expression, int index, PropertyType propertyType, int orderBy) + { + var memberInfo = default(MemberInfo); + + if (expression.Body is MemberExpression memberExpression) + { + memberInfo = memberExpression.Member; + } + else if (expression.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression operandExpression) + { + memberInfo = operandExpression.Member; + } + + return new ReportFilterProperty + { + Column = memberInfo?.GetCustomAttribute()?.Name, + Property = memberInfo?.Name, + OrderBy = orderBy, + Index = index, + Type = propertyType + }; + } + + public static string Display(Expression> expression) + { + var memberInfo = default(MemberInfo); + + if (expression.Body is MemberExpression memberExpression) + { + memberInfo = memberExpression.Member; + } + else if (expression.Body is UnaryExpression unaryExpression && unaryExpression.Operand is MemberExpression operandExpression) + { + memberInfo = operandExpression.Member; + } + + return memberInfo + ?.GetCustomAttribute() + ?.Name; + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/SqlExpression.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/SqlExpression.cs new file mode 100644 index 00000000..6bc73c24 --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/SqlExpression.cs @@ -0,0 +1,41 @@ +namespace LaaProductionWeb.Services.Models.Reports +{ + using System.Collections.Generic; + + public class SqlExpression + { + private readonly ICollection expressions + = new List(); + + public string Query { get; set; } + + public IDictionary Parameters { get; set; } + = new Dictionary(); + + internal void Add(string expression) + => this.expressions.Add(expression); + + internal void Add(string expression, string propertyName, object propertyValue) + { + this.Parameters[propertyName] = propertyValue; + + this.expressions.Add(expression); + } + + internal SqlExpression BuildOrderBy(string delimiter) + { + this.Query = string.Join(delimiter, this.expressions); + + return this; + } + + internal SqlExpression BuildWhere(string delimiter) + { + this.Query = this.expressions.Count > 0 + ? string.Join(delimiter, this.expressions) + : "1 = 1"; + + return this; + } + } +} diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/TestStatus.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/TestStatus.cs similarity index 85% rename from LaaProductionWeb/LaaProductionWeb.Services/Models/TestStatus.cs rename to LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/TestStatus.cs index 9898502b..b3d7d6b5 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/Models/TestStatus.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Reports/TestStatus.cs @@ -1,4 +1,4 @@ -namespace LaaProductionWeb.Services.Models +namespace LaaProductionWeb.Services.Models.Reports { public class TestStatus { diff --git a/LaaProductionWeb/LaaProductionWeb.Services/Models/Search/SearchWildcardModel.cs b/LaaProductionWeb/LaaProductionWeb.Services/Models/Search/SearchWildcardModel.cs new file mode 100644 index 00000000..0511d93f --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb.Services/Models/Search/SearchWildcardModel.cs @@ -0,0 +1,16 @@ +namespace LaaProductionWeb.Services.Models.Search +{ + using System.Collections.Generic; + using System.ComponentModel.DataAnnotations; + + public class SearchWildcardModel + { + [Display(Name = "Search text")] + public string Token { get; set; } + + [Display(Name = "Select fields")] + public IDictionary Fields { get; set; } + + public IEnumerable> Results { get; set; } + } +} \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb.Services/ProtocolService.cs b/LaaProductionWeb/LaaProductionWeb.Services/ProtocolService.cs index dfdafccb..2d371bdf 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/ProtocolService.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/ProtocolService.cs @@ -3,6 +3,7 @@ using LaaProductionWeb.Data.Interfaces; using LaaProductionWeb.Services.Interfaces; using LaaProductionWeb.Services.Models; + using LaaProductionWeb.Services.Models.Reports; using System; using System.Collections.Generic; diff --git a/LaaProductionWeb/LaaProductionWeb.Services/ReportService.cs b/LaaProductionWeb/LaaProductionWeb.Services/ReportService.cs index 0c2332ae..1040a6fa 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/ReportService.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/ReportService.cs @@ -2,14 +2,14 @@ { using LaaProductionWeb.Data.Interfaces; using LaaProductionWeb.Services.Interfaces; - using LaaProductionWeb.Services.Models; + using LaaProductionWeb.Services.Models.Reports; using System; using System.Collections.Generic; using System.Linq; using System.Text; - public class ReportService : IReportService + public partial class ReportService : IReportService { private readonly ISqlClient sqlClient; @@ -27,32 +27,33 @@ var orderBy = model.Filter.OrderBy(); model.Items = this.sqlClient.ExecuteReader($@" - SELECT [PT].[CordonelPressureTest_FertigungsAuftragsNr] AS [FertigungNr] -- 0 Filter - , [POS].[AuftragNr] AS [AuftragNr] -- 1 Filter - , [POS].[PositionNr] AS [PositionNr] -- 2 Filter - , [PCB2SN].[MapPcbIdToSerialNumber_SerialNumber] AS [SerialNr] -- 3 - , [ID].[IdentNr] AS [IdentNr] -- 4 Filter - , [PT_HE].[CordonelPressureTestHe_Id] AS [HeId] -- 5 - , [PT_HE].[CordonelPressureTestHe_TestID] AS [HeTestId] -- 6 - , [PT].[CordonelPressureTest_PcbId] AS [PcbId] -- 7 Filter - , [ID].[Nennweite] AS [Nennweite] -- 8 Filter - , [ID].[Baulaenge] AS [Baulaenge] -- 9 Filter - , [ID].[Typ] AS [Typ] -- 10 Filter - , [ID].[Druck] AS [Druck] -- 11 Filter - , [ID].[Temperatur] AS [Temperatur] -- 12 Filter - , [PT_HE].[CordonelPressureTestHe_LeakRate] AS [HeLakeRate] -- 13 - , [PT_HE].[CordonelPressureTestHe_TestPressure] AS [HeTestPressure] -- 14 - , [PT].[CordonelPressureTest_Valid] AS [IsValid] -- 15 Filter - , [PT].[CordonelPressureTest_Date] AS [TestDate] -- 16 Filter - , [PT].[CordonelPressureTest_Text] AS [Text] -- 17 Filter - , [PT_HE].[CordonelPressureTestHe_TesterName] AS [Tester] -- 18 + SELECT DISTINCT + [PT].[CordonelPressureTest_FertigungsAuftragsNr] AS [FertigungNr] -- 0 + , [POS].[AuftragNr] AS [AuftragNr] -- 1 + , [POS].[PositionNr] AS [PositionNr] -- 2 + , [PCB2SN].[MapPcbIdToSerialNumber_SerialNumber] AS [SerialNr] -- 3 + , [ID].[IdentNr] AS [IdentNr] -- 4 + , [PT_HE].[CordonelPressureTestHe_Id] AS [HeId] -- 5 + , [PT_HE].[CordonelPressureTestHe_TestID] AS [HeTestId] -- 6 + , [PT].[CordonelPressureTest_PcbId] AS [PcbId] -- 7 + , [ID].[Nennweite] AS [Nennweite] -- 8 + , [ID].[Baulaenge] AS [Baulaenge] -- 9 + , [ID].[Typ] AS [Typ] -- 10 + , [ID].[Druck] AS [Druck] -- 11 + , [ID].[Temperatur] AS [Temperatur] -- 12 + , [PT_HE].[CordonelPressureTestHe_LeakRate] AS [HeLakeRate] -- 13 + , [PT_HE].[CordonelPressureTestHe_TestPressure] AS [HeTestPressure] -- 14 + , [PT].[CordonelPressureTest_Valid] AS [IsValid] -- 15 + , [PT].[CordonelPressureTest_Date] AS [TestDate] -- 16 + , [PT].[CordonelPressureTest_Text] AS [Text] -- 17 + , [PT_HE].[CordonelPressureTestHe_TesterName] AS [Tester] -- 18 FROM [Cordonel_PressureTest] AS [PT] JOIN [Cordonel_PressureTest_He] AS [PT_HE] ON [PT_HE].[CordonelPressureTestHe_TestID] = [PT].[CordonelPressureTest_Id] LEFT JOIN [Druckpruefung] AS [DP] ON [DP].[FabNr] = [PT].[CordonelPressureTest_PcbId] JOIN [MapPcbIdToSerialNumber] AS [PCB2SN] ON [PCB2SN].[MapPcbIdToSerialNumber_PcbId] = [PT].[CordonelPressureTest_PcbId] JOIN [AuftragPosition_Gesamt] AS [POS] ON [POS].[FertigungsauftragNr] = [PT].[CordonelPressureTest_FertigungsAuftragsNr] - JOIN [Identnr] AS [ID] ON [ID].[IdentNr] = [POS].[Identnr] - WHERE [CordonelPressureTest_IsDeleted] = 0 + JOIN [Identnr] AS [ID] ON [ID].[IdentNr] = [POS].[Identnr] + WHERE [CordonelPressureTest_IsDeleted] = 0 AND {where.Query} ORDER BY {orderBy.Query}", parameters => @@ -105,35 +106,33 @@ var csvItems = new List(); var headers = Array.Empty(); var items = this.sqlClient.ExecuteReader($@" - SELECT [PT].[CordonelPressureTest_FertigungsAuftragsNr] AS [FertigungNr] -- 0 Filter - , [POS].[AuftragNr] AS [AuftragNr] -- 1 Filter - , [POS].[PositionNr] AS [PositionNr] -- 2 Filter - , [PCB2SN].[MapPcbIdToSerialNumber_SerialNumber] AS [SerialNr] -- 3 - , [ID].[IdentNr] AS [IdentNr] -- 4 Filter - , [PT_HE].[CordonelPressureTestHe_Id] AS [HeId] -- 5 - , [PT_HE].[CordonelPressureTestHe_TestID] AS [HeTestId] -- 6 - , [PT].[CordonelPressureTest_PcbId] AS [PcbId] -- 7 Filter - , [ID].[Nennweite] AS [Nennweite] -- 8 Filter - , [ID].[Baulaenge] AS [Baulaenge] -- 9 Filter - , [ID].[Typ] AS [Typ] -- 10 Filter - , [ID].[Druck] AS [Druck] -- 11 Filter - , [ID].[Temperatur] AS [Temperatur] -- 12 Filter - , [PT_HE].[CordonelPressureTestHe_LeakRate] AS [HeLakeRate] -- 13 - , [PT_HE].[CordonelPressureTestHe_TestPressure] AS [HeTestPressure] -- 14 - , [PT].[CordonelPressureTest_Valid] AS [IsValid] -- 15 Filter - , [PT].[CordonelPressureTest_Date] AS [TestDate] -- 16 Filter - , [PT].[CordonelPressureTest_Text] AS [Text] -- 17 Filter - , [PT_HE].[CordonelPressureTestHe_TesterName] AS [Tester] -- 18 - , [CPT].[CordonelPressureTest_TestPointNr] AS [PointNr] -- 19 - , CAST([CPT].[CordonelPressureTest_TestPointResult] AS NUMERIC(9, 8)) AS [PointResult] -- 20 - FROM [Cordonel_PressureTest] AS [PT] - JOIN [Cordonel_PressureTest_He] AS [PT_HE] ON [PT_HE].[CordonelPressureTestHe_TestID] = [PT].[CordonelPressureTest_Id] - LEFT JOIN [Druckpruefung] AS [DP] ON [DP].[FabNr] = [PT].[CordonelPressureTest_PcbId] - JOIN [MapPcbIdToSerialNumber] AS [PCB2SN] ON [PCB2SN].[MapPcbIdToSerialNumber_PcbId] = [PT].[CordonelPressureTest_PcbId] - JOIN [AuftragPosition_Gesamt] AS [POS] ON [POS].[FertigungsauftragNr] = [PT].[CordonelPressureTest_FertigungsAuftragsNr] - JOIN [Identnr] AS [ID] ON [ID].[IdentNr] = [POS].[Identnr] - LEFT JOIN [Cordonel_PressureTest_TestPoints] AS [CPT] ON [CPT].[CordonelPressureTest_Id] = [PT].[CordonelPressureTest_Id] - WHERE [CordonelPressureTest_IsDeleted] = 0 + SELECT DISTINCT + [PT].[CordonelPressureTest_FertigungsAuftragsNr] AS [FertigungNr] -- 0 Filter + , [POS].[AuftragNr] AS [AuftragNr] -- 1 Filter + , [POS].[PositionNr] AS [PositionNr] -- 2 Filter + , [PCB2SN].[MapPcbIdToSerialNumber_SerialNumber] AS [SerialNr] -- 3 + , [ID].[IdentNr] AS [IdentNr] -- 4 Filter + , [PT_HE].[CordonelPressureTestHe_Id] AS [HeId] -- 5 + , [PT_HE].[CordonelPressureTestHe_TestID] AS [HeTestId] -- 6 + , [PT].[CordonelPressureTest_PcbId] AS [PcbId] -- 7 Filter + , [ID].[Nennweite] AS [Nennweite] -- 8 Filter + , [ID].[Baulaenge] AS [Baulaenge] -- 9 Filter + , [ID].[Typ] AS [Typ] -- 10 Filter + , [ID].[Druck] AS [Druck] -- 11 Filter + , [ID].[Temperatur] AS [Temperatur] -- 12 Filter + , [PT_HE].[CordonelPressureTestHe_LeakRate] AS [HeLakeRate] -- 13 + , [PT_HE].[CordonelPressureTestHe_TestPressure] AS [HeTestPressure] -- 14 + , [PT].[CordonelPressureTest_Valid] AS [IsValid] -- 15 Filter + , [PT].[CordonelPressureTest_Date] AS [TestDate] -- 16 Filter + , [PT].[CordonelPressureTest_Text] AS [Text] -- 17 Filter + , [PT_HE].[CordonelPressureTestHe_TesterName] AS [Tester] -- 18 + FROM [Cordonel_PressureTest] AS [PT] + JOIN [Cordonel_PressureTest_He] AS [PT_HE] ON [PT_HE].[CordonelPressureTestHe_TestID] = [PT].[CordonelPressureTest_Id] + LEFT JOIN [Druckpruefung] AS [DP] ON [DP].[FabNr] = [PT].[CordonelPressureTest_PcbId] + JOIN [MapPcbIdToSerialNumber] AS [PCB2SN] ON [PCB2SN].[MapPcbIdToSerialNumber_PcbId] = [PT].[CordonelPressureTest_PcbId] + JOIN [AuftragPosition_Gesamt] AS [POS] ON [POS].[FertigungsauftragNr] = [PT].[CordonelPressureTest_FertigungsAuftragsNr] + JOIN [Identnr] AS [ID] ON [ID].[IdentNr] = [POS].[Identnr] + WHERE [CordonelPressureTest_IsDeleted] = 0 AND {where.Query} ORDER BY {orderBy.Query}", parameters => @@ -168,10 +167,7 @@ reader.GetValue(15), $"{reader.GetValue(16):yyyy-MM-dd}", reader.GetString(17).Replace(',', ' '), - reader.GetString(18).Replace(',', ' '), - reader.GetValue(19), - $"{reader.GetValue(20):0.000000000}", - + reader.GetString(18).Replace(',', ' ') }, columns => csvItems.Add(columns)) .ToList(); @@ -198,5 +194,141 @@ PointNr = reader.GetValue(1), Result = reader.GetValue(2), }); + + public KottmannReportModel LoadKottmannPressureReport(KottmannReportModel model = null) + { + if (model is null) + { + model = new KottmannReportModel(); + } + + var where = model.Filter.Where(); + var orderBy = model.Filter.OrderBy(); + + model.Items = this.sqlClient.ExecuteReader($@" + SELECT [DP].[FertigungsauftragNr] AS [FertigungNr] + , [PCB2SN].[MapPcbIdToSerialNumber_SerialNumber] AS [SerienNr] + , [DP].[FabNr] AS [PcbId] + , [ID].[Typ] AS [Typ] + , [ID].[Nennweite] AS [Nennweite] + , [ID].[Baulaenge] AS [Baulaenge] + , [DP].[StartDruck] AS [StartDruck] + , [DP].[EndDruck] AS [EndDruck] + , [DP].[Pruefzeit] AS [Pruefzeit] + , [DP].[Dicht] AS [Dicht] + , [DP].[Datum] AS [Datum] + , [DP].[Bemerkung] AS [Bemerkung] + FROM [Druckpruefung] AS [DP] + JOIN [AuftragPosition_Gesamt] AS [POS] + ON [POS].[FertigungsauftragNr] = [DP].[FertigungsauftragNr] + JOIN [Identnr] AS [ID] + ON [ID].[IdentNr] = [POS].[Identnr] + JOIN [MapPcbIdToSerialNumber] AS [PCB2SN] + ON [PCB2SN].[MapPcbIdToSerialNumber_PcbId] = [DP].[FabNr] + AND [PCB2SN].[MapPcbIdToSerialNumber_Deleted] = 0 + AND {where.Query} + ORDER BY {orderBy.Query}", + parameters => + { + foreach (var kvp in where.Parameters) + { + parameters.Add(kvp.Key, kvp.Value); + } + + foreach (var kvp in orderBy.Parameters) + { + parameters.Add(kvp.Key, kvp.Value); + } + }, + reader => new KottmannReportItem + { + FertigungsNr = reader.GetValue(), + SerialNr = reader.GetValue(), + PcbId = reader.GetValue(), + Typ = reader.GetString(), + Nennweite = reader.GetValue(), + Baulaenge = reader.GetValue(), + StartDruck = reader.GetValue(), + EndDruck = reader.GetValue(), + DruckZeit = reader.GetValue(), + Dicht = reader.GetValue(), + Datum = reader.GetValue(), + Bemerkung = reader.GetValue() + }); + + return model; + } + + public byte[] LoadKottmannPressureReportAsCSV(KottmannReportModel model) + { + if (model is null) + { + model = new KottmannReportModel(); + } + + var where = model.Filter.Where(); + var orderBy = model.Filter.OrderBy(); + var csvItems = new List(); + var headers = Array.Empty(); + var items = this.sqlClient.ExecuteReader($@" + SELECT [DP].[FertigungsauftragNr] AS [FertigungNr] + , [PCB2SN].[MapPcbIdToSerialNumber_SerialNumber] AS [SerienNr] + , [DP].[FabNr] AS [PcbId] + , [ID].[Typ] AS [Typ] + , [ID].[Nennweite] AS [Nennweite] + , [ID].[Baulaenge] AS [Baulaenge] + , [DP].[StartDruck] AS [StartDruck] + , [DP].[EndDruck] AS [EndDruck] + , [DP].[Pruefzeit] AS [Pruefzeit] + , [DP].[Dicht] AS [Dicht] + , [DP].[Datum] AS [Datum] + , [DP].[Bemerkung] AS [Bemerkung] + FROM [Druckpruefung] AS [DP] + JOIN [AuftragPosition_Gesamt] AS [POS] + ON [POS].[FertigungsauftragNr] = [DP].[FertigungsauftragNr] + JOIN [Identnr] AS [ID] + ON [ID].[IdentNr] = [POS].[Identnr] + JOIN [MapPcbIdToSerialNumber] AS [PCB2SN] + ON [PCB2SN].[MapPcbIdToSerialNumber_PcbId] = [DP].[FabNr] + AND [PCB2SN].[MapPcbIdToSerialNumber_Deleted] = 0 + AND {where.Query} + ORDER BY {orderBy.Query}", + parameters => + { + foreach (var kvp in where.Parameters) + { + parameters.Add(kvp.Key, kvp.Value); + } + + foreach (var kvp in orderBy.Parameters) + { + parameters.Add(kvp.Key, kvp.Value); + } + }, + reader => new object[] + { + reader.GetValue(), + reader.GetValue(), + reader.GetValue(), + reader.GetString(), + reader.GetValue(), + reader.GetValue(), + reader.GetValue(), + reader.GetValue(), + reader.GetValue(), + reader.GetValue(), + $"{reader.GetValue():yyyy-MM-dd}", + reader.GetValue().Replace(',', ' ') + }, + columns => csvItems.Add(columns)) + .ToList(); + + csvItems.AddRange(items); + + var csvLines = csvItems.Select(x => string.Join(",", x)); + var csvContent = string.Join(Environment.NewLine, csvLines); + + return Encoding.UTF8.GetBytes(csvContent); + } } } diff --git a/LaaProductionWeb/LaaProductionWeb.Services/ServicesExtensions.cs b/LaaProductionWeb/LaaProductionWeb.Services/ServicesExtensions.cs index 6d70e367..cdb8cdc5 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/ServicesExtensions.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/ServicesExtensions.cs @@ -38,5 +38,39 @@ return services; } + + public static IServiceCollection AddHttpClient(this IServiceCollection services, string baseAddress) + => services.AddSingleton(_ => new HttpService(baseAddress)); + + public static IServiceCollection AddSingletonServices(this IServiceCollection services) + { + var transient = typeof(ISingleton); + var assemblyServices = transient + .Assembly + .GetTypes() + .Where(x => !x.IsAbstract + && transient.IsAssignableFrom(x)); + + foreach (var service in assemblyServices) + { + var interfaces = service + .GetInterfaces() + .Where(x => x != transient); + + if (!interfaces.Any()) + { + services.AddTransient(service); + + continue; + } + + foreach (var @interface in interfaces) + { + services.AddTransient(@interface, service); + } + } + + return services; + } } } diff --git a/LaaProductionWeb/LaaProductionWeb.Services/ShipmentsService.cs b/LaaProductionWeb/LaaProductionWeb.Services/ShipmentsService.cs index 97ece1d5..9895c402 100644 --- a/LaaProductionWeb/LaaProductionWeb.Services/ShipmentsService.cs +++ b/LaaProductionWeb/LaaProductionWeb.Services/ShipmentsService.cs @@ -9,6 +9,9 @@ using System.Linq; using System.Text; + /// + /// + /// public class ShipmentsService : IShipmentsService { private readonly ISqlClient sqlClient; diff --git a/LaaProductionWeb/LaaProductionWeb.sln b/LaaProductionWeb/LaaProductionWeb.sln index 912cbeb5..dcdfcbaf 100644 --- a/LaaProductionWeb/LaaProductionWeb.sln +++ b/LaaProductionWeb/LaaProductionWeb.sln @@ -9,6 +9,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProductionWeb.Data", "La EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProductionWeb.Services", "LaaProductionWeb.Services\LaaProductionWeb.Services.csproj", "{FF167011-431A-41A7-A7DB-560E08860388}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documents", "Documents", "{59875741-02AA-4D9A-9B3C-683CA6DDBE7B}" + ProjectSection(SolutionItems) = preProject + ..\..\..\..\Downloads\SRS Wildcard Order Info Search.docx = ..\..\..\..\Downloads\SRS Wildcard Order Info Search.docx + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LaaProductionWeb.API", "LaaProductionWeb.API\LaaProductionWeb.API.csproj", "{66C33368-2ABC-4BB6-917C-FF949FAF043B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LaaProductionWeb.API.UnitTests", "LaaProductionWeb.API.UnitTests\LaaProductionWeb.API.UnitTests.csproj", "{EF371C00-4452-4506-A7B6-C2F94C170D2C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -27,6 +36,14 @@ Global {FF167011-431A-41A7-A7DB-560E08860388}.Debug|Any CPU.Build.0 = Debug|Any CPU {FF167011-431A-41A7-A7DB-560E08860388}.Release|Any CPU.ActiveCfg = Release|Any CPU {FF167011-431A-41A7-A7DB-560E08860388}.Release|Any CPU.Build.0 = Release|Any CPU + {66C33368-2ABC-4BB6-917C-FF949FAF043B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66C33368-2ABC-4BB6-917C-FF949FAF043B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66C33368-2ABC-4BB6-917C-FF949FAF043B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66C33368-2ABC-4BB6-917C-FF949FAF043B}.Release|Any CPU.Build.0 = Release|Any CPU + {EF371C00-4452-4506-A7B6-C2F94C170D2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF371C00-4452-4506-A7B6-C2F94C170D2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF371C00-4452-4506-A7B6-C2F94C170D2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF371C00-4452-4506-A7B6-C2F94C170D2C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/LaaProductionWeb/LaaProductionWeb/App_Content/css/bootstrap.min.css.map b/LaaProductionWeb/LaaProductionWeb/App_Content/css/bootstrap.min.css.map index 336fa285..e9958a62 100644 --- a/LaaProductionWeb/LaaProductionWeb/App_Content/css/bootstrap.min.css.map +++ b/LaaProductionWeb/LaaProductionWeb/App_Content/css/bootstrap.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-` + \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb/Views/Search/Wildcard.cshtml b/LaaProductionWeb/LaaProductionWeb/Views/Search/Wildcard.cshtml new file mode 100644 index 00000000..5d60620d --- /dev/null +++ b/LaaProductionWeb/LaaProductionWeb/Views/Search/Wildcard.cshtml @@ -0,0 +1,70 @@ +@model LaaProductionWeb.Services.Models.Search.SearchWildcardModel + +

+
+
+
+ @this.Html.LabelFor(x => x.Fields, new { @for = "serial_nr", @class = "text-smallcaps fw-bold" }) +
+ @if (this.Model.Fields != null) + { +
+ @foreach (var fieldKVP in this.Model.Fields) + { + var key = fieldKVP.Key; + var value = fieldKVP.Value; + var id = $"Fields_{key}"; + var name = $"Fields[{key}]"; + +
+ @this.Html.CheckBox(name, value, new { @class = "form-check-input", id }) + @this.Html.Label(key, new { @class = "form-check-label text-smallcaps", @for = id }) +
+ } +
+ } +
+
+
+
+
+ @this.Html.TextBoxFor(x => x.Token, new { id = "serial_nr", @class = "form-control", placeholder = "0000000000" }) + @this.Html.LabelFor(x => x.Token, new { @for = "serial_nr", @class = "text-smallcaps" }) +
+ +
+ @this.Html.ValidationMessageFor(x => x.Token, string.Empty, new { @class = "small text-danger mt-0" }) +
+
+
+
+
+
+ + @if (this.Model.Results != null) + { + + + @foreach (var header in this.Model.Results.FirstOrDefault()?.Keys ?? Array.Empty()) + { + + } + + + + @foreach (var data in this.Model.Results) + { + + @foreach (var value in data.Values) + { + + } + + } + + } +
@header
@value
+
+
+
+
diff --git a/LaaProductionWeb/LaaProductionWeb/Views/Shared/_Layout.cshtml b/LaaProductionWeb/LaaProductionWeb/Views/Shared/_Layout.cshtml index d77fed63..57e8aaa8 100644 --- a/LaaProductionWeb/LaaProductionWeb/Views/Shared/_Layout.cshtml +++ b/LaaProductionWeb/LaaProductionWeb/Views/Shared/_Layout.cshtml @@ -9,61 +9,71 @@ @Styles.Render("~/bootstrap_css") - @Styles.Render("~/bootstrap_icons") + @*@Styles.Render("~/bootstrap_icons")*@ + + + @Styles.Render("~/styles_css") Laatzen Production Web - + + }
@this.RenderBody() diff --git a/LaaProductionWeb/LaaProductionWeb/Views/Shipments/Batch.cshtml b/LaaProductionWeb/LaaProductionWeb/Views/Shipments/Batch.cshtml index ae035e73..badd7eb3 100644 --- a/LaaProductionWeb/LaaProductionWeb/Views/Shipments/Batch.cshtml +++ b/LaaProductionWeb/LaaProductionWeb/Views/Shipments/Batch.cshtml @@ -74,7 +74,7 @@ @(item.IsScaned ? item.PalletNr : null) - + diff --git a/LaaProductionWeb/LaaProductionWeb/Views/Shipments/Index.cshtml b/LaaProductionWeb/LaaProductionWeb/Views/Shipments/Index.cshtml index 04392fbd..6f39c96d 100644 --- a/LaaProductionWeb/LaaProductionWeb/Views/Shipments/Index.cshtml +++ b/LaaProductionWeb/LaaProductionWeb/Views/Shipments/Index.cshtml @@ -8,8 +8,7 @@
Palettenbegleiter

-
- @this.Html.AntiForgeryToken() + - - @this.Html.AntiForgeryToken() + @this.Html.HiddenFor(x => x.OrderNr) @this.Html.HiddenFor(x => x.PositionNr) @this.Html.HiddenFor(x => x.PalletsCount) @@ -21,10 +20,10 @@ } - + Druckvorschau - + Herunterladen
@@ -32,6 +31,11 @@
@this.Html.TextBoxFor(x => x.SerialNr, new { id = "serial_nr", @class = "form-control form-control-success text-center", placeholder = "0000000000" }) @this.Html.LabelFor(x => x.SerialNr, new { @for = "serial_nr", @class = "text-smallcaps" }) + + @if (this.IsPost) + { + this.Html.ValidationMessageFor(x => x.SerialNr, string.Empty, new { @class = "small text-danger mt-0" }); + }
@this.Html.TextBoxFor(x => x.PalletNr, new { id = "pallet_nr", @class = "form-control form-control-success text-center", placeholder = "0" }) diff --git a/LaaProductionWeb/LaaProductionWeb/Web.config b/LaaProductionWeb/LaaProductionWeb/Web.config index 99f8defa..3d22ee7e 100644 --- a/LaaProductionWeb/LaaProductionWeb/Web.config +++ b/LaaProductionWeb/LaaProductionWeb/Web.config @@ -7,19 +7,18 @@ - - + + - + - + - @@ -36,7 +35,7 @@ - + @@ -66,11 +65,4 @@ - - - - - - - - + \ No newline at end of file diff --git a/LaaProductionWeb/LaaProductionWeb/favicon.ico b/LaaProductionWeb/LaaProductionWeb/favicon.ico deleted file mode 100644 index a3a79998..00000000 Binary files a/LaaProductionWeb/LaaProductionWeb/favicon.ico and /dev/null differ diff --git a/LaaProductionWeb/LaaProductionWeb/packages.config b/LaaProductionWeb/LaaProductionWeb/packages.config index 3b433207..7855da06 100644 --- a/LaaProductionWeb/LaaProductionWeb/packages.config +++ b/LaaProductionWeb/LaaProductionWeb/packages.config @@ -4,20 +4,13 @@ - - - - - - - \ No newline at end of file diff --git a/LaaProductionWeb/README.md b/LaaProductionWeb/README.md new file mode 100644 index 00000000..a2835965 --- /dev/null +++ b/LaaProductionWeb/README.md @@ -0,0 +1,11 @@ +**LaaProductionWeb** +--- +is a solution that contains web projects and their dependencies. + +**Projects structure** + +- [LaaProductionWeb](https://slm.sms-esaap.com/la_operations/laa_production/-/tree/main/LaaProductionWeb/LaaProductionWeb) - Web client written under ASP.Net MVC. +- [LaaProductionWeb.API](https://slm.sms-esaap.com/la_operations/laa_production/-/tree/main/LaaProductionWeb/LaaProductionWeb.API) - REST client writen under ASP.Net Core 2.1. +- [LaaProductionWeb.API.UnitTests](https://slm.sms-esaap.com/la_operations/laa_production/-/tree/main/LaaProductionWeb/LaaProductionWeb.API.UnitTests) - Unit tests writen with NUnit Framework. +- [LaaProductionWeb.Data](https://slm.sms-esaap.com/la_operations/laa_production/-/tree/main/LaaProductionWeb/LaaProductionWeb.Data) - is a SQL client library that automates and exposes the System.Data.SqlClient.SqlCommand behaviors. +- [LaaProductionWeb.Services](https://slm.sms-esaap.com/la_operations/laa_production/-/tree/main/LaaProductionWeb/LaaProductionWeb.Services) - Services for CRUD operations over databases using the data library. diff --git a/ProductionWeb/.gitkeep b/Shared/.gitkeep similarity index 100% rename from ProductionWeb/.gitkeep rename to Shared/.gitkeep diff --git a/Shared/SensusAV.exe b/Shared/SensusAV.exe new file mode 100644 index 00000000..e3b1396e Binary files /dev/null and b/Shared/SensusAV.exe differ diff --git a/Shared/frmFertigungslisten.frm b/Shared/frmFertigungslisten.frm new file mode 100644 index 00000000..2a3f1800 --- /dev/null +++ b/Shared/frmFertigungslisten.frm @@ -0,0 +1,7609 @@ +VERSION 5.00 +Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.2#0"; "MSCOMCTL.OCX" +Object = "{86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCT2.OCX" +Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "msflxgrd.ocx" +Begin VB.Form frmFertigungslisten + Caption = "Listendruck" + ClientHeight = 8085 + ClientLeft = 60 + ClientTop = 345 + ClientWidth = 18300 + KeyPreview = -1 'True + LinkTopic = "Form1" + MDIChild = -1 'True + ScaleHeight = 8085 + ScaleWidth = 18300 + Begin VB.Frame Frame5 + Height = 1485 + Left = 15210 + TabIndex = 89 + Top = 2070 + Width = 2925 + Begin VB.CommandButton cmdLotHinzu + Caption = "+" + BeginProperty Font + Name = "MS Sans Serif" + Size = 12 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 300 + Left = 1830 + TabIndex = 94 + ToolTipText = "AuftragNr-Bereich in Liste speichern" + Top = 210 + Width = 435 + End + Begin VB.ComboBox cmbLot + Height = 315 + Left = 120 + TabIndex = 93 + ToolTipText = "Liste der AuftragNr-Bereiche / Lots" + Top = 540 + Width = 2655 + End + Begin VB.TextBox txtAuftragVon + Alignment = 1 'Rechts + Height = 285 + Left = 120 + TabIndex = 92 + ToolTipText = "Erste AuftragNr im Bereich der angezeigt werden soll" + Top = 930 + Width = 1155 + End + Begin VB.TextBox txtAuftragBis + Alignment = 1 'Rechts + Height = 285 + Left = 1590 + TabIndex = 91 + ToolTipText = "letzte AuftragNr im Bereich der angezeigt werden soll" + Top = 930 + Width = 1155 + End + Begin VB.CommandButton cmdLotEntfernen + Caption = "-" + BeginProperty Font + Name = "MS Sans Serif" + Size = 12 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 300 + Left = 2310 + TabIndex = 90 + ToolTipText = "AuftragNr-Bereich aus Liste entfernen" + Top = 210 + Width = 435 + End + Begin VB.Label Label23 + Caption = "Lot / Auftragnr-Bereich" + Height = 345 + Left = 120 + TabIndex = 95 + Top = 300 + Width = 1635 + End + Begin VB.Line Line1 + X1 = 1350 + X2 = 1515 + Y1 = 1065 + Y2 = 1065 + End + End + Begin VB.Frame Frame4 + Height = 1605 + Left = 15210 + TabIndex = 86 + Top = 450 + Width = 2895 + Begin VB.CheckBox chkNur_eRegister + Caption = "Nur eRegister anzeigen" + Height = 315 + Left = 120 + TabIndex = 101 + Top = 300 + Width = 2235 + End + Begin VB.CheckBox chkVersandIstDatumStattSerienNr + Caption = "Versand_ist_Datum statt Seriennummer " + Height = 375 + Left = 120 + TabIndex = 88 + Top = 1020 + Width = 1815 + End + Begin VB.CheckBox chkDebug + Caption = "zeige 'geprüft'" + Height = 345 + Left = 120 + TabIndex = 87 + Top = 630 + Width = 1335 + End + End + Begin VB.CommandButton cmdExcelExport + Caption = "Excel Export" + Height = 375 + Left = 9960 + TabIndex = 85 + Top = 7140 + Width = 1125 + End + Begin VB.Frame Frame1 + Caption = "Listendruck" + Height = 3105 + Left = 0 + TabIndex = 0 + Top = 450 + Width = 15195 + Begin VB.CommandButton cmdLaser + Caption = "Laser" + Height = 375 + Left = 120 + TabIndex = 96 + Top = 2610 + Width = 645 + End + Begin VB.CommandButton cmdSofortauftraege + Caption = "Sofortauftraege" + Height = 375 + Left = 2610 + TabIndex = 74 + ToolTipText = "alle WZ und ME ohne FA-Nr" + Top = 2610 + Width = 1275 + End + Begin VB.CommandButton cmdEinsatz + Caption = "Einsatz" + Height = 375 + Left = 5160 + TabIndex = 72 + ToolTipText = "Messeinsatz montiert" + Top = 2610 + Width = 675 + End + Begin VB.CommandButton cmdDruckNeu + Caption = "Print Grid" + Height = 375 + Left = 13980 + TabIndex = 48 + Top = 2610 + Width = 1035 + End + Begin VB.CommandButton cmdVersandfertig + Caption = "Versandfertig" + Height = 375 + Left = 9090 + TabIndex = 40 + Top = 2610 + Width = 1125 + End + Begin VB.CommandButton cmdPruefen + Caption = "Prüfen" + Height = 375 + Left = 6960 + TabIndex = 30 + Top = 2610 + Width = 765 + End + Begin VB.CommandButton cmdExcel + Caption = "=> Zwischenablage" + Height = 375 + Left = 12330 + TabIndex = 29 + ToolTipText = "kopiert den Tabelleninhalt in die Zwischenablage" + Top = 2610 + Width = 1545 + End + Begin VB.Frame Frame3 + Height = 2355 + Left = 12330 + TabIndex = 23 + Top = 180 + Width = 2685 + Begin VB.CheckBox chkSerNrKnd + Alignment = 1 'Rechts ausgerichtet + Caption = "Knd eigene" + Enabled = 0 'False + Height = 225 + Left = 1470 + TabIndex = 82 + Top = 1800 + Width = 1125 + End + Begin VB.CheckBox chkSerNrSensus + Alignment = 1 'Rechts ausgerichtet + Caption = "SNr: Sensus " + Enabled = 0 'False + Height = 225 + Left = 120 + TabIndex = 81 + Top = 1800 + Width = 1185 + End + Begin VB.CheckBox chkStatistik + Alignment = 1 'Rechts ausgerichtet + Caption = "Statistik auswerten" + Enabled = 0 'False + Height = 195 + Left = 600 + TabIndex = 80 + ToolTipText = "auch fertiggemeldete Positionen anzeigen" + Top = 2070 + Width = 1995 + End + Begin VB.CheckBox chkSonderlayoutFertigung + Alignment = 1 'Rechts ausgerichtet + Caption = "Sonderlayout für Fertigung " + Height = 225 + Left = 390 + TabIndex = 77 + ToolTipText = "bestimmte Voreinstellungen, das Layout und die Auswahl werden für den 'Versuch' optimiert" + Top = 1560 + Width = 2205 + End + Begin VB.CheckBox chkSpaltenbreiteAnpassen + Alignment = 1 'Rechts ausgerichtet + Caption = "Spaltenbreite anpassen" + Height = 195 + Left = 600 + TabIndex = 76 + ToolTipText = "Spaltenbreite automatisch anpassen" + Top = 1320 + Width = 1995 + End + Begin VB.CheckBox chkVersuch + Alignment = 1 'Rechts ausgerichtet + Caption = "Sonderlayout für Versuch" + Height = 225 + Left = 480 + TabIndex = 41 + ToolTipText = "bestimmte Voreinstellungen, das Layout und die Auswahl werden für den 'Versuch' optimiert" + Top = 1050 + Width = 2115 + End + Begin VB.ComboBox cmbAnzahlKopien + Height = 315 + Left = 1890 + Style = 2 'Dropdown-Liste + TabIndex = 26 + Top = 120 + Width = 705 + End + Begin VB.ComboBox cmbSortierung + Height = 315 + Left = 90 + Style = 2 'Dropdown-Liste + TabIndex = 25 + Top = 480 + Width = 2535 + End + Begin VB.CheckBox chkSortierungDesc + Alignment = 1 'Rechts ausgerichtet + Caption = "umgekehrte Sortierung" + Height = 285 + Left = 480 + TabIndex = 24 + Top = 780 + Width = 2115 + End + Begin VB.Label Label5 + Caption = "Kopien" + Height = 225 + Left = 1290 + TabIndex = 28 + Top = 180 + Width = 555 + End + Begin VB.Label Label6 + Caption = "Sortierung" + Height = 255 + Left = 90 + TabIndex = 27 + Top = 270 + Width = 795 + End + End + Begin VB.Frame Frame2 + Caption = "Filter" + Height = 2355 + Left = 120 + TabIndex = 10 + Top = 180 + Width = 12135 + Begin VB.CommandButton cmdVorauswahllLaser + Caption = "Laser" + Height = 225 + Left = 90 + TabIndex = 97 + Top = 2010 + Width = 555 + End + Begin VB.ComboBox cmbFilterBohrbild + Height = 315 + Left = 9870 + TabIndex = 78 + Top = 1800 + Width = 2175 + End + Begin VB.CommandButton cmdAuftragNrClear + Cancel = -1 'True + Caption = "c" + Height = 255 + Left = 6000 + TabIndex = 75 + ToolTipText = "Clear Filter AuftragNr " + Top = 300 + Width = 255 + End + Begin VB.CheckBox chkOhneLager + Alignment = 1 'Rechts ausgerichtet + Caption = "ohne Lager" + Height = 285 + Left = 1830 + TabIndex = 71 + ToolTipText = "Einschränkung: Auftragspositionen mit Kundennumer 1000 ausblenden" + Top = 510 + Width = 1245 + End + Begin VB.CheckBox chkNurMID + Alignment = 1 'Rechts ausgerichtet + Caption = "nur MID" + Height = 285 + Left = 2160 + TabIndex = 70 + ToolTipText = "Einschränkung nach Zusatztext mit ""Zulassungskennzeichen : MID"" " + Top = 210 + Width = 915 + End + Begin VB.CheckBox chkNoMoskauBadger + Caption = "ohne Moskau / Badger" + Height = 405 + Left = 8370 + TabIndex = 69 + ToolTipText = "Es werden nur Aufträge ohne KundenNr 38116 und 38045 angezeigt." + Top = 210 + Width = 1425 + End + Begin VB.ComboBox cmbFilterNennweite + Height = 315 + Left = 10680 + TabIndex = 60 + Top = 360 + Width = 1035 + End + Begin VB.ComboBox cmbFilterTemp + Height = 315 + Left = 10680 + TabIndex = 59 + Top = 720 + Width = 1035 + End + Begin VB.ComboBox cmbFilterDruck + Height = 315 + Left = 10680 + TabIndex = 58 + Top = 1080 + Width = 1035 + End + Begin VB.ComboBox cmbFilterBaulaenge + Height = 315 + Left = 10680 + TabIndex = 57 + Top = 1440 + Width = 1035 + End + Begin VB.ListBox lstAPOrt + Height = 1620 + Left = 450 + MultiSelect = 2 'Erweitert + TabIndex = 55 + Top = 210 + Width = 1215 + End + Begin VB.ComboBox cmbFilterMetrolog + Height = 315 + Left = 4710 + TabIndex = 53 + Text = "Combo1" + ToolTipText = "Es werden nur Auftragspositionen angezeigt, die diese Prüfklasse haben" + Top = 1350 + Width = 1515 + End + Begin VB.CheckBox ChkOhnePlus + Caption = "ohne PLUS" + Height = 195 + Left = 8370 + TabIndex = 52 + ToolTipText = "Nur Zähler ohne Zusatztext 'PLUS' werden angezeigt" + Top = 1200 + Width = 1185 + End + Begin VB.CheckBox chkRest + Caption = "Rest" + Height = 225 + Left = 8370 + TabIndex = 51 + ToolTipText = "Typ Auswahl umkehren" + Top = 1470 + Width = 945 + End + Begin VB.CheckBox chkNurCKD + Caption = "nur CKD" + Height = 195 + Left = 8370 + TabIndex = 50 + ToolTipText = "nur Zählertypen mit 'CKD' in der Bezeichnung werden angezeigt" + Top = 660 + Width = 945 + End + Begin VB.CheckBox chkPlus + Caption = "nur PLUS" + Height = 195 + Left = 8370 + TabIndex = 47 + ToolTipText = "Nur Zähler mit Zusatztext 'PLUS' werden angezeigt" + Top = 930 + Width = 1035 + End + Begin VB.CommandButton cmdInfoTyp + Caption = "?" + Height = 225 + Left = 8040 + TabIndex = 45 + ToolTipText = "zeigt alle ausgewählten Typen übersichtlicher an" + Top = 300 + Width = 285 + End + Begin VB.CommandButton cmdRefreshTyp + Caption = "Refresh" + Height = 225 + Left = 7290 + TabIndex = 44 + Top = 300 + Width = 735 + End + Begin VB.ListBox lstFilterTyp + Height = 1620 + Left = 6660 + MultiSelect = 2 'Erweitert + TabIndex = 42 + Top = 570 + Width = 1665 + End + Begin VB.CommandButton cmdAuftragInfo + Caption = "i" + Enabled = 0 'False + Height = 255 + Left = 6300 + TabIndex = 34 + ToolTipText = "Auftragnr anzeigen" + Top = 300 + Width = 255 + End + Begin VB.ComboBox cmbKurzBez + Height = 315 + Left = 4710 + TabIndex = 16 + Text = "Combo1" + Top = 990 + Width = 1515 + End + Begin VB.TextBox txtFilterAuftrag + Alignment = 1 'Rechts + Height = 285 + Left = 4830 + TabIndex = 12 + ToolTipText = "AuftragNr oder FertigungsauftragNr" + Top = 300 + Width = 1125 + End + Begin VB.TextBox txtFilterKunde + Alignment = 1 'Rechts + Height = 285 + Left = 4830 + TabIndex = 11 + Top = 630 + Width = 1125 + End + Begin MSComCtl2.DTPicker DTPickerBis + Height = 315 + Left = 2160 + TabIndex = 18 + Top = 1440 + Width = 1215 + _ExtentX = 2143 + _ExtentY = 556 + _Version = 393216 + Format = 79757313 + CurrentDate = 39184 + End + Begin MSComCtl2.DTPicker DTPickerVon + Height = 315 + Left = 2160 + TabIndex = 20 + Top = 1050 + Width = 1245 + _ExtentX = 2196 + _ExtentY = 556 + _Version = 393216 + Format = 79757313 + CurrentDate = 39184 + End + Begin VB.Label Label22 + Caption = "Bohrbild:" + Height = 225 + Left = 9000 + TabIndex = 79 + Top = 1920 + Width = 765 + End + Begin VB.Label Label10 + Caption = "Nennweite" + Height = 225 + Left = 9840 + TabIndex = 68 + Top = 390 + Width = 825 + End + Begin VB.Label Label12 + Caption = "Temperatur" + Height = 225 + Left = 9750 + TabIndex = 67 + Top = 720 + Width = 975 + End + Begin VB.Label Label13 + Caption = "PN" + Height = 225 + Left = 10290 + TabIndex = 66 + Top = 1110 + Width = 315 + End + Begin VB.Label Label14 + Caption = "°C" + Height = 255 + Left = 11790 + TabIndex = 65 + Top = 780 + Width = 255 + End + Begin VB.Label Label15 + Caption = "bar" + Height = 255 + Left = 11760 + TabIndex = 64 + Top = 1080 + Width = 255 + End + Begin VB.Label Label16 + Caption = "mm" + Height = 165 + Left = 11760 + TabIndex = 63 + Top = 390 + Width = 285 + End + Begin VB.Label Label11 + Caption = "Baulänge:" + Height = 225 + Left = 9900 + TabIndex = 62 + Top = 1470 + Width = 765 + End + Begin VB.Label Label17 + Caption = "mm" + Height = 255 + Left = 11760 + TabIndex = 61 + Top = 1440 + Width = 255 + End + Begin VB.Label Label20 + Caption = "von" + Height = 165 + Left = 1770 + TabIndex = 56 + Top = 1110 + Width = 315 + End + Begin VB.Label Label19 + Caption = "Metrolog" + Height = 255 + Left = 3990 + TabIndex = 54 + Top = 1440 + Width = 645 + End + Begin VB.Label Label18 + Caption = "Typen:" + Height = 225 + Left = 6720 + TabIndex = 43 + Top = 300 + Width = 1125 + End + Begin VB.Label Label1 + Caption = "Ort" + Height = 285 + Left = 150 + TabIndex = 22 + Top = 300 + Width = 255 + End + Begin VB.Label Label2 + Caption = "bis" + Height = 165 + Left = 1770 + TabIndex = 21 + Top = 1500 + Width = 315 + End + Begin VB.Label Label3 + Caption = "Datum" + Height = 225 + Left = 2160 + TabIndex = 19 + Top = 780 + Width = 585 + End + Begin VB.Label Label9 + Caption = "Kurzbez." + Height = 255 + Left = 4020 + TabIndex = 17 + Top = 1020 + Width = 645 + End + Begin VB.Label Label8 + Caption = "KundenNr" + Height = 225 + Left = 4050 + TabIndex = 14 + Top = 660 + Width = 855 + End + Begin VB.Label Label7 + Caption = "AuftragNr" + Height = 225 + Left = 4050 + TabIndex = 13 + Top = 330 + Width = 825 + End + End + Begin VB.CommandButton cmdRechenwerk + Caption = "Rechenwerk" + Height = 375 + Left = 7860 + TabIndex = 5 + Top = 2610 + Width = 1095 + End + Begin VB.CommandButton cmdAuftragsbearbeitung + Caption = "Auftragsbearbeitung" + Height = 375 + Left = 870 + TabIndex = 4 + Top = 2610 + Width = 1605 + End + Begin VB.CommandButton cmdFinish + Caption = "Finish" + Height = 375 + Left = 10620 + TabIndex = 3 + Top = 2610 + Width = 1395 + End + Begin VB.CommandButton cmdMontage + Caption = "Montage" + Height = 375 + Left = 5970 + TabIndex = 2 + Top = 2610 + Width = 855 + End + Begin VB.CommandButton cmdVorfertigung + Caption = "Vorfertigung" + Height = 375 + Left = 4020 + TabIndex = 1 + Top = 2610 + Width = 1005 + End + End + Begin VB.CommandButton cmdCLR + Caption = "Reset" + Height = 375 + Left = 11400 + TabIndex = 46 + Top = 7140 + Width = 735 + End + Begin VB.CommandButton cmdAbbruch + Caption = "Abbrechen" + Height = 375 + Left = 13920 + TabIndex = 15 + Top = 7140 + Width = 1125 + End + Begin MSComctlLib.StatusBar StatusBar1 + Align = 2 'Unten ausrichten + Height = 315 + Left = 0 + TabIndex = 9 + Top = 7770 + Width = 18300 + _ExtentX = 32279 + _ExtentY = 556 + Style = 1 + _Version = 393216 + BeginProperty Panels {8E3867A5-8586-11D1-B16A-00C0F0283628} + NumPanels = 1 + BeginProperty Panel1 {8E3867AB-8586-11D1-B16A-00C0F0283628} + EndProperty + EndProperty + End + Begin VB.CommandButton cmdClose + Caption = "Schließen" + Height = 375 + Left = 16080 + TabIndex = 8 + Top = 7110 + Width = 1125 + End + Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1 + Height = 3495 + Left = 0 + TabIndex = 7 + Top = 3600 + Width = 15255 + _ExtentX = 26908 + _ExtentY = 6165 + _Version = 393216 + ScrollTrack = -1 'True + TextStyleFixed = 3 + AllowUserResizing= 3 + End + Begin VB.TextBox txtEingabe + Height = 285 + Left = 9690 + MultiLine = -1 'True + TabIndex = 33 + Top = 90 + Visible = 0 'False + Width = 1005 + End + Begin VB.CommandButton cmdPrint + Caption = "Drucken" + Height = 375 + Left = 12480 + TabIndex = 35 + Top = 7140 + Width = 1155 + End + Begin VB.Label lblGeprueft + Alignment = 1 'Rechts + BorderStyle = 1 'Fest Einfach + Height = 285 + Left = 7320 + TabIndex = 100 + Top = 7080 + Width = 915 + End + Begin VB.Label lblNichtZuPruefende + Alignment = 1 'Rechts + BorderStyle = 1 'Fest Einfach + Height = 285 + Left = 7305 + TabIndex = 99 + Top = 7425 + Width = 915 + End + Begin VB.Label Label25 + Caption = "nicht zu prüfende ME,FE,FK:" + Height = 225 + Left = 5115 + TabIndex = 98 + Top = 7485 + Width = 2265 + End + Begin VB.Label Label24 + Alignment = 1 'Rechts + Caption = "Wert:" + Height = 225 + Left = 4560 + TabIndex = 84 + Top = 7140 + Width = 495 + End + Begin VB.Label lblSummeWert + Alignment = 1 'Rechts + BorderStyle = 1 'Fest Einfach + Height = 285 + Left = 5100 + TabIndex = 83 + Top = 7080 + Width = 885 + End + Begin VB.Label Label21 + Caption = "davon geprüft:" + Height = 225 + Left = 6090 + TabIndex = 73 + Top = 7140 + Width = 1185 + End + Begin VB.Label lblAutosize + AutoSize = -1 'True + BorderStyle = 1 'Fest Einfach + Height = 255 + Left = 11220 + TabIndex = 49 + Top = 90 + Visible = 0 'False + Width = 945 + End + Begin VB.Label labelGefertigtMenge + Alignment = 1 'Rechts + BorderStyle = 1 'Fest Einfach + Height = 285 + Left = 2100 + TabIndex = 39 + Top = 7080 + Width = 705 + End + Begin VB.Label labelGefertigtLabel + Caption = "gefertigt:" + Height = 255 + Left = 1440 + TabIndex = 38 + Top = 7110 + Width = 615 + End + Begin VB.Label labelOffenLabel + Caption = "offen:" + Height = 255 + Left = 90 + TabIndex = 36 + Top = 7080 + Width = 465 + End + Begin VB.Label lblSummelabel + Caption = "Summe:" + Height = 225 + Left = 2940 + TabIndex = 32 + Top = 7140 + Width = 585 + End + Begin VB.Label lblSumme + Alignment = 1 'Rechts + BorderStyle = 1 'Fest Einfach + Height = 285 + Left = 3570 + TabIndex = 31 + Top = 7080 + Width = 915 + End + Begin VB.Label Label4 + Alignment = 2 'Zentriert + Caption = "Fertigungslisten drucken / anzeigen" + BeginProperty Font + Name = "MS Sans Serif" + Size = 13.5 + Charset = 0 + Weight = 700 + Underline = 0 'False + Italic = 0 'False + Strikethrough = 0 'False + EndProperty + Height = 375 + Left = -360 + TabIndex = 6 + Top = 570 + Width = 15015 + End + Begin VB.Label labelOffenWert + Alignment = 1 'Rechts + BorderStyle = 1 'Fest Einfach + Height = 285 + Left = 660 + TabIndex = 37 + Top = 7080 + Width = 705 + End +End +Attribute VB_Name = "frmFertigungslisten" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Option Explicit + +Private Tabs(20) As Integer +Private TabsAuftr(20) As Integer +Private vorfertigung As Boolean + +Private m_DicSpaltenname As Dictionary + + +Private Const RANDLINKS = 10 +Private Const RANDOBEN = 10 +Private Const RANDRECHTS = 5 +Private Const RANDUNTEN = 10 +Private m_strAusblenden As String +Private Const TEXTALLELINIEN = "(alle)" +Private Const TEXTALLELINIEN_OHNE_VS = "(alle ohne VS)" + +Private Const TEXTALLEKURZBEZ = "(alle)" +Private Const TEXTALLETYPEN = "(alle)" + + +Private Const TRENNER1 = ": " ' für Lot +Private Const TRENNER2 = "|" ' für Lot-Liste + +Private Const TEXTALLE = "(alle)" +Private Const TEXTPSEUNDPFL = "PSE + PFL" + +Private Const TEXTALLEKURZBEZWZFK = "WZ + FK" +Private Const TEXTALLEKURZBEZMEFE = "ME + FE" +Private Const TEXTALLEKURZBEZWZFKGE = "WZ + FK + GE" + +Private m_rs As CRecordset + +Private m_eSortierung As enumSortierung +Private m_blnAbbruch As Boolean +Private mlngRecordsFound As Long + + +Private m_intLastX As Integer +Private m_intLastY As Integer +Private m_strLastText As String + +Private mobjExcelApp As Excel.Application +Private mobjExcelWbk As Excel.Workbook +Private mobjExelworksheet As Excel.Worksheet + +' The column selected for sorting. +Private m_SortColumn As Integer + +' The current sort order. +Private m_SortOrder As SortSettings + +Private m_blnIstAlleAuftraege As Boolean + +Private Enum enumSortierung + SortDefault = 0 + SortNennweite = 1 + SortTemperatur = 2 + SortTypBez = 3 + SortKurzBez = 4 + SortLinieVersanddatum = 5 + SortAuftragPosition = 6 + SortIdentNr = 7 + SortSerienNrVon = 8 + SortBemerkung = 9 +End Enum + +Const SCHRIFTTABELLE = 8 + + + +Private Sub chkNurCKD_Click() + If chkNurCKD.Value = vbChecked Then + chkPlus.Value = vbUnchecked + End If + 'Anzeigen m_strAusblenden +End Sub + + + + + + +Private Sub ChkOhnePlus_Click() + If ChkOhnePlus.Enabled = True Then + + chkPlus.Enabled = False + chkPlus.Value = vbUnchecked + DoEvents + chkPlus.Enabled = True + + End If +End Sub + +Private Sub chkPlus_Click() + If chkPlus.Enabled = True Then + If chkPlus.Value = vbChecked Then + chkNurCKD.Value = vbUnchecked + ChkOhnePlus.Enabled = False + ChkOhnePlus.Value = vbUnchecked + DoEvents + ChkOhnePlus.Enabled = True + End If + End If +End Sub + +Private Sub chkRest_Click() + Dim i As Integer + Dim blnSelected As Boolean + If chkRest.Enabled = False Then + Exit Sub + End If + lstFilterTyp.Enabled = False + For i = 0 To lstFilterTyp.ListCount - 1 + If lstFilterTyp.List(i) <> TEXTALLETYPEN Then + blnSelected = lstFilterTyp.Selected(i) + lstFilterTyp.Selected(i) = True + If blnSelected Then + DoEvents + lstFilterTyp.Selected(i) = False + End If + DoEvents + End If + Next + lstFilterTyp.Enabled = True + lstFilterTyp_Change +End Sub + +Private Sub chkSonderlayoutFertigung_Click() + If chkSonderlayoutFertigung.Enabled = False Then Exit Sub + chkVersuch.Enabled = False + chkVersuch.Value = vbUnchecked + chkVersuch.Enabled = True + + If chkSonderlayoutFertigung.Value = vbChecked Then + cmdAuftragsbearbeitung.Enabled = False + cmdSofortauftraege.Enabled = False + cmdEinsatz.Enabled = False + cmdMontage.Enabled = False + cmdPruefen.Enabled = False + cmdRechenwerk.Enabled = False + cmdVersandfertig.Enabled = False + cmdVorfertigung.Enabled = False + + chkSerNrSensus.Enabled = True + chkSerNrKnd.Enabled = True + chkStatistik.Enabled = True + Else + cmdAuftragsbearbeitung.Enabled = True + cmdSofortauftraege.Enabled = True + cmdEinsatz.Enabled = True + cmdMontage.Enabled = True + cmdPruefen.Enabled = True + cmdRechenwerk.Enabled = True + cmdVersandfertig.Enabled = True + cmdVorfertigung.Enabled = True + + chkSerNrSensus.Enabled = True + chkSerNrKnd.Enabled = True + chkStatistik.Enabled = True + + + chkSerNrSensus.Enabled = False + chkSerNrKnd.Enabled = False +' chkStatistik.Enabled = False + + cmbLot.text = "" +' txtAuftragVon.Text = "" +' txtAuftragBis.Text = "" + + End If +End Sub + +Private Sub chkSortierungDesc_Click() + ListeAktualisieren +End Sub + +Private Sub chkSpaltenbreiteAnpassen_Click() + If chkSpaltenbreiteAnpassen.Value = vbChecked Then + AutoSpaltenBreite MSFlexGrid1, lblAutosize + End If + + g_App.Settings.saveStringValue "Fertigungslisten", "Autospaltenbreite", IIf(chkSpaltenbreiteAnpassen.Value, "1", "0") + +End Sub + +Private Sub chkVersuch_Click() + If chkVersuch.Enabled = False Then Exit Sub + + chkSonderlayoutFertigung.Enabled = False + chkSonderlayoutFertigung.Value = vbUnchecked + chkSonderlayoutFertigung.Enabled = True + + + If chkVersuch.Value = vbChecked Then + cmdAuftragsbearbeitung.Enabled = False + cmdVorfertigung.Enabled = False + cmdMontage.Enabled = False + cmdPruefen.Enabled = False + cmdRechenwerk.Enabled = False + cmdVersandfertig.Enabled = False + + + Else + cmdAuftragsbearbeitung.Enabled = True + cmdVorfertigung.Enabled = True + cmdMontage.Enabled = True + cmdPruefen.Enabled = True + cmdRechenwerk.Enabled = True + cmdVersandfertig.Enabled = True + End If + + 'ListeAktualisieren +End Sub + + + + + + + + + + + +Private Sub cmdAuftragNrClear_Click() + txtFilterAuftrag.text = "" + 'Anzeigen m_strAusblenden +End Sub + +Private Sub cmdEinsatz_Click() + cmdMontage.Enabled = False + vorfertigung = False + Anzeigen "E" + cmdMontage.Enabled = True + cmdMontage.SetFocus +End Sub + + + + +Private Sub cmdExcelExport_Click() + cmdExcelExport.Enabled = False + Me.MousePointer = vbHourglass + Call ExcelExport + cmdExcelExport.Enabled = True + Me.MousePointer = vbNormal +End Sub + +'Private Sub cmdHelwan_Click() +' cmdHelwan.Enabled = False +' +' DTPickerVon.Value = DateSerial(Year(Now - 356), 1, 1) +' DTPickerBis.Value = DateSerial(Year(Now + 356), 12, 31) +' +' +' txtFilterKunde.Text = "Helwan" +' chkSonderlayoutFertigung.Value = vbChecked +' chkSerNrKnd.Value = vbChecked +' chkStatistik.Value = vbChecked +' cmbSortierung.ListIndex = enumSortierung.SortAuftragPosition +' +' AnzeigenVersuch ("F") +' +' +' +' cmdHelwan.Enabled = True +'End Sub + + + +Private Sub cmdLaser_Click() + cmdLaser.Enabled = False + vorfertigung = False + + Anzeigen "L" + + cmdLaser.Enabled = True + cmdLaser.SetFocus +End Sub + + + +Private Sub cmdVorauswahllLaser_Click() + Dim i As Integer + + lstAPOrt.Enabled = False + lstFilterTyp.Enabled = False + + For i = 0 To lstAPOrt.ListCount - 1 + Select Case lstAPOrt.List(i) + Case "L1", "L4" + lstAPOrt.Selected(i) = True + Case Else + lstAPOrt.Selected(i) = False + End Select + Next + + For i = 0 To lstFilterTyp.ListCount - 1 + Select Case lstFilterTyp.List(i) + Case "MS", "MMS" + lstFilterTyp.Selected(i) = True + Case Else + lstFilterTyp.Selected(i) = False + End Select + Next + + lstAPOrt.Enabled = True + lstFilterTyp.Enabled = True +End Sub + +Private Sub lstAPOrt_Click() + If lstAPOrt.Enabled = True Then + MSFlexGrid1.Clear + MSFlexGrid1.Rows = 2 + + 'SetIniWert "Listendruck", "Ort", cmbAPOrt.Text + + cmbKurzBez.text = TEXTALLEKURZBEZ + cmbFilterNennweite.text = "" + cmbFilterTemp.text = "" + cmbFilterDruck.text = "" + cmbFilterBaulaenge.text = "" + AktualisiereComboTyp + End If +End Sub + + +Private Sub FillCombo(myCombobox As control, strSpaltenname As String, Optional strWHERE As String = "") + On Error GoTo Errorhandler + + Dim strSql As String + + strWHERE = Replace(strWHERE, "Typ='PSE + PFL'", "(Typ='PSE' or Typ='PFL')") + + If strWHERE <> "" Then + strWHERE = " WHERE " & strWHERE + End If + + strSql = "SELECT DISTINCT " & strSpaltenname & " FROM IdentNr " + '''''strSQL = strSQL & "INNER JOIN Pruefpunkte ON Pruefpunkte.IdentNr = Identnr.IdentNr " + '''''strSQL = strSQL & "INNER JOIN Pruefklasse ON Pruefpunkte.PruefklasseKZ = Pruefklasse.PruefklasseKZ " + + If strWHERE <> "" Then + strSql = strSql & strWHERE + + strSql = strSql & " AND (Identnr.Status = 1 OR Identnr.Status is NULL) " + End If + + strSql = strSql & " order by " & strSpaltenname + Debug.Print strSql + + Dim rs As CRecordset + + Set rs = New CRecordset + rs.openRS strSql, True + Debug.Print strSql + + Do While Not rs.EOF + If rs.getStringValue(strSpaltenname) & "" <> "" Then + myCombobox.AddItem rs.getStringValue(strSpaltenname) + End If + rs.MoveNext + Loop + Exit Sub +Errorhandler: + LogIntoDB "Fehler " & Err.Number & " in FillCombo('" & strSpaltenname & "','" & strWHERE & "'): " & Err.Description, "SoftwareFehler" +End Sub + +Private Sub cmbFilterNennweite_Change() + AktualisiereComboTemp +End Sub + +Private Sub cmbFilterNennweite_Click() + AktualisiereComboTemp +End Sub + +Private Sub cmbFilterTemp_Change() + AktualisiereComboDruck +End Sub + +Private Sub cmbFilterTemp_Click() + AktualisiereComboDruck +End Sub + +Private Sub cmbFilterBaulaenge_Click() + AktualisiereComboBohrbild +End Sub + +Private Sub lstFilterTyp_Change() + Me.MousePointer = vbHourglass + AktualisiereComboNennweite + Me.MousePointer = vbNormal +End Sub + + + +Private Sub cmdClr_Click() + cmdCLR.Enabled = False + + Form_Load + txtFilterAuftrag.text = "" + cmdCLR.Enabled = True +End Sub + +Private Sub cmdDruckNeu_Click() + vorfertigung = False + cmdDruckNeu.Enabled = False + Me.MousePointer = vbHourglass + + + Printer.ScaleTop = -10 + Printer.ScaleLeft = -15 + + Printer.Orientation = cdlLandscape + Call PrintGrid(MSFlexGrid1, 15, 20, 10, 10, "Fertigungsliste", "", 0) + Printer.EndDoc + Printer.Orientation = cdlPortrait + + Me.MousePointer = vbNormal + cmdDruckNeu.Enabled = True +End Sub + +Private Sub cmdInfoTyp_Click() + MultiselectInfoAnzeigen lstFilterTyp, "Sie haben folgende Zählertypen ausgewählt:" +End Sub + +Private Sub cmdRefreshTyp_Click() + Dim strFilter As String + + cmdRefreshTyp.Enabled = False + Me.MousePointer = vbHourglass + + lstFilterTyp.Clear + lstFilterTyp.AddItem TEXTALLETYPEN + + lstFilterTyp.Selected(0) = True + strFilter = GetFilterOrt() + + If cmbFilterNennweite.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Nennweite='" & Val(cmbFilterNennweite.text) & "'" + End If + + If cmbFilterTemp.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Temperatur='" & Val(cmbFilterTemp.text) & "'" + End If + + If cmbFilterDruck.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Druck= " & Val(cmbFilterDruck.text) & " " + End If + + If cmbFilterBaulaenge.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Baulaenge = " & Val(cmbFilterBaulaenge.text) & " " + End If + + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " ((KurzBez = N'WZ') OR (KurzBez = N'ME') OR (KurzBez = N'GE') or (KurzBez = N'FK')) AND Typ <> '#' AND Typ not like 'FUV%' " + + DoEvents + FillCombo lstFilterTyp, "Typ", strFilter + + + AktualisiereComboNennweite + + cmdRefreshTyp.Enabled = True + Me.MousePointer = vbNormal +End Sub + + + +Private Sub Form_KeyPress(KeyAscii As Integer) + If KeyAscii = 27 Then + m_blnAbbruch = True + End If +End Sub + + + + +Private Sub lstFilterTyp_Click() + If lstFilterTyp.Enabled = True Then + chkRest.Enabled = False + chkRest.Value = vbUnchecked + DoEvents + chkRest.Enabled = True + + lstFilterTyp.Enabled = False + Dim i As Integer + Me.MousePointer = vbHourglass + + If lstFilterTyp.Selected(lstFilterTyp.ListIndex) = True Then + Select Case lstFilterTyp.List(lstFilterTyp.ListIndex) + Case TEXTALLETYPEN + For i = 0 To lstFilterTyp.ListCount - 1 + If lstFilterTyp.List(i) <> TEXTALLETYPEN Then + lstFilterTyp.Selected(i) = False + End If + Next + Case Else + For i = 0 To lstFilterTyp.ListCount - 1 + If lstFilterTyp.List(i) = TEXTALLETYPEN Then + lstFilterTyp.Selected(i) = False + End If + Next + End Select + End If + DoEvents + AktualisiereComboNennweite + + AktualisiereComboMetrolog + + lstFilterTyp.Enabled = True + Me.MousePointer = vbNormal + End If +End Sub + +Private Sub cmbSortierung_Click() +' If cmbSortierung.Enabled Then +' ListeAktualisieren +' End If +End Sub + +Private Sub ListeAktualisieren() + Dim lngVal As Long + If MSFlexGrid1.Rows > 2 Then + Anzeigen m_strAusblenden + End If +End Sub + +Private Sub cmdAbbruch_Click() + m_blnAbbruch = True + cmdAbbruch.Enabled = False +End Sub + +Private Sub cmdAuftragInfo_Click() + AuftragsInfoAnzeigen +End Sub + +Private Sub cmdClose_Click() + Unload Me +End Sub + +Private Sub cmdExcel_Click() + vorfertigung = False + Dim x As Integer + Dim y As Integer + Dim strTemp As String + Screen.MousePointer = vbHourglass + cmdExcel.Enabled = False + Clipboard.Clear + + For y = 0 To MSFlexGrid1.Rows - 1 + StatusBar1.SimpleText = "Kopiere Zeile " & y & " in die Zwischenablage." + DoEvents + For x = 0 To MSFlexGrid1.cols - 1 + MSFlexGrid1.col = x + MSFlexGrid1.row = y + strTemp = strTemp & MSFlexGrid1.text + If x < MSFlexGrid1.cols - 1 Then + strTemp = strTemp & vbTab + End If + Next x + strTemp = strTemp & vbCrLf + Next y + + Clipboard.SetText strTemp + StatusBar1.SimpleText = MSFlexGrid1.Rows & " Zeilen wurden in die Zwischenablage kopiert." + cmdExcel.Enabled = True + Screen.MousePointer = vbNormal +End Sub + +Private Sub cmdFinish_Click() + cmdFinish.Enabled = False + vorfertigung = False + Anzeigen "F" + cmdFinish.Enabled = True + cmdFinish.SetFocus +End Sub + + +Private Sub cmdSofortauftraege_Click() + cmdSofortauftraege.Enabled = False + vorfertigung = False + Anzeigen "Sofort" + cmdSofortauftraege.Enabled = True + cmdSofortauftraege.SetFocus +End Sub + + + +Private Sub cmdAuftragsbearbeitung_Click() + cmdAuftragsbearbeitung.Enabled = False + vorfertigung = False + Anzeigen "A" + cmdAuftragsbearbeitung.Enabled = True + cmdAuftragsbearbeitung.SetFocus +End Sub + +Private Sub cmdMontage_Click() + cmdMontage.Enabled = False + vorfertigung = False + Anzeigen "M" + cmdMontage.Enabled = True + cmdMontage.SetFocus +End Sub + +Private Sub cmdPrint_Click() + m_blnAbbruch = False + + StatusBar1.SimpleText = "Die Liste wird gedruckt..." + cmdPrint.Enabled = False + Screen.MousePointer = vbHourglass + Me.Enabled = False + + DoEvents + + If vorfertigung Then + PrintVorfertigung + ElseIf m_strAusblenden = "L" Then + If MsgBox("Möchten Sie die Sonderliste für Laser drucken?", vbYesNo Or vbDefaultButton1) = vbYes Then + Call SonderlisteLaserDrucken + GoTo fertiggedruckt + End If + ElseIf m_blnIstAlleAuftraege = True Then + If chkVersuch.Value = vbChecked Or chkSonderlayoutFertigung.Value = vbChecked Then + FinePrintVersuch + Else + FinePrintGrid + End If + Else + FinePrintAuftragsInfo + End If + +fertiggedruckt: + StatusBar1.SimpleText = "Die Liste wurde gedruckt. Fertig!" + Me.Enabled = True + Screen.MousePointer = vbNormal + cmdPrint.Enabled = True +End Sub + +Private Sub PrintVorfertigung() + Printer.ScaleMode = vbMillimeters + + Dim headers As Variant + headers = Array("Datum", "AuftragNr/Pos", "KundenOrt", "IdentNr", "Menge", "Bezeihnung", "Bohrung", "S", "L", "A", "V", "E", "M", "P", "R", "D", "Bemerkung", "Ort", "FabrikNr") + ' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + Dim scales As Variant + scales = Array(0, 0, 0, 0.05, 0, 0.4, 0.55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + ' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + ' shares the difference from page width and headers width between headers + Dim fontSize As Variant + fontSize = Array(8, 8, 7, 8, 8, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 8) + ' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + Dim alignments As Variant + alignments = Array(0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + ' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + Dim formats As Variant + formats = Array("dd.MM", Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, Null) + ' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + Dim boldnes As Variant + boldnes = Array(True, True, False, True, True, False, False, True, True, True, True, True, True, True, True, True, False, False, True) + ' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + Dim widths(18) As Double + ' 0 To 18: last array index => 19 elements + + Dim r As Integer + Dim c As Integer + Dim currentX As Double + Dim currentY As Double + Dim width As Double + Dim text As String + + Const offsetX = 0.5 + Const offsetY = 0.75 + Const lineW = 0.1 + + currentX = offsetX + + Printer.fontSize = 8 + Printer.FontBold = True + + For c = 0 To 18 + MSFlexGrid1.row = 0 + MSFlexGrid1.col = c + + widths(c) = Round(Printer.TextWidth(headers(c)) + offsetX * 2 + lineW, 2) + width = width + widths(c) + Next + + width = Printer.ScaleWidth - width + + For c = 0 To 18 + widths(c) = widths(c) + width * scales(c) + Next + + Printer.FontBold = True + + Printer.Line (0, 0)-(Printer.ScaleWidth, 0), vbBlack + Printer.Line (0, offsetY)-(Printer.ScaleWidth, offsetY), vbBlack + + currentY = currentY + offsetY + lineW * 2 + + Printer.fontSize = 14 + Printer.FontBold = True + Printer.currentX = currentX + Printer.currentY = currentY + text = "Sensus Auftragsverwaltung - Vorfertigungsliste" + Printer.Print text + + Dim prevH As Integer + prevH = Printer.TextHeight("|") + + Printer.fontSize = 8 + Printer.FontBold = False + text = "Ausdruck vom: " & Format(DateTime.Now, "dd.MM.yyyy hh:mm") + Printer.currentX = Printer.ScaleWidth - Printer.TextWidth(text) - offsetX + Printer.currentY = currentY + ((prevH - Printer.TextHeight("|")) / 2) + Printer.Print text + + currentY = currentY + prevH + offsetY * 2 + + Printer.fontSize = 8 + Printer.FontBold = False + Printer.currentX = currentX + Printer.currentY = currentY + text = "Auswahl vom: " & Format(DTPickerVon.Value, "dd.MM.yyyy") & " bis: " & Format(DTPickerBis.Value, "dd.MM.yyyy") + Printer.Print text + + Printer.fontSize = 8 + Printer.FontBold = False + text = "Ort: " & lstAPOrt.text + Printer.currentX = Printer.ScaleWidth - Printer.TextWidth(text) - offsetX + Printer.currentY = currentY + Printer.Print text + currentY = currentY + offsetY * 2 + Printer.TextHeight("|") + + Printer.currentX = currentX + Printer.currentY = currentY + Printer.Line (0, currentY)-(Printer.ScaleWidth, currentY), vbBlack + currentY = currentY + offsetY + lineW + + Printer.currentX = currentX + Printer.currentY = currentY + Printer.Line (0, currentY)-(Printer.ScaleWidth, currentY), vbBlack + currentY = currentY + offsetY + lineW + + Dim tableTopY As Double + tableTopY = currentY - offsetY + + Printer.fontSize = 8 + Printer.FontBold = True + + For c = 0 To MSFlexGrid1.cols - 1 + MSFlexGrid1.row = 0 + MSFlexGrid1.col = c + + text = headers(c) + + Printer.currentX = currentX + Printer.currentY = currentY + + Printer.Print text + + currentX = currentX + widths(c) + Next + + Printer.FontBold = False + + currentX = offsetX + currentY = currentY + Printer.TextHeight("|") + offsetY + + Printer.Line (0, currentY)-(Printer.ScaleWidth, currentY), vbActiveBorder + + currentX = offsetX + currentY = currentY + offsetY + + Dim tempX As Double + + For r = 1 To MSFlexGrid1.Rows - 1 + + For c = 0 To MSFlexGrid1.cols - 1 + MSFlexGrid1.row = r + MSFlexGrid1.col = c + + text = Trim(MSFlexGrid1.text) + + If Not IsNull(formats(c)) Then + text = Format(text, formats(c)) + End If + + Printer.FontBold = boldnes(c) + Printer.fontSize = fontSize(c) + + tempX = currentX + + If Not Printer.FontBold Then + tempX = currentX + offsetX + lineW + End If + + If alignments(c) = 1 Then + tempX = (tempX + widths(c)) - (Printer.TextWidth(text) + offsetX * 2) + End If + + Printer.currentX = tempX + Printer.currentY = currentY + Printer.Print PrintText(text, widths(c) - offsetX * 2) + + currentX = currentX + widths(c) + Next + + currentX = offsetX + currentY = currentY + Printer.TextHeight("|") + offsetY + + Printer.Line (0, currentY)-(Printer.ScaleWidth, currentY), vbActiveBorder + + currentX = offsetX + currentY = currentY + offsetY + Next + + Printer.Line (0, currentY - offsetY)-(Printer.ScaleWidth, currentY - offsetY), vbBlack + + Dim lineX As Double + + lineX = lineW + currentY = currentY - offsetY - lineW + Printer.Line (lineX - lineW, tableTopY)-(lineX - lineW, currentY), vbActiveBorder + + For c = 0 To MSFlexGrid1.cols - 1 + lineX = lineX + widths(c) + Printer.Line (lineX - lineW, tableTopY)-(lineX - lineW, currentY), vbActiveBorder + Next + + Dim bottomY As Double + bottomY = currentY + offsetY + + currentY = bottomY + currentX = widths(0) + widths(1) + widths(2) + widths(3) + + Printer.fontSize = 8 + Printer.FontBold = True + text = "Summe:" + Printer.currentX = currentX - Printer.TextWidth(text) - offsetX + Printer.currentY = currentY + Printer.Print text + + currentX = currentX + widths(4) + + Printer.fontSize = 8 + Printer.FontBold = True + text = lblSumme & "" + Printer.currentX = currentX - Printer.TextWidth(text) - offsetX + Printer.currentY = currentY + Printer.Print text + + currentX = currentX + widths(4) + + Printer.fontSize = 8 + Printer.FontBold = True + text = "" & lblGeprueft + Printer.currentX = currentX - Printer.TextWidth(text) - offsetX + Printer.currentY = currentY + Printer.Print text + + Printer.fontSize = 8 + Printer.FontBold = True + text = " davon geprüft" + Printer.currentX = currentX + offsetX + lineW + Printer.currentY = currentY + Printer.Print text + + currentX = currentX - widths(4) * 2 + currentY = currentY + Printer.TextHeight("|") + offsetY + + Printer.fontSize = 8 + Printer.FontBold = True + text = "nicht zu prüfende ME, FE, FK:" + Printer.currentX = currentX - Printer.TextWidth(text) - offsetX + Printer.currentY = currentY + Printer.Print text + + currentX = currentX + widths(4) + + Printer.fontSize = 8 + Printer.FontBold = True + text = "" & lblNichtZuPruefende + Printer.currentX = currentX - Printer.TextWidth(text) - offsetX + Printer.currentY = currentY + Printer.Print text + + currentX = currentX + widths(4) + + Printer.fontSize = 8 + Printer.FontBold = True + text = "" & (CInt(lblSumme) - CInt(lblGeprueft)) + Printer.currentX = currentX - Printer.TextWidth(text) - offsetX + Printer.currentY = currentY + Printer.Print text + + Printer.fontSize = 8 + Printer.FontBold = True + text = " noch zuprüfen" + Printer.currentX = currentX + offsetX + lineW + Printer.currentY = currentY + Printer.Print text + + currentX = currentX - widths(4) + currentY = currentY + offsetY + lineW + Printer.TextHeight("|") + Printer.Line (currentX, bottomY - offsetY - lineW)-(currentX, currentY), vbActiveBorder + Printer.Line (0, currentY)-(Printer.ScaleWidth, currentY) + + currentY = currentY + offsetY + lineW + Printer.Line (0, currentY)-(Printer.ScaleWidth, currentY) + + Printer.EndDoc +End Sub + +Private Function PrintText(text As String, width As Double) As String + While Printer.TextWidth(text) >= width + text = Left(text, Len(text) - 1) + Wend + PrintText = text +End Function + + +Private Sub cmdPruefen_Click() + cmdPruefen.Enabled = False + vorfertigung = False + Anzeigen "P" + cmdPruefen.Enabled = True + cmdPruefen.SetFocus +End Sub + +Private Sub cmdRechenwerk_Click() + cmdRechenwerk.Enabled = False + vorfertigung = False + Anzeigen "R" + cmdRechenwerk.Enabled = True + cmdRechenwerk.SetFocus +End Sub + +Private Sub cmdVersandfertig_Click() + cmdVersandfertig.Enabled = False + vorfertigung = False + Anzeigen "VF" + cmdVersandfertig.Enabled = True + cmdVersandfertig.SetFocus +End Sub + +Private Sub cmdVorfertigung_Click() + cmdVorfertigung.Enabled = False + vorfertigung = True + Anzeigen "V" + cmdVorfertigung.Enabled = True + cmdVorfertigung.SetFocus +End Sub + + + +Private Sub DTPickerVon_Change() + SetIniWert "Listendruck", "DatumVon", DTPickerVon.Value +End Sub + +Private Sub DTPickerBis_Change() + SetIniWert "Listendruck", "DatumBis", DTPickerBis.Value +End Sub + +Private Sub Form_Activate() + On Error Resume Next + cmdFinish.SetFocus +End Sub + +Private Sub Form_Load() + Dim i As Integer + + Screen.MousePointer = vbHourglass + DoEvents + Me.Visible = True + + ResetForm + + cmbKurzBez.Clear + cmbKurzBez.AddItem TEXTALLEKURZBEZ + cmbKurzBez.ListIndex = cmbKurzBez.ListCount - 1 + cmbKurzBez.AddItem TEXTALLEKURZBEZWZFK + cmbKurzBez.AddItem TEXTALLEKURZBEZMEFE + cmbKurzBez.AddItem TEXTALLEKURZBEZWZFKGE + + cmbSortierung.Enabled = False + cmbSortierung.Clear + cmbSortierung.AddItem "Fert.Datum", enumSortierung.SortDefault + cmbSortierung.AddItem "Nennweite", enumSortierung.SortNennweite + cmbSortierung.AddItem "Temperatur", enumSortierung.SortTemperatur + cmbSortierung.AddItem "Typ / Bezeichnung", enumSortierung.SortTypBez + cmbSortierung.AddItem "Kurzbezeichnung", enumSortierung.SortKurzBez + cmbSortierung.AddItem "Linie / Fert.Datum", enumSortierung.SortLinieVersanddatum + cmbSortierung.AddItem "Auftrag / Position", enumSortierung.SortAuftragPosition + cmbSortierung.AddItem "IdentNr", enumSortierung.SortIdentNr + cmbSortierung.AddItem "SerNr von", enumSortierung.SortSerienNrVon + cmbSortierung.AddItem "Bemerkung", enumSortierung.SortBemerkung + cmbSortierung.ListIndex = enumSortierung.SortDefault + cmbSortierung.Enabled = True + + cmbAnzahlKopien.AddItem 1 + cmbAnzahlKopien.AddItem 2 + cmbAnzahlKopien.AddItem 3 + cmbAnzahlKopien.AddItem 4 + cmbAnzahlKopien.AddItem 5 + cmbAnzahlKopien.ListIndex = 0 + + If g_App.Mitarbeiter.getName = "Nettemann" Then + chkVersuch.Enabled = False + chkVersuch.Value = vbChecked + chkVersuch.Enabled = True + End If + + lstAPOrt.Enabled = False + + + fillLstAPOrt + lstAPOrt.Enabled = True + + + Call AktualisiereComboTyp + + DTPickerVon.Value = GetIniWert("Listendruck", "DatumVon", Format(Now(), "dd.mm.yyyy")) + DTPickerBis.Value = Format(Now(), "dd.mm.yyyy") + + MSFlexGrid1.cols = 1 + MSFlexGrid1.FixedCols = 0 + MSFlexGrid1.cols = 0 + cmdAbbruch.Enabled = False + + If g_App.Settings.readStringValue("Fertigungslisten", "Autospaltenbreite", "0") = "1" Then + chkSpaltenbreiteAnpassen.Value = vbChecked + End If + + Call UpdateTabs + + TabsAuftr(0) = 0 ' Versanddatum (10) + TabsAuftr(1) = TabsAuftr(0) + 10 ' Pos (10) + TabsAuftr(2) = TabsAuftr(1) + 10 ' IdentNr (15) + TabsAuftr(3) = TabsAuftr(2) + 15 ' Menge (13) + TabsAuftr(4) = TabsAuftr(3) + 10 ' Bezeichnung (35) + TabsAuftr(5) = TabsAuftr(4) + 35 ' Bohrung (23) + TabsAuftr(6) = TabsAuftr(5) + 17 ' MID (5) + TabsAuftr(7) = TabsAuftr(6) + 3 ' L (2) + TabsAuftr(8) = TabsAuftr(7) + 2 ' A (2) + TabsAuftr(9) = TabsAuftr(8) + 2 ' V (2) + TabsAuftr(10) = TabsAuftr(9) + 2 ' E (2) + TabsAuftr(11) = TabsAuftr(10) + 2 ' M (2) + TabsAuftr(12) = TabsAuftr(11) + 2 ' P (2) + TabsAuftr(13) = TabsAuftr(12) + 2 ' R (2) + TabsAuftr(14) = TabsAuftr(13) + 2 ' D (2) + TabsAuftr(15) = TabsAuftr(14) + 4 ' Anzeige (15) + TabsAuftr(16) = TabsAuftr(15) + 15 ' Bemerkung (20) + TabsAuftr(17) = TabsAuftr(16) + 20 ' Status (15) + TabsAuftr(18) = TabsAuftr(17) + 15 ' FA-Nr (15) + TabsAuftr(19) = TabsAuftr(18) + 15 ' Ort/Linie (5) + TabsAuftr(20) = TabsAuftr(19) + 5 ' Ende + + ' Start with no column sorted. + m_SortColumn = -1 + + + MSFlexGrid1.ToolTipText = "Klicken Sie in eines der Felder um " + MSFlexGrid1.ToolTipText = MSFlexGrid1.ToolTipText & " die Ausgabe nach einer AuftragNr oder Kunden zu filtern, " + MSFlexGrid1.ToolTipText = MSFlexGrid1.ToolTipText & " oder um einen Wert vollständig anzuzeigen und in die Zwischenablage zu kopieren." + + 'g_App.Settings.saveStringValue "Fertigungslisten", "Lots", "" + + If g_App.Settings.readStringValue("Fertigungslisten", "Lots", "") = "" Then + g_App.Settings.saveStringValue "Fertigungslisten", "Lots", "Lot 1 " & TRENNER1 & " 71083499 - 71084977" + End If + + ResetLot + + cmdExcel.Enabled = False + Screen.MousePointer = vbNormal +End Sub + +Private Sub ResetForm() + cmdAuftragsbearbeitung.Enabled = True + + cmdAuftragsbearbeitung.Enabled = True + cmdSofortauftraege.Enabled = True + cmdEinsatz.Enabled = True + cmdMontage.Enabled = True + cmdPruefen.Enabled = True + cmdRechenwerk.Enabled = True + cmdVersandfertig.Enabled = True + cmdVorfertigung.Enabled = True + + + + chkDebug.Value = vbUnchecked + chkVersandIstDatumStattSerienNr.Value = vbUnchecked + chkSortierungDesc.Value = vbUnchecked + chkVersuch.Value = vbUnchecked + chkSpaltenbreiteAnpassen.Value = vbUnchecked + chkSonderlayoutFertigung.Value = vbUnchecked + chkSerNrSensus.Value = vbUnchecked + chkSerNrKnd.Value = vbUnchecked + chkStatistik.Value = vbUnchecked + chkNurCKD.Value = vbUnchecked + chkPlus = vbUnchecked + ChkOhnePlus = vbUnchecked + chkRest = vbUnchecked + chkNoMoskauBadger.Value = vbUnchecked + + txtFilterAuftrag.text = "" + txtFilterKunde.text = "" + + cmbSortierung.Enabled = False + cmbSortierung.ListIndex = -1 + cmbSortierung.Enabled = True + + cmbAnzahlKopien.ListIndex = -1 + + lblSumme.Caption = "" + lblGeprueft.Caption = "" + labelGefertigtMenge.Caption = "" + labelOffenWert.Caption = "" + lblSummeWert.Caption = "" +End Sub + +Private Sub UpdateTabs() + If chkVersuch.Value = vbUnchecked And chkSonderlayoutFertigung.Value = vbUnchecked Then + Tabs(0) = 0 ' Versanddatum bzw. Fert.Datum + Tabs(1) = Tabs(0) + 6 ' Auftrag/Pos + Tabs(2) = Tabs(1) + 19 ' Ort des Kunden + Tabs(3) = Tabs(2) + 15 ' IdentNr + Tabs(4) = Tabs(3) + 14 ' Menge + Tabs(5) = Tabs(4) + 10 ' Bezeichnung + Tabs(6) = Tabs(5) + 38 ' Bohrung + Tabs(7) = Tabs(6) + 22 ' MID (4) + Tabs(8) = Tabs(7) + 4 ' L 3 + Tabs(9) = Tabs(8) + 2 ' A (3) + Tabs(10) = Tabs(9) + 2 ' V (3) + Tabs(11) = Tabs(10) + 2 ' E (3) + Tabs(12) = Tabs(11) + 2 ' M (3) + Tabs(13) = Tabs(12) + 3 ' P (3) + Tabs(14) = Tabs(13) + 2 ' R (3) + Tabs(15) = Tabs(14) + 2 ' D (3) + Tabs(16) = Tabs(15) + 3 ' Anzeige + Tabs(17) = Tabs(16) + 13 ' Bemerkung + Tabs(18) = Tabs(17) + 17 ' Linie / FA + Tabs(19) = Tabs(18) + 5 ' FA-Nr. + Tabs(20) = Tabs(19) + 12 ' 200 + ElseIf chkVersuch.Value = vbChecked Then + + Tabs(0) = 0 ' Versanddatum (10) bzw Fert.Datum + Tabs(1) = 10 ' Auftrag/Pos (22) + Tabs(2) = 32 ' IdentNr (15) + Tabs(3) = 47 ' Menge (13) + Tabs(4) = 60 ' Bezeichnung (40) + Tabs(5) = 100 'SerienNrVon + Tabs(6) = 115 'SerienNrBis + Tabs(7) = 135 'Anzeige + Tabs(8) = 150 'Bemerkung + Tabs(9) = 170 'ZusatzText + Tabs(10) = 200 'Ende + + Tabs(11) = 200 ' + Tabs(12) = 200 + Tabs(13) = 200 + Tabs(14) = 200 + Tabs(15) = 200 + Tabs(16) = 200 + ElseIf chkSonderlayoutFertigung.Value = vbChecked Then + Tabs(0) = 0 ' Versanddatum bzw. Fert.Datum (10) + Tabs(1) = 10 ' Auftrag/Pos (22) + Tabs(2) = 32 ' IdentNr (15) + Tabs(3) = 47 ' Menge (13) + Tabs(4) = 60 ' Bezeichnung (40) + Tabs(5) = 100 'SerienNrVon + Tabs(6) = 115 'SerienNrBis + Tabs(7) = 130 'Knd Ser von - bis + Tabs(8) = 175 'FA-Nr + Tabs(9) = 190 'P + Tabs(10) = 195 'ende + + Tabs(11) = 200 ' + Tabs(12) = 200 + Tabs(13) = 200 + Tabs(14) = 200 + Tabs(15) = 200 + Tabs(16) = 200 + Else + MsgBox "Ungültige Kombination in UpdateTabs()" + End If +End Sub +Private Sub Form_Resize() + Dim lngTopUntereReihe As Long + + If Me.WindowState = vbNormal Then + + If Me.width < Frame1.width Then + ' Formularbreite soll nicht kleiner werden als der Eingabeframe + Me.width = Frame1.width * 1.01 + End If + + If Me.Height < 7000 Then + ' mindest Höhe + Me.Height = 7000 + End If + End If + + lngTopUntereReihe = Me.ScaleHeight - cmdClose.Height - StatusBar1.Height + + + cmdClose.Top = lngTopUntereReihe + cmdClose.Left = Me.ScaleWidth - cmdClose.width * 1.2 + + cmdPrint.Top = lngTopUntereReihe + cmdPrint.Left = Me.ScaleWidth - cmdClose.width * 2.4 + + cmdAbbruch.Top = lngTopUntereReihe + cmdAbbruch.Left = Me.ScaleWidth - cmdClose.width * 3.6 + + cmdCLR.Top = lngTopUntereReihe + cmdCLR.Left = cmdAbbruch.Left - cmdCLR.width * 1.2 + + cmdExcelExport.Top = lngTopUntereReihe + cmdExcelExport.Left = cmdCLR.Left - 1.2 * cmdExcelExport.width + + MSFlexGrid1.width = Me.ScaleWidth * 0.99 + If Me.ScaleHeight - MSFlexGrid1.Top - cmdClose.Height * 2 > 0 Then + MSFlexGrid1.Height = Me.ScaleHeight - MSFlexGrid1.Top - cmdClose.Height * 4 + End If + + lblSumme.Top = MSFlexGrid1.Top + MSFlexGrid1.Height + 8 + + lblSummelabel.Top = lblSumme.Top + labelGefertigtLabel.Top = lblSumme.Top + labelGefertigtMenge.Top = lblSumme.Top + labelOffenLabel.Top = lblSumme.Top + labelOffenWert.Top = lblSumme.Top + + + lblGeprueft.Top = lblSumme.Top + lblSummeWert.Top = lblSumme.Top + lblNichtZuPruefende.Top = lblSumme.Top + lblSumme.Height * 1.5 + + Label21.Top = lblSumme.Top + Label24.Top = lblSumme.Top + Label25.Top = lblNichtZuPruefende.Top + + cmdDruckNeu.Top = cmdExcel.Top + + + Debug.Print Me.width +End Sub + + +Private Sub Anzeigen(strAusblenden As String) + On Error GoTo Errorhandler + UpdateTabs + StatusBar1.SimpleText = "" + + If chkVersuch.Value = vbChecked Or chkSonderlayoutFertigung.Value = vbChecked Then + Call AnzeigenVersuch(strAusblenden) + If chkSpaltenbreiteAnpassen.Value = vbChecked Then + AutoSpaltenBreite MSFlexGrid1, lblAutosize + End If + Exit Sub + End If + + Debug.Print "Anzeigen" + + labelGefertigtMenge.Caption = "" + labelOffenWert.Caption = "" + lblSummeWert.Caption = "" + lblNichtZuPruefende.Caption = "" + + m_blnIstAlleAuftraege = True + + Dim strSql As String + Dim rs As CRecordset + Dim strTemp As String + Dim ZeileAufBlatt As Integer + Dim dblY As Double + + Dim Seite As Integer + + Dim i As Integer + Dim lngSummeMenge As Long + Dim dblLastFontSize As Double + Dim strZusatztext As String + + Dim strAlteLinie As String + Dim strLinie As String + Dim lngFarbe As Long + + Dim lngGeprueft As Long + Dim lngSummeGeprueft As Long + Dim lngSummeNichtZuPruefendeMEFE As Long + + Dim lngAuftragsMenge As Long + Dim strVako As String + Dim objVako As CVakoCode + Dim strAusfuehrung As String + Dim strCSD As String + + m_blnAbbruch = False + cmdAbbruch.Enabled = True + cmdExcel.Enabled = False + + Screen.MousePointer = vbHourglass + DoEvents + + m_strAusblenden = strAusblenden + m_eSortierung = cmbSortierung.ListIndex + + MSFlexGrid1.Clear + MSFlexGrid1.Rows = 1 + MSFlexGrid1.cols = 1 + MSFlexGrid1.FormatString = "" + + MSFlexGrid1.ScrollBars = flexScrollBarBoth + lblSumme.Caption = "" + lblGeprueft.Caption = "" + + MSFlexGrid1.Font = "Courier New" + MSFlexGrid1.Font.Size = 8 + + If chkVersuch.Value = vbChecked Then + MSFlexGrid1.FormatString = " Fert.Dat |AuftragNr/Pos|Kndort| IdentNr |Menge| Bezeichnung | SerienNr-Von|SerienNr-Bis| Anzeige | Bemerkung |ZusatzText" + ElseIf vorfertigung Then + MSFlexGrid1.FormatString = " Datum|AufNr/Pos|Kndort|IdentNr|Menge|Bezeichnung|Bohrung|S|L|A|V|E|M|P|R|D|Bemerkung|Ort|FabNr." + Else + MSFlexGrid1.FormatString = " Fert.Dat |AuftragNr/Pos|Kndort| IdentNr |Menge| Bezeichnung | Bohrung |Info|L|A|V|E|M|P|R|D| Anzeige | Bemerkung |Ort| FA-Nr." + End If + +' strSQL = "SELECT AuftragPosition.AuftragNr, AuftragPosition.PositionNr, AuftragPosition.IdentNr, AuftragPosition.VersandDatum, " +' strSQL = strSQL & " AuftragPosition.FertigungsauftragNr, AuftragPosition.Menge,AuftragPosition.TLMenge, AuftragPosition.Bohrung, AuftragPosition.Farbe, AuftragPosition.Prf_nach_MID, AuftragPosition.Anzeige, AuftragPosition.A_IstTermin, AuftragPosition.V_IstTermin,AuftragPosition.E_IstTermin, " +' strSQL = strSQL & " AuftragPosition.M_IstTermin, AuftragPosition.P_IstTermin, AuftragPosition.R_IstTermin, AuftragPosition.Bem_Fertigung, AuftragPosition.SerienNrVon, AuftragPosition.SerienNrBis, " +' strSQL = strSQL & " AuftragPosition.Bezeichnung, IdentNr.KurzBez, IdentNr.Typ, IdentNr.Typzusatz, IdentNr.Nennweite, IdentNr.Temperatur, IdentNr.Druck, IdentNr.Baulaenge,AuftragPosition.ZusatzText, " +' \\sla12file\auftrag\KarstenSosna\SensusAV\source + + strSql = "SELECT AuftragPosition.* ," + strSql = strSql & " IdentNr.KurzBez, IdentNr.Typ, IdentNr.Typzusatz, IdentNr.Nennweite, IdentNr.Temperatur, IdentNr.Druck, IdentNr.Baulaenge,IdentNr.IdentNrString, IdentNr.VakoCode, IdentNr.SAP_Nummer, AuftragPosition.ZusatzText, " + strSql = strSql & " AuftragPosition.Ort, Kunde.Ort as Kundenort, Kunde.Name, IdentNr.Bestellgruppe , AuftragPosition.Kennzeichen2, AuftragPosition.Kundennr " + + If strAusblenden = "Sofort" Then + strSql = strSql & " , AuftragPositionSerienNr.SerienNr " + End If + + If vorfertigung Then + strSql = strSql & " , ISNULL([VakoMerkmal].[Charcode], 'X') AS [X]" + End If + + strSql = strSql & " FROM AuftragPosition " & vbCrLf + + strSql = strSql & " INNER JOIN Identnr ON AuftragPosition.IdentNr = Identnr.IdentNr" + strSql = strSql & " INNER JOIN Kunde ON AuftragPosition.KundenNr = Kunde.KundenNr" & vbCrLf + + If vorfertigung Then + strSql = strSql & " LEFT JOIN (SELECT [Stelle], [Laenge], [Charcode]" + strSql = strSql & " FROM [VAKO_Merkmale]" + strSql = strSql & " WHERE [Basis] = 'GNS' AND [Name] = 'C_GEN_GEHAEUSEOPTION')" + strSql = strSql & " AS [VakoMerkmal]" + strSql = strSql & " ON [VakoMerkmal].[Charcode] = SUBSTRING([Identnr].[VakoCode], [VakoMerkmal].[Stelle], [VakoMerkmal].[Laenge])" + End If + + If strAusblenden = "Sofort" Then + strSql = strSql & " LEFT OUTER JOIN AuftragPositionSerienNr ON AuftragPosition.AuftragNr = AuftragPositionSerienNr.AuftragNr " + strSql = strSql & " AND AuftragPosition.PositionNr = AuftragPositionSerienNr.PositionNr" + End If + + strSql = strSql & " WHERE (AuftragPosition.VersandDatum >= CONVERT(DATETIME, '" & Format(DTPickerVon.Value, "yyyy-mm-dd") & " 00:00:00', 102)) AND" + strSql = strSql & " (AuftragPosition.VersandDatum <= CONVERT(DATETIME, '" & Format(DTPickerBis.Value, "yyyy-mm-dd") & " 23:59:59', 102)) " + + If strAusblenden = "Sofort" Then + strSql = strSql & " AND AuftragPositionSerienNr.SerienNr is null" + End If + + If cmbFilterMetrolog.text <> TEXTALLE Then + strSql = strSql & " AND AuftragPosition.Metrolog = '" & cmbFilterMetrolog.text & "' " + End If + + + strSql = strSql & " AND " & GetFilterOrt("AuftragPosition.Ort") + + + If Val(txtAuftragVon.text) > 0 Then + strSql = strSql & " AND AuftragNr >= " & Val(txtAuftragVon.text) & " " + End If + + If Val(txtAuftragVon.text) > 0 Then + strSql = strSql & " AND AuftragNr <= " & Val(txtAuftragBis.text) & " " + End If + + + ' Lot 3 Sonderregel: darf nicht Lot 2 enthalten! + If Val(txtAuftragVon.text) = 71085275 And Val(txtAuftragBis.text) = 71086275 Then + strSql = strSql & " AND not (AuftragNr >= 71085331 and AuftragNr <= 71085336) " + End If + + +' If cmbAPOrt.Text <> TEXTALLELINIEN Then +' If cmbAPOrt.Text = TEXTALLELINIEN_OHNE_VS Then +' strSQL = strSQL & " AND AuftragPosition.Ort <> 'VS' " +' Else +' strSQL = strSQL & " AND AuftragPosition.Ort ='" & cmbAPOrt.Text & "' " +' End If +' Else +' ' alle Linien +' End If + + Select Case cmbKurzBez.text + Case TEXTALLEKURZBEZMEFE + strSql = strSql & " AND (Identnr.KurzBez = 'ME' or Identnr.KurzBez = 'FE')" + Case TEXTALLEKURZBEZWZFK + strSql = strSql & " AND (Identnr.KurzBez = 'WZ' or Identnr.KurzBez = 'FK')" + Case TEXTALLEKURZBEZWZFKGE + strSql = strSql & " AND (Identnr.KurzBez = 'WZ' or Identnr.KurzBez = 'FK' or Identnr.KurzBez = 'GE')" + Case Else + strSql = strSql & " AND (Identnr.KurzBez <> 'ET')" + End Select + + Select Case strAusblenden + Case "A" + strSql = strSql & " AND A_IstTermin is NULL " + Case "V" + strSql = strSql & " AND V_IstTermin is NULL And Identnr.KurzBez <> 'ME' " + Case "E" + strSql = strSql & " AND E_IstTermin is NULL " + Case "M" + strSql = strSql & " AND M_IstTermin is NULL " + Case "P" + strSql = strSql & " AND P_IstTermin is NULL AND Identnr.KurzBez <> 'FK' AND Identnr.KurzBez <> 'FE'" + Case "R" + strSql = strSql & " AND R_IstTermin is NULL AND (Identnr.typ = 'PSE' OR Identnr.typ = 'PFL') " + Case "VF" + strSql = strSql & " AND P_IstTermin is NOT NULL " + m_eSortierung = SortLinieVersanddatum + Case "L" + strSql = strSql & " AND L_IstTermin is NULL " + Case "F" + ' alle anzeigen + + Case "Sofort" + strSql = strSql & " AND (Identnr.KurzBez = 'ME' or Identnr.KurzBez = 'WZ') AND AuftragPosition.FertigungsauftragNr is NULL AND Auftragposition.KundenNr <> 38045 " + End Select + + If Val(txtFilterAuftrag.text) > 0 Then + strSql = strSql & " AND (AuftragPosition.AuftragNr = " & Val(txtFilterAuftrag.text) & " OR AuftragPosition.FertigungsauftragNr = " & Val(txtFilterAuftrag.text) & " or AuftragPosition.AuftragNr = " & Val(txtFilterAuftrag.text) & " ) " + End If + + If Len(Trim(txtFilterKunde.text)) > 0 Then + If Val(txtFilterKunde.text) > 0 Then + strSql = strSql & " AND AuftragPosition.KundenNr = " & Val(txtFilterKunde.text) & " " + Else + strSql = strSql & " AND (Kunde.Name like '%" & Replace(txtFilterKunde.text, "'", "''") & "%' " + strSql = strSql & " OR Kunde.Ort like '%" & Replace(txtFilterKunde.text, "'", "''") & "%') " + End If + End If + + If GetFilterForTyp <> "" Then + strSql = strSql & " AND " & GetFilterForTyp + End If + + If cmbFilterNennweite.text <> TEXTALLE Then + strSql = strSql & " AND IdentNr.Nennweite = " & Val(cmbFilterNennweite.text) & " " + End If + + If cmbFilterTemp.text <> TEXTALLE Then + strSql = strSql & " AND IdentNr.Temperatur= " & Val(cmbFilterTemp.text) & " " + End If + + If cmbFilterDruck.text <> TEXTALLE Then + strSql = strSql & " AND IdentNr.Druck= " & Val(cmbFilterDruck.text) & " " + End If + + If cmbFilterBaulaenge.text <> TEXTALLE Then + strSql = strSql & " AND IdentNr.Baulaenge = " & Val(cmbFilterBaulaenge.text) & " " + End If + + If cmbFilterBohrbild.text <> TEXTALLE Then + strSql = strSql & " AND AuftragPosition.Bohrung like '%" & cmbFilterBohrbild.text & "%' " + End If + + + If chkPlus.Value = vbChecked Then + strSql = strSql & " AND IdentNr.Typzusatz = N'Plus' " + End If + + If ChkOhnePlus.Value = vbChecked Then + strSql = strSql & " AND (IdentNr.Typzusatz <> N'Plus' or IdentNr.Typzusatz is NULL) " + End If + + If chkNurCKD.Value = vbChecked Then + strSql = strSql & " AND AuftragPosition.Bezeichnung like N'CKD%' " + End If + + If chkNoMoskauBadger.Value = vbChecked Then + strSql = strSql & " AND (Kunde.KundenNr <> 38116 and Kunde.KundenNr <> 38045) " + End If + + If chkNurMID Then + strSql = strSql & " AND ZusatzText LIKE '%Zulassungskennzeichen : MID%' " + End If + + If chkOhneLager.Value = vbChecked Then + strSql = strSql & " AND Kunde.KundenNr <> 1000" + End If + + If chkNur_eRegister.Value = vbChecked Then + strSql = strSql & " and AuftragPosition.FertigungsauftragNr in (SELECT FertigungsauftragNr from VIEW_eRegister_Infos) and Identnr.VakoCode is not null " & vbCrLf + End If + + strSql = strSql & vbCrLf + + Select Case m_eSortierung + Case enumSortierung.SortKurzBez + strSql = strSql & " ORDER BY Identnr.KurzBez " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ",IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Nennweite,IdentNr.Temperatur " + Case enumSortierung.SortNennweite + strSql = strSql & " ORDER BY IdentNr.Nennweite " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ", IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Temperatur " + Case enumSortierung.SortTemperatur + strSql = strSql & " ORDER BY IdentNr.Temperatur " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ", IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Nennweite " + Case enumSortierung.SortTypBez + strSql = strSql & " ORDER BY IdentNr.Typ " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ",IdentNr.TypZusatz,IdentNr.Nennweite,IdentNr.Temperatur " + Case enumSortierung.SortLinieVersanddatum + strSql = strSql & " ORDER BY AuftragPosition.Ort, VersandDatum " + Case enumSortierung.SortAuftragPosition + strSql = strSql & " ORDER BY AuftragPosition.AuftragNr " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ", AuftragPosition.PositionNr " + Case enumSortierung.SortIdentNr + strSql = strSql & " ORDER BY AuftragPosition.IdentNr " + Case enumSortierung.SortSerienNrVon + strSql = strSql & " ORDER BY AuftragPosition.SerienNrVon " + Case enumSortierung.SortBemerkung + strSql = strSql & " ORDER BY AuftragPosition.Bem_Fertigung " + Case Else + strSql = strSql & " ORDER BY AuftragPosition.VersandDatum " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ", IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Nennweite,IdentNr.Temperatur " + End Select + If chkSortierungDesc.Value = vbChecked Then + strSql = strSql & " DESC" + End If + + If chkStatistik.Value = vbChecked Then + strSql = Replace(strSql, "AuftragPosition", "AlleAuftragPositionen") + End If + + + Debug.Print strSql + + Set rs = New CRecordset + + rs.openRS strSql, True + + + MSFlexGrid1.Rows = 2 + mlngRecordsFound = 0 + lngSummeMenge = 0 + lngSummeGeprueft = 0 + + If Not rs.EOF Then + Do While Not rs.EOF + + '''''''''''''''''''''''' Vakocode auswerten ''''''''''''''''''''''' + strCSD = "" + strAusfuehrung = "" + strVako = rs.getStringValue("VakoCode") + Set objVako = Nothing + If Len(strVako) > 0 Then + Set objVako = New CVakoCode + objVako.Load strVako + + strAusfuehrung = objVako.GetWert("Ausfuehrung") + If Left(strAusfuehrung, 4) = "CSD " Then + strCSD = Split(strAusfuehrung, " ")(0) & " " & Split(strAusfuehrung, " ")(1) + strCSD = Replace(strCSD, "_C&I", "") + Else + strCSD = "" + End If + End If + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + cmdExcel.Enabled = True + + mlngRecordsFound = mlngRecordsFound + 1 + MSFlexGrid1.row = MSFlexGrid1.Rows - 1 + + MSFlexGrid1.col = 0 + ' wenn man nach einer nicht numerischen Spalte sortieren, die aber numerisch anfängt, sortieren möchte, muss ein Space vor dem Anfag stehen + MSFlexGrid1.text = " " & Format(rs.getLongValue("Versanddatum"), "yyyy-mm-dd") + + MSFlexGrid1.col = 1 + MSFlexGrid1.text = " " & rs.getLongValue("AuftragNr") & "/" & rs.getLongValue("PositionNr") + ' wenn man nach einer nicht numerischen Spalte sortieren, die aber numerisch anfängt, sortieren möchte, muss ein Space vor dem Anfag stehen + + MSFlexGrid1.col = 2 + MSFlexGrid1.text = rs.getStringValue("Kundenort") + + + '''''''''''''''''''''''''''''''''''''''''''''''''''' + ' Kundenort je nach CSD ändern + '''''''''''''''''''''''''''''''''''''''''''''''''''' + ' Auf Wunsch von Uwe Kubon am 2021-01-18 + If strCSD = "CSD 38042_MK" Then + MSFlexGrid1.text = rs.getStringValue("Kundenort") & "/MK" + '''''''''''' + ' Auf Wunsch von Uwe Kubon am 2021-05-18 + ' Moin Reinhard, wenn i.O, bitte den o.g. Kundenort "Singapore" - Kd.-Nr. 772161 für die SAV-Übersicht (z.B. Listendruck) + ' in "Singapore/Korea" umbenennen, wenn das "CSD 48982 DIMIT Korea" (39/38) konfiguriert wurde. + ' Mail von Weber, Andreas Dienstag, 18. Mai 2021 12:52 + ' "Singapore/Korea" = gemäß CSD 48982 DIMIT Korea + ' Der neue Bestellprozess über Xylem, Singapur betrifft alle 3 Kunden aus Süd Korea, DMIT, WIZIT u. DRTECH (DURECOM) + ElseIf strCSD = "CSD 48982" Then + ' CSD 48982 DMIT (DIMIT) Korea + MSFlexGrid1.text = rs.getStringValue("Kundenort") & "/Korea-DMIT" + ElseIf strCSD = "CSD 38033" Then + ' CSD 38033 Wizit Korea + MSFlexGrid1.text = rs.getStringValue("Kundenort") & "/Korea-Wizit" + ElseIf strCSD = "CSD 765700" Then + ' CSD 765700 Durecom Korea + MSFlexGrid1.text = rs.getStringValue("Kundenort") & "/Korea-Durecom" + End If + '''''' + + MSFlexGrid1.col = 3 + + Dim strVariantencode As String + Dim strIdentnrString As String + + MSFlexGrid1.text = getIdentNrTextFromRecordset(rs, strAusblenden) + +' strIdentnrString = Trim(rs.getStringValue("IdentnrString")) +' Select Case strIdentnrString +' ' Sonderbehandlung +' Case "MODULMEI", "MODUL" +' ' soll ersetzt werden durch Material aus Tabelle Material_Variantencode über Variantencode, falls vorhanden +' ' Variantencode auslesen +' strVariantencode = GetWertFromZusatztext(rs.getStringValue("Zusatztext"), "Bestellcode " & strIdentnrString & " :") +' If strVariantencode <> "" Then +' ' Variantencode ist vorhanden +' ' Material aus Tabelle Material_Variantencode auslesen +' strTemp = getMaterialFromVariantencode(strVariantencode, strIdentnrString) +' If strTemp = "" Then +' ' Material ist nicht vorhanden: Fallback auf IdentnrString +' strTemp = rs.getStringValue("IdentnrString") +' End If +' Else +' ' Variantencode ist NICHT vorhanden, KonfigMat = IdentNrstring anzeigen +' ' Fallback auf IdentnrString +' strTemp = strIdentnrString +' End If +' ' Tabellenzelle füllen +' MSFlexGrid1.Text = strTemp +' Case "" +' If strAusblenden = "Sofort" Then +' MSFlexGrid1.Text = rs.getStringValue("Kennzeichen") & rs.getLongValue("IdentNr") & rs.getStringValue("Kennzeichen2") +' Else +' If rs.getLongValue("Kundennr") = 1000 And Len(rs.getStringValue("Kennzeichen2")) > 0 Then +' MSFlexGrid1.Text = rs.getLongValue("IdentNr") & rs.getStringValue("Kennzeichen2") +' Else +' Select Case rs.getLongValue("IdentNr") +' Case 2100000 +' MSFlexGrid1.Text = "MODUL*" +' Case Else +' MSFlexGrid1.Text = rs.getLongValue("IdentNr") +' End Select +' End If +' End If +' Case Else +' MSFlexGrid1.Text = strIdentnrString +' End Select +' If rs.getStringValue("SAP_Nummer") <> "" Then +' MSFlexGrid1.Text = rs.getStringValue("SAP_Nummer") +' End If + + + + MSFlexGrid1.col = 4 + lngAuftragsMenge = rs.getLongValue("Menge") + If rs.getLongValue("TLMenge") = 0 Then + ' es wurde bisher noch keine Teilmenge fertiggemeldet + MSFlexGrid1.text = rs.getLongValue("Menge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("Menge") + Else + ' Es wurde eine Teilmenge fertiggemeldet + MSFlexGrid1.text = "R " & rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + End If + + strZusatztext = Replace(rs.getStringValue("Zusatztext"), vbCrLf, "| ") + MSFlexGrid1.col = 5 + MSFlexGrid1.ColAlignment(5) = flexAlignLeftCenter + + + ' If InStr(1, UCase(strZusatztext), UCase("MS Plus")) > 0 Then + ' MSFlexGrid1.Text = "+" & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' ElseIf InStr(1, UCase(strZusatztext), UCase("MeiStream Plus")) > 0 Then + ' MSFlexGrid1.Text = "+" & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' Else + + Dim Temperatur As Integer + Temperatur = rs.getIntValue("Temperatur") + + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + If Not objVako Is Nothing Then + '''''''''''''''''''''''' Testen ob Kältezähler ''''''''''''''''''''''' + If Left(strVako, 3) = "PST" Then + If objVako.GetWert("Kaeltezaehler") <> "" Then + Temperatur = 50 + 'Debug.Print objVako.GetWert("Kaeltezaehler") + 'MSFlexGrid1.Text = Trim(MSFlexGrid1.Text & " KÄLTEZÄHLER !") + End If + End If + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + End If + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + + + ' RH 19.5.2008: CKD Sonderbehandlung + MSFlexGrid1.text = IIf((Left(rs.getStringValue("Bezeichnung"), 3) = "CKD"), "CKD ", "") & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(Temperatur) & "°C PN" & rs.getIntValue("Druck") + ' End If + + If Not rs.isFieldNull("Baulaenge") Then + MSFlexGrid1.text = MSFlexGrid1.text & " L" & rs.getLongValue("Baulaenge") + Else + 'Baulänge evtl über Bestellcode bestimmen + strTemp = GetBaulaengeFromAuftragposition(rs.getLongValue("AuftragNr"), rs.getLongValue("PositionNr"), rs.getLongValue("Bestellgruppe")) + If strTemp <> "" Then + MSFlexGrid1.text = MSFlexGrid1.text & " L" & strTemp + End If + End If + + + If chkVersuch.Value = vbUnchecked Then + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 6 + MSFlexGrid1.text = Replace(rs.getStringValue("Bohrung"), "Bohrbild", "") + + ' 3.11.2009 Gibt Prüfung nach MID + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 7 + + If vorfertigung Then + On Error Resume Next + If rs.getStringValue("X") <> "X" Then ' Drucksensor + MSFlexGrid1.text = "S" + End If + ElseIf InStr(1, rs.getStringValue("ZusatzText"), "Zulassungskennzeichen : MID") > 0 Or rs.getBooleanValue("Prf_nach_MID") Then + MSFlexGrid1.text = "MID" + ' neu RH 15.3.2012 + ElseIf rs.getStringValue("Metrolog") = "MID" Then + MSFlexGrid1.text = "MID" + End If + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 7 + MSFlexGrid1.text = GetAVEMPR_Spaltenwert(rs, "L") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 7 + MSFlexGrid1.text = GetAVEMPR_Spaltenwert(rs, "A") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 8 + MSFlexGrid1.text = GetAVEMPR_Spaltenwert(rs, "V") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 9 + MSFlexGrid1.text = GetAVEMPR_Spaltenwert(rs, "E") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 10 + MSFlexGrid1.text = GetAVEMPR_Spaltenwert(rs, "M") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 11 + MSFlexGrid1.text = GetAVEMPR_Spaltenwert(rs, "P") + + If IstZaehlerUngeprueft(rs) Then + ' - TLMenge eingebaut 2020-06-17 für Uwe Kubon: abzüglich der bereits fertiggemeldeten Filter und ungeprüften ME + lngSummeNichtZuPruefendeMEFE = lngSummeNichtZuPruefendeMEFE + rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + MSFlexGrid1.text = "-" + End If + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 12 + MSFlexGrid1.text = GetAVEMPR_Spaltenwert(rs, "R") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 13 + Dim lngAnzahlDruckprf As Long + lngAnzahlDruckprf = AnzahlDruckGepruefterZaehler(rs.getLongValue("AuftragNr"), rs.getLongValue("PositionNr")) + If lngAnzahlDruckprf >= lngAuftragsMenge Then + If lngAnzahlDruckprf = lngAuftragsMenge Then + MSFlexGrid1.text = "D" + Else + MSFlexGrid1.text = "d" + End If + End If + +' MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 14 +' If rs.getLongValue("TLMenge_G") >= lngAuftragsMenge Then +' MSFlexGrid1.Text = "G" +' End If + + Else + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 6 + MSFlexGrid1.text = rs.getStringValue("SerienNrVon") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 7 + MSFlexGrid1.text = rs.getStringValue("SerienNrBis") + End If + + If Not vorfertigung Then + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 13 oder 8 + MSFlexGrid1.text = Trim(rs.getStringValue("Anzeige")) + + If Not objVako Is Nothing Then + If InStr(1, objVako.GetWert("Zählwerk"), "eRegister") > 0 Then + MSFlexGrid1.text = MSFlexGrid1.text & " E" + End If + End If + + If Not objVako Is Nothing Then + If InStr(1, objVako.GetWert("Zählwerk"), "Encoder") > 0 Then + MSFlexGrid1.text = MSFlexGrid1.text & " Enc" + End If + End If + End If + + + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + '' Bem_Fertigung '' + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 14 oder 9 + MSFlexGrid1.text = GetBemerkungText(rs, lngSummeGeprueft) + + + '''''''''''''''''''''''' Vakocode auswerten ''''''''''''''''''''''' + + If Not objVako Is Nothing Then + '''''''''''''''''''''''' Testen ob Kältezähler ''''''''''''''''''''''' + If Left(strVako, 3) = "PST" Then + If objVako.GetWert("Kaeltezaehler") <> "" Then + MSFlexGrid1.text = Trim(MSFlexGrid1.text & " KÄLTEZÄHLER !") + End If + End If + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + End If + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + + If chkVersuch.Value = vbChecked Then + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 10 + MSFlexGrid1.text = AddToTextIfNotExists(MSFlexGrid1.text, Trim(Replace(rs.getStringValue("ZusatzText"), vbCrLf, " "))) + End If + + + + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + ' Ende Bem_Fertigung + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + + If chkVersuch.Value = vbUnchecked Then + 'If cmbAPOrt.Text = TEXTALLELINIEN Or cmbAPOrt.Text = TEXTALLELINIEN_OHNE_VS Then + 'End If + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 15 + MSFlexGrid1.text = Trim(rs.getStringValue("Ort")) + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 16 oder 14? + MSFlexGrid1.text = Trim(rs.getStringValue("FertigungsauftragNr")) + End If + +MoveToNextDatensatz: + rs.MoveNext + + If Not rs.EOF Then + MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 + End If + + StatusBar1.SimpleText = MSFlexGrid1.Rows - 1 & "/" & rs.RecordCount & " Positionen" + DoEvents + + If m_blnAbbruch Then + Call Abbruch + cmdAbbruch.Enabled = False + Exit Sub + End If + + ' Zwischenstand anzeigen + lblSumme.Caption = lngSummeMenge + lblGeprueft.Caption = lngSummeGeprueft + lblNichtZuPruefende.Caption = lngSummeNichtZuPruefendeMEFE + + DoEvents + + Loop + SetSpalteNameZuordnung + Else + StatusBar1.SimpleText = "keine passenden Datensätze" + End If + + ' Endsummen anzeigen + lblSumme.Caption = lngSummeMenge + lblGeprueft.Caption = lngSummeGeprueft + lblNichtZuPruefende.Caption = lngSummeNichtZuPruefendeMEFE + + If chkSpaltenbreiteAnpassen.Value = vbChecked Then + AutoSpaltenBreite MSFlexGrid1, lblAutosize + End If + + cmdAbbruch.Enabled = False + Me.Enabled = True + Screen.MousePointer = vbNormal +Exit Sub +Errorhandler: + LogIntoDB "Fehler " & Err.Number & " in frmFertigungslisten.Anzeigen(): " & Err.Description, "Softwarefehler" + cmdAbbruch.Enabled = False + Me.Enabled = True + Screen.MousePointer = vbNormal + Exit Sub + Resume +End Sub + +Private Function IstZaehlerUngeprueft(rs As CRecordset) As Boolean + If (InStr(1, rs.getStringValue("Zusatztext"), "ohne (ungeprüft)") > 0 Or rs.getStringValue("KurzBez") = "FE" Or rs.getStringValue("KurzBez") = "FK") Then + IstZaehlerUngeprueft = True + End If +End Function + + ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + ' + ' DRUCKEN + ' + ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +' If ChkDrucker.Value = vbChecked And mlngRecordsFound > 0 Then +' Printer.ColorMode = 2 +' Printer.Copies = Val(cmbAnzahlKopien.Text) +' +' Printer.Font = "Arial" +' Printer.ScaleMode = vbMillimeters +' +' Printer.ScaleLeft = -4 ' Rand +' Printer.ScaleTop = -1 ' Rand +' +' '''''''''''''''''Seiten Kopf +' Seite = 1 +' Printer.CurrentY = 5 +' Printer.Line (0, Int(Printer.CurrentY))-(Tabs(15), Int(Printer.CurrentY)) +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.CurrentX = 5 +' Printer.Font.Size = 15 +' Printer.Font.Bold = True +' +' +' Printer.FontTransparent = True +' dblY = Printer.CurrentY +' Printer.Print GetUeberschrift(strAusblenden) +' +' Printer.Font.Size = SCHRIFTTABELLE +' Printer.Font.Bold = False +' +' Printer.CurrentY = dblY +' Printer.CurrentX = 130 +' Printer.Print "Ausdruck vom " & Format(Now(), "dd.mm.yyyy hh:mm:ss") +' Printer.CurrentY = Printer.CurrentY + 15 - SCHRIFTTABELLE +' +' Printer.CurrentY = Printer.CurrentY + 1 +' +' Printer.CurrentX = 10 +' strTemp = "Auswahl vom: " & Format(DTPickerVon.Value, "dd.mm.yyyy") & " bis: " & Format(DTPickerBis.Value, "dd.mm.yyyy") +' +' +' Printer.Print strTemp +' +' strTemp = "Ort: " & cmbAPOrt.Text +' +' If txtFilterKunde.Text <> "" Then +' strTemp = strTemp & ", Kunden-Nr: " & txtFilterKunde.Text & ", " +' End If +' +' If cmbKurzBez.Text <> TEXTALLEKURZBEZ Then +' Printer.FontBold = True +' If strTemp <> "" Then strTemp = strTemp & ", nur " +' strTemp = strTemp & cmbKurzBez.Text +' End If +' +' If lstFilterTyp.Text <> TEXTALLETYPEN Then +' Printer.FontBold = True +' If strTemp <> "" Then strTemp = strTemp & ", " +' For i = 0 To lstFilterTyp.ListCount - 1 +' If lstFilterTyp.Selected(i) = True Then +' strTemp = strTemp & lstFilterTyp.List(i) & ", " +' End If +' Next +' End If +' +' +' If cmbFilterNennweite.Text <> TEXTALLE Then +' Printer.FontBold = True +' strTemp = strTemp & " DN " & cmbFilterNennweite +' End If +' +' If cmbFilterTemp.Text <> TEXTALLE Then +' Printer.FontBold = True +' strTemp = strTemp & " " & cmbFilterTemp & "°C " +' End If +' +' If cmbFilterDruck.Text <> TEXTALLE Then +' Printer.FontBold = True +' strTemp = strTemp & " PN " & cmbFilterDruck & " " +' End If +' +' If strAusblenden = "P" Then +' strTemp = strTemp & ", keine FK u. FE " +' End If +' +' If strAusblenden = "R" Then +' strTemp = strTemp & ", nur PFL u. PSE " +' End If +' +' Printer.CurrentX = 10 +' Printer.Print strTemp +' Printer.FontBold = False +' +' Printer.CurrentY = Printer.CurrentY + 3 +' +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' +' Dim zeile As Integer +' +' ''''''''''''' Tabellenkopf +' Printer.CurrentY = Printer.CurrentY + 3 +' Call Tabellenkopf +' +' ' Obere Kante der Tabelle merken +' dblY = Printer.CurrentY + 8 +' ZeileAufBlatt = 0 +' +' ' Spalten Linien +' 'For i = 0 To 13 +' ' Printer.Line (Tabs(i), dblY)-(Tabs(i), 270) +' 'Next +' +' Printer.CurrentY = dblY - 8 +' +' +' For zeile = 1 To mlngRecordsFound +' ZeileAufBlatt = ZeileAufBlatt + 1 +' +' If Printer.CurrentY > 270 Then +' ' Zeile passt nicht mehr aufs Blatt +' +' ZeileAufBlatt = 1 +' Call SeitenFuss(strAusblenden, Seite) +' +' Printer.NewPage +' Printer.Font.Size = SCHRIFTTABELLE +' +' Seite = Seite + 1 +' StatusBar1.SimpleText = "Drucke Seite " & Seite +' DoEvents +' +' Printer.CurrentY = 5 +' Call Tabellenkopf +' ' Obere Kante der Tabelle +' dblY = Printer.CurrentY + 8 +' End If +' +' Printer.CurrentY = dblY +' +' For i = 0 To MSFlexGrid1.Cols - 1 +' Printer.CurrentY = dblY + (ZeileAufBlatt - 2) * 5 +' MSFlexGrid1.row = zeile +' MSFlexGrid1.Col = i +' strTemp = Trim(MSFlexGrid1.Text) +' Printer.Font.Size = 8 +' Printer.Font.Bold = False +' Select Case i +' Case 0 +' 'Versanddatum +' Printer.Font.Bold = True +' strTemp = Format(CDate(strTemp), "dd.mm") +' Case 1 +' ' AuftragNr/Pos +' Printer.Font.Bold = True +' Case 2 +' 'Kunden Ort +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 3 +' 'IdentNr +' Printer.Font.Bold = True +' Case 4 +' 'Menge +' Printer.Font.Bold = True +' Case 5 +' ' Bezeichnung +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 6 +' ' Bohrung +' strTemp = Textformat(strTemp, i) +' Printer.Font.Size = 6 +' Case 7, 8, 9, 10, 11 ' AVMPR +' Printer.Font.Bold = True +' Case 12 ' Anzeige +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 13 ' Bemerkung +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 15 +' strTemp = "" +' End Select +' +' If chkVersuch.Value = vbChecked Then +' Select Case i +' Case 6, 7 +' ' SerienNrVon +' Printer.Font.Size = 8 +' Printer.Font.Bold = True +' Case 8 ' Anzeige +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 9 ' Bemerkung +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 10 +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Printer.CurrentY = Printer.CurrentY + 1 +' End Select +' End If +' +' Printer.CurrentX = Tabs(i) +' +' Select Case i +' Case 1, 3 +' ' rechtsbündig +' Printer.CurrentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 1 +' Case 0, 4 +' ' rechtsbündig +' Printer.CurrentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 2 +' End Select +' +' Select Case i +' Case 13 +' ' Bemerkung +' Printer.CurrentY = Printer.CurrentY - 2 +' Printer.CurrentX = Tabs(i) +' Printer.Print Left(strTemp, 10) +' Printer.CurrentX = Tabs(i) +' Printer.Print Mid(strTemp, 11) +' Printer.CurrentY = Printer.CurrentY + 1 +' Case Else +' Printer.Print strTemp +' End Select +' +' dblLastFontSize = Printer.Font.Size +' Printer.Font.Size = 8 +' Next +' +' ' da letzte Spalte eine kleinere Schriftgroesse haben könnte +' 'Printer.CurrentY = Printer.CurrentY + 2 +' Printer.DrawWidth = 3 +' +' If zeile < mlngRecordsFound Then +' If strAusblenden <> "VF" Then +' Printer.DrawStyle = vbDashDot +' lngFarbe = RGB(224, 224, 224) +' Else +' If MSFlexGrid1.Cols > 14 Then +' ' es gibt Spalte Linie +' strLinie = MSFlexGrid1.TextMatrix(zeile + 1, 14) +' If zeile > 1 Then +' strAlteLinie = MSFlexGrid1.TextMatrix(zeile, 14) +' Else +' strAlteLinie = strLinie +' End If +' +' If strAlteLinie <> strLinie Then +' Printer.DrawStyle = vbSolid +' lngFarbe = RGB(0, 0, 0) +' Else +' Printer.DrawStyle = vbDashDot +' lngFarbe = RGB(224, 224, 224) +' End If +' Else +' Printer.DrawStyle = vbDashDot +' lngFarbe = RGB(224, 224, 224) +' End If +' End If +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY), lngFarbe +' Else +' Printer.DrawStyle = vbSolid +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' Printer.CurrentY = Printer.CurrentY + 2 +' Printer.Font.Bold = True +' strTemp = "Summe " & lngSummeMenge +' Printer.CurrentX = Tabs(4 + 1) - Printer.TextWidth(strTemp) - 2 +' Printer.Print strTemp +' End If +' +' +' DoEvents +' If m_blnAbbruch Then +' Call Abbruch +' Exit Sub +' End If +' Next +' +' Printer.CurrentY = Printer.CurrentY + 3 +' If Printer.CurrentY < 278 Then +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' Printer.Line (0, Printer.CurrentY + 1)-(Tabs(15), Printer.CurrentY + 1) +' End If +' +' SeitenFuss strAusblenden, Seite, " von " & Seite & " Seiten" +' If m_blnAbbruch Then +' Call Abbruch +' Exit Sub +' End If +' +' Printer.EndDoc +' MsgBox "Die Liste wurde gedruckt!" +' End If + + + +' +' MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 14 oder 9 +' MSFlexGrid1.Text = Trim(rs.getStringValue("Bem_Fertigung")) +' +' If chkVersuch.Value = vbChecked Then +' MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 10 +' MSFlexGrid1.Text = AddToTextIfNotExists(MSFlexGrid1.Text, Trim(Replace(rs.getStringValue("ZusatzText"), vbCrLf, " "))) +' End If +' +' If Not rs.isFieldNull("R_IstTermin") And rs.isFieldNull("P_IstTermin") Then +' MSFlexGrid1.Text = AddToTextIfNotExists(MSFlexGrid1.Text, "R:" & Format(rs.getDateValue("R_IstTermin"), "dd.mm")) +' End If +' +' lngGeprueft = 0 +' If rs.getLongValue("TLMenge_P") > 0 Then +' ' TL_Menge_P ist gesetzt (neu) +' lngGeprueft = rs.getLongValue("TLMenge_P") - rs.getLongValue("TLMenge") +' If rs.getLongValue("TLMenge_P") < rs.getLongValue("Menge") Then +' ' Teilmenge anzeigen +' strTemp = "P=" & rs.getLongValue("TLMenge_P") +' MSFlexGrid1.Text = AddToTextIfNotExists(MSFlexGrid1.Text, strTemp) +' Else +' If Not rs.isFieldNull("P_IstTermin") Then +' ' schon komplett geprüft +' strTemp = "P:" & Format(rs.getDateValue("P_IstTermin"), "dd.m") +' MSFlexGrid1.Text = AddToTextIfNotExists(MSFlexGrid1.Text, strTemp) +' End If +' End If +' Else +' ' TL_Menge_P ist noch nicht gesetzt (alt) +' If Not rs.isFieldNull("P_IstTermin") Then +' ' Komplett an der Prüfstation fertiggemeldet +' strTemp = "P:" & Format(rs.getDateValue("P_IstTermin"), "dd.m") +' MSFlexGrid1.Text = AddToTextIfNotExists(MSFlexGrid1.Text, strTemp) +' lngGeprueft = rs.getLongValue("Menge") - rs.getLongValue("TLMenge") +' End If +' End If +' lngSummeGeprueft = lngSummeGeprueft + lngGeprueft +' If lngGeprueft > rs.getLongValue("Menge") Then +' LogIntoDB "fertigungslisten Anzeigen(): TLMenge_P > Menge !", "Datenfehler" +' End If +' +' ' neu RH 12.06.2007 Für Ort ZY soll die Farbe angezeigt werden, da die Temperatur = NULL ist +' If rs.getStringValue("Ort") = "ZY" And rs.getStringValue("Farbe") <> "" Then +' If MSFlexGrid1.Text <> "" Then MSFlexGrid1.Text = MSFlexGrid1.Text & "," +' MSFlexGrid1.Text = AddToTextIfNotExists(MSFlexGrid1.Text, rs.getStringValue("Farbe")) +' End If + + +Private Function AddToTextIfNotExists(strOldText As String, strNewText As String) As String + Debug.Print strOldText & " +'" & strNewText & "'" + AddToTextIfNotExists = strOldText + If InStr(1, strOldText, strNewText) = 0 Then + If strOldText <> "" Then + AddToTextIfNotExists = strOldText & ", " + End If + AddToTextIfNotExists = AddToTextIfNotExists & strNewText + End If +End Function + +Private Function GetAVEMPR_Spaltenwert(rs As CRecordset, strPrefix As String) As String + GetAVEMPR_Spaltenwert = "" + If rs.getDateValue(strPrefix & "_IstTermin") > 0 Then + GetAVEMPR_Spaltenwert = strPrefix +' If rs.getLongValue("TLMenge_" & strPrefix) > 0 And rs.getLongValue("TLMenge_" & strPrefix) < rs.getLongValue("Menge") Then +' GetAVEMPR_Spaltenwert = "#" +' End If + Else + If rs.getLongValue("TLMenge_" & strPrefix) > 0 And rs.getLongValue("TLMenge_" & strPrefix) < rs.getLongValue("Menge") Then + ' Teilmenge wurde fertiggemeldet + GetAVEMPR_Spaltenwert = "*" + Else + ' noch gar nichts fertiggemeldet + End If + End If +End Function + +Private Sub AnzeigenVersuch(strAusblenden As String) + UpdateTabs + + Debug.Print "AnzeigenVersuch" + + StatusBar1.SimpleText = "" + + labelGefertigtMenge.Caption = "" + labelOffenWert.Caption = "" + lblSumme.Caption = "" + lblSummeWert.Caption = "" + lblGeprueft.Caption = "" + lblNichtZuPruefende.Caption = "" + + m_blnIstAlleAuftraege = True + + Dim strSql As String + Dim rs As CRecordset + Dim strTemp As String + Dim ZeileAufBlatt As Integer + Dim dblY As Double + + Dim strVako As String + Dim objVako As CVakoCode + + Dim Seite As Integer + Dim i As Integer + Dim lngSummeMenge As Long + Dim lngSummeWert As Long + Dim lngSummeGefertigt As Long + Dim lngSummeGeprueft As Long + Dim lngSummeNichtZuPruefendeMEFE As Long + Dim lngGeprueft As Long + Dim strHerkunft As String + + Dim dblLastFontSize As Double + + Dim strAlteLinie As String + Dim strLinie As String + Dim lngFarbe As Long + + mlngRecordsFound = 0 + m_blnAbbruch = False + cmdAbbruch.Enabled = True + cmdExcel.Enabled = False + + Screen.MousePointer = vbHourglass + DoEvents + + m_strAusblenden = strAusblenden + m_eSortierung = cmbSortierung.ListIndex + + MSFlexGrid1.Clear + MSFlexGrid1.Rows = 1 + MSFlexGrid1.cols = 1 + MSFlexGrid1.FormatString = "" + + MSFlexGrid1.ScrollBars = flexScrollBarBoth + + MSFlexGrid1.Font = "Courier New" + MSFlexGrid1.Font.Size = 8 + + If chkSonderlayoutFertigung.Value = vbChecked Then + Dim strTempSNr As String + + strTempSNr = " Fert.Dat |AuftragNr|Pos|IdentNr |Menge| Bezeichnung | " + If chkSerNrSensus.Value = vbChecked Then + strTempSNr = strTempSNr & "SerNr von|SerNr bis|" + End If + If chkSerNrKnd.Value = vbChecked Then + If chkVersandIstDatumStattSerienNr.Value = vbChecked Then + strTempSNr = strTempSNr & " Kndeig.SNr / Versand|" + Else + strTempSNr = strTempSNr & " Kndeig.SNr von - bis|" + End If + End If + strTempSNr = strTempSNr & " FA-Nr|P|Wert" + + If chkStatistik.Value = vbChecked Then + strTempSNr = strTempSNr & "|St" + End If + + If chkDebug.Value = vbChecked Then + strTempSNr = strTempSNr & "|gepr" + End If + + MSFlexGrid1.FormatString = strTempSNr + Else + MSFlexGrid1.FormatString = " Fert.Dat |AuftragNr / Pos|IdentNr |Menge| Bezeichnung | SerNr von|SerNr bis| Anzeige | Bemerkung |ZusatzText" + End If + + strSql = "SELECT AuftragPosition.AuftragNr, AuftragPosition.PositionNr, AuftragPosition.IdentNr, AuftragPosition.VersandDatum, AuftragPosition.Wert, " + strSql = strSql & " AuftragPosition.FertigungsauftragNr, AuftragPosition.Menge,AuftragPosition.TLMenge, AuftragPosition.Bohrung, AuftragPosition.Farbe, AuftragPosition.Anzeige, AuftragPosition.A_IstTermin, AuftragPosition.V_IstTermin, AuftragPosition.Versand_Ist_datum, " + strSql = strSql & " AuftragPosition.M_IstTermin, AuftragPosition.P_IstTermin, AuftragPosition.R_IstTermin, AuftragPosition.Bem_Fertigung, AuftragPosition.SerienNrVon, AuftragPosition.SerienNrBis, AuftragPosition.Bestellcode, AuftragPosition.TLMenge_P, " + strSql = strSql & " AuftragPosition.Bezeichnung , IdentNr.VakoCode, IdentNr.KurzBez, IdentNr.Typ, IdentNr.Typzusatz, IdentNr.Nennweite, IdentNr.Temperatur, IdentNr.Druck, IdentNr.Baulaenge, AuftragPosition.ZusatzText, IdentNr.Bestellgruppe, IdentNr.SAP_Nummer, " + strSql = strSql & " AuftragPosition.Ort, Kunde.Ort as Kundenort, Kunde.Name as KundenName, Kunde.KundenNr " + + If chkStatistik.Value = vbChecked And chkSonderlayoutFertigung.Value = vbChecked Then + strSql = strSql & " , AuftragPosition.Herkunft " + End If + + strSql = strSql & " FROM AuftragPosition " & vbCrLf + + strSql = strSql & " INNER JOIN Identnr ON AuftragPosition.IdentNr = Identnr.IdentNr" + strSql = strSql & " INNER JOIN Kunde ON AuftragPosition.KundenNr = Kunde.KundenNr" & vbCrLf + + strSql = strSql & " WHERE (AuftragPosition.VersandDatum >= CONVERT(DATETIME, '" & Format(DTPickerVon.Value, "yyyy-mm-dd") & " 00:00:00', 102)) AND" + strSql = strSql & " (AuftragPosition.VersandDatum <= CONVERT(DATETIME, '" & Format(DTPickerBis.Value, "yyyy-mm-dd") & " 23:59:59', 102)) " + + strTemp = GetFilterOrt("AuftragPosition.Ort") + If strTemp <> "" Then + strSql = strSql & " AND " & strTemp + End If + +' If cmbAPOrt.Text <> TEXTALLELINIEN Then +' If cmbAPOrt.Text = TEXTALLELINIEN_OHNE_VS Then +' strSQL = strSQL & "AND AuftragPosition.Ort <> 'VS' " +' Else +' strSQL = strSQL & " AND AuftragPosition.Ort = '" & cmbAPOrt.Text & "' " +' End If +' Else +' ' alle Linien +' End If + + + If Val(txtAuftragVon.text) > 0 Then + strSql = strSql & " AND AuftragNr >= " & Val(txtAuftragVon.text) & " " + End If + + If Val(txtAuftragVon.text) > 0 Then + strSql = strSql & " AND AuftragNr <= " & Val(txtAuftragBis.text) & " " + End If + + ' Lot 3 Sonderregel: darf nicht Lot 2 enthalten! + If Val(txtAuftragVon.text) = 71085275 And Val(txtAuftragBis.text) = 71086275 Then + strSql = strSql & " AND not (AuftragNr >= 71085331 and AuftragNr <= 71085336) " + End If + + + If chkNurMID Then + strSql = strSql & " AND ZusatzText LIKE '%Zulassungskennzeichen : MID%' " + End If + + Select Case cmbKurzBez.text + Case TEXTALLEKURZBEZMEFE + strSql = strSql & " AND (Identnr.KurzBez = 'ME' or Identnr.KurzBez = 'FE')" + Case TEXTALLEKURZBEZWZFK + strSql = strSql & " AND (Identnr.KurzBez = 'WZ' or Identnr.KurzBez = 'FK')" + Case TEXTALLEKURZBEZWZFKGE + strSql = strSql & " AND (Identnr.KurzBez = 'WZ' or Identnr.KurzBez = 'FK' or Identnr.KurzBez = 'GE')" + Case Else + strSql = strSql & " AND (Identnr.KurzBez <> 'ET')" + End Select + + Select Case strAusblenden + Case "A" + strSql = strSql & " AND A_IstTermin is NULL " + Case "V" + strSql = strSql & " AND V_IstTermin is NULL " + Case "E" + strSql = strSql & " AND E_IstTermin is NULL " + Case "M" + strSql = strSql & " AND M_IstTermin is NULL " + Case "P" + strSql = strSql & " AND P_IstTermin is NULL AND Identnr.KurzBez <> 'FK' AND Identnr.KurzBez <> 'FE'" + Case "R" + strSql = strSql & " AND R_IstTermin is NULL AND (Identnr.typ = 'PSE' OR Identnr.typ = 'PFL') " + Case "VF" + strSql = strSql & " AND P_IstTermin is NOT NULL " + m_eSortierung = SortLinieVersanddatum + Case "F" + ' alle anzeigen + End Select + + If Val(txtFilterAuftrag.text) > 0 Then + strSql = strSql & " AND (AuftragPosition.AuftragNr = " & Val(txtFilterAuftrag.text) & " OR AuftragPosition.FertigungsauftragNr = " & Val(txtFilterAuftrag.text) & ") " + End If + + If Len(Trim(txtFilterKunde.text)) > 0 Then + If Val(txtFilterKunde.text) > 0 Then + strSql = strSql & " AND AuftragPosition.KundenNr = " & Val(txtFilterKunde.text) & " " + Else + strSql = strSql & " AND (Kunde.Name like '%" & Replace(txtFilterKunde.text, "'", "''") & "%' " + strSql = strSql & " OR Kunde.Ort like '%" & Replace(txtFilterKunde.text, "'", "''") & "%') " + End If + End If + + If lstFilterTyp.text <> TEXTALLETYPEN Then + strSql = strSql & " AND " & GetFilterForTyp() + End If + + If cmbFilterNennweite.text <> TEXTALLE Then + strSql = strSql & " AND IdentNr.Nennweite = " & Val(cmbFilterNennweite.text) & " " + End If + + If cmbFilterTemp.text <> TEXTALLE Then + strSql = strSql & " AND IdentNr.Temperatur= " & Val(cmbFilterTemp.text) & " " + End If + + If cmbFilterDruck.text <> TEXTALLE Then + strSql = strSql & " AND IdentNr.Druck= " & Val(cmbFilterDruck.text) & " " + End If + + If cmbFilterBaulaenge.text <> TEXTALLE Then + strSql = strSql & " AND IdentNr.Baulaenge = " & Val(cmbFilterBaulaenge.text) & " " + End If + + + If cmbFilterBohrbild.text <> TEXTALLE Then + strSql = strSql & " AND AuftragPosition.Bohrung like '%" & cmbFilterBohrbild.text & "%' " + End If + + + If chkPlus.Value = vbChecked Then + strSql = strSql & " AND IdentNr.Typzusatz = N'Plus' " + End If + + If ChkOhnePlus.Value = vbChecked Then + strSql = strSql & " AND (IdentNr.Typzusatz <> N'Plus' or IdentNr.Typzusatz IS NULL) " + End If + + If chkNurCKD.Value = vbChecked Then + strSql = strSql & " AND AuftragPosition.Bezeichnung like N'CKD%' " + End If + + If chkNoMoskauBadger.Value = vbChecked Then + strSql = strSql & " AND (Kunde.KundenNr <> 38116 and Kunde.KundenNr <> 38045) " + End If + + strSql = strSql & vbCrLf + + Select Case m_eSortierung + Case enumSortierung.SortKurzBez + strSql = strSql & " ORDER BY Identnr.KurzBez " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ",IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Nennweite,IdentNr.Temperatur " + Case enumSortierung.SortNennweite + strSql = strSql & " ORDER BY IdentNr.Nennweite " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ", IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Temperatur " + Case enumSortierung.SortTemperatur + strSql = strSql & " ORDER BY IdentNr.Temperatur " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ", IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Nennweite " + Case enumSortierung.SortTypBez + strSql = strSql & " ORDER BY IdentNr.Typ " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ",IdentNr.TypZusatz,IdentNr.Nennweite,IdentNr.Temperatur " + Case enumSortierung.SortLinieVersanddatum + strSql = strSql & " ORDER BY AuftragPosition.Ort, VersandDatum " + Case enumSortierung.SortAuftragPosition + strSql = strSql & " ORDER BY AuftragPosition.AuftragNr " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ", AuftragPosition.PositionNr " + Case enumSortierung.SortIdentNr + strSql = strSql & " ORDER BY AuftragPosition.IdentNr " + Case enumSortierung.SortSerienNrVon + strSql = strSql & " ORDER BY AuftragPosition.SerienNrVon " + Case enumSortierung.SortBemerkung + strSql = strSql & " ORDER BY AuftragPosition.Bem_Fertigung " + Case Else + strSql = strSql & " ORDER BY AuftragPosition.VersandDatum " & IIf(chkSortierungDesc.Value = vbUnchecked, "", "DESC") & ", IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Nennweite,IdentNr.Temperatur " + End Select + If chkSortierungDesc.Value = vbChecked Then + strSql = strSql & " DESC" + End If + + + If chkStatistik.Value = vbChecked Then + strSql = Replace(strSql, "AuftragPosition", "AlleAuftragPositionen") + End If + + + Debug.Print strSql + + Set rs = New CRecordset + rs.openRS strSql, True + Set m_rs = rs + + MSFlexGrid1.Rows = 2 + mlngRecordsFound = 0 + lngSummeMenge = 0 + + Dim strWert As String + Dim strRem As String + + If Not rs.EOF Then + Do While Not rs.EOF + + '''''''''''''''''''''''' Vakocode auswerten ''''''''''''''''''''''' + Set objVako = Nothing + strVako = Trim(rs.getStringValue("VakoCode")) + If Len(strVako) > 0 Then + Set objVako = New CVakoCode + objVako.Load strVako + End If + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + + cmdExcel.Enabled = True + + mlngRecordsFound = mlngRecordsFound + 1 + MSFlexGrid1.row = MSFlexGrid1.Rows - 1 + + MSFlexGrid1.col = 0 + 'MSFlexGrid1.Text = Format(rs.getLongValue("Versanddatum"), "dd.mm.yyyy") + MSFlexGrid1.text = Format(rs.getLongValue("Versanddatum"), "yyyy-mm-dd") + + If chkSonderlayoutFertigung.Value = vbChecked Then + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = rs.getLongValue("AuftragNr") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = rs.getLongValue("PositionNr") + Else + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = rs.getLongValue("AuftragNr") & "/" & rs.getLongValue("PositionNr") + End If + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = rs.getLongValue("IdentNr") + + lngGeprueft = 0 + strRem = "" + + ' Menge + MSFlexGrid1.col = MSFlexGrid1.col + 1 + If chkStatistik.Value = vbChecked And chkSonderlayoutFertigung.Value = vbChecked Then + ' Statistik wird berücksichtigt + If InStr(1, rs.getStringValue("Herkunft"), "Statistik") > 0 Then + ' Es handelt sich um den Datensatz aus der Statistik + If rs.getLongValue("TLMenge") = 0 Then + ' gibt es doch eigentlich nicht!!!!!!!!!!! + ' + ' es wurde noch keine Teilmenge fertiggemeldet + MSFlexGrid1.text = "0" + ' der Wert wird mit der Auftragsposition angezeigt + strWert = "" + lngGeprueft = "" + strRem = "St -> s. AP Menge=" & rs.getLongValue("Menge") + ElseIf rs.getLongValue("TLMenge") = rs.getLongValue("Menge") Then + ' es wurde die volle Teilmenge fertiggemeldet + MSFlexGrid1.text = rs.getLongValue("TLMenge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("TLMenge") + strWert = rs.getLongValue("Wert") + labelGefertigtMenge.Caption = Val(labelGefertigtMenge.Caption) + rs.getLongValue("TLMenge") + + lngGeprueft = rs.getLongValue("TLMenge") + strRem = "TLMenge=Menge=" & lngGeprueft + Else + ' es wurde bereits eine Teilmenge fertiggemeldet, + MSFlexGrid1.text = rs.getLongValue("TLMenge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("TLMenge") + ' der Wert wird mit der Auftragsposition angezeigt + strWert = "" + labelGefertigtMenge.Caption = Val(labelGefertigtMenge.Caption) + rs.getLongValue("TLMenge") + + If rs.getLongValue("TLMenge_P") > 0 Then + strRem = "St -> s. AP Menge=" & rs.getLongValue("Menge") + lngGeprueft = 0 + Else + lngGeprueft = rs.getLongValue("TLMenge") + strRem = "TLMenge=" & rs.getLongValue("TLMenge") & " / Menge=" & rs.getLongValue("TLMenge") + End If + End If + Else + ' Es handelt sich um den Datensatz aus der Auftragposition + + If rs.getLongValue("TLMenge_P") > 0 Then + ' TL_Menge_P ist gesetzt (neu) + lngGeprueft = rs.getLongValue("TLMenge_P") + strRem = " TLMenge_P=" & lngGeprueft + Else + strRem = " TLMenge_P=0" + End If + + + If chkSonderlayoutFertigung.Value = vbChecked Then + strWert = rs.getLongValue("Wert") + End If + + If rs.getLongValue("TLMenge") = 0 Then + ' es wurde noch keine Teilmenge fertiggemeldet + MSFlexGrid1.text = rs.getLongValue("Menge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("Menge") + Else + ' es wurde bereits eine Teilmenge fertiggemeldet + ' verbleibene Menge + MSFlexGrid1.text = "R " & rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + End If + End If + Else + ' Statistik wird nicht berücksichtigt + + If rs.getLongValue("TLMenge_P") > 0 Then + ' TL_Menge_P ist gesetzt (neu) + lngGeprueft = rs.getLongValue("TLMenge_P") + strRem = "TLMenge_P=" & lngGeprueft + End If + 'if rs.getLongValue("") + + If chkSonderlayoutFertigung.Value = vbChecked Then + strWert = rs.getLongValue("Wert") + End If + + If rs.getLongValue("TLMenge") = 0 Then + MSFlexGrid1.text = rs.getLongValue("Menge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("Menge") + Else + MSFlexGrid1.text = "R " & rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + labelGefertigtMenge.Caption = Val(labelGefertigtMenge.Caption) + rs.getLongValue("TLMenge") + End If + lblSumme.Caption = lngSummeMenge + End If + + lngSummeGeprueft = lngSummeGeprueft + lngGeprueft + lblGeprueft.Caption = lngSummeGeprueft + + + If chkStatistik.Value = vbChecked And chkSonderlayoutFertigung.Value = vbChecked Then + If rs.getStringValue("Herkunft") = "AuftragPosition" Then + If rs.getLongValue("TLMenge") = 0 Then + labelOffenWert.Caption = Val(labelOffenWert.Caption) + rs.getLongValue("Menge") + Else + labelOffenWert.Caption = Val(labelOffenWert.Caption) + rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + End If + End If + End If + + lngSummeWert = lngSummeWert + Val(strWert) + lblSummeWert.Caption = lngSummeWert + DoEvents + + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.ColAlignment(4) = flexAlignLeftCenter + + ' If InStr(1, UCase(rs.getStringValue("ZusatzText")), UCase("MS Plus")) > 0 Then + ' MSFlexGrid1.Text = "+" & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' ElseIf InStr(1, UCase(rs.getStringValue("Typ")), UCase("MeiStream Plus")) > 0 Then + ' MSFlexGrid1.Text = "+" & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' Else + MSFlexGrid1.text = IIf((Left(rs.getStringValue("Bezeichnung"), 3) = "CKD"), "CKD ", "") & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + 'MSFlexGrid1.Text = rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' End If + + + If Not rs.isFieldNull("Baulaenge") Then + MSFlexGrid1.text = MSFlexGrid1.text & " L" & rs.getLongValue("Baulaenge") + Else + strTemp = GetBaulaengeFromAuftragposition(rs.getLongValue("AuftragNr"), rs.getLongValue("PositionNr"), rs.getLongValue("Bestellgruppe")) + If strTemp <> "" Then + MSFlexGrid1.text = MSFlexGrid1.text & " L" & strTemp + End If + End If + + If chkSonderlayoutFertigung.Value = vbChecked Then + If chkSerNrSensus.Value = vbChecked Then + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 6 + MSFlexGrid1.text = rs.getStringValue("SerienNrVon") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 7 + MSFlexGrid1.text = rs.getStringValue("SerienNrBis") + End If + Else + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 6 + MSFlexGrid1.text = rs.getStringValue("SerienNrVon") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 7 + MSFlexGrid1.text = rs.getStringValue("SerienNrBis") + End If + + If chkSonderlayoutFertigung.Value = vbChecked Then + Dim strKndSerienNrVon As String + Dim strKndSerienNrBis As String + + If chkSerNrKnd.Value = vbChecked Then + If chkStatistik.Value = vbChecked Then + + strHerkunft = rs.getStringValue("Herkunft") + End If + + + If chkVersandIstDatumStattSerienNr.Value = vbChecked And InStr(strHerkunft, "Statistik") > 0 Then + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 9 + 'MSFlexGrid1.Text = Format(rs.getDateValue("Versand_Ist_datum"), "dd.mm.yyyy") + MSFlexGrid1.text = Format(rs.getDateValue("Versand_Ist_datum"), "yyyy-mm-dd") + 'MSFlexGrid1.CellAlignment = vbRightJustify + Else + Call getKundeneigeneSerienNr(rs.getLongValue("AuftragNr"), rs.getLongValue("PositionNr"), strKndSerienNrVon, strKndSerienNrBis) + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 9 + MSFlexGrid1.text = strKndSerienNrVon & "-" & strKndSerienNrBis + MSFlexGrid1.CellAlignment = vbLeftJustify + End If + End If + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 10 + If rs.isFieldNull("FertigungsauftragNr") Then + MSFlexGrid1.text = "" + Else + MSFlexGrid1.text = rs.getLongValue("FertigungsauftragNr") + End If + + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 11 + + If Not rs.isFieldNull("P_IstTermin") Then + MSFlexGrid1.text = "P" + Else + If rs.getLongValue("TLMenge_P") = 0 Then + MSFlexGrid1.text = "" + Else + If rs.getLongValue("TLMenge_P") = rs.getLongValue("Menge") Then + MSFlexGrid1.text = "p" + Else + MSFlexGrid1.text = "*" + End If + End If + End If + + If IstZaehlerUngeprueft(rs) Then + ' - TLMenge eingebaut 2020-06-17 für Uwe Kubon: abzüglich der bereits fertiggemeldeten Filter und ME + lngSummeNichtZuPruefendeMEFE = lngSummeNichtZuPruefendeMEFE + rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + MSFlexGrid1.text = "-" + End If + + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' + MSFlexGrid1.text = strWert + + If chkStatistik.Value = vbChecked Then + MSFlexGrid1.col = MSFlexGrid1.col + 1 + If InStr(rs.getStringValue("Herkunft"), "Statistik") > 0 Then + MSFlexGrid1.text = "St" + End If + End If + + If chkDebug.Value = vbChecked Then + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' + MSFlexGrid1.text = lngGeprueft + End If + Else + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 8 + MSFlexGrid1.text = Trim(rs.getStringValue("Anzeige")) + + If Not objVako Is Nothing Then + If InStr(1, objVako.GetWert("Zählwerk"), "eRegister") > 0 Then + MSFlexGrid1.text = MSFlexGrid1.text & " E" + End If + End If + + If Not objVako Is Nothing Then + If InStr(1, objVako.GetWert("Zählwerk"), "Encoder") > 0 Then + MSFlexGrid1.text = MSFlexGrid1.text & " Enc" + End If + End If + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 9 + MSFlexGrid1.text = Trim(rs.getStringValue("Bem_Fertigung")) + + MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 10 + MSFlexGrid1.text = Trim(Replace(rs.getStringValue("ZusatzText"), vbCrLf, "| ")) + End If + + rs.MoveNext + + If Not rs.EOF Then + MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 + End If + + StatusBar1.SimpleText = MSFlexGrid1.Rows - 1 & "/" & rs.RecordCount & " Positionen" + DoEvents + + If m_blnAbbruch Then + Call Abbruch + Exit Sub + End If + + lblSumme.Caption = lngSummeMenge + lblNichtZuPruefende.Caption = lngSummeNichtZuPruefendeMEFE + DoEvents + + Loop + SetSpalteNameZuordnung + Else + StatusBar1.SimpleText = "keine passenden Datensätze" + End If + + lblSumme.Caption = lngSummeMenge + lblNichtZuPruefende.Caption = lngSummeNichtZuPruefendeMEFE + + + cmdAbbruch.Enabled = False + Me.Enabled = True + Screen.MousePointer = vbNormal +End Sub + +' If ChkDrucker.Value = vbChecked And mlngRecordsFound > 0 Then +' Printer.ColorMode = 2 +' Printer.Copies = Val(cmbAnzahlKopien.Text) +' +' Printer.Font = "Arial" +' Printer.ScaleMode = vbMillimeters +' +' Printer.ScaleLeft = -4 ' Rand +' Printer.ScaleTop = -1 ' Rand +' +' '''''''''''''''''Seiten Kopf +' Seite = 1 +' Printer.CurrentY = 5 +' Printer.Line (0, Int(Printer.CurrentY))-(Tabs(15), Int(Printer.CurrentY)) +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.CurrentX = 5 +' Printer.Font.Size = 15 +' Printer.Font.Bold = True +' +' +' Printer.FontTransparent = True +' dblY = Printer.CurrentY +' Printer.Print GetUeberschrift(strAusblenden) +' +' Printer.Font.Size = SCHRIFTTABELLE +' Printer.Font.Bold = False +' +' Printer.CurrentY = dblY +' Printer.CurrentX = 130 +' Printer.Print "Ausdruck vom " & Format(Now(), "dd.mm.yyyy hh:mm:ss") +' Printer.CurrentY = Printer.CurrentY + 15 - SCHRIFTTABELLE +' +' Printer.CurrentY = Printer.CurrentY + 1 +' +' Printer.CurrentX = 10 +' strTemp = "Auswahl vom: " & Format(DTPickerVon.Value, "dd.mm.yyyy") & " bis: " & Format(DTPickerBis.Value, "dd.mm.yyyy") +' +' +' Printer.Print strTemp +' +' +' strTemp = "Ort: " & cmbAPOrt.Text +' +' If txtFilterKunde.Text <> "" Then +' strTemp = strTemp & ", Kunden-Nr: " & txtFilterKunde.Text +' End If +' +' If cmbKurzBez.Text <> TEXTALLEKURZBEZ Then +' If strTemp <> "" Then strTemp = strTemp & ", nur " +' strTemp = strTemp & cmbKurzBez.Text +' End If +' +' If lstFilterTyp.Text <> TEXTALLETYPEN Then +' For i = 0 To lstFilterTyp.ListCount - 1 +' If strTemp <> "" Then strTemp = strTemp & ", " +' If lstFilterTyp.Selected(i) = True Then +' strTemp = strTemp & lstFilterTyp.List(i) +' End If +' Next +' End If +' +' If cmbFilterNennweite.Text <> TEXTALLE Then +' strTemp = strTemp & " DN " & cmbFilterNennweite +' End If +' +' If cmbFilterTemp.Text <> TEXTALLE Then +' strTemp = strTemp & " " & cmbFilterTemp & "°C " +' End If +' +' If cmbFilterDruck.Text <> TEXTALLE Then +' strTemp = strTemp & " PN " & cmbFilterDruck & " " +' End If +' +' If strAusblenden = "P" Then +' strTemp = strTemp & ", keine FK u. FE " +' End If +' +' If strAusblenden = "R" Then +' strTemp = strTemp & ", nur PFL u. PSE " +' End If +' +' Printer.CurrentX = 10 +' Printer.Print strTemp +' +' +' Printer.CurrentY = Printer.CurrentY + 3 +' +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' +' Dim zeile As Integer +' +' ''''''''''''' Tabellenkopf +' Printer.CurrentY = Printer.CurrentY + 3 +' +'''''''''''''''''''''''''''' +' +' +' +' +' dblY = Printer.CurrentY +' +' Printer.Font.Bold = True +' +' For i = 0 To MSFlexGrid1.Cols - 1 +' MSFlexGrid1.row = 0 +' MSFlexGrid1.Col = i +' Printer.CurrentY = dblY +' Printer.CurrentX = Tabs(i) +' +' Select Case i +' Case 0 +' strTemp = "Vers." +' Case 1 +' strTemp = "AuftragNr/Pos" +' Case 12 +' strTemp = "Anz." +' Case 15 +' strTemp = "" +' Case Else +' strTemp = MSFlexGrid1.Text +' +' End Select +' +' Select Case i +' Case 1, 2, 3, 5, 6 +' Printer.CurrentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 1 +' End Select +' +' +' Printer.Print strTemp +' Next +' +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' +''''''''''''''''''''''''''''# +' ' Obere Kante der Tabelle merken +' dblY = Printer.CurrentY + 8 +' ZeileAufBlatt = 0 +' +' ' Spalten Linien +' 'For i = 0 To 13 +' ' Printer.Line (Tabs(i), dblY)-(Tabs(i), 270) +' 'Next +' +' Printer.CurrentY = dblY - 8 +' +' For zeile = 1 To mlngRecordsFound +' ZeileAufBlatt = ZeileAufBlatt + 1 +' If Printer.CurrentY > 270 Then +' ' Zeile passt nicht mehr aufs Blatt +' +' ZeileAufBlatt = 1 +' Call SeitenFuss(strAusblenden, Seite) +' +' Printer.NewPage +' Printer.Font.Size = SCHRIFTTABELLE +' +' Seite = Seite + 1 +' StatusBar1.SimpleText = "Drucke Seite " & Seite +' DoEvents +' +' Printer.CurrentY = 5 +' Call Tabellenkopf +' ' Obere Kante der Tabelle +' dblY = Printer.CurrentY + 8 +' End If +' +' Printer.CurrentY = dblY +' +' For i = 0 To MSFlexGrid1.Cols - 1 +' Printer.CurrentY = dblY + (ZeileAufBlatt - 2) * 5 +' MSFlexGrid1.row = zeile +' MSFlexGrid1.Col = i +' strTemp = Trim(MSFlexGrid1.Text) +' Printer.Font.Size = 8 +' Printer.Font.Bold = False +' Select Case i +' Case 0 +' 'Versanddatum +' strTemp = Format(CDate(strTemp), "dd.mm") +' Case 1 +' ' AuftragNr/Pos +' Case 2 +' 'IdentNr +' Case 3 +' 'Menge +' Case 4 +' ' Bezeichnung +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 5, 6 ' SerienNr Von Bis +' ' Printer.Font.Size = 8 +' Case 7 ' Anzeige +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 8 ' Bemerkung +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Case 9 ' ZusatzText +' Printer.Font.Size = 6 +' strTemp = Textformat(strTemp, i) +' Printer.CurrentY = Printer.CurrentY + 1 +' End Select +' +' Printer.CurrentX = Tabs(i) +' +' Select Case i +' Case 0, 1, 2, 3, 5, 6 +' ' rechtsbündig +' Printer.CurrentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 2 +' End Select +' +' ' Drucken +' Select Case i +' Case 8 +' ' Bemerkung +' Printer.CurrentY = Printer.CurrentY - 1 +' Printer.CurrentX = Tabs(i) +' Printer.Print Left(strTemp, 10) +' Printer.CurrentX = Tabs(i) +' Printer.Print Mid(strTemp, 11) +' Case 9 +' ' Bemerkung +' Printer.CurrentY = Printer.CurrentY - 2 +' Printer.CurrentX = Tabs(i) +' Printer.Print Left(strTemp, 10) +' Printer.CurrentX = Tabs(i) +' Printer.Print Mid(strTemp, 11) +' Case Else +' Printer.Print strTemp +' End Select +' +' dblLastFontSize = Printer.Font.Size +' Printer.Font.Size = 8 +' Next +' +' ' da letzte Spalte eine kleinere Schriftgroesse haben könnte +' 'Printer.CurrentY = Printer.CurrentY + 2 +' Printer.DrawWidth = 3 +' +' If zeile < mlngRecordsFound Then +' If strAusblenden <> "VF" Then +' Printer.DrawStyle = vbDashDot +' lngFarbe = RGB(224, 224, 224) +' Else +' If MSFlexGrid1.Cols > 14 Then +' ' es gibt Spalte Linie +' strLinie = MSFlexGrid1.TextMatrix(zeile + 1, 14) +' If zeile > 1 Then +' strAlteLinie = MSFlexGrid1.TextMatrix(zeile, 14) +' Else +' strAlteLinie = strLinie +' End If +' +' If strAlteLinie <> strLinie Then +' Printer.DrawStyle = vbSolid +' lngFarbe = RGB(0, 0, 0) +' Else +' Printer.DrawStyle = vbDashDot +' lngFarbe = RGB(224, 224, 224) +' End If +' Else +' Printer.DrawStyle = vbDashDot +' lngFarbe = RGB(224, 224, 224) +' End If +' End If +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY), lngFarbe +' Else +' Printer.DrawStyle = vbSolid +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' Printer.CurrentY = Printer.CurrentY + 2 +' Printer.Font.Bold = True +' strTemp = "Summe " & lngSummeMenge +' Printer.CurrentX = Tabs(3 + 1) - Printer.TextWidth(strTemp) - 2 +' Printer.Print strTemp +' End If +' +' +' DoEvents +' If m_blnAbbruch Then +' Call Abbruch +' Exit Sub +' End If +' Next +' +' Printer.CurrentY = Printer.CurrentY + 3 +' If Printer.CurrentY < 278 Then +' Printer.Line (0, Printer.CurrentY)-(Tabs(15), Printer.CurrentY) +' Printer.Line (0, Printer.CurrentY + 1)-(Tabs(15), Printer.CurrentY + 1) +' End If +' +' SeitenFuss strAusblenden, Seite, " von " & Seite & " Seiten" +' If m_blnAbbruch Then +' cmdAbbruch.Enabled = False +' Call Abbruch +' Exit Sub +' End If +' +' Printer.EndDoc +' MsgBox "Die Liste wurde gedruckt!" +' End If + + + +Private Sub AuftragsInfoAnzeigen() + Dim strSql As String + Dim rs As CRecordset + Dim strTemp As String + Dim ZeileAufBlatt As Integer + Dim dblY As Double + Dim objVako As CVakoCode + Dim strVako As String + + Dim Seite As Integer + + Dim i As Integer + Dim lngSummeMenge As Long + Dim lngSummeGeprueft As Long + + Dim dblLastFontSize As Double + + StatusBar1.SimpleText = "" + labelGefertigtMenge.Caption = "0" + labelOffenWert.Caption = "0" + + m_blnIstAlleAuftraege = False + mlngRecordsFound = 0 + m_blnAbbruch = False + cmdAbbruch.Enabled = True + cmdExcel.Enabled = False + + Screen.MousePointer = vbHourglass + DoEvents + + + MSFlexGrid1.Rows = 1 + MSFlexGrid1.ScrollBars = flexScrollBarBoth + + MSFlexGrid1.Font = "Courier New" + MSFlexGrid1.Font.Size = 8 + MSFlexGrid1.cols = 1 + + If lstAPOrt.text = TEXTALLELINIEN Or lstAPOrt.text = TEXTALLELINIEN_OHNE_VS Or lstAPOrt.SelCount > 1 Then + ' mehr als ein Ort + MSFlexGrid1.FormatString = " Fert.Dat |Position|IdentNr |Menge| Bezeichnung | Bohrung |MID|L|A|V|E|M|P|R|D| Anzeige | Bemerkung | Status|Fert.Auftr.Nr|Ort" + Else + 'genau ein Ort + MSFlexGrid1.FormatString = " Fert.Dat |Position|IdentNr |Menge| Bezeichnung | Bohrung |MID|L|A|V|E|M|P|R|D| Anzeige | Bemerkung | Status|Fert.Auftr.Nr" + End If + + 'If cmbAPOrt.Text = TEXTALLELINIEN Then + ' MSFlexGrid1.FormatString = MSFlexGrid1.FormatString & "|L " + 'End If + + strSql = "SELECT AlleAuftragPositionen.AuftragNr, AlleAuftragPositionen.PositionNr, AlleAuftragPositionen.IdentNr, AlleAuftragPositionen.VersandDatum, AlleAuftragPositionen.TLMenge_P, " + strSql = strSql & " AlleAuftragPositionen.Menge, AlleAuftragPositionen.Metrolog, AlleAuftragPositionen.TLMenge, AlleAuftragPositionen.Bohrung, AlleAuftragPositionen.Farbe, AlleAuftragPositionen.Anzeige, AlleAuftragPositionen.L_IstTermin, AlleAuftragPositionen.A_IstTermin, AlleAuftragPositionen.V_IstTermin, AlleAuftragPositionen.E_IstTermin, AlleAuftragPositionen.ZusatzText, AlleAuftragPositionen.Prf_nach_MID, " + strSql = strSql & " AlleAuftragPositionen.M_IstTermin, AlleAuftragPositionen.P_IstTermin, AlleAuftragPositionen.R_IstTermin, AlleAuftragPositionen.Bem_Fertigung, AlleAuftragPositionen.Ort, AlleAuftragPositionen.Bestellcode, " + strSql = strSql & " AlleAuftragPositionen.Bezeichnung , IdentNr.KurzBez, IdentNr.Typ, IdentNr.Typzusatz, IdentNr.Nennweite, IdentNr.Temperatur, IdentNr.Druck, IdentNr.Baulaenge, IdentNr.Bestellgruppe, IdentNr.SAP_Nummer, IdentNr.IdentNrString, AlleAuftragPositionen.Kennzeichen2, " + strSql = strSql & " Herkunft, AlleAuftragPositionen.KundenNr, Kunde.Ort as Kundenort, Kunde.Name as KundenName, AlleAuftragPositionen.FertigungsauftragNr, IdentNr.Fert_Ort, IdentNr.VakoCode " + strSql = strSql & " FROM AlleAuftragPositionen " & vbCrLf + + strSql = strSql & " INNER JOIN Identnr ON AlleAuftragPositionen.IdentNr = Identnr.IdentNr " + strSql = strSql & " INNER JOIN Kunde ON AlleAuftragPositionen.KundenNr = Kunde.KundenNr " & vbCrLf + + 'strSQL = strSQL & " WHERE (AlleAuftragPositionen.VersandDatum >= CONVERT(DATETIME, '" & Format(DTPickerVon.Value, "yyyy-mm-dd") & " 00:00:00', 102)) AND " + 'strSQL = strSQL & " (AlleAuftragPositionen.VersandDatum <= CONVERT(DATETIME, '" & Format(DTPickerBis.Value, "yyyy-mm-dd") & " 23:59:59', 102))" + + strSql = strSql & " WHERE AlleAuftragPositionen.AuftragNr = " & Val(txtFilterAuftrag.text) & " " + strSql = strSql & " OR AlleAuftragPositionen.FertigungsauftragNr = " & Val(txtFilterAuftrag.text) & " " + strSql = strSql & " OR AlleAuftragPositionen.Lead_AufNr = " & Val(txtFilterAuftrag.text) & " " + + + strSql = strSql & vbCrLf + strSql = strSql & " ORDER BY PositionNr, Herkunft" + + Debug.Print strSql + + Set rs = New CRecordset + rs.openRS strSql, True + Set m_rs = rs + + MSFlexGrid1.Rows = 2 + mlngRecordsFound = 0 + lngSummeMenge = 0 + + mlngRecordsFound = 0 + If Not rs.EOF Then + + If Trim(txtFilterAuftrag.text) <> Trim(CStr(rs.getLongValue("AuftragNr"))) Then + StatusBar1.SimpleText = "FertigungsauftragNr " & txtFilterAuftrag.text & " = AuftragNr " & CStr(rs.getLongValue("AuftragNr")) & " " + + txtFilterAuftrag.text = CStr(rs.getLongValue("AuftragNr")) + cmdAuftragInfo.ToolTipText = "Informationen zu dieser AuftragNr in der Liste anzeigen" + End If + + Do While Not rs.EOF + '''''''''''''''''''''''' Vakocode auswerten ''''''''''''''''''''''' + Set objVako = Nothing + strVako = Trim(rs.getStringValue("VakoCode")) + If Len(strVako) > 0 Then + Set objVako = New CVakoCode + objVako.Load strVako + Debug.Print objVako.mstrDebug + End If + '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + + + cmdExcel.Enabled = True + + mlngRecordsFound = mlngRecordsFound + 1 + MSFlexGrid1.row = MSFlexGrid1.Rows - 1 + + MSFlexGrid1.col = 0 + MSFlexGrid1.text = Format(rs.getLongValue("Versanddatum"), "dd.mm.yyyy") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = rs.getLongValue("PositionNr") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = getIdentNrTextFromRecordset(rs, "") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + If rs.getStringValue("Herkunft") = "AuftragPosition" Then + If rs.getLongValue("TLMenge") = 0 Then + lngSummeMenge = lngSummeMenge + rs.getLongValue("Menge") + MSFlexGrid1.text = rs.getLongValue("Menge") + labelOffenWert.Caption = Val(labelOffenWert.Caption) + rs.getLongValue("Menge") + Else + labelOffenWert.Caption = Val(labelOffenWert.Caption) + rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + MSFlexGrid1.text = "R " & rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + End If + Else + labelGefertigtMenge.Caption = Val(labelGefertigtMenge.Caption) + rs.getLongValue("TLMenge") + MSFlexGrid1.text = rs.getLongValue("TLMenge") + lngSummeMenge = lngSummeMenge + rs.getLongValue("TLMenge") + End If + + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + + MSFlexGrid1.ColAlignment(4) = flexAlignLeftCenter + ' If InStr(1, UCase(rs.getStringValue("ZusatzText")), UCase("MS Plus")) > 0 Then + ' MSFlexGrid1.Text = "+" & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' ElseIf InStr(1, UCase(rs.getStringValue("Typ")), UCase("MeiStream Plus")) > 0 Then + ' MSFlexGrid1.Text = "+" & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' Else + MSFlexGrid1.text = IIf((Left(rs.getStringValue("Bezeichnung"), 3) = "CKD"), "CKD ", "") & rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' MSFlexGrid1.Text = rs.getStringValue("KurzBez") & " " & Trim(rs.getStringValue("Typ") & " " & rs.getStringValue("TypZusatz")) & " " & CStr(rs.getIntValue("Nennweite")) & " " & CStr(rs.getLongValue("Temperatur")) & "°C PN" & rs.getIntValue("Druck") + ' End If + + If Not rs.isFieldNull("Baulaenge") Then + MSFlexGrid1.text = MSFlexGrid1.text & " L" & rs.getLongValue("Baulaenge") + Else + 'Baulänge evtl über Bestellcode bestimmen + strTemp = GetBaulaengeFromAuftragposition(Val(txtFilterAuftrag.text), rs.getLongValue("PositionNr"), rs.getLongValue("Bestellgruppe")) + If strTemp <> "" Then + MSFlexGrid1.text = MSFlexGrid1.text & " L" & strTemp + End If + End If + + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = Replace(rs.getStringValue("Bohrung"), "Bohrbild", "") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = IIf(rs.getLongValue("Prf_nach_MID") = 0, "", "MID") + + ' neu RH 15.3.2012 + If rs.getStringValue("Metrolog") = "MID" Then + MSFlexGrid1.text = "MID" + End If + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = IIf(rs.isFieldNull("L_IstTermin"), "", "L") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = IIf(rs.isFieldNull("A_IstTermin"), "", "A") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = IIf(rs.isFieldNull("V_IstTermin"), "", "V") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = IIf(rs.isFieldNull("E_IstTermin"), "", "E") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = IIf(rs.isFieldNull("M_IstTermin"), "", "M") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = IIf(rs.isFieldNull("P_IstTermin"), "", "P") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = IIf(rs.isFieldNull("R_IstTermin"), "", "R") + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + + Dim lngAuftragsMenge As Long + Dim lngAnzahlDruckprf As Long + lngAnzahlDruckprf = AnzahlDruckGepruefterZaehler(rs.getLongValue("AuftragNr"), rs.getLongValue("PositionNr")) + lngAuftragsMenge = rs.getLongValue("Menge") + + If lngAnzahlDruckprf >= lngAuftragsMenge Then + If lngAnzahlDruckprf = lngAuftragsMenge Then + MSFlexGrid1.text = "D" + Else + MSFlexGrid1.text = "d" + End If + End If + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = Trim(rs.getStringValue("Anzeige")) + If Not objVako Is Nothing Then + If InStr(1, objVako.GetWert("Zählwerk"), "eRegister") > 0 Then + MSFlexGrid1.text = MSFlexGrid1.text & " E" + End If + End If + + If Not objVako Is Nothing Then + If InStr(1, objVako.GetWert("Zählwerk"), "Encoder") > 0 Then + MSFlexGrid1.text = MSFlexGrid1.text & " Enc" + End If + End If + + ' Bemerkung + MSFlexGrid1.col = MSFlexGrid1.col + 1 + +' If Not rs.isFieldNull("P_IstTermin") Then +' MSFlexGrid1.Text = "P:" & Format(rs.getDateValue("P_IstTermin"), "dd.m") +' Else +' If Not rs.isFieldNull("R_IstTermin") Then +' MSFlexGrid1.Text = "R:" & Format(rs.getDateValue("R_IstTermin"), "dd.mm") +' End If +' End If +' +' MSFlexGrid1.Text = Trim(MSFlexGrid1.Text & " " & rs.getStringValue("Bem_Fertigung")) +' +' ' neu RH 12.06.2007 Für Ort ZY soll die Farbe angezeigt werden, da die Temperatur = NULL ist +' If rs.getStringValue("Ort") = "ZY" And rs.getStringValue("Farbe") <> "" Then +' If MSFlexGrid1.Text <> "" Then MSFlexGrid1.Text = MSFlexGrid1.Text & "," +' MSFlexGrid1.Text = MSFlexGrid1.Text & rs.getStringValue("Farbe") +' End If + + MSFlexGrid1.text = GetBemerkungText(rs, lngSummeGeprueft) + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + If rs.getStringValue("Herkunft") = "AuftragPosition" Then + MSFlexGrid1.text = "offen" + Else + MSFlexGrid1.text = "fertig" + End If + + + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = Trim(rs.getLongValue("FertigungsAuftragNr")) + + If lstAPOrt.text = TEXTALLELINIEN Or lstAPOrt.text = TEXTALLELINIEN_OHNE_VS Or lstAPOrt.SelCount > 1 Then + ' mehr als ein Ort ,also Ort angeben + MSFlexGrid1.col = MSFlexGrid1.col + 1 + MSFlexGrid1.text = Trim(rs.getStringValue("Ort")) + End If + + rs.MoveNext + + If Not rs.EOF Then + MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 + End If + + DoEvents + + If m_blnAbbruch Then + Call Abbruch + Exit Sub + End If + Loop + SetSpalteNameZuordnung + + If InStr(1, StatusBar1.SimpleText, "FertigungsauftragNr") = 0 Then + ' Anzahl der Positionen nur anzeigen, wenn eine AuftragNr eingegeben wurde + ' Wenn eine FertigungsAuftragNr eingegeben wurde, + ' wird sowieso nur eine Zeile angezeigt + StatusBar1.SimpleText = MSFlexGrid1.Rows - 1 & " Positionen" + End If + Else + StatusBar1.SimpleText = "keine passenden Datensätze" + End If + + lblGeprueft.Caption = lngSummeGeprueft + + lblSumme.Caption = lngSummeMenge + Set m_rs = rs + +' If ChkDrucker.Value = vbChecked And mlngRecordsFound > 0 Then +' Printer.ColorMode = 2 +' Printer.Copies = Val(cmbAnzahlKopien.Text) +' +' Printer.Font = "Arial" +' Printer.ScaleMode = vbMillimeters +' +' Printer.ScaleLeft = -4 ' Rand +' Printer.ScaleTop = -1 ' Rand +' +' '''''''''''''''''Seiten Kopf +' Seite = 1 +' Printer.CurrentY = 5 +' Printer.Line (0, Int(Printer.CurrentY))-(TabsAuftr(15), Int(Printer.CurrentY)) +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.Line (0, Printer.CurrentY)-(TabsAuftr(15), Printer.CurrentY) +' +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.CurrentX = 5 +' Printer.Font.Size = 15 +' Printer.Font.Bold = True +' +' +' Printer.FontTransparent = True +' dblY = Printer.CurrentY +' Printer.Print "Informationen zu Auftrag " & Val(txtFilterAuftrag.Text) +' Printer.Font.Size = SCHRIFTTABELLE +' Printer.Font.Bold = False +' +' rs.MoveFirst +' Printer.CurrentX = 10 +' Printer.Print "Kunde " & rs.getStringValue("KundenName") & "," & rs.getStringValue("Kundenort") & ", KndNr: " & rs.getLongValue("KundenNr") +' +' Printer.CurrentY = dblY +' Printer.CurrentX = 130 +' Printer.Print "Ausdruck vom " & Format(Now(), "dd.mm.yyyy hh:mm:ss") +' +' Printer.CurrentY = Printer.CurrentY + 15 - SCHRIFTTABELLE +' Printer.CurrentY = Printer.CurrentY + 1 +' +' Printer.CurrentX = 10 +' strTemp = "Auswahl vom: " & Format(DTPickerVon.Value, "dd.mm.yyyy") & " bis: " & Format(DTPickerBis.Value, "dd.mm.yyyy") +' Printer.Print strTemp +' +' Printer.CurrentY = Printer.CurrentY + 3 +' +' Printer.Line (0, Printer.CurrentY)-(TabsAuftr(15), Printer.CurrentY) +' Printer.CurrentY = Printer.CurrentY + 1 +' Printer.Line (0, Printer.CurrentY)-(TabsAuftr(15), Printer.CurrentY) +' +' Dim zeile As Integer +' +' ''''''''''''' Tabellenkopf +' Printer.CurrentY = Printer.CurrentY + 3 +' Call TabellenkopfAlleAuftr +' +' ' Obere Kante der Tabelle merken +' dblY = Printer.CurrentY + 8 +' ZeileAufBlatt = 0 +' +' ' Spalten Linien +'' For i = 0 To 13 +'' Printer.Line (TabsAuftr(i), dblY)-(TabsAuftr(i), 270) +'' Next +' +' Printer.CurrentY = dblY - 8 +' +' +' For zeile = 1 To mlngRecordsFound +' ZeileAufBlatt = ZeileAufBlatt + 1 +' +' If Printer.CurrentY > 270 Then +' ' Zeile passt nicht mehr aufs Blatt +' +' ZeileAufBlatt = 1 +' Call SeitenFussAlleAuftr(Seite) +' +' Printer.NewPage +' Printer.Font.Size = SCHRIFTTABELLE +' +' Seite = Seite + 1 +' StatusBar1.SimpleText = "Drucke Seite " & Seite +' DoEvents +' +' Printer.CurrentY = 5 +' Call TabellenkopfAlleAuftr +' ' Obere Kante der Tabelle +' dblY = Printer.CurrentY + 8 +' End If +' +' Printer.CurrentY = dblY +' +' For i = 0 To MSFlexGrid1.Cols - 1 +' Printer.CurrentY = dblY + (ZeileAufBlatt - 2) * 5 +' MSFlexGrid1.row = zeile +' MSFlexGrid1.Col = i +' strTemp = Trim(MSFlexGrid1.Text) +' Printer.Font.Size = 8 +' Printer.Font.Bold = False +' Select Case i +' Case 0 +' 'Versanddatum +' Printer.Font.Bold = True +' strTemp = Format(CDate(strTemp), "dd.mm") +' Case 1 +' ' Pos +' Printer.Font.Bold = True +' Case 2 +' 'IdentNr +' Printer.Font.Bold = True +' Case 3 +' 'Menge +' Printer.Font.Bold = True +' Case 4 +' ' Bezeichnung +' Printer.Font.Size = 6 +' strTemp = TextformatAuftragInfo(strTemp, i) +' Case 5 +' ' Bohrung +' strTemp = TextformatAuftragInfo(strTemp, i) +' Printer.Font.Size = 6 +' Case 6, 7, 8, 9, 10 'AVMPR +' Printer.Font.Bold = True +' Case 12 ' Anzeige +' Printer.Font.Size = 6 +' strTemp = TextformatAuftragInfo(strTemp, i) +' Case 12 ' Bemerkung +' Printer.Font.Size = 6 +' strTemp = TextformatAuftragInfo(strTemp, i) +' Case 13 ' Status +' strTemp = TextformatAuftragInfo(strTemp, i) +' If strTemp = "offen" Then +' Printer.Font.Size = 8 +' Printer.Font.Bold = True +' Else +' Printer.Font.Size = 6 +' Printer.Font.Bold = False +' End If +' End Select +' +' Printer.CurrentX = TabsAuftr(i) +' +' Select Case i +' Case 1, 2, 3 +' ' rechtsbündig +' ' Position, IdentNr, Menge +' Printer.CurrentX = TabsAuftr(i + 1) - Printer.TextWidth(strTemp) - 1 +' Case 0 +' ' rechtsbündig +' ' Versanddatum, Be +' Printer.CurrentX = TabsAuftr(i + 1) - Printer.TextWidth(strTemp) - 2 +' End Select +' +' Select Case i +' Case 12 +' ' Bemerkung +' Printer.CurrentY = Printer.CurrentY - 2 +' Printer.CurrentX = TabsAuftr(i) +' Printer.Print Left(strTemp, 10) +' Printer.CurrentX = TabsAuftr(i) +' Printer.Print Mid(strTemp, 11) +' Printer.CurrentY = Printer.CurrentY + 1 +' Case Else +' Printer.Print strTemp +' End Select +' +' dblLastFontSize = Printer.Font.Size +' Printer.Font.Size = 8 +' Next +' +' ' da letzte Spalte eine kleinere Schriftgroesse haben könnte +' Printer.CurrentY = Printer.CurrentY + 1 +' +' Printer.DrawWidth = 3 +' +' If zeile < mlngRecordsFound Then +' Printer.DrawStyle = vbDashDot +' Printer.Line (0, Printer.CurrentY)-(TabsAuftr(15), Printer.CurrentY), RGB(224, 224, 224) +' Else +' Printer.DrawStyle = vbSolid +' Printer.Line (0, Printer.CurrentY)-(TabsAuftr(15), Printer.CurrentY) +' Printer.CurrentY = Printer.CurrentY + 2 +' Printer.Font.Bold = True +' dblY = Printer.CurrentY +' strTemp = "Summe " & lngSummeMenge +' Printer.CurrentX = TabsAuftr(3 + 1) - Printer.TextWidth(strTemp) - 1 +' Printer.Print strTemp +' +' Printer.CurrentY = dblY +' strTemp = "offen: " & Val(labelOffenWert.Caption) & ", gefertigt: " & Val(labelGefertigtMenge.Caption) +' Printer.CurrentX = TabsAuftr(5) +' Printer.Print strTemp +' End If +' +' +' DoEvents +' If m_blnAbbruch Then +' Call Abbruch +' Exit Sub +' End If +' Next +' +' Printer.CurrentY = Printer.CurrentY + 3 +' If Printer.CurrentY < 278 Then +' Printer.Line (0, Printer.CurrentY)-(TabsAuftr(15), Printer.CurrentY) +' Printer.Line (0, Printer.CurrentY + 1)-(TabsAuftr(15), Printer.CurrentY + 1) +' End If +' +' SeitenFussAlleAuftr Seite, " von " & Seite & " Seiten" +' If m_blnAbbruch Then +' Call Abbruch +' cmdAbbruch.Enabled = False +' Exit Sub +' End If +' +' Printer.EndDoc +' MsgBox "Die Liste wurde gedruckt!" +' End If + If chkSpaltenbreiteAnpassen.Value = vbChecked Then + AutoSpaltenBreite MSFlexGrid1, lblAutosize + End If + + cmdAbbruch.Enabled = False + Me.Enabled = True + Screen.MousePointer = vbNormal +End Sub + + +Private Sub Abbruch() + Printer.KillDoc + Me.Enabled = True + Screen.MousePointer = vbNormal +End Sub + +Private Sub Tabellenkopf() + Dim i As Integer + Dim dblY As Double + Dim strTemp As String + + dblY = Printer.currentY + + Printer.Font.Bold = True + + + For i = 0 To MSFlexGrid1.cols - 1 + + + Printer.Font.Size = 8 + + MSFlexGrid1.row = 0 + MSFlexGrid1.col = i + Printer.currentY = dblY + Printer.currentX = Tabs(i) + strTemp = "" + Select Case i + Case 0 + strTemp = "Fert." + Case 1 + strTemp = "Auftrag/Pos" + Case 7 + 'strTemp = "Info" + If chkSonderlayoutFertigung.Value = vbChecked Then + strTemp = "Knd Sernr von - bis" + Printer.Font.Size = 8 + Else + Printer.Font.Size = 5 + End If + Case 8 + If chkSonderlayoutFertigung.Value = vbChecked Then + strTemp = "FA-Nr" + Printer.Font.Size = 8 + Else + Printer.Font.Size = 5 + End If + Case 9, 10, 11, 12, 13, 14 + Printer.Font.Size = 5 + If chkSonderlayoutFertigung.Value = vbChecked Then + Printer.Font.Size = 8 + strTemp = MSFlexGrid1.text + End If + Case 15 + Printer.Font.Size = 5 + Case 16 + strTemp = "Anz." + Case Else + strTemp = MSFlexGrid1.text + End Select + + Select Case i + Case 0, 1, 3, 4 + Printer.currentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 1 + End Select + + Debug.Print i & ":" & MSFlexGrid1.text + Printer.Print strTemp + Next + Printer.Font.Size = 8 + + Printer.Print "" + Printer.Line (0, Printer.currentY)-(Tabs(20), Printer.currentY) +End Sub + + +Private Sub TabellenkopfAlleAuftr() + Dim i As Integer + Dim dblY As Double + Dim strTemp As String + + dblY = Printer.currentY + + Printer.Font.Bold = True + + For i = 0 To MSFlexGrid1.cols - 1 + MSFlexGrid1.row = 0 + MSFlexGrid1.col = i + Printer.currentY = dblY + Printer.currentX = TabsAuftr(i) + + Printer.Font.Size = 8 + strTemp = MSFlexGrid1.text + + Select Case i + Case 0 + strTemp = "Fert." + Case 1 + strTemp = "Pos." + Case 6, 7, 8, 9, 10, 11, 12, 13, 14 + Printer.Font.Size = 6 + Case 15 + strTemp = "Anz." + Case 18 + strTemp = "FA-Nr" + End Select + +' Select Case i +' Case 1, 3, 4 +' Printer.CurrentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 1 +' End Select + + Debug.Print i & " " & MSFlexGrid1.text & " =" & strTemp & " " & TabsAuftr(i) + Printer.Print strTemp + Next + + Printer.Line (0, Printer.currentY)-(Tabs(19), Printer.currentY) +End Sub + + +Private Sub SeitenFuss(strAusblenden As String, Seite As Integer, Optional strText As String = "") + Printer.Font.Size = 6 + Printer.currentX = 0 + Printer.currentY = Printer.ScaleHeight - 2 * Printer.TextHeight("X") - 3 + Printer.Font.Bold = False + Printer.Print "Legende: *:Modul" + + Printer.Print GetUeberschrift(strAusblenden) & ", Fert.-Ort: " & GetFertOrtText() & ", gedruckt am " & Format(Now(), "dd.mm.yyyy hh:mm:ss") & " von " & Mid(g_App.getMitarbeiter.getVorname, 1, 1) & ". " & g_App.getMitarbeiter.getName & " Seite " & Seite & " " & strText +End Sub + + +Private Function GetFertOrtText() As String + Dim i As Integer + GetFertOrtText = "" + For i = 0 To lstAPOrt.ListCount - 1 + If lstAPOrt.Selected(i) Then + GetFertOrtText = GetFertOrtText & lstAPOrt.List(i) & " " + End If + Next + GetFertOrtText = Trim(GetFertOrtText) +End Function + +Private Sub SeitenFussAlleAuftr(Seite As Integer, Optional strText As String = "") + Printer.Font.Size = 6 + Printer.currentX = 0 + Printer.currentY = Printer.ScaleHeight - Printer.TextHeight("X") - 3 + Printer.Font.Bold = False + Printer.Print "gedruckt am " & Format(Now(), "dd.mm.yyyy hh:mm:ss") & " von " & Mid(g_App.getMitarbeiter.getVorname, 1, 1) & ". " & g_App.getMitarbeiter.getName & " Seite " & Seite & " " & strText +End Sub + + + +Private Sub MSFlexGrid1_Click() + On Error GoTo Errorhandler + + Dim strText As String + + Dim lngAuftragNr As Long + Dim lngPositionNr As Long + Dim strSpaltenname As String + Dim strFeldname As String + + Dim strWert As String + + If MSFlexGrid1.row = 0 Then + ' Sortierung war schon + Exit Sub + End If + + If InStr(MSFlexGrid1.TextMatrix(MSFlexGrid1.row, 1), "/") > 0 Then + lngAuftragNr = Val(Split(MSFlexGrid1.TextMatrix(MSFlexGrid1.row, 1), "/")(0)) + lngPositionNr = Val(Split(MSFlexGrid1.TextMatrix(MSFlexGrid1.row, 1), "/")(1)) + Else + lngAuftragNr = Val(txtFilterAuftrag.text) + lngPositionNr = Val(MSFlexGrid1.TextMatrix(MSFlexGrid1.row, 1)) + End If + + strSpaltenname = MSFlexGrid1.TextMatrix(0, MSFlexGrid1.col) + strWert = MSFlexGrid1.text + + Debug.Print "'" & MSFlexGrid1.text & "' Spalte " & MSFlexGrid1.col & ", Zeile " & MSFlexGrid1.row + + txtFilterKunde.text = "" + If MSFlexGrid1.col = 1 And MSFlexGrid1.row > 0 And m_blnIstAlleAuftraege = True Then + ' AuftragNr wurde angeklickt + If UBound(Split(MSFlexGrid1.text, "/")) > 0 Then + txtFilterAuftrag.text = Split(MSFlexGrid1.text, "/")(0) + Anzeigen m_strAusblenden + Exit Sub + End If + End If + + 'KundenOrt + If MSFlexGrid1.col = 2 And MSFlexGrid1.row > 0 And m_blnIstAlleAuftraege = True Then + txtFilterKunde.text = MSFlexGrid1.text + Anzeigen m_strAusblenden + Exit Sub + End If + + txtEingabe.Visible = False + + If chkVersuch.Value = vbUnchecked And strSpaltenname = "Bemerkung" And MSFlexGrid1.row > 0 And m_blnIstAlleAuftraege = True Then + m_intLastX = MSFlexGrid1.col + m_intLastY = MSFlexGrid1.row + + txtEingabe.MaxLength = 20 + txtEingabe.Left = MSFlexGrid1.Left + MSFlexGrid1.ColPos(MSFlexGrid1.col) + 30 + txtEingabe.Top = MSFlexGrid1.Top + MSFlexGrid1.RowPos(MSFlexGrid1.row) + 30 + txtEingabe.width = MSFlexGrid1.ColWidth(MSFlexGrid1.col) + 30 + txtEingabe.Height = MSFlexGrid1.RowHeight(MSFlexGrid1.row) + ' + ' feld aktueller wert zuweisen und focus setzen + ' + m_strLastText = MSFlexGrid1.text + txtEingabe.text = MSFlexGrid1.text + + txtEingabe.Visible = True + txtEingabe.ZOrder 0 + txtEingabe.SetFocus + Exit Sub + End If + + If m_blnIstAlleAuftraege = False And strSpaltenname = "Bemerkung" And MSFlexGrid1.row > 0 Then + m_intLastX = MSFlexGrid1.col + m_intLastY = MSFlexGrid1.row + + txtEingabe.MaxLength = 20 + txtEingabe.Left = MSFlexGrid1.Left + MSFlexGrid1.ColPos(MSFlexGrid1.col) + 30 + txtEingabe.Top = MSFlexGrid1.Top + MSFlexGrid1.RowPos(MSFlexGrid1.row) + 30 + txtEingabe.width = MSFlexGrid1.ColWidth(MSFlexGrid1.col) + 30 + txtEingabe.Height = MSFlexGrid1.RowHeight(MSFlexGrid1.row) + ' + ' feld aktueller wert zuweisen und focus setzen + ' + m_strLastText = MSFlexGrid1.text + txtEingabe.text = MSFlexGrid1.text + txtEingabe.Visible = True + txtEingabe.ZOrder 0 + txtEingabe.SetFocus + Exit Sub + End If + + If chkVersuch.Value = vbChecked And strSpaltenname = "Bemerkung" And MSFlexGrid1.row > 0 And m_blnIstAlleAuftraege = True Then + m_intLastX = MSFlexGrid1.col + m_intLastY = MSFlexGrid1.row + + txtEingabe.MaxLength = 20 + txtEingabe.Left = MSFlexGrid1.Left + MSFlexGrid1.ColPos(MSFlexGrid1.col) + 30 + txtEingabe.Top = MSFlexGrid1.Top + MSFlexGrid1.RowPos(MSFlexGrid1.row) + 30 + txtEingabe.width = MSFlexGrid1.ColWidth(MSFlexGrid1.col) + 30 + txtEingabe.Height = MSFlexGrid1.RowHeight(MSFlexGrid1.row) + ' + ' feld aktueller wert zuweisen und focus setzen + ' + m_strLastText = MSFlexGrid1.text + txtEingabe.text = MSFlexGrid1.text + txtEingabe.Visible = True + txtEingabe.ZOrder 0 + txtEingabe.SetFocus + Exit Sub + End If + + If MSFlexGrid1.row > 0 Then + Select Case strSpaltenname + Case "A", "V", "E", "M", "P", "R" + strFeldname = strSpaltenname & "_IstTermin" + strText = MSFlexGrid1.text & " " & Format(GetWertFromFeld(lngAuftragNr, lngPositionNr, strFeldname), "dd.mm.yyyy") + Case Else + strText = MSFlexGrid1.text + End Select + Clipboard.SetText Replace(strText, "|", vbCrLf) + MsgBox strText, vbInformation, lngAuftragNr & "/" & lngPositionNr & " " & IIf(strFeldname = "", strSpaltenname, strFeldname) + + End If + + StatusBar1.SimpleText = "Spalte " & MSFlexGrid1.col & ": " & MSFlexGrid1.TextMatrix(0, MSFlexGrid1.col) + Exit Sub +Errorhandler: + MsgBox Err.Description +End Sub + + +Private Function GetWertFromFeld(lngAuftragNr As Long, lngPositionNr As Long, strFeldname As String) As String +On Error GoTo Errorhandler + + Dim strSql As String + Dim rs As CRecordset + + strSql = "SELECT " & strFeldname & " FROM AlleAuftragPositionen WHERE AuftragNr=" & lngAuftragNr & " AND PositionNr = " & lngPositionNr + Set rs = New CRecordset + rs.openRS strSql, True + If Not rs.EOF Then + GetWertFromFeld = rs.getStringValue(strFeldname) + Else + GetWertFromFeld = "" + End If +Exit Function +Errorhandler: + MsgBox "Fehler " & Err.Number & " in frmFertigungslisten.GetWertFromFeld(" & lngAuftragNr & "," & lngPositionNr & ",'" & strFeldname & "'): " & Err.Description + LogIntoDB "Fehler " & Err.Number & " in frmFertigungslisten.GetWertFromFeld(" & lngAuftragNr & "," & lngPositionNr & ",'" & strFeldname & "'): " & Err.Description, "Softwarefehler" +End Function + +Private Function GetUeberschrift(strAusblenden As String) As String + Select Case strAusblenden + Case "L" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Laserkennzeichnung)" + Case "A" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Auftragsbearbeitung)" + Case "V" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Vorfertigung)" + Case "E" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Messeinsatz montiert)" + Case "P" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Prüfen)" + Case "M" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Montage)" + Case "R" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Rechenwerk)" + Case "F" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Finish)" + Case "VF" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Versandfertig)" + Case "Sofort" + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Sofortaufträge)" + End Select + + If chkVersuch.Value = vbChecked Then + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Versuch)" + End If + + If chkSonderlayoutFertigung.Value = vbChecked Then + GetUeberschrift = "Sensus Auftragsverwaltung Liste (Fertigung)" + End If +End Function + + + + + + + + + +Private Sub txtEingabe_DblClick() + MsgBox txtEingabe.text +End Sub + +Private Sub txtEingabe_GotFocus() + cmdFinish.DEFAULT = False + MSFlexGrid1.ScrollBars = flexScrollBarNone + cmdPrint.Enabled = False +End Sub + +Private Sub txtEingabe_KeyPress(KeyAscii As Integer) + Debug.Print KeyAscii + Select Case KeyAscii + Case 13 + txtEingabe_LostFocus + End Select +End Sub + +Private Sub txtEingabe_LostFocus() + Dim strSpaltenname As String + + MSFlexGrid1.ScrollBars = flexScrollBarBoth + cmdPrint.Enabled = True + + strSpaltenname = MSFlexGrid1.TextMatrix(0, m_intLastX) + + + If m_intLastX > 0 And m_intLastY > 0 And txtEingabe.text <> m_strLastText Then + ' + ' wert im eingabefeld der letzten zelle zuweisen + ' + Debug.Print "zurückschreiben Y=" & m_intLastY & ", X=" & m_intLastX + MSFlexGrid1.TextMatrix(m_intLastY, m_intLastX) = txtEingabe.text + + If strSpaltenname = "Bemerkung" Then + Call SaveBemerkung(txtEingabe.text, m_intLastY) + End If + + +' Select Case m_intLastX +' Case 16 +' If chkVersuch.Value = vbUnchecked Then +' Call SaveBemerkung(txtEingabe.Text, m_intLastY) +' End If +' Case 8 +' If chkVersuch.Value = vbChecked Then +' Call SaveBemerkung(txtEingabe.Text, m_intLastY) +' End If +' Case 13 +' If m_blnIstAlleAuftraege = False Then +' Call SaveBemerkung(txtEingabe.Text, m_intLastY) +' End If +' End Select + + + End If + ' eingabefeld unsichtbar + ' + txtEingabe.Visible = False +End Sub + +Private Sub txtFilterAuftrag_Change() + cmdAuftragInfo.ToolTipText = "Informationen zu dieser AuftragNr bzw. FertigungsauftragNr in der Liste anzeigen" + + If txtFilterAuftrag.text = "" Then + cmdAuftragInfo.Enabled = False + cmdAuftragNrClear.Enabled = False + Else + cmdAuftragNrClear.Enabled = True + cmdAuftragInfo.DEFAULT = True + cmdAuftragInfo.Enabled = True + End If +End Sub + +Private Sub txtFilterAuftrag_Click() + txtFilterAuftrag.SelStart = 0 + txtFilterAuftrag.SelLength = Len(txtFilterAuftrag.text) + txtFilterAuftrag.SetFocus +End Sub + +Private Sub txtFilterAuftrag_KeyPress(KeyAscii As Integer) + Debug.Print KeyAscii + If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii > 32 Then + KeyAscii = 0 + End If +End Sub + + +Private Function Textformat(strText As String, Stelle As Integer) As String + On Error GoTo Errorhandler + Do While Printer.TextWidth(strText) >= (Tabs(Stelle + 1) - 1 - Tabs(Stelle)) + If Len(strText) > 0 Then + strText = Left(strText, Len(strText) - 1) + Else + Exit Do + End If + Loop + Textformat = strText +Exit Function + +Errorhandler: + Debug.Print Err.Number & " " & Err.Description + strText = Left(strText, 100) + Resume + +End Function + + +Private Function TextformatAuftragInfo(strText As String, Stelle As Integer) As String + Debug.Print "Vorher: " & strText & " ,Stelle=" & Stelle + Do While Printer.TextWidth(strText) >= (TabsAuftr(Stelle + 1) - 1 - TabsAuftr(Stelle)) + If Len(strText) > 0 Then + strText = Left(strText, Len(strText) - 1) + Else + Exit Do + End If + Loop + TextformatAuftragInfo = strText + Debug.Print "nachher:" & strText +End Function + +Private Sub AktualisiereComboBaulaenge() + Dim strFilter As String + Dim strText As String + Dim strTemp As String + + strText = cmbFilterBaulaenge.text + + cmbFilterBaulaenge.Clear + cmbFilterBaulaenge.AddItem TEXTALLE + cmbFilterBaulaenge.ListIndex = 0 + + + strFilter = GetFilterForTyp() +' If cmbAPOrt.Text <> TEXTALLELINIEN Then +' If cmbAPOrt.Text = TEXTALLELINIEN_OHNE_VS Then +' strFilter = strFilter & "Fert_Ort <> 'VS' " +' Else +' strFilter = strFilter & "Fert_Ort ='" & cmbAPOrt.Text & "' " +' End If +' End If + + If lstFilterTyp.text <> TEXTALLETYPEN Then + strTemp = GetFilterForTyp() + If strTemp <> "" Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & strTemp + End If + End If + + + + If cmbFilterNennweite.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Nennweite='" & Val(cmbFilterNennweite.text) & "'" + End If + + If cmbFilterTemp.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Temperatur='" & Val(cmbFilterTemp.text) & "'" + End If + + + FillCombo cmbFilterBaulaenge, "Baulaenge", strFilter + If strText <> "" Then + cmbFilterBaulaenge.text = strText + End If + + AktualisiereComboBohrbild +End Sub + + +Private Sub AktualisiereComboTyp() + Dim strFilter As String + + Me.MousePointer = vbHourglass + + lstFilterTyp.Clear + lstFilterTyp.AddItem TEXTALLETYPEN + lstFilterTyp.Selected(0) = True + + 'lstFilterTyp.ListIndex = 0 + strFilter = GetFilterOrt() + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + +' If cmbAPOrt.Text <> TEXTALLELINIEN Then +' If cmbAPOrt.Text = TEXTALLELINIEN_OHNE_VS Then +' strFilter = "Fert_Ort <> 'VS' AND " +' Else +' strFilter = "Fert_Ort ='" & cmbAPOrt.Text & "' AND " +' End If +' End If +' If chkVersuch.Value = vbUnchecked Then +' strFilter = strFilter & " Pruefklasse.FuerProduktion = 1 AND " +' End If + + strFilter = strFilter & "((KurzBez = N'WZ') OR (KurzBez = N'ME') OR (KurzBez = N'GE') or (KurzBez = N'FK') ) AND Typ <> '#' AND Typ not like 'FUV%'" + + If lstAPOrt.Selected(1) Then + 'Bei Linie 2 + lstFilterTyp.AddItem TEXTPSEUNDPFL + End If + + FillCombo lstFilterTyp, "Typ", strFilter + + AktualisiereComboNennweite + + Me.MousePointer = vbNormal +End Sub + +Private Sub AktualisiereComboMetrolog() + Dim strText As String + Dim strTemp As String + Dim strFilter As String + Dim rs As CRecordset + Dim strSql As String + + cmbFilterMetrolog.Clear + cmbFilterMetrolog.AddItem TEXTALLE + cmbFilterMetrolog.ListIndex = 0 + + If lstFilterTyp.text <> TEXTALLETYPEN Then + strTemp = GetFilterForTyp() + If strTemp <> "" Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & strTemp + End If + End If + + If strFilter <> "" Then + strSql = " SELECT DISTINCT Pruefpunkte.PruefklasseKZ FROM Pruefpunkte " + strSql = strSql & "INNER JOIN Identnr ON Pruefpunkte.IdentNr = Identnr.IdentNr " + strSql = strSql & "INNER JOIN Pruefklasse ON Pruefpunkte.PruefklasseKZ = Pruefklasse.PruefklasseKZ " + strSql = strSql & "WHERE " & strFilter + + If chkVersuch.Value = vbUnchecked Then + strSql = strSql & "AND Pruefklasse.FuerProduktion = 1 " + End If + + strSql = strSql & "ORDER BY Pruefpunkte.PruefklasseKZ " + + Set rs = New CRecordset + rs.openRS strSql, True + + Do While Not rs.EOF + cmbFilterMetrolog.AddItem rs.getStringValue("PruefklasseKZ") + rs.MoveNext + Loop + End If +End Sub + +Private Sub AktualisiereComboNennweite() + Dim strText As String + Dim strTemp As String + Dim strFilter As String + Dim rs As CRecordset + + + strText = cmbFilterNennweite.text + cmbFilterNennweite.Clear + cmbFilterNennweite.AddItem TEXTALLE + cmbFilterNennweite.ListIndex = 0 + + strFilter = GetFilterOrt() + +' If cmbAPOrt.Text <> TEXTALLELINIEN Then +' If cmbAPOrt.Text = TEXTALLELINIEN_OHNE_VS Then +' strFilter = strFilter & "Fert_Ort <> 'VS' " +' Else +' strFilter = strFilter & "Fert_Ort ='" & cmbAPOrt.Text & "' " +' End If +' Else +' cmbAPOrt.Text ist ungleich TEXTALLELINIEN +' End If + + If lstFilterTyp.text <> TEXTALLETYPEN Then + strTemp = GetFilterForTyp() + If strTemp <> "" Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & strTemp + End If + End If + + + FillCombo cmbFilterNennweite, "Nennweite", strFilter + If strText <> "" Then + cmbFilterNennweite = strText + End If + + AktualisiereComboTemp + + +End Sub + +Private Sub AktualisiereComboDruck() + Dim strFilter As String + Dim rs As CRecordset + Dim strText As String + Dim strTemp As String + + strText = cmbFilterDruck.text + + cmbFilterDruck.Clear + cmbFilterDruck.AddItem TEXTALLE + cmbFilterDruck.ListIndex = 0 + + strFilter = GetFilterOrt() + +' If cmbAPOrt.Text <> TEXTALLELINIEN Then +' If cmbAPOrt.Text = TEXTALLELINIEN_OHNE_VS Then +' strFilter = strFilter & "Fert_Ort <>'VS' " +' Else +' strFilter = strFilter & "Fert_Ort ='" & cmbAPOrt.Text & "' " +' End If +' Else +' ' alle Linien +' End If + + If lstFilterTyp.text <> TEXTALLETYPEN Then + strTemp = GetFilterForTyp() + If strTemp <> "" Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & strTemp + End If + End If + + + + If cmbFilterNennweite.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Nennweite='" & Val(cmbFilterNennweite.text) & "'" + End If + + If cmbFilterTemp.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Temperatur='" & Val(cmbFilterTemp.text) & "'" + End If + + FillCombo cmbFilterDruck, "Druck", strFilter + + AktualisiereComboBaulaenge + + If strText <> "" Then + cmbFilterDruck.text = strText + End If +End Sub + +Private Sub AktualisiereComboBohrbild() + Dim strSql As String + Dim rs As CRecordset + Dim strText As String + + strText = cmbFilterBohrbild.text + + cmbFilterBohrbild.Clear + cmbFilterBohrbild.AddItem TEXTALLE + cmbFilterBohrbild.ListIndex = 0 + + strSql = "SELECT DISTINCT Bohrung From AuftragPosition ORDER BY Bohrung" + Set rs = New CRecordset + rs.openRS strSql, True + Do While Not rs.EOF + If Len(rs.getStringValue("Bohrung")) > 0 Then + cmbFilterBohrbild.AddItem rs.getStringValue("Bohrung") + End If + rs.MoveNext + Loop + + If strText <> "" Then + cmbFilterBohrbild.text = strText + End If + +End Sub + + +Private Sub AktualisiereComboTemp() + Dim strText As String + Dim strTemp As String + Dim strFilter As String + Dim rs As CRecordset + + strText = cmbFilterTemp.text + cmbFilterTemp.Clear + cmbFilterTemp.AddItem TEXTALLE + cmbFilterTemp.ListIndex = 0 + + strFilter = GetFilterOrt() + +' If cmbAPOrt.Text <> TEXTALLELINIEN Then +' If cmbAPOrt.Text = TEXTALLELINIEN_OHNE_VS Then +' strFilter = strFilter & "Fert_Ort <>'VS' " +' Else +' strFilter = strFilter & "Fert_Ort ='" & cmbAPOrt.Text & "' " +' End If +' Else +' ' alle Linien +' End If + + If lstFilterTyp.text <> TEXTALLETYPEN Then + strTemp = GetFilterForTyp() + If strTemp <> "" Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & strTemp + End If + End If + + + If cmbFilterNennweite.text <> TEXTALLE Then + If strFilter <> "" Then + strFilter = strFilter & " AND " + End If + strFilter = strFilter & " Nennweite='" & Val(cmbFilterNennweite.text) & "'" + End If + + + FillCombo cmbFilterTemp, "Temperatur", strFilter + If strText <> "" Then + cmbFilterTemp.text = strText + End If + + AktualisiereComboDruck +End Sub + +Private Sub txtFilterKunde_GotFocus() + txtFilterKunde.SelStart = 0 + txtFilterKunde.SelLength = Len(txtFilterKunde.text) +End Sub + +Private Sub SaveBemerkung(strText As String, Zeile As Integer) + Dim lngAuftragNr As Long + Dim intPostitionNr As Integer + Dim strSql As String + Dim RecordsAffected As Integer + + + If m_blnIstAlleAuftraege = True Then + lngAuftragNr = Val(Split(MSFlexGrid1.TextMatrix(Zeile, 1), "/")(0)) + intPostitionNr = Val(Split(MSFlexGrid1.TextMatrix(Zeile, 1), "/")(1)) + Else + ' nur ein Bestimmter Aufgtrag + lngAuftragNr = Val(txtFilterAuftrag.text) + intPostitionNr = MSFlexGrid1.TextMatrix(Zeile, 1) + End If + + LogIntoDB "Bem_Fertigung '" & strText & "' gespeichert in " & lngAuftragNr & "/" & intPostitionNr & " von " & g_App.getMitarbeiter.getNr, "SensusAV Listendruck" + + If lngAuftragNr > 0 Then + strSql = "UPDATE AuftragPosition set Bem_Fertigung = '" & Replace(strText, "'", "''") & "' WHERE AuftragNr = " & lngAuftragNr & " AND PositionNr=" & intPostitionNr + Debug.Print strSql + + g_App.getDB.getConnection.Execute strSql, RecordsAffected + + If RecordsAffected = 1 Then + MsgBox "Bemerkung '" & strText & "' gespeichert in AuftragPosition " & lngAuftragNr & "/" & intPostitionNr & " [Bem_Fertigung]." + Else + MsgBox "Bemerkung '" & strText & "' gespeichert in AuftragPosition " & lngAuftragNr & "/" & intPostitionNr & " [Bem_Fertigung] in " & RecordsAffected & " Datensätzen." + LogIntoDB "Bemerkung gespeichert in AuftragPosition." & lngAuftragNr & "/" & intPostitionNr & ". Datensätze:" & RecordsAffected, "Datenfehler" + End If + Else + MsgBox "Fehler in SaveBememerkung. AuftragNr wurde nicht ermittelt." + End If +End Sub + +'Private Sub fillcmbOrt() +' Dim i As Integer +' +' cmbAPOrt.Clear +' +' cmbAPOrt.AddItem TEXTALLELINIEN +' cmbAPOrt.AddItem TEXTALLELINIEN_OHNE_VS +' +' cmbAPOrt.ListIndex = cmbAPOrt.ListCount - 1 +' +' If chkVersuch.Value = vbChecked Then +' cmbAPOrt.AddItem "VS" +' cmbAPOrt.ListIndex = cmbAPOrt.ListCount - 1 +' End If +' +' cmbAPOrt.AddItem "L1" +' cmbAPOrt.AddItem "L2" +' cmbAPOrt.AddItem "L3" +' cmbAPOrt.AddItem "L4" +' cmbAPOrt.AddItem "L5" +' cmbAPOrt.AddItem "L6" +' cmbAPOrt.AddItem "L7" +' +' cmbAPOrt.AddItem "ZY" +' +' For i = 0 To cmbAPOrt.ListCount - 1 +' If cmbAPOrt.List(i) = GetIniWert("Listendruck", "Ort", "") Then +' cmbAPOrt.ListIndex = i +' Exit For +' End If +' Next +'End Sub + +Private Sub fillLstAPOrt() + lstAPOrt.Clear + + lstAPOrt.AddItem TEXTALLELINIEN + + lstAPOrt.AddItem TEXTALLELINIEN_OHNE_VS + If chkVersuch.Value = vbUnchecked Then + lstAPOrt.Selected(lstAPOrt.ListCount - 1) = True + End If + + + lstAPOrt.AddItem "L1" '0 + lstAPOrt.AddItem "L2" '1 + lstAPOrt.AddItem "L3" '2 + lstAPOrt.AddItem "L4" '3 + lstAPOrt.AddItem "L5" '4 + lstAPOrt.AddItem "L6" '5 + lstAPOrt.AddItem "L7" '6 + lstAPOrt.AddItem "ZY" '7 + lstAPOrt.AddItem "EL" + + + lstAPOrt.AddItem "VS" '8 + If chkVersuch.Value = vbChecked Then + lstAPOrt.Selected(lstAPOrt.ListCount - 1) = True + End If + +End Sub + +Private Function GetFilterForTyp() As String +Dim i As Integer +For i = 0 To lstFilterTyp.ListCount - 1 + + If lstFilterTyp.Selected(i) = True Then + + If lstFilterTyp.List(i) = TEXTALLETYPEN Then + GetFilterForTyp = "" + Exit Function + End If + + If GetFilterForTyp = "" Then + GetFilterForTyp = " Identnr.Typ <> '#' AND (" + Else + GetFilterForTyp = GetFilterForTyp & " OR " + End If + + Select Case lstFilterTyp.List(i) + Case TEXTPSEUNDPFL + GetFilterForTyp = GetFilterForTyp & "IdentNr.Typ = 'PSE' or IdentNr.Typ = 'PFL'" + Case Else + GetFilterForTyp = GetFilterForTyp & "IdentNr.Typ = '" & Replace(lstFilterTyp.List(i), "'", "''") & "'" + End Select + End If +Next +If GetFilterForTyp <> "" Then GetFilterForTyp = GetFilterForTyp & ")" + +End Function + + + + +Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) + ' If this is not row 0, do nothing. + If MSFlexGrid1.MouseRow <> 0 Then Exit Sub + + ' Sort by the clicked column. + SortByColumn MSFlexGrid1.MouseCol +End Sub + + +' Sort by the indicated column. +Private Sub SortByColumn(ByVal sort_column As Integer) + Dim blnSortNumeric As Boolean + + ' Hide the FlexGrid. + MSFlexGrid1.Visible = False + MSFlexGrid1.Refresh + + ' Sort using the clicked column. + MSFlexGrid1.col = sort_column + MSFlexGrid1.ColSel = sort_column + MSFlexGrid1.row = 0 + MSFlexGrid1.RowSel = 0 + + Dim strSpalte As String + + strSpalte = MSFlexGrid1.TextMatrix(0, sort_column) + strSpalte = Replace(strSpalte, " ", "") + strSpalte = Replace(strSpalte, ">", "") + strSpalte = Replace(strSpalte, "<", "") + + Select Case strSpalte + Case "FA-Nr.", "Menge", "IdentNr" + blnSortNumeric = True + Case Else + blnSortNumeric = False + End Select + + + + ' If this is a new sort column, sort ascending. + ' Otherwise switch which sort order we use. + If m_SortColumn <> sort_column Then + If blnSortNumeric Then + m_SortOrder = flexSortNumericAscending + Else + m_SortOrder = flexSortStringNoCaseAscending + End If + ElseIf m_SortOrder = flexSortStringNoCaseAscending Or m_SortOrder = flexSortNumericAscending Then + If blnSortNumeric Then + m_SortOrder = flexSortNumericDescending + Else + m_SortOrder = flexSortStringNoCaseDescending + End If + Else + If blnSortNumeric Then + m_SortOrder = flexSortNumericAscending + Else + m_SortOrder = flexSortStringNoCaseAscending + End If + End If + MSFlexGrid1.sOrt = m_SortOrder + + + ' Restore the previous sort column's name. + If m_SortColumn >= 0 Then + MSFlexGrid1.TextMatrix(0, m_SortColumn) = _ + Mid$(MSFlexGrid1.TextMatrix(0, m_SortColumn), 3) + End If + + ' Display the new sort column's name. + m_SortColumn = sort_column + If m_SortOrder = flexSortStringNoCaseAscending Then + MSFlexGrid1.TextMatrix(0, m_SortColumn) = "> " & _ + MSFlexGrid1.TextMatrix(0, m_SortColumn) + Else + MSFlexGrid1.TextMatrix(0, m_SortColumn) = "< " & _ + MSFlexGrid1.TextMatrix(0, m_SortColumn) + End If + + ' Display the FlexGrid. + MSFlexGrid1.Visible = True +End Sub + +' +'' Sort by the indicated column. +'Private Sub SortByColumn(ByVal sort_column As Integer) +' ' Hide the FlexGrid. +' MSFlexGrid1.Visible = False +' MSFlexGrid1.Refresh +' +' ' Sort using the clicked column. +' MSFlexGrid1.col = sort_column +' MSFlexGrid1.ColSel = sort_column +' MSFlexGrid1.row = 0 +' MSFlexGrid1.RowSel = 0 +' +' ' If this is a new sort column, sort ascending. +' ' Otherwise switch which sort order we use. +' If m_SortColumn <> sort_column Then +' m_SortOrder = flexSortGenericAscending +' ElseIf m_SortOrder = flexSortGenericAscending Then +' m_SortOrder = flexSortGenericDescending +' Else +' m_SortOrder = flexSortGenericAscending +' End If +' +' MSFlexGrid1.sOrt = m_SortOrder +' +' ' Restore the previous sort column's name. +' If m_SortColumn >= 0 Then +' MSFlexGrid1.TextMatrix(0, m_SortColumn) = Mid$(MSFlexGrid1.TextMatrix(0, m_SortColumn), 3) +' End If +' +' ' Display the new sort column's name. +' m_SortColumn = sort_column +' If m_SortOrder = flexSortGenericAscending Then +' MSFlexGrid1.TextMatrix(0, m_SortColumn) = "> " & MSFlexGrid1.TextMatrix(0, m_SortColumn) +' Else +' MSFlexGrid1.TextMatrix(0, m_SortColumn) = "< " & MSFlexGrid1.TextMatrix(0, m_SortColumn) +' End If +' +'Debug.Print sort_column; MSFlexGrid1.col; m_SortColumn '@ +' +' ' Display the FlexGrid. +' MSFlexGrid1.Visible = True +'End Sub + +Private Sub PrintSenkrechteLinien(YStart As Double, yEnde As Double) + Dim i As Integer + For i = 1 To UBound(Tabs) + If Tabs(i) > 0 Or i = 0 Then + Printer.Line (Tabs(i) - 0.5, YStart)-(Tabs(i) - 0.5, yEnde), RGB(224, 224, 224) + End If + Next +End Sub + + +Private Sub FinePrintGrid() + Dim strTemp As String + Dim dblX As Double + Dim dblY As Double + Dim Seite As Integer + Dim i As Integer + Dim strAusblenden As String + Dim ZeileAufBlatt As Integer + Dim dblLastFontSize As Double + Dim lngFarbe As Long + Dim strLinie As String + Dim strAlteLinie As String + Dim lngSummeMenge As Long + + Dim dblYstart As Double + Dim dblYende As Double + + lngSummeMenge = Val(lblSumme) + + strAusblenden = m_strAusblenden + + Printer.ColorMode = 2 + Printer.Copies = Val(cmbAnzahlKopien.text) + + Printer.Font = "Arial" + Printer.ScaleMode = vbMillimeters + + Printer.ScaleLeft = -6 ' Rand + Printer.ScaleTop = -1 ' Rand + + '''''''''''''''''Seiten Kopf + Seite = 1 + Printer.currentY = 5 + Printer.Line (0, Int(Printer.currentY))-(Tabs(20), Int(Printer.currentY)) + Printer.currentY = Printer.currentY + 1 + Printer.Line (0, Printer.currentY)-(Tabs(20), Printer.currentY) + + Printer.currentY = Printer.currentY + 1 + Printer.currentX = 5 + Printer.Font.Size = 15 + Printer.Font.Bold = True + + + Printer.FontTransparent = True + dblY = Printer.currentY + Printer.Print GetUeberschrift(strAusblenden) + + Printer.Font.Size = SCHRIFTTABELLE + Printer.Font.Bold = False + + Printer.currentY = dblY + Printer.currentX = 135 + Printer.Print "Ausdruck vom " & Format(Now(), "dd.mm.yyyy hh:mm:ss") + Printer.currentY = Printer.currentY + 15 - SCHRIFTTABELLE + + Printer.currentY = Printer.currentY + 1 + + Printer.currentX = 10 + strTemp = "Auswahl vom: " & Format(DTPickerVon.Value, "dd.mm.yyyy") & " bis: " & Format(DTPickerBis.Value, "dd.mm.yyyy") + + Printer.Print strTemp + + strTemp = "Ort: " & GetFertOrtText() + + If txtFilterKunde.text <> "" Then + strTemp = strTemp & ", Kunde:" & txtFilterKunde.text & " " + End If + + If cmbKurzBez.text <> TEXTALLEKURZBEZ Then + Printer.FontBold = True + If strTemp <> "" Then strTemp = strTemp & ", nur " + strTemp = strTemp & cmbKurzBez.text + End If + + If lstFilterTyp.text <> TEXTALLETYPEN Then + Printer.FontBold = True + If strTemp <> "" Then strTemp = strTemp & ", " + For i = 0 To lstFilterTyp.ListCount - 1 + If lstFilterTyp.Selected(i) = True Then + strTemp = strTemp & lstFilterTyp.List(i) & ", " + End If + Next + End If + + + If cmbFilterNennweite.text <> TEXTALLE Then + Printer.FontBold = True + strTemp = strTemp & " DN " & cmbFilterNennweite.text + End If + + If cmbFilterTemp.text <> TEXTALLE Then + Printer.FontBold = True + strTemp = strTemp & " " & cmbFilterTemp.text & "°C " + End If + + If cmbFilterDruck.text <> TEXTALLE Then + Printer.FontBold = True + strTemp = strTemp & " PN " & cmbFilterDruck.text & " " + End If + + If cmbFilterBaulaenge.text <> TEXTALLE Then + Printer.FontBold = True + strTemp = strTemp & " L" & cmbFilterBaulaenge.text & " " + End If + + If cmbFilterMetrolog.text <> TEXTALLE Then + Printer.FontBold = True + strTemp = strTemp & ", Metrolog:" & cmbFilterMetrolog.text & " " + End If + + If chkNurCKD.Value = vbChecked Then + strTemp = strTemp & ", nur CKD " + End If + + If ChkOhnePlus.Value = vbChecked Then + strTemp = strTemp & ", kein PLUS " + End If + + If chkPlus.Value = vbChecked Then + strTemp = strTemp & ", nur PLUS " + End If + + If chkNoMoskauBadger.Value = vbChecked Then + strTemp = strTemp & ", ohne Moskau/Badger " + End If + + + If strAusblenden = "P" Then + strTemp = strTemp & ", keine FK u. FE " + End If + + If strAusblenden = "R" Then + strTemp = strTemp & ", nur PFL u. PSE " + End If + + + Printer.currentX = 10 + Printer.Print strTemp + Printer.FontBold = False + + Printer.currentY = Printer.currentY + 3 + + Printer.Line (0, Printer.currentY)-(Tabs(20), Printer.currentY) + Printer.currentY = Printer.currentY + 1 + Printer.Line (0, Printer.currentY)-(Tabs(20), Printer.currentY) + + Dim Zeile As Integer + + ''''''''''''' Tabellenkopf + Printer.currentY = Printer.currentY + 3 + Call Tabellenkopf + + ' Obere Kante der Tabelle merken + dblY = Printer.currentY + 8 + dblYstart = dblY - 12 + ZeileAufBlatt = 0 + + Printer.currentY = dblY - 8 + + + For Zeile = 1 To mlngRecordsFound + ZeileAufBlatt = ZeileAufBlatt + 1 + + If Printer.currentY > 270 Then + ' Zeile passt nicht mehr aufs Blatt + PrintSenkrechteLinien dblYstart, Printer.currentY + + ZeileAufBlatt = 1 + Call SeitenFuss(strAusblenden, Seite) + + Printer.NewPage + Printer.Font.Size = SCHRIFTTABELLE + + Seite = Seite + 1 + StatusBar1.SimpleText = "Drucke Seite " & Seite + DoEvents + + Printer.currentY = 5 + Call Tabellenkopf + ' Obere Kante der Tabelle + dblY = Printer.currentY + 8 + dblYstart = dblY - 12 + End If + + Printer.currentY = dblY + + For i = 0 To MSFlexGrid1.cols - 1 + Printer.currentY = dblY + (ZeileAufBlatt - 2) * 5 + + If MSFlexGrid1.Rows <= Zeile Then + MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 + End If + MSFlexGrid1.row = Zeile + MSFlexGrid1.col = i + strTemp = Trim(MSFlexGrid1.text) + Printer.Font.Size = 8 + Printer.Font.Bold = False + Select Case i + Case 0 + 'Versanddatum + Printer.Font.Bold = True + If strTemp <> "" Then + strTemp = Format(CDate(strTemp), "dd.mm") + End If + Case 1 + ' AuftragNr/Pos + Printer.Font.Bold = True + Case 2 + 'Kunden Ort + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Case 3 + 'IdentNr + If Len(strTemp) > 7 Then + Printer.fontSize = 6 + End If + Printer.Font.Bold = True + Case 4 + 'Menge + Printer.Font.Bold = True + Case 5 + ' Bezeichnung + + 'Printer.Font.Size = 6 + 'strTemp = Textformat(strTemp, i) + Printer.Font.Size = getFontSizeFromText(Printer, Tabs(i), Tabs(i + 1), strTemp & "*", 7) + + + Case 6 + ' Bohrung + strTemp = Textformat(strTemp, i) + Printer.Font.Size = 6 + Case 7 + Printer.Font.Size = 5 + Case 8, 9, 10, 11, 12, 13, 14, 15 ' QLAVEMPRD + Printer.Font.Size = 6 + Printer.Font.Bold = True + Case 16 ' Anzeige + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Case 17 ' Bemerkung + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Case 18 + 'ort + Case 19 + ' FA Nr + Printer.Font.Size = 8 + End Select + + If chkVersuch.Value = vbChecked Then + Select Case i + Case 6, 7 + ' SerienNrVon + Printer.Font.Size = 8 + Printer.Font.Bold = True + Case 8 ' Anzeige + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Case 9 ' Bemerkung + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Case 10 + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Printer.currentY = Printer.currentY + 1 + End Select + End If + + Printer.currentX = Tabs(i) + + Select Case i + Case 1, 3 + ' rechtsbündig + Printer.currentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 1 + Case 0, 4 + ' rechtsbündig + Printer.currentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 2 + End Select + + Select Case i + Case 17 + ' Bemerkung + Printer.currentY = Printer.currentY - 2 + Printer.currentX = Tabs(i) + Printer.Print Left(strTemp, 10) + Printer.currentX = Tabs(i) + Printer.Print Mid(strTemp, 11) + Printer.currentY = Printer.currentY + 1 + Case Else + Printer.Print strTemp + End Select + + dblLastFontSize = Printer.Font.Size + Printer.Font.Size = 8 + Next + + ' da letzte Spalte eine kleinere Schriftgroesse haben könnte + 'Printer.CurrentY = Printer.CurrentY + 2 + Printer.DrawWidth = 3 + + If Zeile < mlngRecordsFound Then + If strAusblenden <> "VF" Then + Printer.DrawStyle = vbDashDot + lngFarbe = RGB(224, 224, 224) + Else + If MSFlexGrid1.cols > 14 Then + ' es gibt Spalte Linie + strLinie = MSFlexGrid1.TextMatrix(Zeile + 1, 14) + If Zeile > 1 Then + strAlteLinie = MSFlexGrid1.TextMatrix(Zeile, 14) + Else + strAlteLinie = strLinie + End If + + If strAlteLinie <> strLinie Then + Printer.DrawStyle = vbSolid + lngFarbe = RGB(0, 0, 0) + Else + Printer.DrawStyle = vbDashDot + lngFarbe = RGB(224, 224, 224) + End If + Else + Printer.DrawStyle = vbDashDot + lngFarbe = RGB(224, 224, 224) + End If + End If + Printer.Line (0, Printer.currentY)-(Tabs(20), Printer.currentY), lngFarbe + Else + Printer.DrawStyle = vbSolid + Printer.Line (0, Printer.currentY)-(Tabs(20), Printer.currentY) + Printer.currentY = Printer.currentY + 2 + + Dim dblTempHoehe As Double + dblTempHoehe = Printer.currentY + + Printer.Font.Bold = True + strTemp = "Summe: " & lngSummeMenge + Printer.currentX = Tabs(4 + 1) - Printer.TextWidth(strTemp) - 2 + Printer.Print strTemp + + Printer.currentY = dblTempHoehe + strTemp = "davon geprüft: " & lblGeprueft.Caption + Printer.currentX = Tabs(5 + 1) - Printer.TextWidth(strTemp) - 2 + Printer.Print strTemp + + dblTempHoehe = Printer.currentY + + 'Printer.CurrentY = dblTempHoehe + strTemp = "nicht zu prüfende ME, FE, FK: " & Val(lblNichtZuPruefende) + Printer.currentX = Tabs(4 + 1) - Printer.TextWidth(strTemp) - 2 + Printer.Print strTemp + + Printer.currentY = dblTempHoehe + + strTemp = "noch zu prüfen: " & lngSummeMenge - Val(lblGeprueft.Caption) - Val(lblNichtZuPruefende) + Printer.currentX = Tabs(5 + 1) - Printer.TextWidth(strTemp) - 2 + Printer.Print strTemp + + End If + + + DoEvents + If m_blnAbbruch Then + Call Abbruch + Exit Sub + End If + Next + + PrintSenkrechteLinien dblYstart, Printer.currentY + + Printer.currentY = Printer.currentY + 3 + If Printer.currentY < 278 Then + Printer.Line (0, Printer.currentY)-(Tabs(20), Printer.currentY) + Printer.Line (0, Printer.currentY + 1)-(Tabs(20), Printer.currentY + 1) + End If + + + + SeitenFuss strAusblenden, Seite, " von " & Seite & " Seiten" + If m_blnAbbruch Then + Call Abbruch + Exit Sub + End If + + + Printer.EndDoc +End Sub + +Private Sub FinePrintAuftragsInfo() + Dim rs As CRecordset + Dim strTemp As String + Dim ZeileAufBlatt As Integer + Dim dblY As Double + Dim Seite As Integer + + Dim i As Integer + Dim lngSummeMenge As Long + Dim dblLastFontSize As Double + + Set rs = m_rs + + If mlngRecordsFound = 0 Then Exit Sub + + Printer.ColorMode = 2 + Printer.Copies = Val(cmbAnzahlKopien.text) + + Printer.Font = "Arial" + Printer.ScaleMode = vbMillimeters + + Printer.ScaleLeft = -4 ' Rand + Printer.ScaleTop = -1 ' Rand + + '''''''''''''''''Seiten Kopf + Seite = 1 + Printer.currentY = 5 + Printer.Line (0, Int(Printer.currentY))-(TabsAuftr(20), Int(Printer.currentY)) + Printer.currentY = Printer.currentY + 1 + Printer.Line (0, Printer.currentY)-(TabsAuftr(20), Printer.currentY) + + Printer.currentY = Printer.currentY + 1 + Printer.currentX = 5 + Printer.Font.Size = 15 + Printer.Font.Bold = True + + + Printer.FontTransparent = True + dblY = Printer.currentY + Printer.Print "Informationen zu Auftrag " & Val(txtFilterAuftrag.text) + Printer.Font.Size = SCHRIFTTABELLE + Printer.Font.Bold = False + + m_rs.MoveFirst + Printer.currentX = 5 + Printer.Print "Kunde " & m_rs.getStringValue("KundenName") & "," & m_rs.getStringValue("KundenOrt") & ", KndNr: " & m_rs.getLongValue("KundenNr") + + Printer.currentY = dblY + Printer.currentX = 147 + Printer.Print "Ausdruck vom " & Format(Now(), "dd.mm.yyyy hh:mm:ss") + + Printer.currentY = Printer.currentY + 15 - SCHRIFTTABELLE + Printer.currentY = Printer.currentY + 1 + + Printer.currentX = 5 + strTemp = "Auswahl vom: " & Format(DTPickerVon.Value, "dd.mm.yyyy") & " bis: " & Format(DTPickerBis.Value, "dd.mm.yyyy") + Printer.Print strTemp + + Printer.currentY = Printer.currentY + 3 + + Printer.Line (0, Printer.currentY)-(TabsAuftr(20), Printer.currentY) + Printer.currentY = Printer.currentY + 1 + Printer.Line (0, Printer.currentY)-(TabsAuftr(20), Printer.currentY) + + Dim Zeile As Integer + + ''''''''''''' Tabellenkopf + Printer.currentY = Printer.currentY + 3 + Call TabellenkopfAlleAuftr + Printer.Line (0, Printer.currentY)-(TabsAuftr(20), Printer.currentY) + + ' Obere Kante der Tabelle merken + dblY = Printer.currentY + 8 + ZeileAufBlatt = 0 + + ' Spalten Linien +' For i = 0 To 13 +' Printer.Line (TabsAuftr(i), dblY)-(TabsAuftr(i), 270) +' Next + + Printer.currentY = dblY - 8 + + + For Zeile = 1 To mlngRecordsFound + ZeileAufBlatt = ZeileAufBlatt + 1 + + If Printer.currentY > 270 Then + ' Zeile passt nicht mehr aufs Blatt + + ZeileAufBlatt = 1 + Call SeitenFussAlleAuftr(Seite) + + Printer.NewPage + Printer.Font.Size = SCHRIFTTABELLE + + Seite = Seite + 1 + StatusBar1.SimpleText = "Drucke Seite " & Seite + DoEvents + + Printer.currentY = 5 + Call TabellenkopfAlleAuftr + ' Obere Kante der Tabelle + dblY = Printer.currentY + 8 + End If + + Printer.currentY = dblY + + For i = 0 To MSFlexGrid1.cols - 1 + Printer.currentY = dblY + (ZeileAufBlatt - 2) * 5 + MSFlexGrid1.row = Zeile + MSFlexGrid1.col = i + strTemp = Trim(MSFlexGrid1.text) + Printer.Font.Size = 8 + Printer.Font.Bold = False + Select Case i + Case 0 + 'Versanddatum + Printer.Font.Bold = True + strTemp = Format(CDate(strTemp), "dd.mm") + Case 1 + ' Auftrag/Pos + Printer.Font.Bold = True + Case 2 + 'IdentNr + Printer.Font.Bold = True + Case 3 + 'Menge + Printer.Font.Bold = True + Case 4 + ' Bezeichnung + Printer.Font.Size = 6 + strTemp = TextformatAuftragInfo(strTemp, i) + Case 5 + ' Bohrung + strTemp = TextformatAuftragInfo(strTemp, i) + Printer.Font.Size = 6 + Case 6 + ' MID + strTemp = TextformatAuftragInfo(strTemp, i) + Printer.Font.Size = 6 + Case 7, 8, 9, 10, 11, 12, 13, 14 'L A V E M P R D + Printer.Font.Size = 6 + Printer.Font.Bold = True + Case 15 ' Anzeige + Printer.Font.Size = 6 + strTemp = TextformatAuftragInfo(strTemp, i) + Case 15 ' Bemerkung + Printer.Font.Size = 6 + strTemp = TextformatAuftragInfo(strTemp, i) + Case 16 ' Status + strTemp = TextformatAuftragInfo(strTemp, i) + If strTemp = "offen" Then + Printer.Font.Size = 8 + Printer.Font.Bold = True + Else + Printer.Font.Size = 6 + Printer.Font.Bold = False + End If + End Select + + Printer.currentX = TabsAuftr(i) + + Select Case i + Case 0, 1, 2, 3 + ' rechtsbündig + ' versanddatum,Position, IdentNr, Menge + Printer.currentX = TabsAuftr(i + 1) - Printer.TextWidth(strTemp) - 2 + End Select + + Select Case i + Case 15 + ' Bemerkung + Printer.currentY = Printer.currentY - 0.5 + Printer.currentX = TabsAuftr(i) + Printer.Print Left(strTemp, 10) + Printer.currentX = TabsAuftr(i) + Printer.Print Mid(strTemp, 11) + Printer.currentY = Printer.currentY + 0.5 + Case Else + Printer.Print strTemp + End Select + + dblLastFontSize = Printer.Font.Size + Printer.Font.Size = 8 + + Debug.Print i & " " & strTemp + + Next + + ' da letzte Spalte eine kleinere Schriftgroesse haben könnte + Printer.currentY = Printer.currentY + 1 + + Printer.DrawWidth = 3 + + If Zeile < mlngRecordsFound Then + Printer.DrawStyle = vbDashDot + Printer.Line (0, Printer.currentY)-(TabsAuftr(20), Printer.currentY), RGB(224, 224, 224) + Else + Printer.DrawStyle = vbSolid + Printer.Line (0, Printer.currentY)-(TabsAuftr(20), Printer.currentY) + Printer.currentY = Printer.currentY + 2 + Printer.Font.Bold = True + dblY = Printer.currentY + strTemp = "Summe " & lblSumme.Caption + Printer.currentX = TabsAuftr(3 + 1) - Printer.TextWidth(strTemp) - 1 + Printer.Print strTemp + + Printer.currentY = dblY + strTemp = "offen: " & Val(labelOffenWert.Caption) & ", gefertigt: " & Val(labelGefertigtMenge.Caption) + Printer.currentX = TabsAuftr(5) + Printer.Print strTemp + End If + + + DoEvents + If m_blnAbbruch Then + Call Abbruch + Exit Sub + End If + Next + + Printer.currentY = Printer.currentY + 3 + If Printer.currentY < 278 Then + Printer.Line (0, Printer.currentY)-(TabsAuftr(20), Printer.currentY) + Printer.Line (0, Printer.currentY + 1)-(TabsAuftr(20), Printer.currentY + 1) + End If + + SeitenFussAlleAuftr Seite, " von " & Seite & " Seiten" + If m_blnAbbruch Then + Call Abbruch + cmdAbbruch.Enabled = False + Exit Sub + End If + + Printer.EndDoc + +End Sub + +Private Sub FinePrintVersuch() + Dim strTemp As String + Dim ZeileAufBlatt As Integer + Dim dblY As Double + + Dim Seite As Integer + Dim i As Integer + Dim lngSummeMenge As Long + Dim dblLastFontSize As Double + + Dim strAlteLinie As String + Dim strLinie As String + Dim lngFarbe As Long + + lngSummeMenge = Val(lblSumme) + + Printer.ColorMode = 2 + Printer.Copies = Val(cmbAnzahlKopien.text) + + Printer.Font = "Arial" + Printer.ScaleMode = vbMillimeters + + Printer.ScaleLeft = -8 ' Rand + Printer.ScaleTop = -1 ' Rand + + '''''''''''''''''Seiten Kopf + Seite = 1 + Printer.currentY = 5 + Printer.Line (0, Int(Printer.currentY))-(Tabs(19), Int(Printer.currentY)) + Printer.currentY = Printer.currentY + 1 + Printer.Line (0, Printer.currentY)-(Tabs(19), Printer.currentY) + + Printer.currentY = Printer.currentY + 1 + Printer.currentX = 5 + Printer.Font.Size = 15 + Printer.Font.Bold = True + + + Printer.FontTransparent = True + dblY = Printer.currentY + Printer.Print GetUeberschrift(m_strAusblenden) + + Printer.Font.Size = SCHRIFTTABELLE + Printer.Font.Bold = False + + Printer.currentY = dblY + Printer.currentX = 130 + Printer.Print "Ausdruck vom " & Format(Now(), "dd.mm.yyyy hh:mm:ss") + Printer.currentY = Printer.currentY + 15 - SCHRIFTTABELLE + + Printer.currentY = Printer.currentY + 1 + + Printer.currentX = 10 + strTemp = "Auswahl vom: " & Format(DTPickerVon.Value, "dd.mm.yyyy") & " bis: " & Format(DTPickerBis.Value, "dd.mm.yyyy") + + + Printer.Print strTemp + + + strTemp = "Ort: " & GetFertOrtText() + + If txtFilterKunde.text <> "" Then + strTemp = strTemp & ", Kunden-Nr: " & txtFilterKunde.text + End If + + If cmbKurzBez.text <> TEXTALLEKURZBEZ Then + If strTemp <> "" Then strTemp = strTemp & ", nur " + strTemp = strTemp & cmbKurzBez.text + End If + + If lstFilterTyp.text <> TEXTALLETYPEN Then + For i = 0 To lstFilterTyp.ListCount - 1 + If strTemp <> "" Then strTemp = strTemp & ", " + If lstFilterTyp.Selected(i) = True Then + strTemp = strTemp & lstFilterTyp.List(i) + End If + Next + End If + + If cmbFilterNennweite.text <> TEXTALLE Then + strTemp = strTemp & " DN " & cmbFilterNennweite + End If + + If cmbFilterTemp.text <> TEXTALLE Then + strTemp = strTemp & " " & cmbFilterTemp & "°C " + End If + + If cmbFilterDruck.text <> TEXTALLE Then + strTemp = strTemp & " PN " & cmbFilterDruck & " " + End If + + If m_strAusblenden = "P" Then + strTemp = strTemp & ", keine FK u. FE " + End If + + If m_strAusblenden = "R" Then + strTemp = strTemp & ", nur PFL u. PSE " + End If + + Printer.currentX = 10 + Printer.Print strTemp + + + Printer.currentY = Printer.currentY + 3 + + Printer.Line (0, Printer.currentY)-(Tabs(16), Printer.currentY) + Printer.currentY = Printer.currentY + 1 + Printer.Line (0, Printer.currentY)-(Tabs(16), Printer.currentY) + + Dim Zeile As Integer + + + + + ''''''''''''' Tabellenkopf + Printer.currentY = Printer.currentY + 3 + + ''''''''''''''''''''''''''' + + Tabellenkopf + GoTo ueberspringen + + dblY = Printer.currentY + + Printer.Font.Bold = True + + For i = 0 To MSFlexGrid1.cols - 1 + MSFlexGrid1.row = 0 + MSFlexGrid1.col = i + Printer.currentY = dblY + Printer.currentX = Tabs(i) + + Select Case i + Case 0 + strTemp = "Fert." + Case 1 + strTemp = "AuftragNr/Pos" + Case 12 + strTemp = "Anz." + Case 16 + strTemp = "" + Case Else + strTemp = MSFlexGrid1.text + + End Select + + Select Case i + Case 1, 2, 3, 5, 6 + Printer.currentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 1 + End Select + + + Printer.Print strTemp + Next + +ueberspringen: + Printer.Line (0, Printer.currentY)-(Tabs(16), Printer.currentY) + +'''''''''''''''''''''''''''# + ' Obere Kante der Tabelle merken + dblY = Printer.currentY + 8 + ZeileAufBlatt = 0 + + ' Spalten Linien + 'For i = 0 To 13 + ' Printer.Line (Tabs(i), dblY)-(Tabs(i), 270) + 'Next + + Printer.currentY = dblY - 8 + + For Zeile = 1 To mlngRecordsFound + ZeileAufBlatt = ZeileAufBlatt + 1 + If Printer.currentY > 270 Then + ' Zeile passt nicht mehr aufs Blatt + + ZeileAufBlatt = 1 + Call SeitenFuss(m_strAusblenden, Seite) + + Printer.NewPage + Printer.Font.Size = SCHRIFTTABELLE + + Seite = Seite + 1 + StatusBar1.SimpleText = "Drucke Seite " & Seite + DoEvents + + Printer.currentY = 5 + Call Tabellenkopf + ' Obere Kante der Tabelle + dblY = Printer.currentY + 8 + End If + + Printer.currentY = dblY + + For i = 0 To MSFlexGrid1.cols - 1 + + Printer.currentY = dblY + (ZeileAufBlatt - 2) * 5 + MSFlexGrid1.row = Zeile + MSFlexGrid1.col = i + strTemp = Trim(MSFlexGrid1.text) + Printer.Font.Name = "Arial" + Printer.Font.Size = 8 + Printer.Font.Bold = False + Select Case i + Case 0 + 'Versanddatum + strTemp = Format(CDate(strTemp), "dd.mm") + Case 1 + ' AuftragNr/Pos + Case 2 + 'IdentNr + Case 3 + 'Menge + Case 4 + ' Bezeichnung + Printer.Font.Size = 5 + strTemp = Textformat(strTemp, i) + Case 5, 6 ' SerienNr Von Bis + ' Printer.Font.Size = 8 + Case 7 ' Anzeige + If chkSonderlayoutFertigung.Value = vbUnchecked Then + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Else + 'SerienNr Von Bis + Printer.Font.Name = "Courier New" + End If + Case 8 ' Bemerkung oder Kundeneigene SerienNr + If chkSonderlayoutFertigung.Value = vbUnchecked Then + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Else + Printer.Font.Size = 7 + End If + Case 9 + If chkSonderlayoutFertigung.Value = vbUnchecked Then + ' ZusatzText + Printer.Font.Size = 6 + strTemp = Textformat(strTemp, i) + Printer.currentY = Printer.currentY + 1 + Else + Printer.Font.Size = 8 + End If + End Select + + Printer.currentX = Tabs(i) + + Select Case i + Case 0, 1, 2, 3, 5, 6 + ' rechtsbündig + Printer.currentX = Tabs(i + 1) - Printer.TextWidth(strTemp) - 2 + Case 7 + Debug.Print + End Select + + If chkSonderlayoutFertigung.Value = vbUnchecked Then + ' Drucken + Select Case i + Case 8 + ' Bemerkung + Printer.currentY = Printer.currentY - 1 + Printer.currentX = Tabs(i) + Printer.Print Left(strTemp, 10) + Printer.currentX = Tabs(i) + Printer.Print Mid(strTemp, 11) + Case 9 + ' Bemerkung + Printer.currentY = Printer.currentY - 2 + Printer.currentX = Tabs(i) + Printer.Print Left(strTemp, 10) + Printer.currentX = Tabs(i) + Printer.Print Mid(strTemp, 11) + Case Else + Printer.Print strTemp + End Select + Else + Debug.Print strTemp + Printer.Print strTemp + End If + + dblLastFontSize = Printer.Font.Size + Printer.Font.Size = 8 + Next + + ' da letzte Spalte eine kleinere Schriftgroesse haben könnte + 'Printer.CurrentY = Printer.CurrentY + 2 + Printer.DrawWidth = 3 + + If Zeile < mlngRecordsFound Then + If m_strAusblenden <> "VF" Then + Printer.DrawStyle = vbDashDot + lngFarbe = RGB(224, 224, 224) + Else + If MSFlexGrid1.cols > 15 Then + ' es gibt Spalte Linie + strLinie = MSFlexGrid1.TextMatrix(Zeile + 1, 14) + If Zeile > 1 Then + strAlteLinie = MSFlexGrid1.TextMatrix(Zeile, 14) + Else + strAlteLinie = strLinie + End If + + If strAlteLinie <> strLinie Then + Printer.DrawStyle = vbSolid + lngFarbe = RGB(0, 0, 0) + Else + Printer.DrawStyle = vbDashDot + lngFarbe = RGB(224, 224, 224) + End If + Else + Printer.DrawStyle = vbDashDot + lngFarbe = RGB(224, 224, 224) + End If + End If + Printer.Line (0, Printer.currentY)-(Tabs(16), Printer.currentY), lngFarbe + Else + ' letzte Seite + Printer.DrawStyle = vbSolid + Printer.Line (0, Printer.currentY)-(Tabs(16), Printer.currentY) + + Printer.currentY = Printer.currentY + 2 + Printer.Font.Bold = True + strTemp = "Summe " & lngSummeMenge + Printer.currentX = Tabs(3 + 1) - Printer.TextWidth(strTemp) - 2 + Printer.Print strTemp + End If + + + DoEvents + If m_blnAbbruch Then + Call Abbruch + Exit Sub + End If + Next + + Printer.currentY = Printer.currentY + 3 + If Printer.currentY < 278 Then + Printer.Line (0, Printer.currentY)-(Tabs(16), Printer.currentY) + Printer.Line (0, Printer.currentY + 1)-(Tabs(16), Printer.currentY + 1) + End If + + SeitenFuss m_strAusblenden, Seite, " von " & Seite & " Seiten" + If m_blnAbbruch Then + cmdAbbruch.Enabled = False + Call Abbruch + Exit Sub + End If + + Printer.EndDoc +End Sub + +Private Function getFontSizeFromText(printerobj As Printer, dblXlinks As Integer, dblXRechts As Integer, strText As String, Optional StartFontsize As Double = 8) As Double + getFontSizeFromText = StartFontsize + + printerobj.Font.Size = getFontSizeFromText + + Do While dblXRechts - dblXlinks < Printer.TextWidth(strText) + printerobj.Font.Size = getFontSizeFromText + getFontSizeFromText = getFontSizeFromText * 0.99 + Loop + +End Function + + +Private Function GetBaulaengeFromAuftragposition(AuftragNr As Long, PositionNr As Long, lngBestellgruppe As Long) As String + On Error GoTo Errorhandler + + Dim strBestellcode As String + Dim strBestellgruppe As String + Dim IdentNr As Long + Dim Bestellcode As CBestellcode + Dim strSql As String + + If AuftragNr = 0 Then Exit Function + If PositionNr = 0 Then Exit Function + If lngBestellgruppe = 0 Then Exit Function + + + strSql = "SELECT Bestellcode from Auftragposition where AuftragNr = " & AuftragNr & " and PositionNr = " & PositionNr + Dim rs As CRecordset + Set rs = New CRecordset + rs.openRS strSql, True + + If Not rs.EOF Then + strBestellcode = Trim(rs.getStringValue("Bestellcode") & "") + + Set Bestellcode = New CBestellcode + Bestellcode.Load strBestellcode, lngBestellgruppe + GetBaulaengeFromAuftragposition = Bestellcode.GetWert("Baulaenge") + Debug.Print AuftragNr & "/" & PositionNr & ", Baulänge=" & GetBaulaengeFromAuftragposition + End If +Exit Function + +Errorhandler: + LogIntoDB "Fehler " & Err.Number & " in GetBaulaengeFromAuftragposition: " & Err.Description, "SoftwareFehler" +End Function + +Private Function GetFilterOrt(Optional strFeldname As String = "Fert_Ort") As String + Dim i As Integer + Dim strOr As String + + For i = 0 To lstAPOrt.ListCount - 1 + If lstAPOrt.Selected(i) = True Then + If GetFilterOrt = "" Then + GetFilterOrt = " (" + End If + Select Case lstAPOrt.List(i) + Case TEXTALLELINIEN + ' trifft auf alle zu + GetFilterOrt = GetFilterOrt & strOr & " " & strFeldname & " <> 'XY' " + strOr = " OR " + Case TEXTALLELINIEN_OHNE_VS + GetFilterOrt = GetFilterOrt & strOr & " " & strFeldname & " <> 'VS' " + strOr = " OR " + Case Else + GetFilterOrt = GetFilterOrt & strOr & " " & strFeldname & " = '" & lstAPOrt.List(i) & "' " + strOr = " OR " + End Select + End If + Next + If GetFilterOrt <> "" Then + GetFilterOrt = GetFilterOrt & ") " + End If +End Function + +Private Function AnzahlDruckGepruefterZaehler(AuftragNr As Long, PositionNr As Long) As Long + On Error Resume Next + Dim strSql As String + Dim rs As CRecordset + + strSql = "SELECT distinct Druckpruefung.SerienNr, Druckpruefung.FabNr from Druckpruefung " + strSql = strSql & " where Druckpruefung.AuftragNr = " & AuftragNr & " AND Druckpruefung.PositionNr = " & PositionNr & " AND Enddruck > 0 and Pruefzeit > 0 " + + '''strSQL = "SELECT distinct SerienNr, FabNr, LaufendeNr, AuftragNr, PositionNr from Druckpruefung where AuftragNr = " & AuftragNr & " AND PositionNr = " & PositionNr & " AND Enddruck > 0 and Pruefzeit > 0 " + Debug.Print strSql + + Set rs = New CRecordset + 'rs.getRs.CursorType = adOpenStatic + rs.openRS strSql, True + + AnzahlDruckGepruefterZaehler = rs.RecordCount + + Set rs = Nothing +End Function + + +Private Function GetBemerkungText(ByRef rs As CRecordset, ByRef lngSummeGeprueft As Long) As String + Dim lngGeprueft As Long + Dim strTemp As String + + +' Aus AuftragInfoAnzeigen: +' If Not rs.isFieldNull("P_IstTermin") Then +' MSFlexGrid1.Text = "P:" & Format(rs.getDateValue("P_IstTermin"), "dd.m") +' Else +' If Not rs.isFieldNull("R_IstTermin") Then +' MSFlexGrid1.Text = "R:" & Format(rs.getDateValue("R_IstTermin"), "dd.mm") +' End If +' End If +' +' MSFlexGrid1.Text = Trim(MSFlexGrid1.Text & " " & rs.getStringValue("Bem_Fertigung")) +' +' ' neu RH 12.06.2007 Für Ort ZY soll die Farbe angezeigt werden, da die Temperatur = NULL ist +' If rs.getStringValue("Ort") = "ZY" And rs.getStringValue("Farbe") <> "" Then +' If MSFlexGrid1.Text <> "" Then MSFlexGrid1.Text = MSFlexGrid1.Text & "," +' MSFlexGrid1.Text = MSFlexGrid1.Text & rs.getStringValue("Farbe") +' End If + + + + GetBemerkungText = Trim(rs.getStringValue("Bem_Fertigung")) + + If chkVersuch.Value = vbChecked Then +' MSFlexGrid1.col = MSFlexGrid1.col + 1 ' 10 + GetBemerkungText = AddToTextIfNotExists(GetBemerkungText, Trim(Replace(rs.getStringValue("ZusatzText"), vbCrLf, " "))) + End If + + + If Not rs.isFieldNull("R_IstTermin") Then 'And rs.isFieldNull("P_IstTermin") Then + GetBemerkungText = AddToTextIfNotExists(GetBemerkungText, "R:" & Format(rs.getDateValue("R_IstTermin"), "dd.mm")) + End If + + lngGeprueft = 0 + If rs.getLongValue("TLMenge_P") > 0 Then + ' TL_Menge_P ist gesetzt (neu) + lngGeprueft = rs.getLongValue("TLMenge_P") - rs.getLongValue("TLMenge") + If rs.getLongValue("TLMenge_P") < rs.getLongValue("Menge") Then + ' noch nicht vollständig an der Prüfstation geprüft, also geprüfte Teilmenge anzeigen + strTemp = "P=" & rs.getLongValue("TLMenge_P") + GetBemerkungText = AddToTextIfNotExists(GetBemerkungText, strTemp) + Else + ' schon vollständig geprüft + If Not rs.isFieldNull("P_IstTermin") Then + ' Komplett an der Prüfstation fertiggemeldet, also Datum anziegen + strTemp = "P:" & Format(rs.getDateValue("P_IstTermin"), "dd.m") + GetBemerkungText = AddToTextIfNotExists(GetBemerkungText, strTemp) + End If + End If + Else + ' hier ist rs.getLongValue("TLMenge_P") = 0 + ' TL_Menge_P ist noch nicht gesetzt (alt) + If Not rs.isFieldNull("P_IstTermin") Then + ' Komplett an der Prüfstation fertiggemeldet, hier kann nur die komplette Menge als geprüft erfasst werden + strTemp = "P:" & Format(rs.getDateValue("P_IstTermin"), "dd.m") + GetBemerkungText = AddToTextIfNotExists(GetBemerkungText, strTemp) + lngGeprueft = rs.getLongValue("Menge") - rs.getLongValue("TLMenge") + End If + End If + ' Summe der gerüften Zähler + + lngSummeGeprueft = lngSummeGeprueft + lngGeprueft + If lngGeprueft > rs.getLongValue("Menge") Then + LogIntoDB "fertigungslisten Anzeigen(): TLMenge_P > Menge !", "Datenfehler" + End If + + ' neu RH 12.06.2007 Für Ort ZY soll die Farbe angezeigt werden, da die Temperatur = NULL ist + If rs.getStringValue("Ort") = "ZY" And rs.getStringValue("Farbe") <> "" Then + If GetBemerkungText <> "" Then GetBemerkungText = GetBemerkungText & "," + GetBemerkungText = AddToTextIfNotExists(GetBemerkungText, rs.getStringValue("Farbe")) + End If + +End Function + + +Private Function getKundeneigeneSerienNr(lngAuftragNr As Long, lngPositionNr As Long, ByRef strKundeneigeneSerienNrVon As String, ByRef strKundeneigeneSerienNrBis As String) + Dim strSql As String + Dim rs As CRecordset + + strSql = "SELECT top 1 KundeneigeneSerienNr from AuftragPositionSerienNr where AuftragNr = " & lngAuftragNr & " and PositionNr = " & lngPositionNr & " order by SerienNr" + Set rs = New CRecordset + rs.openRS strSql, True + + If Not rs.EOF Then + strKundeneigeneSerienNrVon = rs.getStringValue("KundeneigeneSerienNr") + End If + + strSql = "SELECT top 1 KundeneigeneSerienNr from AuftragPositionSerienNr where AuftragNr = " & lngAuftragNr & " and PositionNr = " & lngPositionNr & " order by SerienNr desc" + Set rs = New CRecordset + rs.openRS strSql, True + If Not rs.EOF Then + strKundeneigeneSerienNrBis = rs.getStringValue("KundeneigeneSerienNr") + End If +End Function + + +Private Sub ExcelExport() + Const ERSTE_ZEILE = 2 + + Dim Zeile As Integer + Dim Spalte As Integer + Dim strText As String + + Dim myRange As range + Dim AnzalZeilen As Long + + Set mobjExcelApp = CreateObject("Excel.Application") + mobjExcelApp.Visible = True + Set mobjExcelWbk = mobjExcelApp.Workbooks.Add + mobjExcelWbk.Activate + Set mobjExelworksheet = mobjExcelWbk.ActiveSheet + + mobjExelworksheet.Name = "Fertigungsliste" + AnzalZeilen = MSFlexGrid1.Rows + + If AnzalZeilen < 2 Then Exit Sub + + SeiteEinrichten mobjExelworksheet, Int(AnzalZeilen / 79) + 1 + + + For Zeile = 0 To MSFlexGrid1.Rows - 1 + For Spalte = 0 To MSFlexGrid1.cols - 1 + strText = MSFlexGrid1.TextMatrix(Zeile, Spalte) + mobjExelworksheet.Cells(Zeile + ERSTE_ZEILE, Spalte + 1).Value = strText + MSFlexGrid1.row = Zeile + MSFlexGrid1.col = Spalte + If MSFlexGrid1.CellBackColor > 0 Then + mobjExelworksheet.Cells(Zeile + 2, Spalte + 1).Interior.Color = MSFlexGrid1.CellBackColor + End If + Next + Next + + Set myRange = mobjExelworksheet.range(mobjExelworksheet.Cells(ERSTE_ZEILE, 1), mobjExelworksheet.Cells(ERSTE_ZEILE, MSFlexGrid1.cols)) + myRange.Font.Bold = True + + + + ' Spaltenbreite anpassen + For Spalte = 1 To MSFlexGrid1.cols '-1 + mobjExelworksheet.Columns(Spalte).AutoFit + Next + + + + GitterUndRahmen mobjExelworksheet.range(mobjExelworksheet.Cells(ERSTE_ZEILE, 1), mobjExelworksheet.Cells(ERSTE_ZEILE + AnzalZeilen - 1, MSFlexGrid1.cols)) + + Zeile = ERSTE_ZEILE + AnzalZeilen + + If lblSumme.Caption <> "" And lblGeprueft.Caption <> "" Then + 'SummentextEinfuegen "noch zu prüfen:", Val(lblSumme.Caption) - Val(lblGeprueft.Caption) - Val(lblNichtZuPruefende.Caption), Zeile, 3 + SummentextEinfuegen "noch zu prüfen:", Val(labelOffenWert.Caption), Zeile, 3 + End If + + If lblGeprueft.Caption <> "" Then + Zeile = Zeile + 1 + SummentextEinfuegen "geprüft:", Val(lblGeprueft.Caption), Zeile, 3 + End If + + If chkStatistik.Value = vbChecked Or Trim(labelGefertigtMenge.Caption) <> "" Then + Zeile = Zeile + 1 + SummentextEinfuegen "Summe Zähler Statistik:", Val(labelGefertigtMenge.Caption), Zeile, 3 + End If + + If lblNichtZuPruefende.Caption <> "" Then + Zeile = Zeile + 1 + SummentextEinfuegen "nicht zu prüfende ME, FE, FK:", Val(lblNichtZuPruefende.Caption), Zeile, 3 + End If + + + If lblSumme.Caption <> "" Then + Zeile = Zeile + 1 + SummentextEinfuegen "Summe Zähler gesamt:", Val(lblSumme.Caption), Zeile, 3 + End If + + If lblSummeWert.Caption <> "" Then + Zeile = Zeile + 1 + SummentextEinfuegen "Summe Wert:", Val(lblSummeWert.Caption), Zeile, 3 + End If + + If txtFilterKunde.text = "Helwan" Then + Dim strTemp As String + + If InStr(1, cmbLot.text, ":") > 0 Then + strTemp = Split(cmbLot.text, ":")(0) + Else + strTemp = cmbLot.text + End If + + mobjExelworksheet.Cells(1, 5).Value = "Auftragsliste Helwan " & strTemp + + mobjExelworksheet.Cells(1, 5).Font.Bold = True + mobjExelworksheet.Cells(1, 5).HorizontalAlignment = xlCenter + + End If + + mobjExcelWbk.Activate + + Exit Sub +End Sub + + + +Public Sub GitterUndRahmen(selection As range) + selection.Borders(xlDiagonalDown).LineStyle = xlNone + selection.Borders(xlDiagonalUp).LineStyle = xlNone + + With selection.Borders(xlEdgeLeft) + .LineStyle = xlContinuous + .Weight = xlThin + .ColorIndex = xlAutomatic + End With + With selection.Borders(xlEdgeTop) + .LineStyle = xlContinuous + .Weight = xlThin + .ColorIndex = xlAutomatic + End With + With selection.Borders(xlEdgeBottom) + .LineStyle = xlContinuous + .Weight = xlThin + .ColorIndex = xlAutomatic + End With + With selection.Borders(xlEdgeRight) + .LineStyle = xlContinuous + .Weight = xlThin + .ColorIndex = xlAutomatic + End With + + With selection.Borders(xlInsideVertical) + .LineStyle = xlContinuous + .Weight = xlThin + .ColorIndex = 48 + End With + With selection.Borders(xlInsideHorizontal) + .LineStyle = xlContinuous + .Weight = xlThin + .ColorIndex = 48 + End With + +End Sub + +Public Sub SummentextEinfuegen(strLabel As String, strWert As String, Zeile As Integer, Spalte As Integer) + mobjExelworksheet.Cells(Zeile, Spalte).Value = strLabel + mobjExelworksheet.Cells(Zeile, Spalte).HorizontalAlignment = xlRight + mobjExelworksheet.Cells(Zeile, Spalte).Font.Bold = True + + mobjExelworksheet.Cells(Zeile, Spalte + 1).Value = strWert + mobjExelworksheet.Cells(Zeile, Spalte + 1).HorizontalAlignment = xlRight + mobjExelworksheet.Cells(Zeile, Spalte + 1).Font.Bold = True +End Sub + +Public Sub SeiteEinrichten(ActiveSheet As Object, lngAnzahlSeiten As Long) + With ActiveSheet.PageSetup + .PrintTitleRows = "" + .PrintTitleColumns = "" + End With + + ActiveSheet.PageSetup.PrintArea = "" + + With ActiveSheet.PageSetup + .LeftHeader = "" + .CenterHeader = "" + .RightHeader = "" + .LeftFooter = "" + .CenterFooter = "" + .RightFooter = "" + .CenterFooter = "Erstellt von " & Mid(g_App.getMitarbeiter.getVorname, 1, 1) & "." & g_App.getMitarbeiter.getName & " am &D um &T" + .RightFooter = "Seite &P" + .LeftMargin = Application.InchesToPoints(0.393700787401575) + .RightMargin = Application.InchesToPoints(0.393700787401575) + .TopMargin = Application.InchesToPoints(0.393700787401575) + .BottomMargin = Application.InchesToPoints(0.393700787401575) + .HeaderMargin = Application.InchesToPoints(0.511811023622047) + .FooterMargin = Application.InchesToPoints(0.511811023622047) + .PrintHeadings = False + .PrintGridlines = False + .PrintComments = xlPrintNoComments + .PrintQuality = 600 + .CenterHorizontally = False + .CenterVertically = False + .Orientation = xlPortrait + .Draft = False + .PaperSize = xlPaperA4 + .FirstPageNumber = xlAutomatic + .Order = xlDownThenOver + .BlackAndWhite = False + .Zoom = False + .FitToPagesWide = 1 + .FitToPagesTall = lngAnzahlSeiten + End With +End Sub + + +Public Sub FlexGrid_To_Excel(TheFlexgrid As MSFlexGrid, _ + TheRows As Integer, TheCols As Integer, _ + Optional GridStyle As Integer = 1, Optional WorkSheetName _ + As String) + +Dim objXL As New Excel.Application +Dim wbXL As New Excel.Workbook +Dim mobjExelworksheet As New Excel.Worksheet +Dim intRow As Integer ' counter +Dim intCol As Integer ' counter + +If Not IsObject(objXL) Then + MsgBox "You need Microsoft Excel to use this function", _ + vbExclamation, "Print to Excel" + Exit Sub +End If + +'On Error Resume Next is necessary because +'someone may pass more rows +'or columns than the flexgrid has + +'you can instead check for this, +'or rewrite the function so that +'it exports all non-fixed cells +'to Excel + +On Error Resume Next + +' open Excel +objXL.Visible = True +Set wbXL = objXL.Workbooks.Add +Set mobjExelworksheet = objXL.ActiveSheet + +' name the worksheet +With mobjExelworksheet + If Not WorkSheetName = "" Then + .Name = WorkSheetName + End If +End With + +' fill worksheet +For intRow = 1 To TheRows + For intCol = 1 To TheCols + With TheFlexgrid + mobjExelworksheet.Cells(intRow, intCol).Value = _ + .TextMatrix(intRow - 1, intCol - 1) & " " + End With + Next +Next + +' format the look +For intCol = 1 To TheCols + mobjExelworksheet.Columns(intCol).AutoFit + 'mobjExelworksheet.Columns(intCol).AutoFormat (1) + mobjExelworksheet.range("a1", Right(mobjExelworksheet.Columns(TheCols).AddressLocal, _ + 1) & TheRows).AutoFormat GridStyle +Next + +End Sub + + +''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +'''''''''''''''' LOT +''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' + +Private Function Lot_CheckEingabenOK() + If Val(txtAuftragVon.text) > 0 And Val(txtAuftragBis.text) > 0 And cmbLot.text <> "" Then + Lot_CheckEingabenOK = True + End If +End Function + + +Private Sub cmdLotHinzu_Click() + If cmbLot.text <> "" Then + + cmbLot.AddItem cmbLot.text & TRENNER1 & txtAuftragVon.text & " - " & txtAuftragBis.text + cmbLot.ListIndex = cmbLot.ListCount - 1 + + SaveLots + cmdLotHinzu.Enabled = False + + End If +End Sub + + +Private Sub SaveLots() + Dim i As Integer + Dim strListe As String + + strListe = "" + For i = 0 To cmbLot.ListCount - 1 + If cmbLot.List(i) <> "" Then + strListe = strListe & "|" & cmbLot.List(i) + End If + Next + strListe = Mid(strListe, 2) + g_App.Settings.saveStringValue "Fertigungslisten", "Lots", strListe + Debug.Print "strListe= " & strListe +End Sub + + + +Private Sub cmbLot_Click() + Dim strBereich As String + Dim strVon As String + Dim strBis As String + + If cmbLot.ListIndex > -1 Then + If cmbLot.ListIndex > 0 Then + cmdLotEntfernen.Enabled = True + End If + + If InStr(1, cmbLot.text, TRENNER1) > 0 Then + strBereich = Split(cmbLot.text, TRENNER1)(1) + + strVon = Split(strBereich, "-")(0) + strBis = Split(strBereich, "-")(1) + + txtAuftragVon.text = Val(strVon) + txtAuftragBis.text = Val(strBis) + +' txtAuftragVon.Enabled = False +' txtAuftragBis.Enabled = False + Else + txtAuftragVon.text = "" + txtAuftragBis.text = "" + End If + Else + cmdLotEntfernen.Enabled = False + End If + + If cmbLot.text = "" Then cmdLotEntfernen.Enabled = False +End Sub + +Private Sub cmbLot_KeyPress(KeyAscii As Integer) + 'txtVon.Text = "" + 'txtBis.Text = "" + + cmbLot.ListIndex = -1 + + If Lot_CheckEingabenOK() Then + cmdLotHinzu.Enabled = True + Else + cmdLotHinzu.Enabled = False + End If + + txtAuftragVon.Enabled = True + txtAuftragBis.Enabled = True +End Sub + + +Private Sub cmdLotEntfernen_Click() + If cmbLot.ListCount > 0 And cmbLot.ListIndex > -1 Then + cmbLot.RemoveItem cmbLot.ListIndex + End If + + If cmbLot.ListCount > 0 Then + cmbLot.ListIndex = 0 + Else + cmbLot.AddItem "" + cmbLot.text = "" + cmdLotEntfernen.Enabled = False + + g_App.Settings.saveStringValue "Fertigungslisten", "Lots", "" + End If + + SaveLots + +End Sub + + +Private Sub ResetLot() + Dim strListe As String + + txtAuftragVon.text = "" + txtAuftragBis.text = "" + +' txtAuftragVon.Enabled = False +' txtAuftragBis.Enabled = False + + cmdLotHinzu.Enabled = False + cmdLotEntfernen.Enabled = False + + + strListe = g_App.Settings.readStringValue("Fertigungslisten", "Lots", "") + + + Dim varElement As Variant + cmbLot.Clear + cmbLot.AddItem "" + For Each varElement In Split(strListe, TRENNER2) + cmbLot.AddItem varElement + Next + +End Sub + +Private Sub txtAuftragVon_Change() + If Lot_CheckEingabenOK() Then + cmdLotHinzu.Enabled = True + Else + cmdLotHinzu.Enabled = False + End If +End Sub + +Private Sub txtAuftragBis_Change() + If Lot_CheckEingabenOK() Then + cmdLotHinzu.Enabled = True + Else + cmdLotHinzu.Enabled = False + End If +End Sub + +Private Sub txtAuftragVon_GotFocus() + txtAuftragVon.SelStart = 0 + txtAuftragVon.SelLength = Len(txtAuftragVon.text) +End Sub + +Private Sub txtAuftragBis_GotFocus() + txtAuftragBis.SelStart = 0 + txtAuftragBis.SelLength = Len(txtAuftragBis.text) +End Sub + +Private Sub txtAuftragVon_KeyPress(KeyAscii As Integer) + Select Case KeyAscii + Case 48 To 57 + ' numerisch + Case 8, 1, 22, 3, 24 + Case Else + Debug.Print KeyAscii + KeyAscii = 0 + End Select +End Sub + +Private Sub txtAuftragBis_KeyPress(KeyAscii As Integer) + Select Case KeyAscii + Case 48 To 57 + ' numerisch + Case 8, 1, 22, 3, 24 + Case Else + Debug.Print KeyAscii + KeyAscii = 0 + End Select +End Sub + +Private Function GetWertFromZusatztext(strZusatztext As String, strName As String) As String + Dim lngPositionStart As Long + Dim lngPositionEnde As Long + + lngPositionStart = InStr(1, strZusatztext, strName) + If lngPositionStart > 0 Then + lngPositionStart = lngPositionStart + Len(strName) + If lngPositionStart > 0 Then + lngPositionEnde = InStr(lngPositionStart, strZusatztext, vbCrLf) + If lngPositionEnde > 0 Then + GetWertFromZusatztext = Trim(Mid(strZusatztext, lngPositionStart, lngPositionEnde - lngPositionStart)) + End If + End If + End If + +End Function + + +Private Function getMaterialFromVariantencode(strVariantencode As String, strIdentnrString As String) As String + Dim rs As CRecordset + Dim strSql As String + + strSql = "SELECT * from Material_Variantencode where Variantencode='" & Replace(strVariantencode, "'", "''") & "' and KonfigMat = '" & Replace(strIdentnrString, "'", "''") & "'" + Set rs = New CRecordset + rs.openRS strSql, True + + If Not rs.EOF Then + getMaterialFromVariantencode = Trim(rs.getStringValue("Material")) + End If +End Function + +Private Sub SetSpalteNameZuordnung() + Dim lngSpalte As Long + Set m_DicSpaltenname = New Dictionary + + m_DicSpaltenname.RemoveAll + For lngSpalte = 0 To MSFlexGrid1.cols - 1 + m_DicSpaltenname.Add MSFlexGrid1.TextMatrix(0, lngSpalte), lngSpalte + Next +End Sub + + +Private Sub SonderlisteLaserDrucken() + Dim lngZeile As Long + Dim lngSpalte As Long + Dim lngFANr As Long + + + lngSpalte = m_DicSpaltenname.Item("FA-Nr.") + + Printer.ScaleMode = vbMillimeters + Printer.ScaleLeft = -10 + Printer.ScaleTop = -10 + + Printer.fontSize = 12 + Printer.FontBold = True + Printer.Print + + Printer.Print "Liste Linie 1 - Laservorbereitung/Kennzeichnung " & Format(Now(), "dd.mm.yyyy") + + For lngZeile = 1 To MSFlexGrid1.Rows - 1 + lngFANr = Val(MSFlexGrid1.TextMatrix(lngZeile, lngSpalte)) + If lngFANr > 0 Then + DruckeSonderlisteLaserDatensatz lngFANr + DoEvents + End If + Next + + Printer.EndDoc +End Sub + + +Private Function FillWithSpace(strText As String, lngUpToCharsCount As Long) As String + If lngUpToCharsCount - Len(strText) > 0 Then + FillWithSpace = strText & Space(lngUpToCharsCount - Len(strText)) + Else + FillWithSpace = strText + End If +End Function + + + +Private Sub DruckeSonderlisteLaserDatensatz(lngFANr As Long) + Dim rs As CRecordset + Dim strSql As String + + Dim Auftrag As CAuftrag + Dim AuftragPosition As CAuftragPosition + Dim AuftragPositionSerienNr As CAuftragPositionSerienNr + + Dim IdentNr As CIdentNr + Dim Bestellcode As CBestellcode + Dim VakoCode As CVakoCode + Dim strTemp As String + + + Set AuftragPosition = New CAuftragPosition + AuftragPosition.LoadAusFertigungsauftragNr (lngFANr) + Set Auftrag = New CAuftrag + Auftrag.Load AuftragPosition.getAuftragNr, False + + If AuftragPosition.getIdentNr > 0 Then + Set IdentNr = New CIdentNr + IdentNr.loadForNr AuftragPosition.getIdentNr + End If + + If AuftragPosition.GetBestellcode() <> "" Then + Set Bestellcode = New CBestellcode + Bestellcode.Load AuftragPosition.GetBestellcode, IdentNr.GetBestellgruppe + End If + + If IdentNr.m_sVakoCode() <> "" Then + Set VakoCode = New CVakoCode + VakoCode.Load IdentNr.m_sVakoCode + End If + + Printer.FontBold = False + + + If Printer.currentY > Printer.ScaleHeight * 0.5 Then + Printer.Line (0, Printer.currentY)-(Printer.ScaleWidth * 0.85, Printer.currentY) + Printer.NewPage + Printer.currentY = 15 + End If + + Printer.Line (0, Printer.currentY)-(Printer.ScaleWidth * 0.85, Printer.currentY) + Printer.Print + Printer.Print + Const SPACECHARS = 32 + + Printer.Font.Name = "Courier New" + Printer.Font.Size = 8 + + 'Fertigungsauftrag: + Printer.Print FillWithSpace("Fertigungsauftrag:", SPACECHARS) & lngFANr + ' BARCODE!! + Printer.currentX = Printer.TextWidth(Space(SPACECHARS - 2)) + + Printer.Font.Name = "Code 128" + Printer.Font.Size = 48 + Printer.Print code128(CStr(lngFANr), True) + Printer.Font.Name = "Courier New" + Printer.Font.Size = 8 + Printer.Print + + Printer.Print FillWithSpace("Bereitstellung:", SPACECHARS) & AuftragPosition.getVersanddatum + Printer.Print FillWithSpace("Kundenauftrag:", SPACECHARS) & AuftragPosition.getAuftragNr & " / " & AuftragPosition.getNr + Printer.Print FillWithSpace("Kunde:", SPACECHARS) & Auftrag.getKunde.getName & " (" & Auftrag.GetKundennr & ")" + Printer.Print FillWithSpace("Ort:", SPACECHARS) & Auftrag.getKunde.getOrt + Printer.Print FillWithSpace("Stückzahl:", SPACECHARS) & AuftragPosition.getMenge + Printer.Print FillWithSpace("Material:", SPACECHARS) & AuftragPosition.getIdentNrObj.getVollBezeichnung + + Set AuftragPositionSerienNr = New CAuftragPositionSerienNr + If AuftragPosition.getMenge > 1 Then + AuftragPositionSerienNr.Load AuftragPosition.getSerienNummerVon, Auftrag.getNr + Printer.Print FillWithSpace("Seriennummer:", SPACECHARS) & AuftragPosition.getSerienNummerVon & " - " & AuftragPosition.getSerienNummerBis + strTemp = AuftragPositionSerienNr.getKundeneigeneSerienNr + AuftragPositionSerienNr.Load AuftragPosition.getSerienNummerBis, Auftrag.getNr + strTemp = strTemp & " - " & AuftragPositionSerienNr.getKundeneigeneSerienNr + Printer.Print FillWithSpace("Kundeneigene Seriennummer:", SPACECHARS) & strTemp + Else + AuftragPositionSerienNr.Load AuftragPosition.getSerienNummerVon, Auftrag.getNr + Printer.Print FillWithSpace("Seriennummer:", SPACECHARS) & AuftragPosition.getSerienNummerVon + Printer.Print FillWithSpace("Kundeneigene Seriennummer:", SPACECHARS) & AuftragPositionSerienNr.getKundeneigeneSerienNr + End If + + 'Basisnummer (Meistream) : + Printer.Print FillWithSpace("Kundenmaterialnummer:", SPACECHARS) & GetMerkmalFromZusatztext("Zulassungskennzeichen", AuftragPosition.getZusatztext) + Printer.Print + Printer.Print FillWithSpace("Produktausführung:", SPACECHARS) & GetMerkmalFromZusatztext("Produktausführung", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Zulassungskennzeichen:", SPACECHARS) & GetMerkmalFromZusatztext("Zulassungskennzeichen", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Kundenversion:", SPACECHARS) & GetMerkmalFromZusatztext("Kundenversion", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Nennweite DN:", SPACECHARS) & GetMerkmalFromZusatztext("Nennweite DN", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Nenndurchfluss:", SPACECHARS) & GetMerkmalFromZusatztext("Nenndurchfluss", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("metrol. Kl. / Verhältnis Q3/Q1:", SPACECHARS) & GetMerkmalFromZusatztext("metrol. Kl. / Verhältnis Q3/Q1", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Druckstufe:", SPACECHARS) & GetMerkmalFromZusatztext("Druckstufe", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Baulänge:", SPACECHARS) & GetMerkmalFromZusatztext("Baulänge", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Bohrbild:", SPACECHARS) & GetMerkmalFromZusatztext("Bohrbild", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Materialspezifikation:", SPACECHARS) & GetMerkmalFromZusatztext("Materialspezifikation", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Zählwerk:", SPACECHARS) & GetMerkmalFromZusatztext("Zählwerk", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Anzeige:", SPACECHARS) & GetMerkmalFromZusatztext("Anzeige", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Bestellcode MEISTREAM:", SPACECHARS); GetMerkmalFromZusatztext("Bestellcode MEISTREAM", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Zusatzhinweis:", SPACECHARS) & GetMerkmalFromZusatztext("Zusatzhinweis", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("CSD-Dokument:", SPACECHARS) & GetMerkmalFromZusatztext("CSD", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Eigentumsnummer von:", SPACECHARS) & GetMerkmalFromZusatztext("Eigentumsnummer von", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Eigentumsnummer bis:", SPACECHARS) & GetMerkmalFromZusatztext("Eigentumsnummer bis", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Inkrement:", SPACECHARS) & GetMerkmalFromZusatztext("Inkrement", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Präfix:", SPACECHARS) & GetMerkmalFromZusatztext("Präfix", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Suffix:", SPACECHARS) & GetMerkmalFromZusatztext("Suffix", AuftragPosition.getZusatztext) + Printer.Print FillWithSpace("Version:", SPACECHARS) & GetMerkmalFromZusatztext("Version", AuftragPosition.getZusatztext) + Printer.Print + Printer.Print +' Printer.Print "Zusatztext:" +' +' Printer.FontSize = 8 +' Printer.Font.Name = "Arial" +' Printer.ScaleLeft = -Printer.ScaleWidth / 5 +' Printer.Print +' Printer.Print AuftragPosition.getZusatztext +' +' Printer.Print "----Bestellcode---" +' Printer.Print Bestellcode.m_strDebug +' Printer.Font.Name = "Courier New" +' Printer.FontSize = 8 +' Printer.Print +' + +End Sub + +Private Function GetMerkmalFromZusatztext(strMerkmal As String, strZusatztext As String) As String + Dim strElement As Variant + + For Each strElement In Split(strZusatztext, vbCrLf) + Debug.Print strElement + If Left(strElement, Len(strMerkmal)) = strMerkmal Then + GetMerkmalFromZusatztext = Right(strElement, Len(strElement) - Len(strMerkmal)) + GetMerkmalFromZusatztext = Trim(Replace(GetMerkmalFromZusatztext, ":", "")) + Exit For + End If + Next + If GetMerkmalFromZusatztext = "" Then + Debug.Print "###" & strMerkmal & " ist nicht bekannt ###" + End If +End Function + + +Private Function getIdentNrTextFromRecordset(rs As CRecordset, strAusblenden) As String + Dim strVariantencode As String + Dim strIdentnrString As String + Dim strTemp As String + + ' Eingabe: + ' IdentnrString, Zusatztext + + strIdentnrString = Trim(rs.getStringValue("IdentnrString")) + Select Case strIdentnrString + ' Sonderbehandlung + Case "MODULMEI", "MODUL" + ' soll ersetzt werden durch Material aus Tabelle Material_Variantencode über Variantencode, falls vorhanden + ' Variantencode auslesen + strVariantencode = GetWertFromZusatztext(rs.getStringValue("Zusatztext"), "Bestellcode " & strIdentnrString & " :") + If strVariantencode <> "" Then + ' Variantencode ist vorhanden + ' Material aus Tabelle Material_Variantencode auslesen + strTemp = getMaterialFromVariantencode(strVariantencode, strIdentnrString) + If strTemp = "" Then + ' Material ist nicht vorhanden: Fallback auf IdentnrString + strTemp = rs.getStringValue("IdentnrString") + End If + Else + ' Variantencode ist NICHT vorhanden, KonfigMat = IdentNrstring anzeigen + ' Fallback auf IdentnrString + strTemp = strIdentnrString + End If + ' Tabellenzelle füllen + getIdentNrTextFromRecordset = strTemp + Case "" + If strAusblenden = "Sofort" Then + getIdentNrTextFromRecordset = rs.getStringValue("Kennzeichen") & rs.getLongValue("IdentNr") & rs.getStringValue("Kennzeichen2") + Else + If rs.getLongValue("Kundennr") = 1000 And Len(rs.getStringValue("Kennzeichen2")) > 0 Then + getIdentNrTextFromRecordset = rs.getLongValue("IdentNr") & rs.getStringValue("Kennzeichen2") + Else + Select Case rs.getLongValue("IdentNr") + Case 2100000 + getIdentNrTextFromRecordset = "MODUL*" + Case Else + getIdentNrTextFromRecordset = rs.getLongValue("IdentNr") + End Select + End If + End If + Case Else + getIdentNrTextFromRecordset = strIdentnrString + End Select + + If rs.getStringValue("SAP_Nummer") <> "" Then + getIdentNrTextFromRecordset = rs.getStringValue("SAP_Nummer") + End If +End Function + + + diff --git a/Shared/spzvtbg b/Shared/spzvtbg new file mode 100644 index 00000000..875fa99e --- /dev/null +++ b/Shared/spzvtbg @@ -0,0 +1,5 @@ +SELECT AuftragPosition.* , IdentNr.KurzBez, IdentNr.Typ, IdentNr.Typzusatz, IdentNr.Nennweite, IdentNr.Temperatur, IdentNr.Druck, IdentNr.Baulaenge,IdentNr.IdentNrString, IdentNr.VakoCode, IdentNr.SAP_Nummer, AuftragPosition.ZusatzText, AuftragPosition.Ort, Kunde.Ort as Kundenort, Kunde.Name, IdentNr.Bestellgruppe , AuftragPosition.Kennzeichen2, AuftragPosition.Kundennr , CASE ISNULL([VakoMerkmal].[Charcode], 'X') = 'X' THEN ' ' ELSE 'x' END AS [X] FROM AuftragPosition + INNER JOIN Identnr ON AuftragPosition.IdentNr = Identnr.IdentNr INNER JOIN Kunde ON AuftragPosition.KundenNr = Kunde.KundenNr + LEFT JOIN (SELECT [Stelle], [Laenge], [Charcode] FROM [VAKO_Merkmale] WHERE [Basis] = 'GNS' AND [Name] = 'C_GEN_GEHAEUSEOPTION') AS [VakoMerkmal] ON [VakoMerkmal].[Charcode] = SUBSTRING([Identnr].[VakoCode], [VakoMerkmal].[Stelle], [VakoMerkmal].[Laenge]) WHERE (AuftragPosition.VersandDatum >= CONVERT(DATETIME, '2019-07-01 00:00:00', 102)) AND (AuftragPosition.VersandDatum <= CONVERT(DATETIME, '2023-04-24 23:59:59', 102)) AND ( AuftragPosition.Ort = 'L2' ) AND (Identnr.KurzBez <> 'ET') AND V_IstTermin is NULL And Identnr.KurzBez <> 'ME' + ORDER BY AuftragPosition.VersandDatum , IdentNr.Typ,IdentNr.TypZusatz,IdentNr.Nennweite,IdentNr.Temperatur + diff --git a/Shared/vorfertigung.pdf b/Shared/vorfertigung.pdf new file mode 100644 index 00000000..dd6457a0 Binary files /dev/null and b/Shared/vorfertigung.pdf differ