;LV_Eingabe_func.au3

Func _ListviewAutoWidthHeader($vLVName)
	Local $hLV = GUICtrlGetHandle($vLVName)
	$iCountColum = _GUICtrlListView_GetColumnCount($hLV)

	For $i = 0 To $iCountColum - 1
		_GUICtrlListView_SetColumnWidth($hLV, $i, $LVSCW_AUTOSIZE_USEHEADER)
	Next

	If $vLVName = $LVE_TAB_LV_PosListe Then
		_GUICtrlListView_SetColumnWidth($hLV, 1, 250)   ; Kurztext maximal auf 250.
	EndIf

	If $vLVName = $LV_Aufm Then
		_GUICtrlListView_SetColumnWidth($hLV, 8, 250)   ; Aufmaß Leistungstext maximal auf 250.
	EndIf

EndFunc   ;==>_ListviewAutoWidthHeader

Func _LV_LVAufMa_clear()
	If MsgBox(3, "Liste Löschen???", "Wollen Sie die Liste wirklich löschen?") = 6 Then
		_GUICtrlListView_DeleteAllItems($LV_Aufm)
		_GUIListViewEx_Close($iLV_Aufma_Index)
;~ 		$aGLVEx_Data[1][2] = ""
	EndIf

EndFunc   ;==>_LV_LVAufMa_clear

Func _LV_LVAaufMa_List_import_from_TXT()
;~ 	_GUIListViewEx_SetActive($iLV_Left_Index)
	Local $sFilePath, $aArray
;~ 	_GUICtrlListView_DeleteAllItems($LV_Aufm)
	$aListeImport = ""
	Local $message = "Bitte wählen Sie die Import Datei aus!"

	Local $sFilePath = FileOpenDialog($message, @ScriptDir & "\_Aufmaße\", "Text (*.txt)", 1 + 4)
	If @error Then
		MsgBox(4096, "", "Keine Datei(en) ausgewählt")
		Return "No Datei"
	Else
		$sFilePath = StringReplace($sFilePath, "|", @CRLF)
;~ 		MsgBox(4096, "", "Es wurde(n) " & $var & " ausgewählt")
		_FileReadToArray($sFilePath, $aArray)
;~ 	_ArrayDisplay($aArray)
		_Write_to_Console("importiere Aufmaß...")
		If IsArray($aArray) Then
			Dim $aListeImport[$aArray[0] - 15][13]
			$iZ = 0
			For $i = 16 To UBound($aArray) - 1
				$aTemp = StringSplit($aArray[$i], "|")
				For $ii = 1 To UBound($aTemp) - 1
					$aListeImport[$iZ][$ii - 1] = $aTemp[$ii]
				Next
				$iZ = $iZ + 1
			Next
			_GUICtrlListView_AddArray($LV_Aufm, $aListeImport)

			; Initiate LVEx - use read content as array - count parameter set - red insert mark - drag image - move edit by click + headers editable
;~ 			$iLV_Aufma_Index = _GUIListViewEx_Init($LV_Aufm, "", 0, 0xFF0000, True, 2)
			$iLV_Aufma_Index = _GUIListViewEx_Init($LV_Aufm, $aListeImport, 0, 0xFF0000, True, 2)

;~ 			$iLV_Aufma_Index = _GUIListViewEx_Init($LV_Aufm, $aListeImport, 0, 0, True, 2 )
;~ 		_ArrayDisplay($aListeImport)
			_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6")
			_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, 9, 2, $cDataB, True)

;~ 		$aGLVEx_Data[1][2] = $aListeImport
;~ 		__GUIListViewEx_ReWriteLV($iLV_Left_Index, $aListeImport,"", 1, "")
		EndIf
;~ 		_DebugArrayDisplay($aArray)
		$sTeilaufma = StringReplace($aArray[2], "Teilaufma=", "")
		If $sTeilaufma = "X" Then
			GUICtrlSetState($kopf_TAB_rd_teilauf, $GUI_CHECKED)
;~ 		GUICtrlSetState($radio_1, $GUI_CHECKED)
		Else
			GUICtrlSetState($kopf_TAB_rd_teilauf, $GUI_UNCHECKED)
		EndIf
		$sSchlussaufma = StringReplace($aArray[3], "Schlussaufma=", "")
		If $sSchlussaufma = "X" Then
			GUICtrlSetState($kopf_TAB_rd_schluss, $GUI_CHECKED)
		Else
			GUICtrlSetState($kopf_TAB_rd_schluss, $GUI_UNCHECKED)
		EndIf


		GUICtrlSetData($kopf_tab_txt_datum, StringReplace($aArray[4], "Datum=", ""))
		GUICtrlSetData($kopf_tab_txt_baustelle, StringReplace($aArray[5], "Baustelle=", ""))
		GUICtrlSetData($kopf_tab_txt_abrufnr, StringReplace($aArray[6], "AbrufNr=", ""))
		GUICtrlSetData($kopf_tab_txt_smnr, StringReplace($aArray[7], "SMNr=", ""))
		GUICtrlSetData($kopf_tab_chb_vertrag, StringReplace($aArray[8], "Vertrag=", ""))
		GUICtrlSetData($kopf_tab_datum_start, StringReplace($aArray[9], "StartZ=", ""))
		GUICtrlSetData($kopf_tab_txt_datum_ende, StringReplace($aArray[10], "EndZ=", ""))
		GUICtrlSetData($kopf_tab_txt_aspa, StringReplace($aArray[11], "AspaN=", ""))
		GUICtrlSetData($kopf_tab_txt_telnr, StringReplace($aArray[12], "AspaTel=", ""))
		GUICtrlSetData($kopf_tab_txt_bauabschnitt, StringReplace($aArray[13], "Bauabschnitt=", ""))
		GUICtrlSetData($kopf_tab_txt_kolone, StringReplace($aArray[14], "Kolone=", ""))

		_GUICtrlComboBox_SelectString($lve_tab_chb_vertrag, StringReplace($aArray[8], "Vertrag=", ""))
		_GUICtrlComboBox_SelectString($kopf_tab_chb_vertrag, StringReplace($aArray[8], "Vertrag=", ""))
;~ 		_GUICtrlComboBox_SelectString($kopf_tab_txt_aspa, StringReplace($aArray[11], "AspaN=", ""))

		$aStartDatum = StringSplit(GUICtrlRead($kopf_tab_datum_start), ".")
;~ 		_ArrayDisplay($aStartDatum)
		If IsArray($aStartDatum) Then
			If UBound($aStartDatum) = 3 Then
				$iYear = $aStartDatum[3]
				$iMonth = $aStartDatum[2]
				$iDay = $aStartDatum[1]
				_GUICtrlMonthCal_SetCurSel($kopf_tab_datumfeld_start, $iYear, $iMonth, $iDay)
			EndIf

		EndIf

		$aStartDatum = StringSplit(GUICtrlRead($kopf_tab_txt_datum_ende), ".")
		If IsArray($aStartDatum) Then
			If UBound($aStartDatum) = 3 Then
				$iYear = $aStartDatum[3]
				$iMonth = $aStartDatum[2]
				$iDay = $aStartDatum[1]
				_GUICtrlMonthCal_SetCurSel($kopf_tab_datumfeld_ende, $iYear, $iMonth, $iDay)
			EndIf
		EndIf

	EndIf

EndFunc   ;==>_LV_LVAaufMa_List_import_from_TXT

Func _LV_LVAaufMa_List_import_from_TXT_Pfad($sPfad)
;~ 	_GUIListViewEx_SetActive($iLV_Left_Index)
	Local $sFilePath, $aArray
;~ 	_GUICtrlListView_DeleteAllItems($LV_Aufm)
	$aListeImport = ""
	_FileReadToArray($sPfad, $aArray)
;~ 	_ArrayDisplay($aArray)
	_Write_to_Console("importiere Aufmaß...")
	If IsArray($aArray) Then
		Dim $aListeImport[$aArray[0] - 15][13]
		$iZ = 0
		For $i = 16 To UBound($aArray) - 1
			$aTemp = StringSplit($aArray[$i], "|")
			For $ii = 1 To UBound($aTemp) - 1
				$aListeImport[$iZ][$ii - 1] = $aTemp[$ii]
			Next
			$iZ = $iZ + 1
		Next
		_GUICtrlListView_AddArray($LV_Aufm, $aListeImport)

		Global $aLV_List_Right = _GUIListViewEx_ReadToArray($LV_Aufm, 1)
		; The array as read from Right ListView and used subsequently
		;_ArrayDisplay($aLV_List_Right, "Read from Right ListView")

		; Initiate LVEx - use read content as array - count parameter set - red insert mark - drag image - move edit by click + headers editable
		$iLV_Aufma_Index = _GUIListViewEx_Init($LV_Aufm, $aLV_List_Right, 0, 0xFF0000, True, 2)

;~ 			$iLV_Aufma_Index = _GUIListViewEx_Init($LV_Aufm, $aListeImport, 0, 0, True, 2 )
;~ 		_ArrayDisplay($aListeImport)
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6")
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, 9, 2, $cDataB, True)

;~ 		$aGLVEx_Data[1][2] = $aListeImport
;~ 		__GUIListViewEx_ReWriteLV($iLV_Left_Index, $aListeImport,"", 1, "")
	EndIf
;~ _DebugArrayDisplay($aArray)
	$sTeilaufma = StringReplace($aArray[2], "Teilaufma=", "")
	If $sTeilaufma = "X" Then
		GUICtrlSetState($kopf_TAB_rd_teilauf, $GUI_CHECKED)
;~ 		GUICtrlSetState($radio_1, $GUI_CHECKED)
	Else
		GUICtrlSetState($kopf_TAB_rd_teilauf, $GUI_UNCHECKED)
	EndIf
	$sSchlussaufma = StringReplace($aArray[3], "Schlussaufma=", "")
	If $sSchlussaufma = "X" Then
		GUICtrlSetState($kopf_TAB_rd_schluss, $GUI_CHECKED)
	Else
		GUICtrlSetState($kopf_TAB_rd_schluss, $GUI_UNCHECKED)
	EndIf


	GUICtrlSetData($kopf_tab_txt_datum, StringReplace($aArray[4], "Datum=", ""))
	GUICtrlSetData($kopf_tab_txt_baustelle, StringReplace($aArray[5], "Baustelle=", ""))
	GUICtrlSetData($kopf_tab_txt_abrufnr, StringReplace($aArray[6], "AbrufNr=", ""))
	GUICtrlSetData($kopf_tab_txt_smnr, StringReplace($aArray[7], "SMNr=", ""))
	GUICtrlSetData($kopf_tab_chb_vertrag, StringReplace($aArray[8], "Vertrag=", ""))
	GUICtrlSetData($kopf_tab_datum_start, StringReplace($aArray[9], "StartZ=", ""))
	GUICtrlSetData($kopf_tab_txt_datum_ende, StringReplace($aArray[10], "EndZ=", ""))
	GUICtrlSetData($kopf_tab_txt_aspa, StringReplace($aArray[11], "AspaN=", ""))
	GUICtrlSetData($kopf_tab_txt_telnr, StringReplace($aArray[12], "AspaTel=", ""))
	GUICtrlSetData($kopf_tab_txt_bauabschnitt, StringReplace($aArray[13], "Bauabschnitt=", ""))
	GUICtrlSetData($kopf_tab_txt_kolone, StringReplace($aArray[14], "Kolone=", ""))

	_GUICtrlComboBox_SelectString($lve_tab_chb_vertrag, StringReplace($aArray[8], "Vertrag=", ""))
	_GUICtrlComboBox_SelectString($kopf_tab_chb_vertrag, StringReplace($aArray[8], "Vertrag=", ""))

	_GUICtrlComboBox_SelectString($kopf_tab_txt_aspa, StringReplace($aArray[11], "AspaN=", ""))

	$aStartDatum = StringSplit(GUICtrlRead($kopf_tab_datum_start), ".")
;~ 		_ArrayDisplay($aStartDatum)
	If IsArray($aStartDatum) Then
		If UBound($aStartDatum) = 3 Then
			$iYear = $aStartDatum[3]
			$iMonth = $aStartDatum[2]
			$iDay = $aStartDatum[1]
			_GUICtrlMonthCal_SetCurSel($kopf_tab_datumfeld_start, $iYear, $iMonth, $iDay)
		EndIf

	EndIf

	$aStartDatum = StringSplit(GUICtrlRead($kopf_tab_txt_datum_ende), ".")
	If IsArray($aStartDatum) Then
		If UBound($aStartDatum) = 3 Then
			$iYear = $aStartDatum[3]
			$iMonth = $aStartDatum[2]
			$iDay = $aStartDatum[1]
			_GUICtrlMonthCal_SetCurSel($kopf_tab_datumfeld_ende, $iYear, $iMonth, $iDay)
		EndIf
	EndIf


EndFunc   ;==>_LV_LVAaufMa_List_import_from_TXT_Pfad

Func _LV_LVaufMa_Save_List2Txt()
;~ 	$aInhalt = _GUIListViewEx_ReturnArray($iLV_Left_Index, 3)
;~ 	_ArrayDisplay($aInhalt)
;~
;~ 	$sTest =  _GUIListViewEx_GetActive()
;~ 	MsgBox(64, "asfasdg", $sTest)
;~ 	_Write_to_Console(_GUIListViewEx_GetActive())

;~ 	_DebugArrayDisplay($aGLVEx_Data)
	If IsArray($aGLVEx_Data) Then
		For $i = 1 To UBound($aGLVEx_Data) - 1
;~ 			ConsoleWrite("Zeile " & $i & @CRLF)

			;[n][2]  = Shadow array
			_DebugArrayDisplay($aGLVEx_Data[$i][2], "Shadow array| " & $i)
;~ 			MsgBox(64, "Shadow Array", "")
;~ 			;[n][7]  = Editable columns data
;~ 			_DebugArrayDisplay($aGLVEx_Data[$i][7], "Editable columns data")
;~ 			MsgBox(64, "Editable columns data", "")
;~ 			 ;[n][23] - Default user colours
;~ 			_DebugArrayDisplay($aGLVEx_Data[$i][23], "Default user colours")
;~ 			MsgBox(64, "Editable columns data", "")
;~ 			;[n][25] - Header data array
;~ 			_DebugArrayDisplay($aGLVEx_Data[$i][25], "Header data array")
;~ 			MsgBox(64, "Header data array", "")
;~ 			0x000000
;~ 			0xFEFEFE
;~ 			0xFFFFFF
;~ 			0xCC6600

		Next

	EndIf
EndFunc   ;==>_LV_LVaufMa_Save_List2Txt

Func _LV_LVaufMa_add_Zeile()
;~ 	Global $iPosNr = _GUICtrlListView_GetItemText($lve_tab_lv_posliste, $vRet[1], 0)
;~ 	Global $iKurztext =  _GUICtrlListView_GetItemText($lve_tab_lv_posliste, $vRet[1], 1)
;~ 	Global $iEinheit =  _GUICtrlListView_GetItemText($lve_tab_lv_posliste, $vRet[1], 2)
;~ 	Global $iPreis =  _GUICtrlListView_GetItemText($lve_tab_lv_posliste, $vRet[1], 3)

	If GUICtrlRead($chb_letztezeile) = $GUI_CHECKED Then
		IniWrite($sPfadIni, "Setup", "addmarkpos", "False")

	Else
		IniWrite($sPfadIni, "Setup", "addmarkpos", "True")
	EndIf

	Local $aIndex = _GUICtrlListView_GetSelectedIndices($lve_tab_lv_posliste, True)

;~ 	_ArrayDisplay($aIndex)
	If $aIndex[0] = 1 Then
