|
|
Строка 2: |
Строка 2: |
| Заполнить справочник [[R473]] для ТД ( Цены материалов на дату ) | | Заполнить справочник [[R473]] для ТД ( Цены материалов на дату ) |
| [[FILL_R473_TD]]() | | [[FILL_R473_TD]]() |
− | = Текст =
| |
− | // Для планировщика написать следующую процедуру
| |
− |
| |
− | // Анализируется [[MTUN]] за 3 предыдущих месяца
| |
− | // Для всей номенклатуры с группой "отдел закупок" необходимо найти последнюю цену поставщика
| |
− | // Цену поставщика умножаем на 1% и записываем в [[R473]]
| |
− |
| |
− | // После этого анализируем R473
| |
− | // Если цена номенклатуры не изменилась, с предыдущего раза, удаляем свежую запись в R473
| |
− |
| |
− | local t, fld, msg, sql, i, t2, t3, r, r2, t4
| |
− |
| |
− | // t
| |
− | // t_KOD - код ТМЦ
| |
− | // t_GROUP - группа
| |
− |
| |
− | fld := 't_KOD,N,5;t_GROUP,C,10'
| |
− |
| |
− | try
| |
− | msg := WaitMsg( 'Подготовка данных' )
| |
− | t := CreateTmpFile( fld, 't', ~IsFreeDel:=true )
| |
− |
| |
− | for i := 0 to 3
| |
− | // MTUN
| |
− | sql := [ Select DISTINCT KOD ;
| |
− | From MTUN]+Ret_f_ext( Date(),, -i )+[ ;
| |
− | Where REFL = 'R08 ' ]
| |
− | if Is_File( 'MTUN',TimeBack( Date(), -i ) )
| |
− | SimpleSql( [ Insert into ]+TmpFilePath( t )+[( t_KOD ) ]+sql, OpdataPath )
| |
− | endif
| |
− | next
| |
− |
| |
− | // r08
| |
− | sql := [ Update t ;
| |
− | Set t_GROUP = CODEGROUP ;
| |
− | From ]+TmpFilePath( t )+[ t ;
| |
− | left outer join R08 ON t_KOD = KOD ]
| |
− | SimpleSql( sql, ReflisPath )
| |
− |
| |
− | // t -> x
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( t )+[ ;
| |
− | Where t_GROUP not like '16%' ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // t2
| |
− | // t2_KOD - код
| |
− | // t2_DATE - дата
| |
− | // t2_MAXD - максимальная ли дата ? ( 1 - максимальная )
| |
− | // t2_1 - цена без НДС
| |
− | // t2_2 - цена с НДС
| |
− | fld := 't2_KOD,N,5;t2_DATE,D,8;t2_MAXD,N,1;t2_1,N,14,4;t2_2,N,14,4'
| |
− | t2 := CreateTmpFile( fld, 't2', ~IsFreeDel:=true )
| |
− |
| |
− | for i := 0 to 3
| |
− | sql := [ Select DANAL2, DATDOC, ]+SqlField('PRICE1')+[, ;
| |
− | ]+SqlField('ALLPRICE')+[ ;
| |
− | From DOCS]+Ret_f_ext( Date(),, -i )+[ ;
| |
− | Where KINDDOC = 'UTH' and LVLNUM = '2' and AMNT<>0 and "SUM"<>0 and ;
| |
− | DREFL1='R10 ' and DANAL1>0 and DREFL2='R08 ' ]
| |
− | if Is_File( 'DOCS',TimeBack( Date(), -i ) )
| |
− | SimpleSql( [ Insert into ]+TmpFilePath( t2 )+[( t2_KOD, t2_DATE, t2_1, t2_2 ) ;
| |
− | ]+sql, OpdataPath )
| |
− | endif
| |
− | next
| |
− |
| |
− | sql := [ Update t2 ;
| |
− | Set t2_KOD = 0 ;
| |
− | From ]+TmpFilePath( t2 )+[ t2 ;
| |
− | left outer join ]+TmpFilePath( t )+[ ON t2_KOD = t_KOD ;
| |
− | Where t_KOD is null ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( t2 )+[ ;
| |
− | Where t2_KOD = 0 ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // тут надо найти максимальные даты по каждой номенклатуре
| |
− |
| |
− | // t3
| |
− | // t3_DATE - дата
| |
− | // t3_KOD - код
| |
− | fld := 't3_DATE,D,8;t3_KOD,N,5'
| |
− | t3 := CreateTmpFile( fld, 't3', ~IsFreeDel:=true )
| |
− |
| |
− | sql := [ Select t2_KOD, Max( t2_DATE ) ;
| |
− | From ]+TmpFilePath( t2 )+[ ;
| |
− | Group by t2_KOD ]
| |
− | SimpleSql( [ Insert into ]+TmpFilePath( t3 )+[( t3_KOD, t3_DATE ) ]+sql, OpdataPath )
| |
− |
| |
− | sql := [ Update t2 ;
| |
− | Set t2_MAXD = 1 ;
| |
− | From ]+TmpFilePath( t2 )+[ t2 ;
| |
− | left outer join ]+TmpFilePath( t3 )+[ ON t2_DATE = t3_DATE and t2_KOD = t3_KOD ;
| |
− | Where t3_KOD is not null ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( t2 )+[ ;
| |
− | Where t2_MAXD is null ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // Цену поставщика умножаем на 1%
| |
− | sql := [ Update t2 ;
| |
− | Set t2_1 = Round( t2_1 * 101 / 100, 4 ), ;
| |
− | t2_2 = Round( t2_2 * 101 / 100, 4 ) ;
| |
− | From ]+TmpFilePath( t2 )+[ t2 ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // максимальные даты найдены, цены увеличены
| |
− | // сравним эти цены с существующими в справочнике R473
| |
− |
| |
− | // r
| |
− | // r_KOD - код
| |
− | // r_GROUP - группа
| |
− | // r_DATE - дата
| |
− | // r_MAXD - максимальная ли дата ? ( 1 - максимальная )
| |
− | // r_1 - цена без НДС
| |
− | // r_2 - цена с НДС
| |
− | fld := 'r_KOD,N,5;r_GROUP,C,10;r_DATE,D,8;r_MAXD,N,1;r_1,N,14,4;r_2,N,14,4'
| |
− | r := CreateTmpFile( fld, 'r' , ~IsFreeDel:=true )
| |
− | r2 := CreateTmpFile( fld, 'r2', ~IsFreeDel:=true )
| |
− |
| |
− | // r473 -> r
| |
− | sql := [ Select KOD, VAR_DATE, PRICE1, OTP_PRICE ;
| |
− | From R473 ;
| |
− | Where VAR_DATE < ']+SqlDate( Bom( Date() ) )+[']
| |
− | SimpleSql( [ Insert into ]+TmpFilePath( r )+[( r_KOD, r_DATE, r_1, r_2 ) ;
| |
− | ]+sql, ReflisPath )
| |
− |
| |
− | // t3 -> x
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( t3 )
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // --- ПОИСК ПОСЛЕДНИХ ЦЕН В СПРАВОЧНИКЕ R473 ---
| |
− | sql := [ Select r_KOD, Max( r_DATE ) ;
| |
− | From ]+TmpFilePath( r )+[ ;
| |
− | Group by r_KOD ]
| |
− | SimpleSql( [ Insert into ]+TmpFilePath( t3 )+[( t3_KOD, t3_DATE ) ]+sql, OpdataPath )
| |
− |
| |
− | sql := [ Update r ;
| |
− | Set r_MAXD = 1 ;
| |
− | From ]+TmpFilePath( r )+[ r ;
| |
− | left outer join ]+TmpFilePath( t3 )+[ ON r_DATE = t3_DATE and r_KOD = t3_KOD ;
| |
− | Where t3_KOD is not null ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // очищаю таблицу r от старых цен
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( r )+[ ;
| |
− | Where r_MAXD is null ]
| |
− | SimpleSql( sql, TempPath )
| |
− | // *** ПОИСК ПОСЛЕДНИХ ЦЕН В СПРАВОЧНИКЕ R473 ***
| |
− |
| |
− | // ищем в таблице t2 такие цены, которые абсолютно совпадают с ценами в R473
| |
− | // и удаляем их
| |
− |
| |
− | sql := [ Update t2 ;
| |
− | Set t2_MAXD = 2 ;
| |
− | From ]+TmpFilePath( t2 )+[ t2 ;
| |
− | left outer join ]+TmpFilePath( r )+[ ON t2_KOD = r_KOD and t2_1 = r_1 and t2_2 = r_2 ;
| |
− | Where r_KOD is not null ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( t2 )+[ ;
| |
− | Where t2_MAXD = 2 ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // добавить все наименования r473 с максимальной датой ( группы "отдел закупок" ) в t2
| |
− | // но только те, которых нет в t2
| |
− |
| |
− | // r08
| |
− | sql := [ Update r ;
| |
− | Set r_GROUP = CODEGROUP ;
| |
− | From ]+TmpFilePath( r )+[ r ;
| |
− | left outer join R08 ON r_KOD = KOD ]
| |
− | SimpleSql( sql, ReflisPath )
| |
− |
| |
− | sql := [ Update r ;
| |
− | Set r_GROUP = 'no' ;
| |
− | From ]+TmpFilePath( r )+[ r ;
| |
− | left outer join ]+TmpFilePath( t2 )+[ ON r_KOD = t2_KOD ;
| |
− | Where t2_KOD is not null ]
| |
− | SimpleSql( sql, ReflisPath )
| |
− |
| |
− | // r -> x
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( r )+[ ;
| |
− | Where r_GROUP not like '16%' or ( r_1 = 0 and r_2 = 0 ) ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // t2 -> r
| |
− | sql := [ Select t2_KOD, t2_1, t2_2 ;
| |
− | From ]+TmpFilePath( t2 )
| |
− | SimpleSql( [ Insert into ]+TmpFilePath( r )+[( r_KOD, r_1, r_2 ) ;
| |
− | ]+sql, OpdataPath )
| |
− |
| |
− | // r -> r2
| |
− | sql := [ Select DISTINCT r_KOD, r_1, r_2 ;
| |
− | From ]+TmpFilePath( r )
| |
− | SimpleSql( [ Insert into ]+TmpFilePath( r2 )+[( r_KOD, r_1, r_2 ) ;
| |
− | ]+sql, TempPath )
| |
− |
| |
− | // t4
| |
− | // t4_KOD - код
| |
− | // t4_2 - цена с НДС
| |
− | fld := ' t4_KOD,N,5; t4_2,N,14,4 '
| |
− | t4 := CreateTmpFile( fld, 't4', ~IsFreeDel:=true )
| |
− |
| |
− | // t2
| |
− | // t2_KOD - код
| |
− | // t2_DATE - дата
| |
− | // t2_MAXD - максимальная ли дата ? ( 1 - максимальная )
| |
− | // t2_1 - цена без НДС
| |
− | // t2_2 - цена с НДС
| |
− |
| |
− | // r
| |
− | // r_KOD - код
| |
− | // r_GROUP - группа
| |
− | // r_DATE - дата
| |
− | // r_MAXD - максимальная ли дата ? ( 1 - максимальная )
| |
− | // r_1 - цена без НДС
| |
− | // r_2 - цена с НДС
| |
− |
| |
− | // --- ПОИСК МАКСИМАЛЬНЫХ ЦЕН В СПРАВОЧНИКЕ R473 ***
| |
− | sql := [ Select r_KOD, Max( r_2 ) ;
| |
− | From ]+TmpFilePath( r2 )+[ ;
| |
− | Group by r_KOD ]
| |
− | SimpleSql( [ Insert into ]+TmpFilePath( t4 )+[( t4_KOD, t4_2 ) ]+sql, OpdataPath )
| |
− |
| |
− | sql := [ Update r2 ;
| |
− | Set r_MAXD = 1 ;
| |
− | From ]+TmpFilePath( r2 )+[ r2 ;
| |
− | left outer join ]+TmpFilePath( t4 )+[ ON r_2 = t4_2 and r_KOD = t4_KOD ;
| |
− | Where t4_KOD is not null ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // очищаю таблицу r от старых цен
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( r2 )+[ ;
| |
− | Where r_MAXD is null ]
| |
− | SimpleSql( sql, TempPath )
| |
− | // *** ПОИСК МАКСИМАЛЬНЫХ ЦЕН В СПРАВОЧНИКЕ R473 ***
| |
− |
| |
− | // r
| |
− | // r_KOD - код
| |
− | // r_GROUP - группа
| |
− | // r_DATE - дата
| |
− | // r_MAXD - максимальная ли дата ? ( 1 - максимальная )
| |
− | // r_1 - цена без НДС
| |
− | // r_2 - цена с НДС
| |
− |
| |
− | // все цены необходимо сохранить с текущей датой
| |
− | sql := [ Update r2 ;
| |
− | Set r_DATE = ']+SqlDate( Date() )+[' ;
| |
− | From ]+TmpFilePath( r2 )+[ r2 ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // Денис Буров просил удалить все устаревшие записи
| |
− |
| |
− | sql := [ Update r2 ;
| |
− | Set r_MAXD = 9 ;
| |
− | From ]+TmpFilePath( r2 )+[ r2 ;
| |
− | left outer join R08 ON r_KOD = KOD ;
| |
− | Where SHADOW = true ]
| |
− | SimpleSql( sql, ReflisPath )
| |
− |
| |
− | sql := [ Delete ;
| |
− | From ]+TmpFilePath( r2 )+[ ;
| |
− | Where r_MAXD = 9 ]
| |
− | SimpleSql( sql, TempPath )
| |
− |
| |
− | // r2 -> r473
| |
− | sql := [ Select r_KOD, r_DATE, r_1, r_2 ;
| |
− | From ]+TmpFilePath( r2 )
| |
− | SimpleSql( [ Insert into R473( KOD, VAR_DATE, PRICE1, OTP_PRICE ) ]+sql, ReflisPath )
| |
− |
| |
− | finally
| |
− | CloseTable( r )
| |
− | CloseTable( r2 )
| |
− | CloseTable( t )
| |
− | CloseTable( t2 )
| |
− | CloseTable( t3 )
| |
− | CloseTable( t4 )
| |
− | HideMsg( msg )
| |
− | end
| |
− |
| |
− | // t2
| |
− | // t2_KOD - код
| |
− | // t2_DATE - дата
| |
− | // t2_MAXD - максимальная ли дата ? ( 1 - максимальная )
| |
− | // t2_1 - цена без НДС
| |
− | // t2_2 - цена с НДС
| |
− |
| |
− | // r
| |
− | // r_KOD - код
| |
− | // r_DATE - дата
| |
− | // r_MAXD - максимальная ли дата ? ( 1 - максимальная )
| |
− | // r_1 - цена без НДС
| |
− | // r_2 - цена с НДС
| |
− |
| |
− | // t
| |
− | // t_KOD
| |
− | // t_GROUP
| |
− |
| |
− | // Для планировщика написать следующую процедуру
| |
− |
| |
− | // Анализируется MTUN за 3 предыдущих месяца
| |
− | // Для всей номенклатуры с группой "отдел закупок" необходимо найти последнюю цену поставщика
| |
− | // Цену поставщика умножаем на 1% и записываем в R473
| |
− |
| |
− | // После этого анализируем R473
| |
− | // Если цена номенклатуры не изменилась, с предыдущего раза, удаляем свежую запись в R473
| |
| = Смотрите также = | | = Смотрите также = |
| [[Полезные функции]] | | [[Полезные функции]] |
| | | |
| [[Функции Delphi]] | | [[Функции Delphi]] |