FILL R473 TD — различия между версиями
Материал из Фабиус wiki
Hisava (обсуждение | вклад) м |
Hisava (обсуждение | вклад) м |
||
Строка 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]] |
Версия 09:12, 26 мая 2017
FILL_R473_TD - это программа из справочника R266
Заполнить справочник R473 для ТД ( Цены материалов на дату )
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