PAC9 CTRL F1 — различия между версиями
Материал из Фабиус wiki
Hisava (обсуждение | вклад) м |
Hisava (обсуждение | вклад) м |
||
(не показано 12 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | [[PAC9 CTRL_F1]] - это создание накладной прихода сырья со склада по заказу '''НклСкл''' | ||
+ | if ISFORM_READONLY( , true ) | ||
+ | return | ||
+ | end | ||
+ | |||
+ | local msg, sr, sql, ga, mtr, repl, fld1, fld2, sklad, i, sr_rgnum, flt, pp, ; | ||
+ | mtr_2, vl, m, mtr2, db, filt, rec, filt2, aa, t1, t2, id, sklad_shift, mtr1_rgnum | ||
+ | |||
+ | sklad := 0 | ||
+ | sr_rgnum := {} | ||
+ | mtr_2 := {} | ||
+ | sklad_shift := '1' | ||
+ | |||
+ | try | ||
+ | ga := GetArea() | ||
+ | db := SaveStateDB() | ||
+ | |||
+ | filt := DOCS1->( DbFilter() ) | ||
+ | filt2 := DOCS9->( DbFilter() ) | ||
+ | rec := DOCS1->( RecNo() ) | ||
+ | EnaDisControls( GetArea(), false ) | ||
+ | |||
+ | if Empty( DANAL2 ) | ||
+ | return | ||
+ | endif | ||
+ | sr := SelRows() | ||
+ | if Empty( sr ) | ||
+ | if !YesNo( 'Сформировать накладную прихода сырья и материалов по всем изделиям?' ) | ||
+ | return | ||
+ | endif | ||
+ | else | ||
+ | if !YesNo( 'Сформировать накладную прихода сырья и материалов по выделенным изделиям?' ) | ||
+ | return | ||
+ | endif | ||
+ | endif | ||
+ | |||
+ | msg := WaitMsg( 'Подготовка данных' ) | ||
+ | |||
+ | sklad := ChoiceRefr( 'R10', 'KOD', { 'KOD', 'PNAME' }, "CodeGroup = '01'",, 'Выберите склад сырья' ) | ||
+ | if Empty( sklad ) | ||
+ | return | ||
+ | endif | ||
+ | |||
+ | id := InputDate() | ||
+ | |||
+ | mtr := [[OPENCHILDDOC]]( '[[MTR]]', '1', ~ParentForm := "", ~Year := Year( id ), ~Month := Month( id ) ) | ||
+ | |||
+ | ( mtr )->( SetFilter( "KINDDOC = 'MTR' and LVLNUM = '1' and DREFL1 = 'R10 ' and ; | ||
+ | DANAL1 = " + ( ga )->DANAL1 + " and DSHIFT = '" + DtoS( id ) + ; | ||
+ | iif( FactoryId = 'NAM', '2', ( ga )->( Right( DSHIFT, 1 ) ) ) + "' and CATTR5 = 'PAC9'" ) ) | ||
+ | |||
+ | if !Empty( ( mtr )->( IsSingle() ) ) | ||
+ | while !Empty( ( mtr )->( IsSingle() ) ) | ||
+ | ( mtr )->( TryToDelete() ) | ||
+ | ( mtr )->( DBSkip() ) | ||
+ | end | ||
+ | endif | ||
+ | // поля шапки MTR номер, дата, R10, код склада, R10, код производства, код мастера, дата + смена склада | ||
+ | // дата + смена производства, 'PAC9', примечание | ||
+ | fld1 := { "NUMDOC", "DATDOC", "KREFL1", "KANAL1", "DREFL1", "DANAL1", "DANAL3", "KSHIFT", "DSHIFT", "KSM_NUM", ; | ||
+ | "DSM_NUM", "CATTR5", "PRIM" } | ||
+ | |||
+ | if FactoryId = 'NAM' | ||
+ | sklad_shift := '2' | ||
+ | endif | ||
+ | |||
+ | <code> | ||
+ | // добавили шапку | ||
+ | mtr1_rgnum := [[ADDALL]]( 'MTR', '1', "",, fld1, ; | ||
+ | { ( ga )->( { NUMDOC, id, 'R10 ', sklad, 'R10 ', DANAL1, val( cattr10 ), Left( KSHIFT, 8 ) + sklad_shift, ; | ||
+ | iif( FactoryId = 'NAM', left( DSHIFT, 8 ) + '2', DSHIFT ), sklad_shift, ; | ||
+ | iif( FactoryId = 'NAM', '2', Right( DSHIFT, 1 ) ), 'PAC9', ; | ||
+ | 'Автоматически сформировано по CTRL+F1 из заказа производству' } ) }, ; | ||
+ | { | | Field->RGNUM }, ~Year := Year( id ), ~Month := Month( id ) ) | ||
+ | </code> | ||
+ | |||
+ | // NATTR3 - затребовано | ||
+ | |||
+ | // поля 2-го уровня MTR код, количество, влажность, примечание | ||
+ | fld2 := { "KANAL2", "AMNT", "CATTR7", "PRIM" } | ||
+ | // соберем сырье Sql-запросом | ||
+ | if Empty( sr ) | ||
+ | flt := [ and d9.Parent = '] + ( ga )->( PARENT ) + [' ] | ||
+ | else | ||
+ | for i := 1 to len( sr ) | ||
+ | ( ga )->( DBGoto( sr[i] ) ) | ||
+ | Aadd( sr_rgnum, ( ga )->RgNum ) | ||
+ | next | ||
+ | flt := [ and d9.RgNUM in ( ] + ArrAsString2( sr_rgnum ) + [ ) ] | ||
+ | endif | ||
+ | sql := [ Select da.KANAL2, Sum( da.NATTR8 ) As AMNT ; | ||
+ | From ] + ExpandReflPath( 'R08' ) + [ r08, ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ d9, ; | ||
+ | ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ da ; | ||
+ | Where r08.KOD = da.KANAL2 and d9.KINDDOC = 'PAC' and d9.LVLNUM = '9' and da.KANAL2 > 0 ; | ||
+ | and da.NATTR8 > 0 and d9.RGNUM = da.PARENT ] + flt + [ and SKLAD_KOD in ( 0, ] + sklad + [ ) ; | ||
+ | Group By da.KANAL2 ; | ||
+ | Order By da.KANAL2 ] | ||
+ | |||
+ | // добавляем сырье | ||
+ | try | ||
+ | pp := SelectSql( sql, OpdataPath ) | ||
+ | if Empty( ( pp )->( IsSingle() ) ) | ||
+ | Message( 'Сырье не найдено' ) | ||
+ | return | ||
+ | endif | ||
+ | while !( pp )->( eof() ) | ||
+ | // ищем влажность по коду сырья в PUBLIC массиве WetnsArr = { { коды }, { влажности }, ... } | ||
+ | vl := 0 | ||
+ | if ( m := Ascan( WetnsArr[1], ( pp )->KANAl2 ) ) > 0 | ||
+ | vl := WetnsArr[2,m] | ||
+ | endif | ||
+ | Aadd( mtr_2, ( pp )->( { KANAL2, AMNT, vl, ; | ||
+ | "Автоматически сформировано по Ctrl+F1 из производственного заказа"} ) ) | ||
+ | ( pp )->( DBSkip() ) | ||
+ | end | ||
+ | |||
+ | if !Empty( mtr1_rgnum ) | ||
+ | AddAll( 'MTR', '2', mtr1_rgnum[1],, fld2, mtr_2, ; | ||
+ | ~OwnerForm := ( mtr )->( GetForm( GetArea() ) ), ~Year := Year( id ), ~Month := Month( id ) ) | ||
+ | endif | ||
+ | |||
+ | finally | ||
+ | CloseTable( pp ) | ||
+ | mtr2 := OpenChildDoc( 'MTR', '2', mtr1_rgnum[1], ~ParentForm := ( mtr )->( GetForm( GetArea() ) ) ) | ||
+ | MakePrvs( mtr2->( GetArea() ),, 2 ) | ||
+ | end | ||
+ | |||
+ | // теперь в цикле добавляем остальные накладные прихода со склада | ||
+ | sql := [ Select DISTINCT SKLAD_KOD ; | ||
+ | From ] + ExpandReflPath( 'R08' ) + [ r08, ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ d9, ; | ||
+ | ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ da ; | ||
+ | Where r08.KOD = da.KANAL2 and d9.KINDDOC = 'PAC' and d9.LVLNUM = '9' and da.KANAL2 > 0 ; | ||
+ | and da.NATTR8 > 0 and d9.RGNUM = da.PARENT ] + flt + [ and SKLAD_KOD NOT in ( 0, ] + sklad + [ ) ] | ||
+ | |||
+ | if FactoryId <> 'NAM' | ||
+ | aa := SelectSqlToArr( sql, { 'SKLAD_KOD' }, OpdataPath ) | ||
+ | endif | ||
+ | |||
+ | // в массиве aa записан список всех складов | ||
+ | if !Empty( aa ) | ||
+ | for i := 1 to len( aa ) | ||
+ | // добавим шапку | ||
+ | mtr1_rgnum := AddAll( 'MTR', '1', '',, fld1, { ( ga )->( { NUMDOC, DATDOC, 'R10 ', aa[i,1], ; | ||
+ | 'R10 ', DANAL1, val( cattr10 ), Left( KSHIFT, 8 ) + sklad_shift, DSHIFT, sklad_shift, ; | ||
+ | Right( DSHIFT, 1 ), 'PAC9', 'Автоматически сформировано по Ctrl+F1 из заказа производству' } ) }, ; | ||
+ | { | | Field->RGNUM } ) | ||
+ | |||
+ | // ищем сырье текущего склада | ||
+ | sql := [ Select da.KANAL2, Sum( da.NATTR8 ) As AMNT ; | ||
+ | From ] + ExpandReflPath( 'R08' ) + [ r08, ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ d9, ; | ||
+ | ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ da ; | ||
+ | Where r08.KOD = da.KANAL2 and d9.KINDDOC = 'PAC' and d9.LVLNUM = '9' and da.KANAL2 > 0 ; | ||
+ | and da.NATTR8 > 0 and d9.RGNUM = da.PARENT ] + flt + [ and SKLAD_KOD = ] + aa[i,1] + [ ; | ||
+ | Group By da.KANAL2 ; | ||
+ | Order By da.KANAL2 ] | ||
+ | |||
+ | mtr_2 := {} | ||
+ | // добавляем сырье текущего склада | ||
+ | try | ||
+ | pp := SelectSql( sql, OpdataPath ) | ||
+ | if Empty( ( pp )->( IsSingle() ) ) | ||
+ | Message( 'Сырье не найдено' ) | ||
+ | return | ||
+ | endif | ||
+ | while !( pp )->( eof() ) | ||
+ | // ищем влажность по коду сырья в PUBLIC массиве WetnsArr = { { коды },{ влажности }, ... } | ||
+ | vl := 0 | ||
+ | if ( m := Ascan( WetnsArr[1], ( pp )->KANAl2 ) ) > 0 | ||
+ | vl := WetnsArr[2,m] | ||
+ | endif | ||
+ | Aadd( mtr_2, ( pp )->( { KANAL2, AMNT, vl, "Автоматически сформировано по Ctrl+F1 из заказа производству" } ) ) | ||
+ | ( pp )->( DBSkip() ) | ||
+ | end | ||
+ | |||
+ | if !Empty( mtr1_rgnum ) | ||
+ | AddAll( 'MTR', '2', mtr1_rgnum[1],, fld2, mtr_2, ; | ||
+ | ~OwnerForm := ( mtr )->( GetForm( GetArea() ) ), ~Year := Year( id ), ~Month := Month( id ) ) | ||
+ | endif | ||
+ | |||
+ | finally | ||
+ | CloseTable( pp ) | ||
+ | mtr2 := OpenChildDoc( 'MTR', '2', mtr1_rgnum[1], ~ParentForm := ( mtr )->( GetForm( GetArea() ) ) ) | ||
+ | MakePrvs( mtr2->( GetArea() ),, 2 ) | ||
+ | end | ||
+ | next | ||
+ | endif | ||
+ | |||
+ | finally | ||
+ | EnaDisControls( GetArea(), true ) | ||
+ | RestStateDb( db, ~AllGoTo := true ) | ||
+ | DOCS1->( SetFilter( filt ) ) | ||
+ | DOCS1->( DBGoTo( rec ) ) | ||
+ | DOCS9->( SetFilter( filt2 ) ) | ||
+ | HideMsg( msg ) | ||
+ | end | ||
+ | |||
+ | Message( 'Накладная успешно сформирована' + Chr( 13 ) + ; | ||
+ | 'Просмотр накладной: Производство - Документы за смену - Сырье и материалы - Приходные накладные' ) | ||
= Смотрите также = | = Смотрите также = | ||
− | + | [[PAC]] |
Текущая версия на 10:31, 28 апреля 2018
PAC9 CTRL_F1 - это создание накладной прихода сырья со склада по заказу НклСкл
if ISFORM_READONLY( , true ) return end local msg, sr, sql, ga, mtr, repl, fld1, fld2, sklad, i, sr_rgnum, flt, pp, ; mtr_2, vl, m, mtr2, db, filt, rec, filt2, aa, t1, t2, id, sklad_shift, mtr1_rgnum sklad := 0 sr_rgnum := {} mtr_2 := {} sklad_shift := '1' try ga := GetArea() db := SaveStateDB() filt := DOCS1->( DbFilter() ) filt2 := DOCS9->( DbFilter() ) rec := DOCS1->( RecNo() ) EnaDisControls( GetArea(), false ) if Empty( DANAL2 ) return endif sr := SelRows() if Empty( sr ) if !YesNo( 'Сформировать накладную прихода сырья и материалов по всем изделиям?' ) return endif else if !YesNo( 'Сформировать накладную прихода сырья и материалов по выделенным изделиям?' ) return endif endif msg := WaitMsg( 'Подготовка данных' ) sklad := ChoiceRefr( 'R10', 'KOD', { 'KOD', 'PNAME' }, "CodeGroup = '01'",, 'Выберите склад сырья' ) if Empty( sklad ) return endif id := InputDate() mtr := OPENCHILDDOC( 'MTR', '1', ~ParentForm := "", ~Year := Year( id ), ~Month := Month( id ) ) ( mtr )->( SetFilter( "KINDDOC = 'MTR' and LVLNUM = '1' and DREFL1 = 'R10 ' and ; DANAL1 = " + ( ga )->DANAL1 + " and DSHIFT = '" + DtoS( id ) + ; iif( FactoryId = 'NAM', '2', ( ga )->( Right( DSHIFT, 1 ) ) ) + "' and CATTR5 = 'PAC9'" ) ) if !Empty( ( mtr )->( IsSingle() ) ) while !Empty( ( mtr )->( IsSingle() ) ) ( mtr )->( TryToDelete() ) ( mtr )->( DBSkip() ) end endif // поля шапки MTR номер, дата, R10, код склада, R10, код производства, код мастера, дата + смена склада // дата + смена производства, 'PAC9', примечание fld1 := { "NUMDOC", "DATDOC", "KREFL1", "KANAL1", "DREFL1", "DANAL1", "DANAL3", "KSHIFT", "DSHIFT", "KSM_NUM", ; "DSM_NUM", "CATTR5", "PRIM" } if FactoryId = 'NAM' sklad_shift := '2' endif
// добавили шапку mtr1_rgnum := ADDALL( 'MTR', '1', "",, fld1, ; { ( ga )->( { NUMDOC, id, 'R10 ', sklad, 'R10 ', DANAL1, val( cattr10 ), Left( KSHIFT, 8 ) + sklad_shift, ; iif( FactoryId = 'NAM', left( DSHIFT, 8 ) + '2', DSHIFT ), sklad_shift, ; iif( FactoryId = 'NAM', '2', Right( DSHIFT, 1 ) ), 'PAC9', ; 'Автоматически сформировано по CTRL+F1 из заказа производству' } ) }, ; { | | Field->RGNUM }, ~Year := Year( id ), ~Month := Month( id ) )
// NATTR3 - затребовано // поля 2-го уровня MTR код, количество, влажность, примечание fld2 := { "KANAL2", "AMNT", "CATTR7", "PRIM" } // соберем сырье Sql-запросом if Empty( sr ) flt := [ and d9.Parent = '] + ( ga )->( PARENT ) + [' ] else for i := 1 to len( sr ) ( ga )->( DBGoto( sr[i] ) ) Aadd( sr_rgnum, ( ga )->RgNum ) next flt := [ and d9.RgNUM in ( ] + ArrAsString2( sr_rgnum ) + [ ) ] endif sql := [ Select da.KANAL2, Sum( da.NATTR8 ) As AMNT ; From ] + ExpandReflPath( 'R08' ) + [ r08, ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ d9, ; ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ da ; Where r08.KOD = da.KANAL2 and d9.KINDDOC = 'PAC' and d9.LVLNUM = '9' and da.KANAL2 > 0 ; and da.NATTR8 > 0 and d9.RGNUM = da.PARENT ] + flt + [ and SKLAD_KOD in ( 0, ] + sklad + [ ) ; Group By da.KANAL2 ; Order By da.KANAL2 ] // добавляем сырье try pp := SelectSql( sql, OpdataPath ) if Empty( ( pp )->( IsSingle() ) ) Message( 'Сырье не найдено' ) return endif while !( pp )->( eof() ) // ищем влажность по коду сырья в PUBLIC массиве WetnsArr = { { коды }, { влажности }, ... } vl := 0 if ( m := Ascan( WetnsArr[1], ( pp )->KANAl2 ) ) > 0 vl := WetnsArr[2,m] endif Aadd( mtr_2, ( pp )->( { KANAL2, AMNT, vl, ; "Автоматически сформировано по Ctrl+F1 из производственного заказа"} ) ) ( pp )->( DBSkip() ) end if !Empty( mtr1_rgnum ) AddAll( 'MTR', '2', mtr1_rgnum[1],, fld2, mtr_2, ; ~OwnerForm := ( mtr )->( GetForm( GetArea() ) ), ~Year := Year( id ), ~Month := Month( id ) ) endif finally CloseTable( pp ) mtr2 := OpenChildDoc( 'MTR', '2', mtr1_rgnum[1], ~ParentForm := ( mtr )->( GetForm( GetArea() ) ) ) MakePrvs( mtr2->( GetArea() ),, 2 ) end // теперь в цикле добавляем остальные накладные прихода со склада sql := [ Select DISTINCT SKLAD_KOD ; From ] + ExpandReflPath( 'R08' ) + [ r08, ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ d9, ; ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ da ; Where r08.KOD = da.KANAL2 and d9.KINDDOC = 'PAC' and d9.LVLNUM = '9' and da.KANAL2 > 0 ; and da.NATTR8 > 0 and d9.RGNUM = da.PARENT ] + flt + [ and SKLAD_KOD NOT in ( 0, ] + sklad + [ ) ] if FactoryId <> 'NAM' aa := SelectSqlToArr( sql, { 'SKLAD_KOD' }, OpdataPath ) endif // в массиве aa записан список всех складов if !Empty( aa ) for i := 1 to len( aa ) // добавим шапку mtr1_rgnum := AddAll( 'MTR', '1', ,, fld1, { ( ga )->( { NUMDOC, DATDOC, 'R10 ', aa[i,1], ; 'R10 ', DANAL1, val( cattr10 ), Left( KSHIFT, 8 ) + sklad_shift, DSHIFT, sklad_shift, ; Right( DSHIFT, 1 ), 'PAC9', 'Автоматически сформировано по Ctrl+F1 из заказа производству' } ) }, ; { | | Field->RGNUM } ) // ищем сырье текущего склада sql := [ Select da.KANAL2, Sum( da.NATTR8 ) As AMNT ; From ] + ExpandReflPath( 'R08' ) + [ r08, ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ d9, ; ] + RetDbName( CurKindDoc ) + Ret_f_ext() + [ da ; Where r08.KOD = da.KANAL2 and d9.KINDDOC = 'PAC' and d9.LVLNUM = '9' and da.KANAL2 > 0 ; and da.NATTR8 > 0 and d9.RGNUM = da.PARENT ] + flt + [ and SKLAD_KOD = ] + aa[i,1] + [ ; Group By da.KANAL2 ; Order By da.KANAL2 ] mtr_2 := {} // добавляем сырье текущего склада try pp := SelectSql( sql, OpdataPath ) if Empty( ( pp )->( IsSingle() ) ) Message( 'Сырье не найдено' ) return endif while !( pp )->( eof() ) // ищем влажность по коду сырья в PUBLIC массиве WetnsArr = { { коды },{ влажности }, ... } vl := 0 if ( m := Ascan( WetnsArr[1], ( pp )->KANAl2 ) ) > 0 vl := WetnsArr[2,m] endif Aadd( mtr_2, ( pp )->( { KANAL2, AMNT, vl, "Автоматически сформировано по Ctrl+F1 из заказа производству" } ) ) ( pp )->( DBSkip() ) end if !Empty( mtr1_rgnum ) AddAll( 'MTR', '2', mtr1_rgnum[1],, fld2, mtr_2, ; ~OwnerForm := ( mtr )->( GetForm( GetArea() ) ), ~Year := Year( id ), ~Month := Month( id ) ) endif finally CloseTable( pp ) mtr2 := OpenChildDoc( 'MTR', '2', mtr1_rgnum[1], ~ParentForm := ( mtr )->( GetForm( GetArea() ) ) ) MakePrvs( mtr2->( GetArea() ),, 2 ) end next endif finally EnaDisControls( GetArea(), true ) RestStateDb( db, ~AllGoTo := true ) DOCS1->( SetFilter( filt ) ) DOCS1->( DBGoTo( rec ) ) DOCS9->( SetFilter( filt2 ) ) HideMsg( msg ) end Message( 'Накладная успешно сформирована' + Chr( 13 ) + ; 'Просмотр накладной: Производство - Документы за смену - Сырье и материалы - Приходные накладные' )