;~ 		;nur eins markiert!
		;_ArrayDisplay($aIndex)
		$sPosi_Cord = _GUIListViewEx_GetLastSelItem($iLV_Aufma_Index)
		$aPos = StringSplit($sPosi_Cord, "|")
		$aItem = _GUICtrlListView_GetItemTextArray($lve_tab_lv_posliste, $aIndex[1])
		GUICtrlSetData($lve_tab_txt_posnr, $aItem[1])
		GUICtrlSetData($lve_tab_txt_kurztext, $aItem[2])
		$sEinheit = $aItem[3]
		$iPreis = $aItem[4]
		$iMengeVorne = _replaceKom2Punkt(GUICtrlRead($LVE_TAB_txt_menge))
		$iFakotr = _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_faktor))
		$iMengeHinten = $iMengeVorne * $iFakotr
		$iGesamtsumme = $iMengeHinten * _replaceKom2Punkt($iPreis)

		$sString = GUICtrlRead($lve_tab_txt_rsa) & "|" & GUICtrlRead($lve_tab_txt_posnr) & "|" & GUICtrlRead($lve_tab_txt_faktor) & "|" & GUICtrlRead($lve_tab_txt_leange) & "|" & GUICtrlRead($lve_tab_txt_breite) & "|" & GUICtrlRead($lve_tab_txt_tiefe) & "|" & GUICtrlRead($LVE_TAB_txt_menge) & "|" & $sEinheit & "|" & GUICtrlRead($lve_tab_txt_kurztext) & "|" & GUICtrlRead($LVE_TAB_chb_bemerkung) & "|" & $iMengeHinten & "|" & $aItem[4] & "|" & _replacePunkt2Koma($iGesamtsumme)
		$iCount = _GUICtrlListView_GetItemCount($lv_aufm)

		;lese von Ini aus
		$sAddMarkPos = IniRead($sPfadIni, "Setup", "addmarkpos", "False")
		If $sAddMarkPos = "True" Then
			;wenn True dann einfügen bei zuletzt markierter Position
			If $sPosi_Cord = "" Then
				$iCount = -1
				_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $iCount, $sString)
			Else
				If $aPos[2] + 1 = $iCount Then
					_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $aPos[2], $sString)
				Else
					_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $aPos[2] + 1, $sString)
				EndIf
			EndIf
		Else
			$iCount = -1
			_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $iCount, $sString)
		EndIf

	Else
		;mehrere markiert und hinzugefügt
;~ 		_DebugArrayDisplay($aIndex)
;~ 		_ArraySort($aIndex, 1, 1)
		For $i = 1 To UBound($aIndex) - 1

			$sPosi_Cord = _GUIListViewEx_GetLastSelItem($iLV_Aufma_Index)
			$aPos = StringSplit($sPosi_Cord, "|")
			If IsArray($aPos) Then

				$aItem = _GUICtrlListView_GetItemTextArray($lve_tab_lv_posliste, $aIndex[$i])

				$sRSA_Abschnitt = GUICtrlRead($lve_tab_txt_rsa)
				$sPosNr = $aItem[1]
				$sFaktor = GUICtrlRead($lve_tab_txt_faktor)
				$sLeange = GUICtrlRead($lve_tab_txt_leange)
				$sBreite = GUICtrlRead($lve_tab_txt_breite)
				$sTiefe = GUICtrlRead($lve_tab_txt_tiefe)
				$sMenge = GUICtrlRead($lve_tab_txt_menge)
				$sME = $aItem[3]
				$sLeistungstext = $aItem[2]
				$sBemerkung = GUICtrlRead($lve_tab_chb_bemerkung)
				$sEPreis = $aItem[4]
				$sSumme = $sMenge * $sEPreis
				$sADDZeile = $sRSA_Abschnitt & "|" & $sPosNr & "|" & $sFaktor & "|" & $sLeange & "|" & $sBreite & "|" & $sTiefe & "|" & $sMenge & "|" & $sME & "|" & $sLeistungstext & "|" & $sBemerkung & "|" & $sMenge & "|" & $sEPreis & "|" & $sSumme

				$iCount = _GUICtrlListView_GetItemCount($lv_aufm)
				;lese von Ini aus
				$sAddMarkPos = IniRead($sPfadIni, "Setup", "addmarkpos", "")
				If $sAddMarkPos = "True" Then
					;wenn True dann einfügen bei zuletzt markierter Position
					If $sPosi_Cord = "" Then
						$iCount = -1
						_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $iCount, $sADDZeile)
					Else
						If $aPos[2] + 1 = $iCount Then
							_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $aPos[2], $sADDZeile)
						Else
							_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $aPos[2] + 1, $sADDZeile)
						EndIf
					EndIf
				Else
					$iCount = -1
					_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $iCount, $sADDZeile)
				EndIf
			Else
				MsgBox(64, "Fehler", "Multi _GUIListViewEx_GetLastSelItem(")
			EndIf
		Next
;~
	EndIf
	;GUICtrlSetData()
	If GUICtrlRead($chb_text_edit) = $GUI_CHECKED Then
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6;9")
	Else
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6")
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, 9, 2, $cDataB, True)
		GUICtrlSetData($lve_tab_chb_bemerkung, $cDataB, "")
	EndIf


EndFunc   ;==>_LV_LVaufMa_add_Zeile

Func _LV_LVaufMa_add_empty_zeile()

	$sPosi_Cord = _GUIListViewEx_GetLastSelItem($iLV_Aufma_Index)
	$aPos = StringSplit($sPosi_Cord, "|")
	$iCount = _GUICtrlListView_GetItemCount($lv_aufm)
	If IsArray($aPos) Then

	Else
		MsgBox(64, "Fehler", "kein Arra StringSplit($sPosi_Cord,'|'")
	EndIf


	If GUICtrlRead($chb_letztezeile) = $GUI_CHECKED Then
		IniWrite($sPfadIni, "Setup", "addmarkpos", "False")

	Else
		IniWrite($sPfadIni, "Setup", "addmarkpos", "True")
	EndIf

	;lese von Ini aus
	$sAddMarkPos = IniRead($sPfadIni, "Setup", "addmarkpos", "")
	If $sAddMarkPos = "True" Then
		;wenn True dann einfügen bei zuletzt markierter Position
		If $sPosi_Cord = "" Then
			$iCount = -1
			_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $iCount, "")
		Else
			If $aPos[2] + 1 = $iCount Then
				_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $aPos[2], "")
			Else
				_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $aPos[2] + 1, "")
			EndIf
		EndIf
	Else
		$iCount = -1
		_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $iCount, "")
	EndIf


	If GUICtrlRead($chb_text_edit) = $GUI_CHECKED Then
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6;9")
	Else
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6")
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, 9, 2, $cDataB, True)
		GUICtrlSetData($lve_tab_chb_bemerkung, $cDataB, "")
	EndIf
EndFunc   ;==>_LV_LVaufMa_add_empty_zeile

Func _LV_LVAufMA_mark_copy()
	$array = _GUICtrlListView_GetSelectedIndices($lv_aufm, True)
	$iCount = _GUICtrlListView_GetItemCount($lv_aufm)
;~ 	_ArrayDisplay($array)
	Dim $aListAufmass[1][13]
	For $i = 1 To $array[0]
		Local $sZeile = ""

		$aTemp = _GUICtrlListView_GetItemTextArray($lv_aufm, $array[$i])
;~ 		$sZeile = _GUICtrlListView_GetItemTextString($LV_AM, $array[$i])
;~ 		_ArrayDisplay($aTemp)
		$aListAufmass[0][0] = $aTemp[1]
		$aListAufmass[0][1] = $aTemp[2]
		$aListAufmass[0][2] = $aTemp[3]
		$aListAufmass[0][3] = $aTemp[4]
		$aListAufmass[0][4] = $aTemp[5]
		$aListAufmass[0][5] = $aTemp[6]
		$aListAufmass[0][6] = $aTemp[7]
		$aListAufmass[0][7] = $aTemp[8]
		$aListAufmass[0][8] = $aTemp[9]
		$aListAufmass[0][9] = $aTemp[10]
		$aListAufmass[0][10] = $aTemp[11]
		$aListAufmass[0][11] = $aTemp[12]
		$aListAufmass[0][12] = $aTemp[13]
;~ 		MsgBox(64,"",$sZeile)

		If GUICtrlRead($chb_letztezeile) = $GUI_CHECKED Then
			IniWrite($sPfadIni, "Setup", "addmarkpos", "False")

		Else
			IniWrite($sPfadIni, "Setup", "addmarkpos", "True")
		EndIf

		$sAddMarkPos = IniRead($sPfadIni, "Setup", "addmarkpos", "")
		If $sAddMarkPos = "True" Then
			;wenn True dann einfügen bei zuletzt markierter Position

			_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $array[UBound($array) - 1] + $i, $aListAufmass)

		Else
			$iCount = -1
			_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $iCount, $aListAufmass)
		EndIf

;~ 		_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $array[UBound($array) - 1] + $i, $aListAufmass)
	Next
	If GUICtrlRead($chb_text_edit) = $GUI_CHECKED Then
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6;9")
	Else
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6")
		_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, 9, 2, $cDataB, True)
		GUICtrlSetData($lve_tab_chb_bemerkung, $cDataB, "")
	EndIf

EndFunc   ;==>_LV_LVAufMA_mark_copy

Func _EVAufmLV_Export_Exel()

;~ 	LEB_vorlage.xlsx

	FileCopy(@ScriptDir & "\daten\LEB_vorlage.xlsx", @ScriptDir & "\_Aufmaße\LEB_vorlage.xlsx", $FC_OVERWRITE + $FC_CREATEPATH)
	$sPfadExcel = @ScriptDir & "\_Aufmaße\LEB_vorlage.xlsx"
	Local $oExcel = _Excel_Open()
	If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
	Local $oWorkbook = _Excel_BookOpen($oExcel, $sPfadExcel)
	If @error Then
		MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error opening workbook '" & $sPfadExcel & @CRLF & "@error = " & @error & ", @extended = " & @extended)
		_Excel_Close($oExcel)
;~ 		Exit
	EndIf
	Local $aArray = _GUIListViewEx_ReadToArray($LV_Aufm, 1)
;~ 	_ArrayDisplay($aArray)
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aArray, "B3")
	$iLastZeile = $oWorkbook.ActiveSheet.UsedRange.SpecialCells($xlCellTypeLastCell).Row

	With $oWorkbook.ActiveSheet.Range("A3:N" & $iLastZeile).Borders
		.LineStyle = 1
		.TintAndShade = 0
	EndWith

	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "=SUMME(N3:N" & $iLastZeile & ")", "N1")

	; Zeilen Nummer hinzufügen in 10 schritten
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "10", "A3")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "20", "A4")

;~ 	MsgBox(64, "test",  UBound($aArray))

	If UBound($aArray) = 1 Then
		$iStart = 3
;~ 			_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "=SUMME(A" & $iStart+$i & ")+10", "A" & $iStart + $i+1)
		$sZNr = "=SUMME(A" & $iStart + 2 & ")+10"

		_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sZNr, "A5")
	Else
		Dim $aZNr[UBound($aArray) - 2]
		$iStart = 3
		For $i = 0 To UBound($aArray) - 3
;~ 			_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "=SUMME(A" & $iStart+$i & ")+10", "A" & $iStart + $i+1)
			$aZNr[$i] = "=SUMME(A" & $iStart + $i + 1 & ")+10"
		Next
