TAKE FROM FTP — различия между версиями
Материал из Фабиус wiki
Hisava (обсуждение | вклад) м (→Смотрите также) |
Hisava (обсуждение | вклад) м (→Использование) |
||
Строка 5: | Строка 5: | ||
= Использование = | = Использование = | ||
[[Магазин]] "Новинка" ( 7 ) - Загрузка продаж - Из FTP | [[Магазин]] "Новинка" ( 7 ) - Загрузка продаж - Из FTP | ||
+ | = Текст = | ||
+ | local ip, aa, datas, temp_path, from_atolf, __, taskanal, fld, sql, ftp, host, port, user, pass, dest_path, i, msg, from_atolz, folder, file_name | ||
+ | |||
+ | // запрашиваем диапазон для загрузки | ||
+ | ip := [[InputPeriod]]( true ) | ||
+ | if Empty( ip ) | ||
+ | return | ||
+ | endif | ||
+ | |||
+ | try | ||
+ | WaitMsg( 'Подготовка', msg ) | ||
+ | |||
+ | // проверяем аналитику ( код магазина ) | ||
+ | taskanal := GetPrm( 'TASKANAL', TaskName, TaskNum ) | ||
+ | if Empty( taskanal ) | ||
+ | return | ||
+ | endif | ||
+ | |||
+ | // атас | ||
+ | datas := StoD( ip[1] ) + '; ' + StoD( ip[2] ) | ||
+ | TAKE_FROM_FTP_( datas, taskanal ) | ||
+ | |||
+ | temp_path := Nice_Path( ExpandUNCFileName( TempPath ) ) | ||
+ | |||
+ | // удалить все из временной папки | ||
+ | ClearDir( temp_path ) | ||
+ | |||
+ | fld := ' _0,C,50; _1,C,100; _2,C,20; _3,C,20; _4,C,20; _5,C,80; _6,C,30; _7,N,5; _8,C,30; _9,C,30; _10,N,5; _11,C,25; _13,C,25; ' | ||
+ | __ := CreateTmpFile( fld, '__', ~IsFreeDel := true ) | ||
+ | sql := [ Select PNAME, FROM_ATOL, FROM_ATOLF, TO_ATOL, TO_ATOLF, FOLDERATOL, FTP_SERVER, FTP_PORT, FTP_LOGIN, FTP_PASS, KOD, FROM_ATOLZ, TO_ATOLZ ; | ||
+ | From R603 Where R20_KOD = ] + taskanal | ||
+ | SimpleSql( [ Insert into ] + TmpFilePath( __ ) + [( _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _13 ) ] + sql, ReflisPath ) | ||
+ | ( __ )->( DbGoTop() ) | ||
+ | while !( __ )->( eof() ) | ||
+ | // _2 флаг импорта | ||
+ | from_atolf := atr( ( __ )->_2 ) | ||
+ | aa := { '$$$TRANSACTIONSBYDATERANGE' } | ||
+ | Aadd( aa, datas ) | ||
+ | WriteTxtFile( aa, from_atolf, temp_path, true ) | ||
+ | // _5 папка обмена | ||
+ | dest_path := atr( ( __ )->_5 ) | ||
+ | if Left( dest_path, 1 ) = '/' | ||
+ | dest_path := SUBTOKEN( dest_path,, '/' ) | ||
+ | endif | ||
+ | |||
+ | host := atr( ( __ )->_6 ) | ||
+ | port := ( __ )->_7 | ||
+ | user := atr( ( __ )->_8 ) | ||
+ | pass := atr( ( __ )->_9 ) | ||
+ | |||
+ | try | ||
+ | ftp := FTPOPEN( host,, user, pass, ~PassiveMode := true ) | ||
+ | // очищаем папку | ||
+ | aa := FTPLIST( ftp,, '/' + dest_path + '/*.*' ) | ||
+ | if !IsEmpty( aa ) | ||
+ | for i := 1 to len( aa ) | ||
+ | FTPDELETE( ftp, '/' + dest_path + '/', aa[i] ) | ||
+ | next | ||
+ | endif | ||
+ | FTPPUT( ftp, temp_path + from_atolf, '/' + dest_path + '/', from_atolf ) | ||
+ | // в этот момент Атол начинает выгружать продажи и удалит файл from_atolf как только выгрузит | ||
+ | aa := { from_atolf } | ||
+ | i := 0 | ||
+ | while Ascan( aa, from_atolf ) > 0 and i < 10 | ||
+ | i := i + 1 | ||
+ | WaitMsg( 'Выгрузка продаж ( ' + a_s( i ) + ' ) ' + atr( ( __ )->_0 ), msg ) | ||
+ | Pause( 10000 ) | ||
+ | aa := FTPLIST( ftp,, '/' + dest_path + '/*.*' ) | ||
+ | end | ||
+ | from_atolz := atr( ( __ )->_11 ) | ||
+ | |||
+ | try | ||
+ | FTPGET( ftp, '/' + dest_path + '/' + from_atolz, temp_path + '/' + from_atolz + ( __ )->_10 ) | ||
+ | except | ||
+ | end | ||
+ | |||
+ | FTPDELETE( ftp, '/' + dest_path + '/', from_atolz ) | ||
+ | |||
+ | finally | ||
+ | FTPCLOSE( ftp ) | ||
+ | end | ||
+ | |||
+ | ( __ )->( DbSkip() ) | ||
+ | end | ||
+ | |||
+ | // создаем папки в соответствии с кодами из справочника R603 | ||
+ | aa := Directory( temp_path + '*zip*' ) | ||
+ | aa := PrepareArr( aa ) | ||
+ | for i := 1 to len( aa ) | ||
+ | folder := CUTFROM( aa[i], 'zip' ) | ||
+ | file_name := Left( aa[i], len( aa[i] ) - len( folder ) ) | ||
+ | folder := Nice_Path( folder ) | ||
+ | ClearDir( temp_path + folder, true ) | ||
+ | CreateDir( temp_path + folder, true ) | ||
+ | CopyFile( temp_path + aa[i], temp_path + folder + file_name ) | ||
+ | RunProcess( [winrar e -y "] + temp_path + folder + file_name + [" "] + temp_path + folder + ["] ) | ||
+ | next | ||
+ | |||
+ | finally | ||
+ | CloseTable( __ ) | ||
+ | HideMsg( msg ) | ||
+ | end | ||
+ | |||
+ | // Удалить FTL и FRO | ||
+ | TAKE_FROM_FTP1() | ||
+ | // Добавить FTL | ||
+ | TAKE_FROM_FTP2() | ||
+ | // Добавить FRO | ||
+ | TAKE_FROM_FTP3() | ||
+ | // Конец | ||
+ | TAKE_FROM_FTP4() | ||
+ | |||
+ | Message( 'Загрузка завершена' ) | ||
+ | // _0 Наименование | ||
+ | // _1 файл импорта rep | ||
+ | // _2 флаг импорта | ||
+ | // _3 файл экспорта srp | ||
+ | // _4 флаг экспорта | ||
+ | // _5 папка обмена | ||
+ | // _6 FTP-сервер | ||
+ | // _7 порт | ||
+ | // _8 логин | ||
+ | // _9 пароль | ||
+ | // _10 код | ||
+ | // _11 Файл импорта rep в архиве | ||
+ | // _13 Файл экспорта spr в архиве | ||
+ | |||
= Смотрите также = | = Смотрите также = | ||
[[TAKE_FROM_FTP1]] | [[TAKE_FROM_FTP1]] |
Версия 13:48, 25 января 2018
TAKE_FROM_FTP - это программа из справочника R266
Загрузить продажи из FTP
TAKE_FROM_FTP()
Использование
Магазин "Новинка" ( 7 ) - Загрузка продаж - Из FTP
Текст
local ip, aa, datas, temp_path, from_atolf, __, taskanal, fld, sql, ftp, host, port, user, pass, dest_path, i, msg, from_atolz, folder, file_name // запрашиваем диапазон для загрузки ip := InputPeriod( true ) if Empty( ip ) return endif try WaitMsg( 'Подготовка', msg ) // проверяем аналитику ( код магазина ) taskanal := GetPrm( 'TASKANAL', TaskName, TaskNum ) if Empty( taskanal ) return endif // атас datas := StoD( ip[1] ) + '; ' + StoD( ip[2] ) TAKE_FROM_FTP_( datas, taskanal ) temp_path := Nice_Path( ExpandUNCFileName( TempPath ) ) // удалить все из временной папки ClearDir( temp_path ) fld := ' _0,C,50; _1,C,100; _2,C,20; _3,C,20; _4,C,20; _5,C,80; _6,C,30; _7,N,5; _8,C,30; _9,C,30; _10,N,5; _11,C,25; _13,C,25; ' __ := CreateTmpFile( fld, '__', ~IsFreeDel := true ) sql := [ Select PNAME, FROM_ATOL, FROM_ATOLF, TO_ATOL, TO_ATOLF, FOLDERATOL, FTP_SERVER, FTP_PORT, FTP_LOGIN, FTP_PASS, KOD, FROM_ATOLZ, TO_ATOLZ ; From R603 Where R20_KOD = ] + taskanal SimpleSql( [ Insert into ] + TmpFilePath( __ ) + [( _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _13 ) ] + sql, ReflisPath ) ( __ )->( DbGoTop() ) while !( __ )->( eof() ) // _2 флаг импорта from_atolf := atr( ( __ )->_2 ) aa := { '$$$TRANSACTIONSBYDATERANGE' } Aadd( aa, datas ) WriteTxtFile( aa, from_atolf, temp_path, true ) // _5 папка обмена dest_path := atr( ( __ )->_5 ) if Left( dest_path, 1 ) = '/' dest_path := SUBTOKEN( dest_path,, '/' ) endif host := atr( ( __ )->_6 ) port := ( __ )->_7 user := atr( ( __ )->_8 ) pass := atr( ( __ )->_9 ) try ftp := FTPOPEN( host,, user, pass, ~PassiveMode := true ) // очищаем папку aa := FTPLIST( ftp,, '/' + dest_path + '/*.*' ) if !IsEmpty( aa ) for i := 1 to len( aa ) FTPDELETE( ftp, '/' + dest_path + '/', aa[i] ) next endif FTPPUT( ftp, temp_path + from_atolf, '/' + dest_path + '/', from_atolf ) // в этот момент Атол начинает выгружать продажи и удалит файл from_atolf как только выгрузит aa := { from_atolf } i := 0 while Ascan( aa, from_atolf ) > 0 and i < 10 i := i + 1 WaitMsg( 'Выгрузка продаж ( ' + a_s( i ) + ' ) ' + atr( ( __ )->_0 ), msg ) Pause( 10000 ) aa := FTPLIST( ftp,, '/' + dest_path + '/*.*' ) end from_atolz := atr( ( __ )->_11 ) try FTPGET( ftp, '/' + dest_path + '/' + from_atolz, temp_path + '/' + from_atolz + ( __ )->_10 ) except end FTPDELETE( ftp, '/' + dest_path + '/', from_atolz ) finally FTPCLOSE( ftp ) end ( __ )->( DbSkip() ) end // создаем папки в соответствии с кодами из справочника R603 aa := Directory( temp_path + '*zip*' ) aa := PrepareArr( aa ) for i := 1 to len( aa ) folder := CUTFROM( aa[i], 'zip' ) file_name := Left( aa[i], len( aa[i] ) - len( folder ) ) folder := Nice_Path( folder ) ClearDir( temp_path + folder, true ) CreateDir( temp_path + folder, true ) CopyFile( temp_path + aa[i], temp_path + folder + file_name ) RunProcess( [winrar e -y "] + temp_path + folder + file_name + [" "] + temp_path + folder + ["] ) next finally CloseTable( __ ) HideMsg( msg ) end // Удалить FTL и FRO TAKE_FROM_FTP1() // Добавить FTL TAKE_FROM_FTP2() // Добавить FRO TAKE_FROM_FTP3() // Конец TAKE_FROM_FTP4() Message( 'Загрузка завершена' ) // _0 Наименование // _1 файл импорта rep // _2 флаг импорта // _3 файл экспорта srp // _4 флаг экспорта // _5 папка обмена // _6 FTP-сервер // _7 порт // _8 логин // _9 пароль // _10 код // _11 Файл импорта rep в архиве // _13 Файл экспорта spr в архиве