Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1235
Благодарности: 518

Профиль | Отправить PM | Цитировать


Цитата NickM:
Прокомментировал каждый блок кода. »
если бы эти комментарии могли помочь...
В общем, я предупреждал, что без алгоритма действий, результат может выйти совсем не таким, каким ожидался...
script.ps1 (кодировку скрипта лучше выбрать UTF8)
Код: Выделить весь код
function Get-NodeAttrDoc ($xml,$node,$enc){
	process{
		$n = $xml.selectnodes("//$node")
		[pscustomobject]@{
			'КНД' = $n.кнд
			'Период' = $n.период
		}
	}
}

function Get-NodeDataOut ($xml,$node,$per,$dat,$fio,$enc,$knd){
	process{
	    $t = $xml.selectnodes("//$node")
	    $f = $t.$fio
	    $s = @(@(0)*13)
	    if (($i=[int]$per) -lt 13){$s[$i] = [int]$t.сумвыпл} else {
	        $sv = [int[]]$xml.selectnodes("//$dat").сумвыпл
	        switch ($per){
	            $kv[0]{$s[1]=$sv[0];$s[2]=$sv[1];$s[3]=$sv[2]}
	            $kv[1]{$s[4]=$sv[0];$s[5]=$sv[1];$s[6]=$sv[2]}
	            $kv[2]{$s[7]=$sv[0];$s[8]=$sv[1];$s[9]=$sv[2]}
	            $kv[3]{$s[10]=$sv[0];$s[11]=$sv[1];$s[12]=$sv[2]}
	        }
	        $s[0] = ($s|measure -sum).sum
	    }
		[pscustomobject]@{
		    'КНД' = $knd
			'ФИО' = ($f.фамилия,$f.имя,$f.отчество) -join ' '
			'ИННФЛ' = $t.иннфл
			'СНИЛС' = $t.снилс
			'СумГод' = [int]$s[0]
			'01' = $s[1]
			'02' = $s[2]
			'03' = $s[3]
			'04' = $s[4]
			'05' = $s[5]
			'06' = $s[6]
			'07' = $s[7]
			'08' = $s[8]
			'09' = $s[9]
			'10' = $s[10]
			'11' = $s[11]
			'12' = $s[12]
		}
	}
}

function get-sumdoc1162 ($elem,$i){
    $b = $i|%{($elem.$_|measure -sum).sum}
	[pscustomobject]@{
		'КНД' = $elem.кнд[0]
		'ФИО' = $elem.фио[0]
		'ИННФЛ' = $elem.иннфл[0]
		'СНИЛС' = $elem.снилс[0]
		'СумГод' = [int]($b|measure -sum).sum
		'01' = [int]$b[0]
		'02' = [int]$b[1]
		'03' = [int]$b[2]
		'04' = [int]$b[3]
		'05' = [int]$b[4]
		'06' = [int]$b[5]
		'07' = [int]$b[6]
		'08' = [int]$b[7]
		'09' = [int]$b[8]
		'10' = [int]$b[9]
		'11' = [int]$b[10]
		'12' = [int]$b[11]
	}
}

$path = $psscriptroot
if ($host.version.major -gt 5) {
    $enc = 'windows-1251'
    $csv = @{
        Encoding = 'utf8'
        NoTypeInformation = $true
        QuoteFields = 'ФИО'
    }
} else {
    $enc = 'default'
    $csv = @{
        Encoding = 'utf8'
        NoTypeInformation = $true
    }
}
$flt = 'NO_*.xml'
$nd = 'Документ'
$nd_dfl = 'ДанФЛПолуч'
$nd_svmk = 'СвВыплМК'
$nd_psfl = 'ПерсСвФЛ'
$fio = 'ФИО'
$kv = @('21','31','33','34') 
$arr1162_i, $arr1111 = @(),@()

dir $path -filt $flt -file|%{
    $x = [xml](gc $_.fullname -enc $enc)
    $tmp = get-nodeattrdoc $x $nd $enc
    $knd = $tmp.кнд
    $per = $tmp.период
    if ($knd -eq '1151111'){
        $arr1111 += get-nodedataout -xml $x -node $nd_dfl -per $per -d $nd_svmk -f $fio -enc $enc -knd $knd
    } else {
        $arr1162_i += get-nodedataout -xml $x -node $nd_psfl -per $per -f $fio -enc $enc -knd $knd
    }
}
$m = 1.. 12|%{"$_".padleft(2,'0')}
$arr1162 = $arr1162_i|group -prop 'иннфл'|%{get-sumdoc1162 $_.group $m}
$arr1162|sort 'ФИО'|export-csv '1162.csv' @csv
$arr1111|sort 'ФИО'|export-csv '1111.csv' @csv

$arr1111+$arr1162|sort 'ФИО'|ft * -a -w

-------
scio me nihil scire. Ѫ


Отправлено: 18:18, 28-10-2023 | #16