;~ 		_ArrayDisplay($aZNr)
		_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aZNr, "A5")
	EndIf


	$sLEBNrREad = GUICtrlRead($frm_evaufm_txt_lebnr)



	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sLEBNrREad, "C1")

	$oWorkbook.ActiveSheet.Columns.AutoFit
	$oWorkbook.ActiveSheet.PageSetup.Zoom = False
	$oWorkbook.ActiveSheet.PageSetup.FitToPagesWide = 1


	$sDateiname = $sLEBNrREad


	_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\_Aufmaße\" & $sDateiname & ".xlsx", Default, True)
	_Excel_Export($oExcel, $oWorkbook, @ScriptDir & "\_Aufmaße\" & $sDateiname & ".pdf", Default, Default, Default, Default, Default, False)
	_Excel_Close($oExcel)
;~
;~ 	Local $aWorkSheets = _Excel_SheetList($oWorkbook)
;~ 	_DebugArrayDisplay($aWorkSheets)
	FileDelete($sPfadExcel)
EndFunc   ;==>_EVAufmLV_Export_Exel

Func _LV_LVPostliste_load_txt($sTEst = "")
;~ 	Global $iPosNr = _GUICtrlListView_GetItemText($lve_tab_lv_posliste, $vRet[1], 0)
;~ 	Global $iKurztext =  _GUICtrlListView_GetItemText($lve_tab_lv_posliste, $vRet[1], 1)
;~ 	Global $iEinheit =  _GUICtrlListView_GetItemText($lve_tab_lv_posliste, $vRet[1], 2)
;~ 	Global $iPreis =  _GUICtrlListView_GetItemText($lve_tab_lv_posliste, $vRet[1], 3)

	Global $aItem = _GUICtrlListView_GetItemTextArray($lve_tab_lv_posliste, $sTEst)
;~ 	Global $aItem = _GUICtrlListView_GetItemTextArray($lve_tab_lv_posliste, $vRet[1])
;~ 	_ArrayDisplay($aItem)

	If IsArray($aItem) Then
		Global $iPosNr = $aItem[1]
		Global $iKurztext = $aItem[2]
		Global $iEinheit = $aItem[3]
		Global $iPreis = $aItem[4]
		GUICtrlSetData($lve_tab_txt_posnr, $iPosNr)
		GUICtrlSetData($lve_tab_txt_kurztext, $iKurztext)

		GUICtrlSetData($lve_tab_txt_leange, "")
		GUICtrlSetData($lve_tab_txt_breite, "")
		GUICtrlSetData($lve_tab_txt_tiefe, "")
		GUICtrlSetData($lve_tab_txt_menge, "")
		GUICtrlSetData($lve_tab_txt_rsa, "")
		GUICtrlSetData($lve_tab_txt_faktor, "1,0")
		_txt_load_Liste_Langtxt($iPosNr)
		_farben_Eingabe_daten($iEinheit)

		GUICtrlSetData($frm_posfenst_posnr, $iPosNr)
		GUICtrlSetData($frm_posfenst_ltex, $iKurztext)
	Else
		MsgBox(1, "Fehler", "aItem kein Array")
	EndIf







	_farben_Eingabe_daten($iEinheit)
EndFunc   ;==>_LV_LVPostliste_load_txt

Func _LV_LVAufMa_save2temp()
	$sDatum = GUICtrlRead($kopf_tab_txt_datum)
	$sBaustelle = GUICtrlRead($kopf_tab_txt_baustelle)
	$sAbrufNr = GUICtrlRead($kopf_tab_txt_abrufnr)
	$sVertrag = GUICtrlRead($kopf_tab_chb_vertrag)
	$sStartZ = GUICtrlRead($kopf_tab_datum_start)
	$sEndZ = GUICtrlRead($kopf_tab_txt_datum_ende)
	$sAspaN = GUICtrlRead($kopf_tab_txt_aspa)
	$sAspaTel = GUICtrlRead($kopf_tab_txt_telnr)
	$sBauabschnitt = GUICtrlRead($kopf_tab_txt_bauabschnitt)
	$sKolone = GUICtrlRead($kopf_tab_txt_kolone)
	$sSMnr = GUICtrlRead($kopf_tab_txt_smnr)

;~ 	$aTempArray = _Listview2Array($lv_aufm)
;~ 	_ArrayDisplay($aTempArray)
	Local $sItem
	Local $iCount = _GUICtrlListView_GetItemCount($lv_aufm) - 1 ; Anzahl der Listview-Einträge holen
	$sDateiname = "temp"
	Local $hFile = FileOpen(@ScriptDir & "\_Aufmaße\" & $sDateiname & ".txt", 2) ; Datei zum speichern (überschreiben) öffnen
	If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
		FileWriteLine($hFile, "[Kopfdaten]")
		If GUICtrlRead($kopf_tab_rd_teilauf) = $GUI_CHECKED Then
			FileWriteLine($hFile, "Teilaufma=X")
		Else
			FileWriteLine($hFile, "Teilaufma=")
		EndIf
		If GUICtrlRead($kopf_tab_rd_schluss) = $GUI_CHECKED Then
			FileWriteLine($hFile, "Schlussaufma=X")
		Else
			FileWriteLine($hFile, "Schlussaufma=")
		EndIf
		FileWriteLine($hFile, "Datum=" & $sDatum)
		FileWriteLine($hFile, "Baustelle=" & $sBaustelle)
		FileWriteLine($hFile, "AbrufNr=" & $sAbrufNr)
		FileWriteLine($hFile, "SMNr=" & $sSMnr)
		FileWriteLine($hFile, "Vertrag=" & $sVertrag)
		FileWriteLine($hFile, "StartZ=" & $sStartZ)
		FileWriteLine($hFile, "EndZ=" & $sEndZ)
		FileWriteLine($hFile, "AspaN=" & $sAspaN)
		FileWriteLine($hFile, "AspaTel=" & $sAspaTel)
		FileWriteLine($hFile, "Bauabschnitt=" & $sBauabschnitt)
		FileWriteLine($hFile, "Kolone=" & $sKolone)
		FileWriteLine($hFile, "[Aufmaßdaten]")

		For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
			$sItem = _GUICtrlListView_GetItemTextString($lv_aufm, $i) ; die Werte aus dem Listview-Eintrag holen
			FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
		Next
		FileClose($hFile) ; Datei schließen
	Else
;~ 		MsgBox(64, "Fehler beim Speichern", "Datei => " & @CRLF & @ScriptDir & "\Aufmaße\" & $sDateiname & ".txt" & @CRLF & "konnte nicht gespeichert werden!")
	EndIf
EndFunc   ;==>_LV_LVAufMa_save2temp

Func _LV_LVAufMa_save2txt()
	$sDatum = GUICtrlRead($kopf_tab_txt_datum)
	$sBaustelle = GUICtrlRead($kopf_tab_txt_baustelle)
	$sAbrufNr = GUICtrlRead($kopf_tab_txt_abrufnr)
	$sVertrag = GUICtrlRead($kopf_tab_chb_vertrag)
	$sStartZ = GUICtrlRead($kopf_tab_datum_start)
	$sEndZ = GUICtrlRead($kopf_tab_txt_datum_ende)
	$sAspaN = GUICtrlRead($kopf_tab_txt_aspa)
	$sAspaTel = GUICtrlRead($kopf_tab_txt_telnr)
	$sBauabschnitt = GUICtrlRead($kopf_tab_txt_bauabschnitt)
	$sKolone = GUICtrlRead($kopf_tab_txt_kolone)
	$sSMnr = GUICtrlRead($kopf_tab_txt_smnr)

	Local $sItem
	Local $iCount = _GUICtrlListView_GetItemCount($lv_aufm) - 1 ; Anzahl der Listview-Einträge holen

;~ 	? * < > . , \ + : = / " ; [ ] |

	$sDateiname = _CheckDateiname()
	If $iFolderCreate = "True" Then
		DirCreate(@ScriptDir & "\_Aufmaße\" & $sDateiname & "\")

		Local $hFile = FileOpen(@ScriptDir & "\_Aufmaße\" & $sDateiname & "\" & $sDateiname & ".txt", 2)
		$sImportTxt = @ScriptDir & "\_Aufmaße\" & $sDateiname & "\" & $sDateiname & ".txt"
	Else
		Local $hFile = FileOpen(@ScriptDir & "\_Aufmaße\" & $sDateiname & ".txt", 2)
		$sImportTxt = @ScriptDir & "\_Aufmaße\" & $sDateiname & ".txt"
	EndIf

	; Datei zum speichern (überschreiben) öffnen
	If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
		FileWriteLine($hFile, "[Kopfdaten]")
		If GUICtrlRead($kopf_tab_rd_teilauf) = $GUI_CHECKED Then
			FileWriteLine($hFile, "Teilaufma=X")
		Else
			FileWriteLine($hFile, "Teilaufma=")
		EndIf
		If GUICtrlRead($kopf_tab_rd_schluss) = $GUI_CHECKED Then
			FileWriteLine($hFile, "Schlussaufma=X")
		Else
			FileWriteLine($hFile, "Schlussaufma=")
		EndIf
		FileWriteLine($hFile, "Datum=" & $sDatum)
		FileWriteLine($hFile, "Baustelle=" & $sBaustelle)
		FileWriteLine($hFile, "AbrufNr=" & $sAbrufNr)
		FileWriteLine($hFile, "SMNr=" & $sSMnr)
		FileWriteLine($hFile, "Vertrag=" & $sVertrag)
		FileWriteLine($hFile, "StartZ=" & $sStartZ)
		FileWriteLine($hFile, "EndZ=" & $sEndZ)
		FileWriteLine($hFile, "AspaN=" & $sAspaN)
		FileWriteLine($hFile, "AspaTel=" & $sAspaTel)
		FileWriteLine($hFile, "Bauabschnitt=" & $sBauabschnitt)
		FileWriteLine($hFile, "Kolone=" & $sKolone)
		FileWriteLine($hFile, "[Aufmaßdaten]")
		For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
			$sItem = _GUICtrlListView_GetItemTextString($lv_aufm, $i) ; die Werte aus dem Listview-Eintrag holen
			FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
		Next
		FileClose($hFile) ; Datei schließen
;~ 		MsgBox(64, "Datei wurde gespeichert!", "Das Aufmaß wurde gespeichert:" & @CRLF & @ScriptDir & "\Aufmaße\" & $sDateiname & ".txt")
	Else
		MsgBox(64, "Fehler beim Speichern", "Datei => " & @CRLF & @ScriptDir & "\Aufmaße\" & $sDateiname & ".txt" & @CRLF & "konnte nicht gespeichert werden!")
	EndIf

;~ 	_X31_Export($sImportTxt, $sAusgabeX31)
	GUICtrlSetData($kopf_TAB_txt_ausgabeExcel, $sDateiname)
EndFunc   ;==>_LV_LVAufMa_save2txt

func _CheckDateiname()
	$sBaustelle = GUICtrlRead($kopf_tab_txt_baustelle)
	$sBauabschnitt = GUICtrlRead($kopf_tab_txt_bauabschnitt)
	$sSMnr = GUICtrlRead($kopf_tab_txt_smnr)
	$sAbrufNr = GUICtrlRead($kopf_tab_txt_abrufnr)
	
	$sDateiname = ""
	$sDateiname = $sBaustelle & "_" & $sBauabschnitt & "_" & $sSMnr & "_" & $sAbrufNr
	
	$sDateiname = StringReplace($sDateiname, "?", " ")
	$sDateiname = StringReplace($sDateiname, "*", " ")
	$sDateiname = StringReplace($sDateiname, "<", " ")
	$sDateiname = StringReplace($sDateiname, ">", " ")
	$sDateiname = StringReplace($sDateiname, ",", " ")
	$sDateiname = StringReplace($sDateiname, "\", " ")
	$sDateiname = StringReplace($sDateiname, "+", " ")
	$sDateiname = StringReplace($sDateiname, ":", " ")
	$sDateiname = StringReplace($sDateiname, "=", " ")
	$sDateiname = StringReplace($sDateiname, "/", " ")
	$sDateiname = StringReplace($sDateiname, '"', " ")
	$sDateiname = StringReplace($sDateiname, ";", " ")
	$sDateiname = StringReplace($sDateiname, "[", " ")
	$sDateiname = StringReplace($sDateiname, "]", " ")
	$sDateiname = StringReplace($sDateiname, "[", " ")
	$sDateiname = StringReplace($sDateiname, "{", " ")
	$sDateiname = StringReplace($sDateiname, "}", " ")
	$sDateiname = StringReplace($sDateiname, "|", " ")
	$sDateiname = StringReplace($sDateiname, " ", "_")
	$sDateiname = StringReplace($sDateiname, "__", "_")
	
	Return $sDateiname
EndFunc

Func _LV_LVAufMa_export2Excel()
	If GUICtrlRead($kopf_TAB_chb_exportvorl) <> "" Then

		$sPfad_Template = @ScriptDir & "\daten\templates\vorlage_" & GUICtrlRead($kopf_TAB_chb_exportvorl) & ".xlsx"

		FileCopy($sPfad_Template, @ScriptDir & "\_Aufmaße\vorlage_" & GUICtrlRead($kopf_TAB_chb_exportvorl) & ".xlsx", $FC_OVERWRITE + $FC_CREATEPATH)


		_LV_LVAufMa_openExcel(@ScriptDir & "\_Aufmaße\vorlage_" & GUICtrlRead($kopf_TAB_chb_exportvorl) & ".xlsx")



		_LV_LVAufMa_save2txt()
	Else
		MsgBox(64, "Speichern nicht möglich", "Bitte wähle eine Exportvorlage aus.")
	EndIf


EndFunc   ;==>_LV_LVAufMa_export2Excel

Func _LV_LVAufMa_export2Excel_DLP()

	If GUICtrlRead($kopf_TAB_chb_exportvorl) <> "" Then

		$sPfad_Template = @ScriptDir & "\daten\templates\import_DLP.xlsx"
		FileCopy($sPfad_Template, @ScriptDir & "\_Aufmaße\vorlage_" & GUICtrlRead($kopf_TAB_chb_exportvorl) & "_DLP.xlsx", $FC_OVERWRITE + $FC_CREATEPATH)

		Local $aArray = _GUIListViewEx_ReadToArray($LV_Aufm)

		_LV_AufMa_DLP($aArray, @ScriptDir & "\_Aufmaße\vorlage_" & GUICtrlRead($kopf_TAB_chb_exportvorl) & "_DLP.xlsx")

		_LV_LVAufMa_save2txt()
	Else
		;MsgBox(64, "Speichern nicht möglich", "Bitte wähle eine Exportvorlage aus.")
	EndIf




EndFunc   ;==>_LV_LVAufMa_export2Excel_DLP

Func _LV_AufMa_DLP($aData, $sExcelPfad)

	Local $oExcel = _Excel_Open()
	If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF", "Fehler beim Starten von Excel.")

	Local $oWorkbook = _Excel_BookOpen($oExcel, $sExcelPfad)
	If @error Then
		MsgBox($MB_SYSTEMMODAL, "Excel UDF", "Fehler beim Öffnen: " & $sExcelPfad)
		_Excel_Close($oExcel)
	EndIf

	Local $oSheet = $oWorkbook.ActiveSheet

	Local $iRows = UBound($aData)
	Local $aExport[1][6]
	Local $iWrite = 0

	For $i = 0 To $iRows - 1

		; ----------------------------------
		; 🔥 WICHTIG: Nur Zeilen mit OZ zulassen
		; ----------------------------------
		If StringStripWS($aData[$i][1], 3) = "" Then ContinueLoop

		; ----------------------------------
		; Daten übernehmen
		; ----------------------------------
		ReDim $aExport[$iWrite + 1][6]

		$aExport[$iWrite][0] = $aData[$i][1]   ; OZ
		$aExport[$iWrite][2] = $aData[$i][10]  ; Abschnitt/Text
		$aExport[$iWrite][5] = $aData[$i][0]   ; Ergebnis

		$iWrite += 1

	Next
	
;~ 	_DebugArrayDisplay($aExport)
	If $iWrite > 0 Then
		_Excel_RangeWrite($oWorkbook, $oSheet, $aExport, "A2")
	EndIf

	; -------------------------------
	; Kopfdaten
	; -------------------------------
	Local $sDatum = GUICtrlRead($kopf_tab_txt_datum)
	Local $sBaustelle = GUICtrlRead($kopf_tab_txt_baustelle)
	Local $sAbrufNr = GUICtrlRead($kopf_tab_txt_abrufnr)
	Local $sVertrag = GUICtrlRead($kopf_tab_chb_vertrag)
	Local $sStartZ = GUICtrlRead($kopf_TAB_txt_datum)
	Local $sEndZ = GUICtrlRead($kopf_tab_txt_datum_ende)
	Local $sAspaN = GUICtrlRead($kopf_tab_txt_aspa)
	Local $sAspaTel = GUICtrlRead($kopf_TAB_txt_telnr)
	Local $sBauabschnitt = GUICtrlRead($kopf_tab_txt_bauabschnitt)
	Local $sKolone = GUICtrlRead($kopf_TAB_txt_kolone)
	Local $sSMnr = GUICtrlRead($kopf_TAB_txt_smnr)

	Local $sDateiname = $sBaustelle & "_" & $sBauabschnitt & "_" & $sSMnr & "_" & $sAbrufNr
	$sDateiname = StringRegExpReplace($sDateiname, '[\\\/:*?"<>|;,+={}[\]]', " ")
	$sDateiname = StringReplace($sDateiname, " ", "_")
	$sDateiname = StringReplace($sDateiname, "__", "_")

	If $iFolderCreate = "True" Then
		DirCreate(@ScriptDir & "\_Aufmaße\" & $sDateiname & "\")
		_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\_Aufmaße\" & $sDateiname & "\" & $sDateiname & "_DLP.xlsx", Default, True)
	Else
		_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\_Aufmaße\" & $sDateiname & "_DLP.xlsx", Default, True)
	EndIf

	_Excel_Close($oExcel)
	FileDelete($sExcelPfad)

EndFunc

Func _LV_LVAufMa_openExcel($sPfadExcel)
	Local $oExcel = _Excel_Open()
	If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
	Local $oWorkbook = _Excel_BookOpen($oExcel, $sPfadExcel)
	If @error Then
		MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error opening workbook '" & $sPfadExcel & @CRLF & "@error = " & @error & ", @extended = " & @extended)
		_Excel_Close($oExcel)
;~ 		Exit
	EndIf
	Local $aArray = _GUIListViewEx_ReadToArray($LV_Aufm)
;~ 	_ArrayDisplay($aArray)
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aArray, "B8")
;~ 	$iLastZeile = $oWorkbook.ActiveSheet.UsedRange.SpecialCells($xlCellTypeLastCell).Row
	$iLastZeile = UBound($aArray) + 7

	With $oWorkbook.ActiveSheet.Range("A7:N" & $iLastZeile).Borders
		.LineStyle = 1
		.TintAndShade = 0
	EndWith

	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "=SUMME(N8:N" & $iLastZeile & ")", "N6")



	; Zeilen Nummer hinzufügen in 10 schritten
;~ 	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "10", "A8")
;~ 	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "20", "A9")

	;MsgBox(64, "test",  UBound($aArray))

	If UBound($aArray) = 1 Then
;~ 		$iStart = 8
		;	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "=SUMME(A" & $iStart+$i & ")+10", "A" & $iStart + $i+1)
;~ 		$sZNr = "=SUMME(A" & $iStart + 2 & ")+10"

		_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "10", "A8")
	Else
		If UBound($aArray) = 0 Then
		Else
			Dim $aZNr[UBound($aArray)]
			$iStart = 8
			For $i = 0 To UBound($aArray) - 1
;~ 		;	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "=SUMME(A" & $iStart+$i & ")+10", "A" & $iStart + $i+1)
				If $i = 0 Then
					$aZNr[0] = 10
				Else
					$aZNr[$i] = $aZNr[$i - 1] + 10
				EndIf

			Next
;~ 		_ArrayDisplay($aZNr)
			_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aZNr, "A8")
		EndIf

	EndIf


	$sDatum = GUICtrlRead($kopf_tab_txt_datum)
	$sBaustelle = GUICtrlRead($kopf_tab_txt_baustelle)
	$sAbrufNr = GUICtrlRead($kopf_tab_txt_abrufnr)
	$sVertrag = GUICtrlRead($kopf_tab_chb_vertrag)
	$sStartZ = GUICtrlRead($kopf_TAB_txt_datum)
	$sEndZ = GUICtrlRead($kopf_tab_txt_datum_ende)
	$sAspaN = GUICtrlRead($kopf_tab_txt_aspa)
	$sAspaTel = GUICtrlRead($kopf_TAB_txt_telnr)
	$sBauabschnitt = GUICtrlRead($kopf_tab_txt_bauabschnitt)
	$sKolone = GUICtrlRead($kopf_TAB_txt_kolone)
	$sSMnr = GUICtrlRead($kopf_TAB_txt_smnr)

	If GUICtrlRead($kopf_tab_rd_teilauf) = $GUI_CHECKED Then
		_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "X", "H1")
	Else
		_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "", "H1")
	EndIf
	If GUICtrlRead($kopf_tab_rd_schluss) = $GUI_CHECKED Then
		_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "X", "H2")
	Else
		_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "", "H2")
	EndIf
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sDatum, "K1")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sBaustelle, "C3")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sAbrufNr, "K3")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sVertrag, "K2")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sStartZ, "C4")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sEndZ, "F4")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sAspaN, "C5")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sAspaTel, "G5")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sBauabschnitt, "J6")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sKolone, "C6")
	_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sSMnr, "K4")


	$oWorkbook.ActiveSheet.Columns.AutoFit

	$sDateiname = ""
	$sDateiname = $sBaustelle & "_" & $sBauabschnitt & "_" & $sSMnr & "_" & $sAbrufNr
	$sDateiname = StringReplace($sDateiname, "?", " ")
	$sDateiname = StringReplace($sDateiname, "*", " ")
	$sDateiname = StringReplace($sDateiname, "<", " ")
	$sDateiname = StringReplace($sDateiname, ">", " ")
	$sDateiname = StringReplace($sDateiname, ",", " ")
	$sDateiname = StringReplace($sDateiname, "\", " ")
	$sDateiname = StringReplace($sDateiname, "+", " ")
	$sDateiname = StringReplace($sDateiname, ":", " ")
	$sDateiname = StringReplace($sDateiname, "=", " ")
	$sDateiname = StringReplace($sDateiname, "/", " ")
	$sDateiname = StringReplace($sDateiname, '"', " ")
	$sDateiname = StringReplace($sDateiname, ";", " ")
	$sDateiname = StringReplace($sDateiname, "[", " ")
	$sDateiname = StringReplace($sDateiname, "]", " ")
	$sDateiname = StringReplace($sDateiname, "[", " ")
	$sDateiname = StringReplace($sDateiname, "{", " ")
	$sDateiname = StringReplace($sDateiname, "}", " ")
	$sDateiname = StringReplace($sDateiname, "|", " ")
	$sDateiname = StringReplace($sDateiname, " ", "_")
	$sDateiname = StringReplace($sDateiname, "__", "_")

;~ 	$oWorkbook.ActiveSheet.PageSetup.Zoom = False

;~ 	$oWorkbook.ActiveSheet.PageSetup.FitToPagesWide = 1

	If $iFolderCreate = "True" Then
		DirCreate(@ScriptDir & "\_Aufmaße\" & $sDateiname & "\")
		_Excel_Export($oExcel, $oWorkbook, @ScriptDir & "\_Aufmaße\" & $sDateiname & "\" & $sDateiname & ".pdf", Default, Default, Default)
		_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\_Aufmaße\" & $sDateiname & "\" & $sDateiname & ".xlsx", Default, True)
		
		Local $importPfadTxt = @ScriptDir & "\_Aufmaße\" & $sDateiname & "\" & $sDateiname & ".txt"
		Local $ausgabePfadX31 = @ScriptDir & "\_Aufmaße\" & $sDateiname & "\"& $sDateiname & "_x31.x31"
		
	Else
		_Excel_Export($oExcel, $oWorkbook, @ScriptDir & "\_Aufmaße\" & $sDateiname & ".pdf", Default, Default, Default)
		_Excel_BookSaveAs($oWorkbook, @ScriptDir & "\_Aufmaße\" & $sDateiname & ".xlsx", Default, True)
		
		Local $importPfadTxt = @ScriptDir & "\_Aufmaße\" & $sDateiname & ".txt"
		Local $ausgabePfadX31 = @ScriptDir & "\_Aufmaße\" & $sDateiname & "_x31.x31"
	
	EndIf
	_Excel_Close($oExcel)

	FileDelete($sPfadExcel)

EndFunc   ;==>_LV_LVAufMa_openExcel

Func _chb_bemerkung_from_ini()

	$sData = FileRead(@ScriptDir & "\daten\conf.ini") ;Datei einlesen
	$hFile = FileOpen(@ScriptDir & "\daten\conf.ini", $FO_OVERWRITE + $FO_UNICODE) ;im richtigen Format ein Handle zum schreiben eröffnen
	FileWrite($hFile, $sData) ;in Datei schreiben
	FileClose($hFile) ;Handle schliessen

	$sFilePath = $sPfadIni
	Local $aBemerkung = IniReadSection($sFilePath, "Bemerkung")
	_ArraySort($aBemerkung)
;~ 	_ArrayDisplay($aBemerkung)

	Global $cDataB = ""
	For $i = 1 To UBound($aBemerkung) - 1
;~ 		$cDataB  = StringReplace($cDataB , 'Ã¼', "ü")
;~ 		$cDataB  = StringReplace($cDataB , 'Ã¤', "ä")
;~ 		$cDataB  = StringReplace($cDataB , 'Ã¶', "ö")
		$cDataB &= "|" & $aBemerkung[$i][0]
	Next
	$cDataB &= "||"
	GUICtrlSetData($lve_tab_chb_bemerkung, $cDataB, "")
	;;Or GUICtrlSetData($MyControl, $cData, $FileList[1])
EndFunc   ;==>_chb_bemerkung_from_ini

Func _chb_vertragsnr_from_ini()
	_GUICtrlComboBox_ResetContent($kopf_tab_chb_vertrag)
	_GUICtrlComboBox_ResetContent($lve_tab_chb_vertrag)

	$sData = FileRead(@ScriptDir & "\daten\conf.ini") ;Datei einlesen
	$hFile = FileOpen(@ScriptDir & "\daten\conf.ini", $FO_OVERWRITE + $FO_UNICODE) ;im richtigen Format ein Handle zum schreiben eröffnen
	FileWrite($hFile, $sData) ;in Datei schreiben
	FileClose($hFile) ;Handle schliessen

	$sFilePath = $sPfadIni
	Local $aKV = IniReadSection($sFilePath, "LV")
	_ArraySort($aKV)
;~ 	_ArrayDisplay($aKV)

	For $i = 1 To UBound($aKV) - 1
		_GUICtrlComboBox_AddString($kopf_tab_chb_vertrag, $aKV[$i][0])
		_GUICtrlComboBox_AddString($lve_tab_chb_vertrag, $aKV[$i][0])
	Next

;~ 	GUICtrlSetData($kopf_tab_chb_vertrag, $cData, "")
;~ 	GUICtrlSetData($lve_tab_chb_vertrag, $cData, "")
EndFunc   ;==>_chb_vertragsnr_from_ini

Func _kopf_load_from_ini()

	$sData = FileRead(@ScriptDir & "\daten\conf.ini") ;Datei einlesen
	$hFile = FileOpen(@ScriptDir & "\daten\conf.ini", $FO_OVERWRITE + $FO_UNICODE) ;im richtigen Format ein Handle zum schreiben eröffnen
	FileWrite($hFile, $sData) ;in Datei schreiben
	FileClose($hFile) ;Handle schliessen

	$sTeilaufma = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Teilaufma", "xxx")
	$sSchlussaufma = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Schlussaufma", "xxx")
	$sDatum = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Datum", "xxx")
	$sBaustelle = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Baustelle", "xxx")
	$sVertrag = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Vertrag", "xxx")
	$sAbrufNr = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "AbrufNr", "xxx")
	$sStartZ = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "StartZ", "xxx")
	$sEndZ = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "EndZ", "xxx")
	$sAspaN = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "AspaN", "xxx")
	$sAspaTel = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "AspaTel", "xxx")
	$sBauabschnitt = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Bauabschnitt", "xxx")
	$sKolone = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Kolone", "xxx")
	$sSMnr = IniRead(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "SMNr", "xxx")


	_GUICtrlComboBox_ResetContent($kopf_tab_chb_vertrag)
	_GUICtrlComboBox_ResetContent($lve_tab_chb_vertrag)

	$sFilePath = $sPfadIni
	Local $aKV = IniReadSection($sFilePath, "LV")
	_ArraySort($aKV)
;~ 	_ArrayDisplay($aKV)

	For $i = 1 To UBound($aKV) - 1
		_GUICtrlComboBox_AddString($kopf_tab_chb_vertrag, $aKV[$i][0])
		_GUICtrlComboBox_AddString($lve_tab_chb_vertrag, $aKV[$i][0])
	Next

	GUICtrlSetData($kopf_TAB_txt_datum, $sDatum)
	GUICtrlSetData($kopf_TAB_txt_baustelle, $sBaustelle)

;~ 	GUICtrlSetData($kopf_TAB_chb_vertrag, $sVertrag)
;~ 	Local $aChb_rv = StringRegExp(GUICtrlRead($kopf_TAB_chb_vertrag), "([^_]+)", 3)
;~ 	_ArrayDisplay($aChb_rv)
;~ 	If IsArray($aChb_rv) Then
;~ 		Local $sChb_rv = $aChb_rv[0]
;~ 	Else
;~ 		$sChb_rv = ""
;~ 	EndIf


;~ 	GUICtrlSetData($kopf_TAB_chb_vertrag, $sChb_rv)
	_GUICtrlComboBox_SelectString($kopf_tab_chb_vertrag, $sVertrag)
	GUICtrlSetData($kopf_TAB_txt_abrufnr, $sAbrufNr)
	GUICtrlSetData($kopf_TAB_datum_start, $sStartZ)
	GUICtrlSetData($kopf_TAB_txt_datum_ende, $sEndZ)
	GUICtrlSetData($kopf_tab_txt_aspa, $sAspaN)
	_GUICtrlComboBox_SelectString($kopf_tab_txt_aspa, $sAspaN)
	GUICtrlSetData($kopf_TAB_txt_telnr, $sAspaTel)
	GUICtrlSetData($kopf_TAB_txt_bauabschnitt, $sBauabschnitt)
	GUICtrlSetData($kopf_TAB_txt_kolone, $sKolone)
	GUICtrlSetData($kopf_TAB_txt_smnr, $sSMnr)

;~ 	GUICTRLRead($Radio2) = $GUI_CHECKED
;~ MsgBox(64,"",$sTeilaufma)
	If $sTeilaufma = "X" Then
		GUICtrlSetState($kopf_tab_rd_teilauf, $GUI_CHECKED)
;~ 		GUICtrlSetState($radio_1, $GUI_CHECKED)
	Else
		GUICtrlSetState($kopf_tab_rd_teilauf, $GUI_UNCHECKED)
	EndIf
	If $sSchlussaufma = "X" Then
		GUICtrlSetState($kopf_tab_rd_schluss, $GUI_CHECKED)
	Else
		GUICtrlSetState($kopf_tab_rd_schluss, $GUI_UNCHECKED)
	EndIf


	$aStartDatum = StringSplit($sStartZ, ".")
	If IsArray($aStartDatum) Then
		If UBound($aStartDatum) = 2 Then
		Else

;~ 	_DebugArrayDisplay($aStartDatum)
			$iYear = $aStartDatum[3]
			$iMonth = $aStartDatum[2]
			$iDay = $aStartDatum[1]
			_GUICtrlMonthCal_SetCurSel($kopf_TAB_datumfeld_start, $iYear, $iMonth, $iDay)
		EndIf
	EndIf


	$aEnde = StringSplit($sEndZ, ".")
	If IsArray($aEnde) Then
		If UBound($aEnde) = 2 Then
		Else
			$iYear = $aEnde[0]
			$iMonth = $aEnde[1]
			$iDay = $aEnde[2]

			_GUICtrlMonthCal_SetCurSel($kopf_TAB_datumfeld_ende, $iYear, $iMonth, $iDay)
		EndIf
	EndIf
EndFunc   ;==>_kopf_load_from_ini

Func _kopf_save_2_ini()
	$sDatum = GUICtrlRead($kopf_TAB_txt_datum)
	$sBaustelle = GUICtrlRead($kopf_TAB_txt_baustelle)
	$sAbrufNr = GUICtrlRead($kopf_TAB_txt_abrufnr)
	$sVertrag = GUICtrlRead($kopf_TAB_chb_vertrag)
	$sStartZ = GUICtrlRead($kopf_TAB_datum_start)
	$sEndZ = GUICtrlRead($kopf_TAB_txt_datum_ende)
	$sAspaN = GUICtrlRead($kopf_tab_txt_aspa)
	$sAspaTel = GUICtrlRead($kopf_TAB_txt_telnr)
	$sBauabschnitt = GUICtrlRead($kopf_TAB_txt_bauabschnitt)
	$sKolone = GUICtrlRead($kopf_TAB_txt_kolone)
	$sSMnr = GUICtrlRead($kopf_TAB_txt_smnr)

	If GUICtrlRead($kopf_tab_rd_teilauf) = $GUI_CHECKED Then
		IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Teilaufma", "X")
	Else
		IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Teilaufma", "")
	EndIf
	If GUICtrlRead($kopf_tab_rd_schluss) = $GUI_CHECKED Then
		IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Schlussaufma", "X")
	Else
		IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Schlussaufma", "")
	EndIf
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Datum", $sDatum)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Baustelle", $sBaustelle)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "AbrufNr", $sAbrufNr)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "StartZ", $sStartZ)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "EndZ", $sEndZ)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Vertrag", $sVertrag)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "AspaN", $sAspaN)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "AspaTel", $sAspaTel)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Bauabschnitt", $sBauabschnitt)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "Kolone", $sKolone)
	IniWrite(@ScriptDir & "\daten\conf.ini", "Kopfdaten", "SMNr", $sSMnr)
EndFunc   ;==>_kopf_save_2_ini

Func _txt_load_Liste_Langtxt($iPosNr)

	Dim $aChb_rv[1]
	$aChb_rv[0] = GUICtrlRead($lve_tab_chb_vertrag)

;~ 	Local $aChb_rv = StringRegExp(GUICtrlRead($lve_tab_chb_vertrag), "([^_]+)", 3)
	If IsArray($aChb_rv) Then
		Local $sChb_rv = $aChb_rv[0]

		$sPfadLVPostxt = @ScriptDir & "\daten\LV\" & $sChb_rv & "\" & $iPosNr & ".txt"
		Local $hFileOpen = FileOpen($sPfadLVPostxt)
		If $hFileOpen = -1 Then
;~ 		MsgBox(64, "Error", $iPosNr & ".txt konnte nicht gefunden werden. Überprüfen ob .txt angelegt ist!")
			Return False
		EndIf

		; Read the contents of the file using the handle returned by FileOpen.
		Local $sFileRead = FileRead($hFileOpen)
;~ 	ShellExecute($sPfadLVPostxt)
;~ 	MsgBox(64,"",$sFileRead)
		GUICtrlSetData($lve_tab_ed_langtext, $sFileRead)
		GUICtrlSetData($frm_posfenst_ltext, $sFileRead)

		FileClose($hFileOpen)
	EndIf
EndFunc   ;==>_txt_load_Liste_Langtxt

Func _txt_save_Langtext()
	Local $aChb_rv = StringRegExp(GUICtrlRead($lve_tab_chb_vertrag), "([^_]+)", 3)
	If IsArray($aChb_rv) Then
		Local $sChb_rv = $aChb_rv[0]

		$sPfadLVPostxt = @ScriptDir & "\daten\LV\" & $sChb_rv & "\" & $iPosNr & ".txt"
		Local $hFileOpen = FileOpen($sPfadLVPostxt, 8 + 2 + 64)
		If $hFileOpen = -1 Then
			MsgBox($MB_SYSTEMMODAL, "", "Es ist während dem lesen der Datei ein Fehler aufgetreten.")
			Return False
		EndIf
		$stxt = GUICtrlRead($frm_posfenst_ltext)
		FileWrite($hFileOpen, $stxt)

		; Schließt das Handle welches von FileOpen zurückgegeben wurde.
		FileClose($hFileOpen)
	EndIf
EndFunc   ;==>_txt_save_Langtext

Func _Load_LV_From_Chb()
	_Write_to_Console("lade Vertragsdaten")
	Dim $aChb_rv[1]
;~ 	Local $aChb_rv = StringRegExp(GUICtrlRead($lve_tab_chb_vertrag), "([^_]+)", 3)
	$aChb_rv[0] = GUICtrlRead($lve_tab_chb_vertrag)
;~ 	_DebugArrayDisplay($aChb_rv)
	If IsArray($aChb_rv) Then



		Local $sChb_rv = $aChb_rv[0]

		;Vertrag von Kopdaten in Aufmaßhile
		$sIndexChbVertrag = _GUICtrlComboBox_FindString($chb_vertrag, "data_" & $sChb_rv & ".ini")
		_GUICtrlComboBox_SetCurSel($chb_vertrag, $sIndexChbVertrag)

;~ 	local $sIniWert = IniRead($sPfadIni, "LV", $sChb_rv, "")
		Local $sFilePath = @ScriptDir & "\daten\LV\" & $sChb_rv & ".txt"
		Local $aArray

		_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($lve_tab_lv_posliste))
		_FileReadToArray($sFilePath, $aArray)
		_ArrayDelete($aArray, 0)
		_ArraySort($aArray)

;~ 	_DebugArrayDisplay($aArray)
;~ 	MsgBox(64,$sChb_rv,$sFilePath)
		If IsArray($aArray) Then
			Local $aSplit = StringSplit($aArray[0], "|")
;~ 	_ArrayDisplay($aSplit)
			Dim $aListeImport[UBound($aArray)][$aSplit[0]]
;~ 		 _GUICtrlListView_AddArray($ListView1, $aArray)
			For $i = 0 To UBound($aArray) - 1
				$aTemp = StringSplit($aArray[$i], "|")

				If $aTemp[0] <> 4 Then
					_ArrayDisplay($aTemp)
				EndIf
				For $ii = 1 To UBound($aTemp) - 1
					$aListeImport[$i][$ii - 1] = $aTemp[$ii]

				Next
			Next
			_GUICtrlListView_AddArray($lve_tab_lv_posliste, $aListeImport)
			_ListviewAutoWidthHeader($lve_tab_lv_posliste)




			_Pflichtfelder2Array()
			;direkt in Array schreiben.
;~ 		$aGLVEx_Data[2][2] = $aListeImport
;~ 		__GUIListViewEx_ReWriteLV($iLV_PosList_Index, $aListeImport,"", 2, "")
			$iLV_PosList_Index = _GUIListViewEx_Init($lve_tab_lv_posliste, $aListeImport, 0, 0, False, 1 + 512)
		Else
			MsgBox(64, "kein LV gefunden", "kein passendes LV im Programm gefunden." & @CRLF & "Bitte prüfen...")
		EndIf


	EndIf
EndFunc   ;==>_Load_LV_From_Chb

Func _farben_Eingabe_daten($sEinheit)

	Select
		Case $sEinheit = "ST"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0xFEFEFE)
		Case $sEinheit = "LE"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0xFEFEFE)
		Case $sEinheit = "STD"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0xFEFEFE)
		Case $sEinheit = "M"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0xFEFEFE)
		Case $sEinheit = "M2"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0xFEFEFE)
		Case $sEinheit = "M3"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0x00FF11)
		Case $sEinheit = "Psch"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0xFEFEFE)
		Case $sEinheit = "h"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0xFEFEFE)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0xFEFEFE)
		Case $sEinheit = "t"
			GUICtrlSetBkColor($lve_tab_txt_menge, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_leange, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_tiefe, 0x00FF11)
			GUICtrlSetBkColor($lve_tab_txt_breite, 0x00FF11)
	EndSelect

EndFunc   ;==>_farben_Eingabe_daten

Func _search_posList()

	Dim $aChb_rv[1]
	$aChb_rv[0] = GUICtrlRead($lve_tab_chb_vertrag)

;~ 	Local $aChb_rv = StringRegExp(GUICtrlRead($lve_tab_chb_vertrag), "([^_]+)", 3)
	If IsArray($aChb_rv) Then
		Local $sChb_rv = $aChb_rv[0]
;~ 	local $sIniWert = IniRead($sPfadIni, "LV", $sChb_rv, "")
		Local $sFilePath = @ScriptDir & "\daten\LV\" & $sChb_rv & ".txt"
		Local $aArray

		_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($lve_tab_lv_posliste))
		_FileReadToArray($sFilePath, $aArray)
		_ArrayDelete($aArray, 0)
		_ArraySort($aArray)

;~ 	_ArrayDisplay($aArray)
;~ 	MsgBox(64,$sChb_rv,$sFilePath)
		Local $aSplit = StringSplit($aArray[0], "|")
;~ 	_ArrayDisplay($aSplit)
		Dim $aListeImport[UBound($aArray)][$aSplit[0]]
;~ 		 _GUICtrlListView_AddArray($ListView1, $aArray)
		For $i = 0 To UBound($aArray) - 1
			$aTemp = StringSplit($aArray[$i], "|")

			If $aTemp[0] <> 4 Then
				_ArrayDisplay($aTemp)
			EndIf
			For $ii = 1 To UBound($aTemp) - 1
				$aListeImport[$i][$ii - 1] = $aTemp[$ii]

			Next
		Next


		_GUICtrlListView_DeleteAllItems($lve_tab_lv_posliste)

		$sText = GUICtrlRead($lve_tab_txt_suche)

		If $sText = "" Then
			_GUIListViewEx_Close($iLV_PosList_Index)
			_Load_LV_From_Chb()
;~ 		_GUICtrlListView_AddArray($lv_lv_pos, $aListeImport)
		Else
			_GUIListViewEx_Close($iLV_PosList_Index)
;~ 		_ArrayDisplay($aListeImport)
			If StringIsDigit($sText) Then
				;bei zahlen in pOsnr spalte suchen
;~ 			MsgBox(64,"uahlen",$sText)
				$iIndexs = _ArrayFindAll($aListeImport, $sText, 0, 0, 0, 1, 0)
			Else
				;bei nicht zahlen im kurztext suchen
;~ 			MsgBox(64,"kurztext",$sText)
				$iIndexs = _ArrayFindAll($aListeImport, $sText, 0, 0, 0, 1, 1)
			EndIf
;~ 		$iIndexs = _ArrayFindAll($aListeImport, $sText, 0, 0, 0, 1, 0)

;~ 		_ArrayDisplay($iIndexs)
			For $i = 0 To UBound($iIndexs) - 1
				_GUICtrlListView_AddItem($lve_tab_lv_posliste, $aListeImport[$iIndexs[$i]][0])
				_GUICtrlListView_AddSubItem($lve_tab_lv_posliste, $i, $aListeImport[$iIndexs[$i]][1], 1)
				_GUICtrlListView_AddSubItem($lve_tab_lv_posliste, $i, $aListeImport[$iIndexs[$i]][2], 2)
				_GUICtrlListView_AddSubItem($lve_tab_lv_posliste, $i, $aListeImport[$iIndexs[$i]][3], 3)
			Next

			Global $aLV_List_left = _GUIListViewEx_ReadToArray($lve_tab_lv_posliste, 1)
			; The array as read from Right ListView and used subsequently
			;_ArrayDisplay($aLV_List_Right, "Read from Right ListView")

			; Initiate LVEx - use read content as array - count parameter set - red insert mark - drag image - move edit by click + headers editable
			$iLV_PosList_Index = _GUIListViewEx_Init($lve_tab_lv_posliste, $aLV_List_left, 0, 0, False, 1 + 512)
		EndIf
	Else
		MsgBox(64, "Fehler", "Vertrag auswählen.")
	EndIf

EndFunc   ;==>_search_posList

Func _Pflichtfelder2Array()
	Global $aPflichtfelder
	Local $sFilePath = GUICtrlRead($lve_tab_chb_vertrag)
	$aAVertrag = StringRegExp($sFilePath, '([^_]+)', 3)
	If IsArray($aAVertrag) Then
		$sFilePath = @ScriptDir & "\daten\LV\" & $aAVertrag[0] & "_pflicht.txt"
	EndIf
	_FileReadToArray($sFilePath, $aPflichtfelder)
	_ArrayDelete($aPflichtfelder, 0)
EndFunc   ;==>_Pflichtfelder2Array

Func _replaceKom2Punkt($sString)
	Return StringReplace($sString, ",", ".")
EndFunc   ;==>_replaceKom2Punkt

Func _replacePunkt2Koma($sString)
	Return StringReplace($sString, ".", ",")
EndFunc   ;==>_replacePunkt2Koma

Func _Listview2Array($sNameListview)
	$aSpalten = _GUICtrlListView_GetItemTextArray($sNameListview)
	$iColums = $aSpalten[0]
	$iRows = _GUICtrlListView_GetItemCount($sNameListview)
;~ 	ConsoleWrite($iRows)
;~ 	_DebugArrayDisplay($aSpalten)
	If $iColums = 1 Then
	Else
		;2dim Array
		Dim $aTemp[$iRows][$iColums]
		For $i = 0 To UBound($aTemp) - 1
			$aItem = _GUICtrlListView_GetItemTextArray($sNameListview, $i)
			For $ii = 1 To UBound($aItem) - 1
				$aTemp[$i][$ii - 1] = $aItem[$ii]
			Next
		Next
;~ 		_setColor2Array($aTemp)
		Return $aTemp
	EndIf

EndFunc   ;==>_Listview2Array

Func _EVAufmLV_mark_copi()
	$array = _GUICtrlListView_GetSelectedIndices($frm_lv_evaufm, True)
	$iCount = _GUICtrlListView_GetItemCount($frm_lv_evaufm)
;~ 	_ArrayDisplay($array)
	Dim $aListAufmass[1][13]
	For $i = 1 To $array[0]
		Local $sZeile = ""

		$aTemp = _GUICtrlListView_GetItemTextArray($frm_lv_evaufm, $array[$i])
;~ 		$sZeile = _GUICtrlListView_GetItemTextString($LV_AM, $array[$i])
;~ 		_ArrayDisplay($aTemp)
		$aListAufmass[0][0] = $aTemp[1]
		$aListAufmass[0][1] = $aTemp[2]
		$aListAufmass[0][2] = $aTemp[3]
		$aListAufmass[0][3] = $aTemp[4]
		$aListAufmass[0][4] = $aTemp[5]
		$aListAufmass[0][5] = $aTemp[6]
		$aListAufmass[0][6] = $aTemp[7]
		$aListAufmass[0][7] = $aTemp[8]
		$aListAufmass[0][8] = $aTemp[9]
		$aListAufmass[0][9] = $aTemp[10]
		$aListAufmass[0][10] = $aTemp[11]
		$aListAufmass[0][11] = $aTemp[12]
		$aListAufmass[0][12] = $aTemp[13]
;~ 		_GUICtrlListView_AddArray($LV_Aufm, $aListAufmass)
		$iCount = -1
		_GUIListViewEx_InsertSpec($iLV_Aufma_Index, $iCount, $aListAufmass)
	Next

;~ 		_GUICtrlListView_AddArray($LV_Aufm, $aListAufmass)
EndFunc   ;==>_EVAufmLV_mark_copi

Func _EVAufmLV_import_txt()
	Local $sFilePath, $aArray
;~ 	_GUICtrlListView_DeleteAllItems($LV_Aufm)
	$aListeImport = ""
	Local $message = "Bitte wählen Sie die Import Datei aus!"

	Local $sFilePath = FileOpenDialog($message, @ScriptDir & "\_Aufmaße\", "Text (*.txt)", 1 + 4)
	If @error Then
		MsgBox(4096, "", "Keine Datei(en) ausgewählt")
	Else
		$sFilePath = StringReplace($sFilePath, "|", @CRLF)
;~ 		MsgBox(4096, "", "Es wurde(n) " & $var & " ausgewählt")
		_FileReadToArray($sFilePath, $aArray)
;~ 	_ArrayDisplay($aArray)
		_Write_to_Console("importiere Aufmaß...")
		If IsArray($aArray) Then
			Dim $aListeImport[$aArray[0] - 15][13]
			$iZ = 0
			For $i = 16 To UBound($aArray) - 1
				$aTemp = StringSplit($aArray[$i], "|")
				For $ii = 1 To UBound($aTemp) - 1
					$aListeImport[$iZ][$ii - 1] = $aTemp[$ii]
				Next
				$iZ = $iZ + 1
			Next
			_GUICtrlListView_AddArray($frm_lv_evaufm, $aListeImport)

		EndIf


	EndIf
EndFunc   ;==>_EVAufmLV_import_txt

Func _Summe_Aktuallisieren()
	Local $aArrayAufmaListe = _GUIListViewEx_ReadToArray($LV_Aufm, 1)
;~ 	_DebugArrayDisplay($aArrayAufmaListe)
	$iSummeset = 0
	For $i = 0 To UBound($aArrayAufmaListe) - 1
		Select
			Case $aArrayAufmaListe[$i][7] = "M"
				$aArrayAufmaListe[$i][6] = $aArrayAufmaListe[$i][3]
			Case $aArrayAufmaListe[$i][7] = "M2"
				$sMengeM2 = _replaceKom2Punkt($aArrayAufmaListe[$i][3]) * _replaceKom2Punkt($aArrayAufmaListe[$i][4]) ;Länge x Breite = Menge vorne
				$aArrayAufmaListe[$i][6] = _replacePunkt2Koma($sMengeM2) ;Menge neu Berechnen;
			Case $aArrayAufmaListe[$i][7] = "M3"
				$sMengeM3 = _replaceKom2Punkt($aArrayAufmaListe[$i][3]) * _replaceKom2Punkt($aArrayAufmaListe[$i][4]) * _replaceKom2Punkt($aArrayAufmaListe[$i][5]) ;länge x Breite x Tiefe = Menge
				$aArrayAufmaListe[$i][6] = _replacePunkt2Koma($sMengeM3)
			Case $aArrayAufmaListe[$i][7] = "t"
				$sMengeM3 = _replaceKom2Punkt($aArrayAufmaListe[$i][3]) * _replaceKom2Punkt($aArrayAufmaListe[$i][4]) * _replaceKom2Punkt($aArrayAufmaListe[$i][5]) ;länge x Breite x Tiefe = Menge
				$aArrayAufmaListe[$i][6] = _replacePunkt2Koma($sMengeM3)
;~ 				$aArrayAufmaListe[$i][6] = $aArrayAufmaListe[$i][3]

			Case $aArrayAufmaListe[$i][7] = "LE"


		EndSelect

		ConsoleWrite($aArrayAufmaListe[$i][6] & @CRLF)
		ConsoleWrite($sMengeM2 & @CRLF)
		ConsoleWrite($sMengeM3 & @CRLF)
		; Menge * Faktor = G-Menge
		$sMenge = _replaceKom2Punkt($aArrayAufmaListe[$i][6]) * _replaceKom2Punkt($aArrayAufmaListe[$i][2])
		$aArrayAufmaListe[$i][10] = _replacePunkt2Koma($sMenge) ; Menge (Menge * Faktor)

		;G-Menge * Einzellspreis = Summe
		$iSumme = _replaceKom2Punkt($aArrayAufmaListe[$i][10]) * _replaceKom2Punkt($aArrayAufmaListe[$i][11]) ;Menge hinten  * Faktor)
		$aArrayAufmaListe[$i][12] = _replacePunkt2Koma($iSumme)
		_ArrayDisplay($aArrayAufmaListe)
		$iSummeset = $iSummeset + $iSumme


	Next
;~ 	_Write_to_Console("Preise aktualisieren")
	GUICtrlSetData($lbl_summe, "Summe = " & _StringAddThousandsSepEx(_PriceRound($iSummeset)) & " €")
	_Write_to_Console("Summe = " & _StringAddThousandsSepEx(_PriceRound($iSummeset)) & " €")
	Return _replacePunkt2Koma($iSummeset)

EndFunc   ;==>_Summe_Aktuallisieren

Func _Summe_Aktuallisieren_EVAufm()
	Local $aArrayAufmaListe = _GUIListViewEx_ReadToArray($frm_lv_evaufm, 1)
;~ 	_DebugArrayDisplay($aArrayAufmaListe)
	$iSummeset = 0
	For $i = 0 To UBound($aArrayAufmaListe) - 1
		Select
			Case $aArrayAufmaListe[$i][7] = "M"
				$aArrayAufmaListe[$i][6] = $aArrayAufmaListe[$i][3]
			Case $aArrayAufmaListe[$i][7] = "M2"
				$sMengeM2 = _replaceKom2Punkt($aArrayAufmaListe[$i][3]) * _replaceKom2Punkt($aArrayAufmaListe[$i][4]) ;Länge x Breite = Menge vorne
				$aArrayAufmaListe[$i][6] = _replacePunkt2Koma($sMengeM2) ;Menge neu Berechnen;
			Case $aArrayAufmaListe[$i][7] = "M3"
				$sMengeM3 = _replaceKom2Punkt($aArrayAufmaListe[$i][3]) * _replaceKom2Punkt($aArrayAufmaListe[$i][4]) * _replaceKom2Punkt($aArrayAufmaListe[$i][5]) ;länge x Breite x Tiefe = Menge
				$aArrayAufmaListe[$i][6] = _replacePunkt2Koma($sMengeM3)
			Case $aArrayAufmaListe[$i][7] = "t"
				$sMengeM3 = _replaceKom2Punkt($aArrayAufmaListe[$i][3]) * _replaceKom2Punkt($aArrayAufmaListe[$i][4]) * _replaceKom2Punkt($aArrayAufmaListe[$i][5]) ;länge x Breite x Tiefe = Menge
				$aArrayAufmaListe[$i][6] = _replacePunkt2Koma($sMengeM3)
			Case $aArrayAufmaListe[$i][7] = "LE"
;~ 				$aArrayAufmaListe[$i][6] = $aArrayAufmaListe[$i][3]

		EndSelect

;~ 		ConsoleWrite($aArrayAufmaListe[$i][6]& @CRLF)
;~ 		ConsoleWrite($sMengeM2& @CRLF)
;~ 		ConsoleWrite($sMengeM3& @CRLF)
		; Menge * Faktor = G-Menge
		$sMenge = _replaceKom2Punkt($aArrayAufmaListe[$i][6]) * _replaceKom2Punkt($aArrayAufmaListe[$i][2])
		$aArrayAufmaListe[$i][10] = _replacePunkt2Koma($sMenge) ; Menge (Menge * Faktor)

		;G-Menge * Einzellspreis = Summe
		$iSumme = _replaceKom2Punkt($aArrayAufmaListe[$i][10]) * _replaceKom2Punkt($aArrayAufmaListe[$i][11]) ;Menge hinten  * Faktor)
		$aArrayAufmaListe[$i][12] = _replacePunkt2Koma($iSumme)
;~ 	_ArrayDisplay($aListAufmass)
		$iSummeset = $iSummeset + $iSumme


	Next
	_Write_to_Console("Preise aktualisieren")
	GUICtrlSetData($frm_evaufm_lbl_summe, "Summe = " & _StringAddThousandsSepEx(_PriceRound($iSummeset)) & " €")
	_Write_to_Console("Summe = " & _PriceRound($iSummeset) & " €")


EndFunc   ;==>_Summe_Aktuallisieren_EVAufm

Func _Aufma_Listview_werte_aktu()
	$aInhalt = ""
;~ 	$aGLVEx_Data[$iLV_Left_Index][19] = 1
	_GUIListViewEx_SetActive($iLV_Aufma_Index)
	$aInhalt = _GUIListViewEx_ReturnArray($iLV_Aufma_Index, 3)
;~ 	Global $iLV_Left_Index = _GUIListViewEx_Init($LV_Aufm, $aInhalt, 0, 0, True, 2 + 32)

;~ 	$aColor = _GUIListViewEx_ReturnArray($iLV_Left_Index, 3)
	$iSummeset = 0
;~ 	_DebugArrayDisplay($aInhalt)


	If IsArray($aInhalt) Then
		If UBound($aInhalt) < 1 Then

		Else
;~ 		_ArrayDisplay($aColor)
;~ 				_DebugArrayDisplay($aInhalt)

			For $i = 0 To UBound($aInhalt) - 1
				;Ändere Kurztext
;~ 			$aInhalt[$i][1] ; PosNr

				;Abfrage nach Einheit
				Select
					Case $aInhalt[$i][7] = "M"
						;ändere meter Zeile 3 mit Menge
						$aInhalt[$i][6] = $aInhalt[$i][3]
						_GUICtrlListView_AddSubItem($lv_aufm, $i, $aInhalt[$i][3], 6)
						;Preis ändern

					Case $aInhalt[$i][7] = "M2"
						;Länge x Breite = Menge vorne
						$sMengeM2 = _replaceKom2Punkt($aInhalt[$i][3]) * _replaceKom2Punkt($aInhalt[$i][4])
						$aInhalt[$i][6] = _replacePunkt2Koma($sMengeM2)     ;Menge neu Berechnen;
						_GUICtrlListView_AddSubItem($lv_aufm, $i, $aInhalt[$i][6], 6)
						;Preis ändern
						$sMengeM2 = _replaceKom2Punkt($aInhalt[$i][3]) * _replaceKom2Punkt($aInhalt[$i][4])     ;Länge x Breite = Menge vorne
						$aInhalt[$i][6] = _replacePunkt2Koma($sMengeM2)     ;Menge neu Berechnen;
					Case $aInhalt[$i][7] = "M3"
						;länge x Breite x Tiefe = Menge
						$sMengeM3 = _replaceKom2Punkt($aInhalt[$i][3]) * _replaceKom2Punkt($aInhalt[$i][4]) * _replaceKom2Punkt($aInhalt[$i][5])
						$aInhalt[$i][6] = _replacePunkt2Koma($sMengeM3)
						_GUICtrlListView_AddSubItem($lv_aufm, $i, $aInhalt[$i][6], 6)
						;preis Ändern
						$sMengeM3 = _replaceKom2Punkt($aInhalt[$i][3]) * _replaceKom2Punkt($aInhalt[$i][4]) * _replaceKom2Punkt($aInhalt[$i][5])     ;länge x Breite x Tiefe = Menge
						$aInhalt[$i][6] = _replacePunkt2Koma($sMengeM3)
					Case $aInhalt[$i][7] = "LE"
;~ 					$aInhalt[$i][6] = $aInhalt[$i][3]
					Case $aInhalt[$i][7] = "ST"
;~ 					$aInhalt[$i][6] = $aInhalt[$i][3]
					Case $aInhalt[$i][7] = "STD"
;~ 					$aInhalt[$i][6] = $aInhalt[$i][3]
					Case $aInhalt[$i][7] = "t"
						$sMengeM3 = _replaceKom2Punkt($aInhalt[$i][3]) * _replaceKom2Punkt($aInhalt[$i][4]) * _replaceKom2Punkt($aInhalt[$i][5])
						$aInhalt[$i][6] = _replacePunkt2Koma($sMengeM3)
						_GUICtrlListView_AddSubItem($lv_aufm, $i, $aInhalt[$i][6], 6)
						;preis Ändern
						$sMengeM3 = _replaceKom2Punkt($aInhalt[$i][3]) * _replaceKom2Punkt($aInhalt[$i][4]) * _replaceKom2Punkt($aInhalt[$i][5])     ;länge x Breite x Tiefe = Menge
						$aInhalt[$i][6] = _replacePunkt2Koma($sMengeM3)
				EndSelect
				;ändere Menge hinten mit Mengevorne * Faktor
				$iMengeVorne = _replaceKom2Punkt($aInhalt[$i][6])
				$iFakotr = _replaceKom2Punkt($aInhalt[$i][2])
				$iMengeHinten = $iMengeVorne * $iFakotr
				$aInhalt[$i][10] = _replacePunkt2Koma($iMengeHinten)
				_GUICtrlListView_AddSubItem($lv_aufm, $i, $aInhalt[$i][10], 10)
				;ändere Gesamtpreishinten (MengeHinten*Einzellpreis)
				$iGesamtsumme = $iMengeHinten * _replaceKom2Punkt($aInhalt[$i][11])
				$aInhalt[$i][12] = _replacePunkt2Koma($iGesamtsumme)
				_GUICtrlListView_AddSubItem($lv_aufm, $i, $aInhalt[$i][12], 12)
				;0 Nullen hinten löschen
				If $aInhalt[$i][12] = "0" Or $aInhalt[$i][10] = "0" Then
					$aInhalt[$i][12] = ""
					$aInhalt[$i][10] = ""
					_GUICtrlListView_AddSubItem($lv_aufm, $i, "", 12)
					_GUICtrlListView_AddSubItem($lv_aufm, $i, "", 10)
				EndIf

				; Menge * Faktor = G-Menge
				$sMenge = _replaceKom2Punkt($aInhalt[$i][6]) * _replaceKom2Punkt($aInhalt[$i][2])
				$aInhalt[$i][10] = _replacePunkt2Koma($sMenge)     ; Menge (Menge * Faktor)

				;G-Menge * Einzellspreis = Summe
				$iSumme = _replaceKom2Punkt($aInhalt[$i][10]) * _replaceKom2Punkt($aInhalt[$i][11])     ;Menge hinten  * Faktor)
				$aInhalt[$i][12] = _replacePunkt2Koma($iSumme)
;~ 	_ArrayDisplay($aListAufmass)
				$iSummeset = $iSummeset + $iSumme
			Next
			GUICtrlSetData($lbl_summe, "Summe = " & _StringAddThousandsSepEx(_PriceRound($iSummeset)) & " €")
			GUICtrlSetData($frm_extern_lbl_preis, "Summe = " & _StringAddThousandsSepEx(_PriceRound($iSummeset)) & " €")
;~ 		_GUICtrlListView_DeleteAllItems($lv_aufm)
;~ 		_GUICtrlListView_AddArray($lv_aufm, $aInhalt)

		EndIf
	EndIf

EndFunc   ;==>_Aufma_Listview_werte_aktu

Func _ArryRemoveBlanks(ByRef $arr)
	$idx = 0
	For $i = 0 To UBound($arr) - 1
		If $arr[$i] <> "" Then
			$arr[$idx] = $arr[$i]
			$idx += 1
		EndIf
	Next
	If IsArray($arr) Then
		ReDim $arr[$idx]
	EndIf
EndFunc   ;==>_ArryRemoveBlanks

Func _Check_Positionen_ImVertrag()
	$aArray = _GUIListViewEx_ReadToArray($LV_Aufm, 0)
;~ 	_ArrayDisplay($aArray, "LV-Liste")

	$aArrayUnique = _ArrayUnique($aArray, 1) ; Create a unique array of the second column.

	_ArryRemoveBlanks($aArrayUnique)
	_ArrayDelete($aArrayUnique, 0)
	_ArraySort($aArrayUnique)


	Local $sChb_rv = GUICtrlRead($lve_tab_chb_vertrag)
;~ 	local $sIniWert = IniRead($sPfadIni, "LV", $sChb_rv, "")
	Local $sFilePath = @ScriptDir & "\daten\LV\" & $sChb_rv & ".txt"
	Local $aArrayPosListe

	_FileReadToArray($sFilePath, $aArrayPosListe)
	_ArrayDelete($aArrayPosListe, 0)
	_ArraySort($aArrayPosListe)

;~ _DebugArrayDisplay($aArrayPosListe)

	If IsArray($aArrayPosListe) Then
;~ 			ConsoleWrite($sChb_rv & ".txt" & @CRLF)
;~ 		_DebugArrayDisplay($aArrayPosListe)
		Local $aSplit = StringSplit($aArrayPosListe[0], "|")
		If IsArray($aSplit) Then
;~ 			_ArrayDisplay($aSplit)
			Dim $aListeImport[UBound($aArrayPosListe)][$aSplit[0]]
;~ 	 _GUICtrlListView_AddArray($ListView1, $aArray)
			For $i = 0 To UBound($aArrayPosListe) - 1
				$aTemp = StringSplit($aArrayPosListe[$i], "|")

				If $aTemp[0] <> 4 Then
					_ArrayDisplay($aTemp)
				EndIf
				For $ii = 1 To UBound($aTemp) - 1
					$aListeImport[$i][$ii - 1] = $aTemp[$ii]

				Next
			Next

;~ 		_ArrayDisplay($aListeImport, "PosListe")

			Dim $aNotVertrag[1]
			For $ii = 0 To UBound($aArrayUnique) - 1
				For $i = 0 To UBound($aListeImport) - 1
					If $aArrayUnique[$ii] = $aListeImport[$i][0] Then
						$sTEst = True
						ExitLoop
					Else
						$sTEst = False
					EndIf
				Next
				If $sTEst = True Then
				Else
					_ArrayAdd($aNotVertrag, $aArrayUnique[$ii])
;~ 					ConsoleWrite($aArrayUnique[$ii] & "| nicht im aus ausgewählten Vertrag" & @CRLF)
				EndIf
			Next

;~ 		_DebugArrayDisplay($aNotVertrag)
			Return $aNotVertrag
		EndIf
	EndIf

EndFunc   ;==>_Check_Positionen_ImVertrag


Func _Write_to_Console($sString)
	$sText = @YEAR & "." & @MON & "." & @MDAY & " | " & @HOUR & ":" & @MIN & ":" & @SEC & " " & $sString
	GUICtrlSetData($logs_tab_ed_logs, GUICtrlRead($logs_tab_ed_logs) & @CRLF & $sText)
	ConsoleWrite($sText & @CRLF)
	FileWrite(@ScriptDir & "\Daten\_LOG_File.txt", $sText & @CRLF)
	_GUICtrlEdit_LineScroll($logs_tab_ed_logs, 0, _GUICtrlEdit_GetLineCount($logs_tab_ed_logs))
EndFunc   ;==>_Write_to_Console

Func _WM_COMMAND($hWinHandle, $iMsg, $wParam, $lParam)
	If _WinAPI_HiWord($wParam) = $EN_CHANGE And _WinAPI_LoWord($wParam) = $tab1_txt_leange Then
		GUICtrlSetData($tab1_txt_rest_laenge, GUICtrlRead($tab1_txt_leange))
	EndIf
	Select
		Case $sEinheit = "ST"
			If _WinAPI_HiWord($wParam) = $EN_CHANGE And _WinAPI_LoWord($wParam) = $lve_tab_txt_faktor Then
				$sMenge_ST = 0
;~ 				$sMenge_ST = _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_faktor)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_menge))
				;GUICtrlSetData($lve_tab_txt_menge, $sMenge_ST)
			EndIf
		Case $sEinheit = "LE"
			If _WinAPI_HiWord($wParam) = $EN_CHANGE And _WinAPI_LoWord($wParam) = $lve_tab_txt_faktor Then
				$sMenge_LE = 0
;~ 				$sMenge_LE = _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_faktor)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_menge))
				GUICtrlSetData($lve_tab_txt_menge, $sMenge_LE)
			EndIf
		Case $sEinheit = "STD"
			If _WinAPI_HiWord($wParam) = $EN_CHANGE And _WinAPI_LoWord($wParam) = $lve_tab_txt_faktor Then
				$sMenge_STD = 0
;~ 				$sMenge_STD = _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_faktor)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_menge))
				GUICtrlSetData($lve_tab_txt_menge, $sMenge_STD)
			EndIf
		Case $sEinheit = "M"
			If _WinAPI_HiWord($wParam) = $EN_CHANGE And _WinAPI_LoWord($wParam) = $lve_tab_txt_leange Or _WinAPI_LoWord($wParam) = $lve_tab_txt_faktor Then
				$sMenge_m = 0
				$sMenge_m = _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_faktor)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_leange)) ;Länge x Breite = Menge vorne
				$sMenge_m = _replacePunkt2Koma($sMenge_m)
				GUICtrlSetData($lve_tab_txt_menge, $sMenge_m)
			EndIf
		Case $sEinheit = "M2"
			If _WinAPI_HiWord($wParam) = $EN_CHANGE And _WinAPI_LoWord($wParam) = $lve_tab_txt_leange Or _WinAPI_LoWord($wParam) = $lve_tab_txt_faktor Or _WinAPI_LoWord($wParam) = $lve_tab_txt_breite Then
				$sMenge_m2 = 0
				$sMenge_m2 = _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_faktor)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_leange)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_breite)) ;Länge x Breite = Menge vorne
				$sMenge_m2 = _replacePunkt2Koma($sMenge_m2)
				GUICtrlSetData($lve_tab_txt_menge, $sMenge_m2)
			EndIf
		Case $sEinheit = "M3"
			If _WinAPI_HiWord($wParam) = $EN_CHANGE And _WinAPI_LoWord($wParam) = $lve_tab_txt_leange Or _WinAPI_LoWord($wParam) = $lve_tab_txt_faktor Or _WinAPI_LoWord($wParam) = $lve_tab_txt_breite Or _WinAPI_LoWord($wParam) = $lve_tab_txt_tiefe Then
				$sMenge_m3 = 0
				$sMenge_m3 = _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_faktor)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_leange)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_breite)) * _replaceKom2Punkt(GUICtrlRead($lve_tab_txt_tiefe)) ;Länge x Breite = Menge vorne
				$sMenge_m3 = _replacePunkt2Koma($sMenge_m3)
				GUICtrlSetData($lve_tab_txt_menge, $sMenge_m3)
			EndIf
	EndSelect


	Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND

Func _GUICtrlListView_ScrollToItem($hListView, $item) ; $item : zero based ListViewItem
	$item_to_scroll = $item
	If $item_to_scroll >= 0 Then $item_to_scroll -= 1
	$aRect = _GUICtrlListView_GetItemRect($hListView, $item_to_scroll, 3)

	$V_iDY = $aRect[1] - 1
	If $item <= 0 Then $V_iDY -= 12
	_GUICtrlListView_Scroll($hListView, 1, $V_iDY)
EndFunc   ;==>_GUICtrlListView_ScrollToItem

Func _LV_Farben()
	$aArray = _GUIListViewEx_ReadToArray($LV_Aufm, 0)
;~ 	ConsoleWrite("_Listview2Array($LV_Aufm)" & @CRLF)

;~ 	_DebugArrayDisplay($aArray)
	_Pflichtfelder2Array()

	$sColor_leereZeile = IniRead($sPfadIni, "Color", "leereZeile", "0xF7CA14")
	$sColor_Pflichtfelder = IniRead($sPfadIni, "Color", "Pflichtfelder", "0xED686B")
	$sColor_nichtimVertrag = IniRead($sPfadIni, "Color", "nichtimVertrag", "0x3370AD")
	If IsArray($aArray) Then
		If UBound($aArray) <= 1 Then
		Else

			For $i = 0 To UBound($aArray) - 1
				;immer zuerst alle Weiß
				ListViewColorsFonts_SetItemColors($hLV, $i, -1, 0xFFFFFF)


				;einheiten Pflichtfelder Rot
				If $aArray[$i][1] <> "" And $aArray[$i][7] = "ST" And $aArray[$i][6] = "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 6, $sColor_Pflichtfelder)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M" And $aArray[$i][3] = "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 3, $sColor_Pflichtfelder)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M2" And $aArray[$i][3] = "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 3, $sColor_Pflichtfelder)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M2" And $aArray[$i][4] = "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 4, $sColor_Pflichtfelder)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M3" And $aArray[$i][3] = "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 3, $sColor_Pflichtfelder)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M3" And $aArray[$i][4] = "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 4, $sColor_Pflichtfelder)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M3" And $aArray[$i][5] = "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 5, $sColor_Pflichtfelder)
				EndIf
				;einheiten Nornmal Farbe
				If $aArray[$i][1] <> "" And $aArray[$i][7] = "ST" And $aArray[$i][6] <> "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 6, 0xFFFFFF)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M" And $aArray[$i][3] <> "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 3, 0xFFFFFF)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M2" And $aArray[$i][3] <> "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 3, 0xFFFFFF)
				EndIf
				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M2" And $aArray[$i][4] <> "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 4, 0xFFFFFF)
				EndIf

				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M3" And $aArray[$i][3] <> "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 3, 0xFFFFFF)
				EndIf
				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M3" And $aArray[$i][4] <> "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 4, 0xFFFFFF)
				EndIf
				If $aArray[$i][1] <> "" And $aArray[$i][7] = "M3" And $aArray[$i][5] <> "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 5, 0xFFFFFF)
				EndIf

				;pflichtfelder

				If IsArray($aPflichtfelder) Then
					Local $aiResult = _ArrayFindAll($aPflichtfelder, $aArray[$i][1], 0, 0, 0, 1)

					If IsArray($aiResult) Then
						If $aArray[$i][9] = "" Then
							ListViewColorsFonts_SetItemColors($hLV, $i, 9, $sColor_Pflichtfelder)
						EndIf
						If $aArray[$i][9] <> "" Then
							ListViewColorsFonts_SetItemColors($hLV, $i, 9, 0xFFFFFF)
						EndIf
					EndIf
				EndIf

				;faktor ungleich 1
				If $aArray[$i][2] <> "1,0" And $aArray[$i][9] = "" And $aArray[$i][7] <> "" Then
					ListViewColorsFonts_SetItemColors($hLV, $i, 9, $sColor_Pflichtfelder)
				Else
					If $aArray[$i][7] <> "" Then
						ListViewColorsFonts_SetItemColors($hLV, $i, 9, 0xFFFFFF)

					EndIf

				EndIf


				;leere Zeilen Orange
				If $aArray[$i][0] = "" And $aArray[$i][1] = "" And $aArray[$i][10] = "" And $aArray[$i][11] = "" And $aArray[$i][12] = "" Then
;~ 			$aCollor[$i][$ii] = "0xF7CA14"
					ListViewColorsFonts_SetItemColors($hLV, $i, -1, $sColor_leereZeile)
				EndIf
;~ 		 ListViewColorsFonts_SetItemFonts($hLV, $i, -1, 0xF7CA14
			Next


			$aNotIncludeFarben = ""
			$aNotIncludeFarben = _Check_Positionen_ImVertrag()

			For $ii = 0 To UBound($aArray) - 1
				If IsArray($aNotIncludeFarben) Then
					Local $aiResult = _ArrayFindAll($aNotIncludeFarben, $aArray[$ii][1], 0, 0, 0, 1)

					If IsArray($aiResult) Then
						If $aArray[$ii][9] = "" Then
							ListViewColorsFonts_SetItemColors($hLV, $ii, 1, $sColor_nichtimVertrag)
						EndIf
						If $aArray[$ii][9] <> "" Then
							ListViewColorsFonts_SetItemColors($hLV, $ii, 1, 0xFFFFFF)
						EndIf
					EndIf
				EndIf
			Next
		EndIf
	EndIf


	Local $hListView = GUICtrlGetHandle($LV_Aufm)
	ListViewColorsFonts_Redraw($hListView)
;~ 	_DebugArrayDisplay($aCollor)
EndFunc   ;==>_LV_Farben

Func _LV_Change_VertragsDaten()
	Local $aArrayAufmaListe = _GUIListViewEx_ReadToArray($LV_Aufm, 0)

;~ 	_DebugArrayDisplay($aArrayAufmaListe)

	$iFarbenV = "False"

	Local $sChb_rv = GUICtrlRead($kopf_TAB_chb_vertrag)
	$aNotIncludeFarben = ""
	$aNotIncludeFarben = _Check_Positionen_ImVertrag()

	Local $sFilePath = @ScriptDir & "\daten\LV\" & $sChb_rv & ".txt"
	Local $aArray
	_FileReadToArray($sFilePath, $aArray)
	_ArrayDelete($aArray, 0)
	_ArraySort($aArray)

	Local $aSplit = StringSplit($aArray[0], "|")
;~ 	_ArrayDisplay($aSplit)
	Dim $aListeImport[UBound($aArray)][$aSplit[0]]
;~ 		 _GUICtrlListView_AddArray($ListView1, $aArray)
	For $i = 0 To UBound($aArray) - 1
		$aTemp = StringSplit($aArray[$i], "|")

		If $aTemp[0] <> 4 Then
			_ArrayDisplay($aTemp)
		EndIf
		For $ii = 1 To UBound($aTemp) - 1
			$aListeImport[$i][$ii - 1] = $aTemp[$ii]

		Next
	Next

;~ 		_DebugArrayDisplay($aListeImport)
	For $i = 0 To UBound($aArrayAufmaListe) - 1
		For $ii = 0 To UBound($aListeImport) - 1
			If $aArrayAufmaListe[$i][1] = $aListeImport[$ii][0] Then
;~ 					$aArrayAufmaListe[$i][11] = $aListeImport[$ii][3]
				_GUICtrlListView_AddSubItem($lv_aufm, $i, $aListeImport[$ii][3], 11)
			Else
;~ 					ListViewColorsFonts_SetItemColors($hLV, $i, 1, 0x3370AD)
			EndIf
		Next
	Next
;~ 		_DebugArrayDisplay($aArrayAufmaListe)

;~ 		_Summe_Aktuallisieren()

	Global $aLV_List_Right = _GUIListViewEx_ReadToArray($LV_Aufm, 0)
	$iLV_Aufma_Index = _GUIListViewEx_Init($LV_Aufm, $aLV_List_Right, 0, 0xFF0000, True, 2)

;~ 			$iLV_Aufma_Index = _GUIListViewEx_Init($LV_Aufm, $aListeImport, 0, 0, True, 2 )
;~ 		_ArrayDisplay($aListeImport)
	_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, "0;2;3;4;5;6")
	_GUIListViewEx_SetEditStatus($iLV_Aufma_Index, 9, 2, $cDataB, True)

	_klick_ListAktu()
	MsgBox(64, "Vertragspositionen wurden geändert!", "okay fertig")

EndFunc   ;==>_LV_Change_VertragsDaten

Func _REB_TXT_to_Excel($sTXT, $sExcel)

    Local $aLines
    _FileReadToArray($sTXT, $aLines)

    Local $Baustelle = ""
    Local $Datum = ""
    Local $Abschnitt = ""

    Local $inHeader = False
    Local $inData = False

    ; -------------------------------
    ; Kopf auslesen
    ; -------------------------------
    For $i = 1 To $aLines[0]

        Local $line = $aLines[$i]

        If StringInStr($line, "[Kopfdaten]") Then
            $inHeader = True
            ContinueLoop
        EndIf

        If StringInStr($line, "[Aufmaßdaten]") Then ExitLoop

        If $inHeader Then
            If StringLeft($line, 10) = "Baustelle=" Then $Baustelle = StringTrimLeft($line, 10)
            If StringLeft($line, 6) = "Datum=" Then $Datum = StringTrimLeft($line, 6)
            If StringLeft($line, 13) = "Bauabschnitt=" Then $Abschnitt = StringTrimLeft($line, 13)
        EndIf

    Next

    ; -------------------------------
    ; Daten sammeln (dynamisch)
    ; -------------------------------
    Local $aExport[0][6]
    Local $iWrite = 0

    For $i = 1 To $aLines[0]

        Local $line = $aLines[$i]

        If StringInStr($line, "[Aufmaßdaten]") Then
            $inData = True
            ContinueLoop
        EndIf

        If Not $inData Then ContinueLoop

        ; 🔥 WICHTIG: Trenner + Leerzeilen überspringen
        If StringStripWS($line, 8) = "" Then ContinueLoop

        ; zusätzliche Sicherheit (||||||||||)
        If StringRegExp($line, "^\|+$") Then ContinueLoop

        Local $f = StringSplit($line, "|")

        If $f[0] < 10 Then ContinueLoop

        ; 🔥 wichtigste Prüfung → OZ muss existieren
        If StringStripWS($f[2], 3) = "" Then ContinueLoop

        Local $Ort = $f[1]
        Local $OZ = $f[2]
        Local $Formel = $f[3]
        Local $Ergebnis = $f[7]
        Local $Text = $f[9]

        ; -------------------------------
        ; Zeile 1 (Bemerkung)
        ; -------------------------------
        ReDim $aExport[$iWrite + 1][6]

        $aExport[$iWrite][0] = $OZ
        $aExport[$iWrite][1] = $Text
        $aExport[$iWrite][2] = $Ort
        $aExport[$iWrite][3] = ""
        $aExport[$iWrite][4] = ""
        $aExport[$iWrite][5] = ""

        $iWrite += 1

        ; -------------------------------
        ; Zeile 2 (Formel)
        ; -------------------------------
        ReDim $aExport[$iWrite + 1][6]

        $aExport[$iWrite][0] = $OZ
        $aExport[$iWrite][1] = ""
        $aExport[$iWrite][2] = ""
        $aExport[$iWrite][3] = $Formel
        $aExport[$iWrite][4] = $Formel
        $aExport[$iWrite][5] = $Ergebnis

        $iWrite += 1

    Next

    ; -------------------------------
    ; Excel schreiben (nur 1x!)
    ; -------------------------------
    Local $oExcel = _Excel_Open()
    Local $oBook = _Excel_BookNew($oExcel)

    ; Kopf
    _Excel_RangeWrite($oBook, Default, "Bauvorhaben", "A2")
    _Excel_RangeWrite($oBook, Default, $Baustelle, "C2")

    _Excel_RangeWrite($oBook, Default, "Leistungsverzeichnis", "A3")
    _Excel_RangeWrite($oBook, Default, $Abschnitt, "C3")

    _Excel_RangeWrite($oBook, Default, "Aufmaß", "A4")
    _Excel_RangeWrite($oBook, Default, $Datum, "D4")

    ; Datenblock schreiben (🔥 schnell)
    If $iWrite > 0 Then
        _Excel_RangeWrite($oBook, Default, $aExport, "A7")
    EndIf

    _Excel_BookSaveAs($oBook, $sExcel)
    _Excel_Close($oExcel)

EndFunc



;#################
Func Dataflor_Zu_California($sEingabeDatei, $sAusgabeDatei, $sRefPrjName = "", $sRefPrjID = "", $sOwnerName = "")

    If Not FileExists($sEingabeDatei) Then
        MsgBox(16, "Fehler", "Eingabedatei nicht gefunden:" & @CRLF & $sEingabeDatei)
        Return False
    EndIf

    Local $hLesen = FileOpen($sEingabeDatei, 0)
    If $hLesen = -1 Then
        MsgBox(16, "Fehler", "Konnte Datei nicht oeffnen:" & @CRLF & $sEingabeDatei)
        Return False
    EndIf
    Local $sInhalt = FileRead($hLesen)
    FileClose($hLesen)

    ; BOM entfernen falls vorhanden
    If StringLeft($sInhalt, 3) = Chr(0xEF) & Chr(0xBB) & Chr(0xBF) Then
        $sInhalt = StringMid($sInhalt, 4)
    EndIf

    $g_iIdCounter = 1000001

    ; =========================================================================
    ; SCHRITT 1: Zeilenenden normalisieren → einheitlich CRLF
    ; Muss als ERSTES passieren - Dataflor hat gemischte CR/CRLF!
    ; =========================================================================
    $sInhalt = StringReplace($sInhalt, @CRLF, @LF)
    $sInhalt = StringReplace($sInhalt, @CR,   @LF)
    $sInhalt = StringReplace($sInhalt, @LF,   @CRLF)

    ; =========================================================================
    ; SCHRITT 2: <Street>-Zeilenumbrüche zu &#10; konvertieren
    ; Dataflor schreibt mehrzeilige Adressen direkt in den Tag → kaputtes XML
    ; StringRegExpReplace kann keine Callback-Funktion → manuell extrahieren
    ; =========================================================================
    Local $aStreet = StringRegExp($sInhalt, "(<Street>)([\s\S]*?)(</Street>)", 1)
    If Not @error Then
        Local $sStreetAlt = $aStreet[0] & $aStreet[1] & $aStreet[2]
        Local $sStreetNeu = $aStreet[0] & StringReplace($aStreet[1], @CRLF, "&#10;") & $aStreet[2]
        $sInhalt = StringReplace($sInhalt, $sStreetAlt, $sStreetNeu)
    EndIf

    ; =========================================================================
    ; SCHRITT 3: XML-Kommentar ersetzen
    ; BUG-FIX: "<!--[^>]*-->" bricht am > in der URL "gaeb-toolbox.de/" ab!
    ; Korrekt: Muster als Variable bauen → [\s\S]*? matcht alles inkl. >
    ; =========================================================================
    Local $sKommentarMuster = "<!--[\s\S]*?-->"
    $sInhalt = StringRegExpReplace($sInhalt, $sKommentarMuster, "<!-- REB 23.003 (2009) - X31 Export AutoIt v5 -->")

    ; =========================================================================
    ; SCHRITT 4: GAEBInfo - Datum, Zeit, Programm
    ;
    ; BUG-FIX: Backreference-Kollision!
    ; "$1" & "2026-03-20" & "$2" ergibt nach Konkatenation "$12026-03-20$2"
    ; AutoIt liest "$12" als Capture-Gruppe 12 → nicht vorhanden → leer!
    ; Gleiches bei Zeit: "$108:00:00" → Gruppe 10!
    ; FIX: "${1}" begrenzt die Gruppe eindeutig → kein Kollisionsproblem.
    ; =========================================================================
    Local $sHeute = @YEAR & "-" & StringFormat("%02d", @MON) & "-" & StringFormat("%02d", @MDAY)
    Local $sZeit  = StringFormat("%02d", @HOUR) & ":" & StringFormat("%02d", @MIN) & ":" & StringFormat("%02d", @SEC)

    $sInhalt = StringRegExpReplace($sInhalt, "(<Date>)[^<]*(</Date>)",             "${1}" & $sHeute & "${2}")
    $sInhalt = StringRegExpReplace($sInhalt, "(<Time>)[^<]*(</Time>)",             "${1}" & $sZeit  & "${2}")
    $sInhalt = StringRegExpReplace($sInhalt, "(<ProgSystem>)[^<]*(</ProgSystem>)", "${1}AutoIt REB Engine V1.2${2}")
    $sInhalt = StringRegExpReplace($sInhalt, "(<ProgName>)[^<]*(</ProgName>)",     "${1}AutoIt REB X31 Export${2}")

    ; =========================================================================
    ; SCHRITT 5: PrjInfo anpassen (nur wenn Parameter übergeben)
    ; =========================================================================
    If $sRefPrjName <> "" Then
        $sInhalt = StringRegExpReplace($sInhalt, "(<RefPrjName>)[^<]*(</RefPrjName>)", "${1}" & $sRefPrjName & "${2}")
    EndIf
    If $sRefPrjID <> "" Then
        $sInhalt = StringRegExpReplace($sInhalt, "(<RefPrjID>)[^<]*(</RefPrjID>)", "${1}" & $sRefPrjID & "${2}")
    EndIf

    ; =========================================================================
    ; SCHRITT 6: QtyDetermInfo GUID ersetzen
    ;
    ; BUG-FIX 1: Chr(34) statt " im Regex → kein String-Terminierungs-Problem
    ; BUG-FIX 2: ${1} und ${2} statt $1/$2 → GUID kann mit Ziffer beginnen!
    ;   Beispiel: GUID "3a4b..." → "$13a4b..." → AutoIt liest "$13" = Gruppe 13!
    ; =========================================================================
    Local $sNeueGUID = _GenerateGUID()
    Local $sChr34 = Chr(34)
    Local $sGUIDMuster = "(QtyDetermInfo\s+ID=" & $sChr34 & ")[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}(" & $sChr34 & ")"
    $sInhalt = StringRegExpReplace($sInhalt, $sGUIDMuster, "${1}" & $sNeueGUID & "${2}")

    ; =========================================================================
    ; SCHRITT 7: OWN-Name anpassen (optional)
    ; =========================================================================
    If $sOwnerName <> "" Then
        Local $aOWN = StringRegExp($sInhalt, "(<OWN>[\s\S]*?</OWN>)", 1)
        If Not @error Then
            Local $sOWNAlt = $aOWN[0]
            Local $sOWNNeu = StringRegExpReplace($sOWNAlt, "(<Name1>)[^<]*(</Name1>)", "${1}" & $sOwnerName & "${2}")
            $sInhalt = StringReplace($sInhalt, $sOWNAlt, $sOWNNeu)
        EndIf
    EndIf

    ; =========================================================================
    ; SCHRITT 8: CtlgAssignType entfernen
    ; =========================================================================
    $sInhalt = StringRegExpReplace($sInhalt, "\s*<CtlgAssignType\s*/>", "")
    $sInhalt = StringRegExpReplace($sInhalt, "\s*<CtlgAssignType>[^<]*</CtlgAssignType>", "")

    ; =========================================================================
    ; SCHRITT 9: BVBS:Explanation entfernen
    ; =========================================================================
    $sInhalt = StringRegExpReplace($sInhalt, "<BVBS:Explanation>[^<]*</BVBS:Explanation>", "")

    ; =========================================================================
    ; SCHRITT 10: Leere Items entfernen (Qty=0.000 ohne Mengennachweis)
    ; =========================================================================
    Local $iMax = 30
    While $iMax > 0
        Local $sVorher = $sInhalt
        $sInhalt = StringRegExpReplace($sInhalt, _
            "<Item\s[^>]+>\s*<QtyDeterm>\s*<Qty>0[,.]000</Qty>\s*</QtyDeterm>\s*</Item>", "")
        If $sInhalt = $sVorher Then ExitLoop
        $iMax -= 1
    WEnd

    ; =========================================================================
    ; SCHRITT 11: Leere Container bereinigen
    ; =========================================================================
    $iMax = 10
    While $iMax > 0
        Local $sVorher = $sInhalt
        $sInhalt = StringRegExpReplace($sInhalt, "<Itemlist>\s*</Itemlist>", "")
        $sInhalt = StringRegExpReplace($sInhalt, "<BoQBody>\s*</BoQBody>",   "")
        $sInhalt = StringRegExpReplace($sInhalt, "<BoQCtgy[^>]*>\s*</BoQCtgy>", "")
        If $sInhalt = $sVorher Then ExitLoop
        $iMax -= 1
    WEnd

    ; =========================================================================
    ; SCHRITT 12: IDs neu nummerieren (sequenziell ab DF_1000001)
    ; =========================================================================
    $sInhalt = _NummeriereIDs($sInhalt)

    ; =========================================================================
    ; SCHRITT 13: Zeilen-IDs neu vergeben
    ; PROBLEM: Dataflor vergibt Zeilen-IDs in der ERFASSUNGSREIHENFOLGE,
    ;   nicht in der POSITIONS-Reihenfolge. California sortiert die Anzeige
    ;   nach Zeilen-ID → Positionen erscheinen durcheinander.
    ; FIX: Alle Zeilen-IDs sequenziell neu vergeben in der Reihenfolge
    ;   wie sie im XML stehen (= Reihenfolge der Positionen).
    ; =========================================================================
    $sInhalt = _RenummeriereZeilenIDs($sInhalt)

    ; =========================================================================
    ; SCHRITT 14: XML formatieren
    ; =========================================================================
    $sInhalt = _FormatXML($sInhalt)

    ; =========================================================================
    ; SCHRITT 15: Ausgabedatei mit UTF-8 BOM schreiben
    ; =========================================================================
    Local $hDatei = FileOpen($sAusgabeDatei, 2 + 128) ; 2=ueberschreiben, 128=UTF-8 BOM
    If $hDatei = -1 Then
        MsgBox(16, "Fehler", "Konnte Ausgabedatei nicht erstellen:" & @CRLF & $sAusgabeDatei)
        Return False
    EndIf
    FileWrite($hDatei, $sInhalt)
    FileClose($hDatei)

;~     MsgBox(64, "Fertig", "Konvertierung abgeschlossen!" & @CRLF & @CRLF & "Ausgabe:" & @CRLF & $sAusgabeDatei)
    Return True
EndFunc

; =============================================================================
; Zeilen-IDs in QTakeoff-Rows neu vergeben
; FORMAT: BBBBZZ (6 Zeichen, REB 23.003 Standard)
;   BBBB = Blattnummer 0001-9999 (wird hochgezählt)
;   ZZ   = Zeilennummer A0 (fest) - gültiges Buchstabe+Ziffer-Format
;
; Ergebnis: 0001A0, 0002A0, 0003A0, ... streng aufsteigend
;   ✓ 100% gültiges REB-Adressfeld (kein "unzulässig"-Fehler)
;   ✓ Streng aufsteigend → California zeigt Positionen in richtiger Reihenfolge
;   ✓ Eindeutig → keine Kollisionen
;   ✓ Bis zu 9999 Zeilen pro Datei
; =============================================================================
Func _RenummeriereZeilenIDs($sXML)
    Local $iBlatt = 1  ; Startet bei 0001, wird pro Zeile um 1 erhöht

    Local $iPos = 1
    While True
        ; Nächste QTakeoff Row finden
        Local $iStart = StringInStr($sXML, 'QTakeoff Row="', 0, 1, $iPos)
        If $iStart = 0 Then ExitLoop

        Local $iRowStart = $iStart + 14
        Local $iRowEnd   = StringInStr($sXML, '"', 0, 1, $iRowStart)
        If $iRowEnd = 0 Then ExitLoop

        ; Nur Standard-Rows mit 80 Zeichen verarbeiten
        If ($iRowEnd - $iRowStart) = 80 Then
            ; Neue ID: Blattnummer vierstellig + "A0"
            ; Zeichen 70-75 (StringMid: 1-basiert, Position 70, Länge 6)
            Local $sNeueID  = StringFormat("%04d", $iBlatt) & "A0"
            Local $sRow     = StringMid($sXML, $iRowStart, 80)
            Local $sRowNeu  = StringLeft($sRow, 69) & $sNeueID & StringMid($sRow, 76)

            ; Zeile im XML ersetzen
            $sXML = StringLeft($sXML, $iRowStart - 1) & $sRowNeu & StringMid($sXML, $iRowEnd)
            $iBlatt += 1
        EndIf

        $iPos = $iRowStart + 1
    WEnd

    Return $sXML
EndFunc

; =============================================================================
; IDs sequenziell neu nummerieren
; =============================================================================
Func _NummeriereIDs($sXML)
    Local $aAlleIDs = StringRegExp($sXML, 'ID="(DF_[0-9]+)"', 3)
    If @error Then Return $sXML

    Local $aEindeutig[0]
    For $i = 0 To UBound($aAlleIDs) - 1
        Local $bGefunden = False
        For $j = 0 To UBound($aEindeutig) - 1
            If $aEindeutig[$j] = $aAlleIDs[$i] Then
                $bGefunden = True
                ExitLoop
            EndIf
        Next
        If Not $bGefunden Then
            ReDim $aEindeutig[UBound($aEindeutig) + 1]
            $aEindeutig[UBound($aEindeutig) - 1] = $aAlleIDs[$i]
        EndIf
    Next

    For $i = 0 To UBound($aEindeutig) - 1
        Local $sNeu = "DF_" & $g_iIdCounter
        $g_iIdCounter += 1
        $sXML = StringReplace($sXML, 'ID="' & $aEindeutig[$i] & '"', 'ID="' & $sNeu & '"')
    Next
    Return $sXML
EndFunc

; =============================================================================
; XML formatieren
; =============================================================================
Func _FormatXML($sXML)
    $sXML = StringRegExpReplace($sXML, ">\s+<", ">" & @CRLF & "<")

    $sXML = StringReplace($sXML, "<BoQBody>",  "<BoQBody>"  & @CRLF)
    $sXML = StringReplace($sXML, "<Itemlist>", "<Itemlist>" & @CRLF)
    $sXML = StringRegExpReplace($sXML, "(<BoQCtgy[^>]*>)", "${1}" & @CRLF)
    $sXML = StringRegExpReplace($sXML, "(<Item [^>]*>)",   "${1}" & @CRLF)

    Local $aClose[5] = ["</BoQBody>", "</Itemlist>", "</BoQCtgy>", "</Item>", "</QtyDeterm>"]
    For $i = 0 To 4
        $sXML = StringReplace($sXML, $aClose[$i], @CRLF & $aClose[$i] & @CRLF)
    Next

    $sXML = StringReplace($sXML, "<QtyDeterm>", @CRLF & "<QtyDeterm>" & @CRLF)

    While StringInStr($sXML, @CRLF & @CRLF & @CRLF)
        $sXML = StringReplace($sXML, @CRLF & @CRLF & @CRLF, @CRLF & @CRLF)
    WEnd

    While StringLeft($sXML, 2) = @CRLF
        $sXML = StringMid($sXML, 3)
    WEnd

    Return $sXML
EndFunc

; =============================================================================
; GUID generieren
; =============================================================================
Func _GenerateGUID()
    Local $aTeile[5] = [8, 4, 4, 4, 12]
    Local $sGUID = ""
    For $i = 0 To 4
        If $i > 0 Then $sGUID &= "-"
        For $j = 1 To $aTeile[$i]
            $sGUID &= StringLower(Hex(Random(0, 15, 1), 1))
        Next
    Next
    Return $sGUID
EndFunc