// ***************************************************************************** // Название: senddo3.prd // Описание: // Кнопка вызова: 0 // Подпись кнопки: Отправка ДО3 // Язык: FuncScript // Вызов по событию: // Без подтверждения: 0 // ***************************************************************************** // EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'PROCDOCS\check_album.prd'); Func('GetAlbumVersionFromMonitor',, Block( VAR('sFuncResult', string, ''); // подключаемся к базе Монитор ЭД EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'ProcDocs\open_monitor_db.prd'); // получаем версию альбома форматов из требования ДО-3 OPENQUERY ('qCheckAlbum', 'SELECT FmtVersion FROM LOG_WH WHERE WhDocId=' +char(39)+ JRDO3.REFDOCUMENTID +char(39), 'dbMonitor'); IF (LENGTH (TRIM (qCheckAlbum.FmtVersion)) > 0, sFuncResult := qCheckAlbum.FmtVersion); CLOSEDATASET ('qCheckAlbum'); CLOSEDATABASE ('dbMonitor'); sFuncResult ) ), VAR ('sDriverName', String, INIFILE ('Database', 'DbmsType', 'PARADOX')); VAR ('sResult', String); VAR ('vPlaceId', String); VAR ('vDocID', String); Var ('strStatus', String, ''); Var ('strSubStatus', String, ''); Var ('DoType', String, ''); Var ('DoNo', String, ''); Var ('DoDate', DateTime); Var ('dRegDate', DateTime); VAR ('sJourGuid', String); VAR ('dtPeriodStart', DateTime); VAR ('dtPeriodEnd', DateTime); VAR ('mSQL', Memo, ''); VAR ('vDocID', String, ''); VAR ('sDir', String, ''); VAR ('sTmpFileName', String, ''); VAR ('isNewDO3', Integer, 1); // по умолчанию создаем новый XML ДО3 VAR ('sXmlVersion', String, INIFILE ('XMLFormat', 'Version', '')); VAR ('sMonitorAlbum', String, REGISTRYREADSTRING('HKEY_CURRENT_USER', 'Software\CTM\MONITORED\MAIN\ExchangeVersions\WH', 'FmtVersion', '')); EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'ProcDocs\sqldate.prd'); IF(CheckAlbum(), Block( IF (FIELDISNULL ('JRDO3', 'CERTIFICATEDATE')| FIELDISNULL ('JRDO3', 'CERTIFICATENUMBER')| (JRDO3.WHCertificateNumber <> JRDO3.CERTIFICATENUMBER)| ShiftPressed (), mSQL := 'select * from stores s where (s.placeid=0) and (s.placeid=1)', mSQL := 'select * from stores s ' + ' where ' + ' s.licencedate = ' +char(39)+ FDT('DD.MM.YYYY', JRDO3.CERTIFICATEDATE) +char(39)+ ' and s.licenceno = '+char(39)+ JRDO3.CERTIFICATENUMBER +char(39) ); OPENQUERY ('qryStores', 'STS_DB', mSQL); IF (FIELDISNULL ('qryStores', 'PLACEID') = 1, IF (SELECTVALUES ('Выбор места хранения товаров', 'STORES_2', [['LICENCENO', '', 20], ['STORE_NO', '', 10], ['NAME', '', 38], ['LICENCEDATE', 'Дата', 10], ['CUSTOMS_CODE', 'Код поста', 8]], [['PLACEID', 'vPlaceID']]) = 0, RAISEEXCEPTION ('Отменено пользователем')), // IF (SELECTVALUES ('Выберите лицензию', 'STORES', [['NAME', 'Наименование', 40], ['LICENCENO', 'Номер лицензии', 30],['STORE_NO','№',3],['CUSTOMS_CODE','Код там.',8]], [['PLACEID', 'vPlaceID']], '', 'STS_DB') <> 1, RAISEEXCEPTION ('Отменено пользователем')), vPlaceId := qryStores.PLACEID ); IF (NOT(LOCATE ('STORES', 'PLACEID', [vPlaceId])), RAISEEXCEPTION('Обнаружена ошибка в базе данных. Не найдена лицензия с идентификатором PLACEID '+REL_COMM_2.PLACEID+ ' Выполните Сервис > База данных > Поиск потерянных записей') ); // однажды зменить EDIT\POST на SQL-UPDATE EDIT ('JRDO3'); SETFIELDVALUE ('JRDO3', 'PLACEID', vPLACEID); SETFIELDVALUE ('JRDO3', 'WHCertificateNumber', STORES.LICENCENO); SETFIELDVALUE ('JRDO3', 'WHCertificateDate', STORES.LICENCEDATE); SETFIELDVALUE ('JRDO3', 'RECORDTYPE', 'Отчет ДО-3'); POST ('JRDO3'); dtPeriodStart := JRDO3.ReportBeginDate; dtPeriodEnd := FDT ('DD.MM.YYYY 23:59:59', JRDO3.ReportEndDate); sDir := INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'JOURNALS\DO3XML\'+FORMATDATETIME('YYYY', JRDO3.SendDateTime) + '\'; FORCEDIRECTORIES (sDir); If(FileExists(sDir + 'DO3_' + UPPERSTR(JRDO3.RefDocumentID) + '_' + JRDO3.ReportNumber + '_' + FDT('DD-MM-YYYY', JRDO3.ReportDate) + '.xml')=1, isNewDo3 := YesNo('Нажмите "Да", чтобы сформировать ДО3 заново,'+char(13)+char(10)+'"Нет", чтобы показать сформированный ранее ДО3') ); If(isNewDO3=1, Block( mSQL := 'select placeid from rel_comm where release_out_date is null and placeid=' + vPlaceId; OPENQUERY ('qCheckROD', 'STS_DB', mSQL); IF (FIELDISNULL ('qCheckROD', 'PLACEID') = 0, Block( mSQL := 'update rel_comm ' + ' set rel_comm.release_out_date=' + ' (select r.out_date from release r where r.placeid=rel_comm.placeid and r.id=rel_comm.id and r.counter=rel_comm.counter)' + ' where rel_comm.release_out_date is null and rel_comm.placeid=' + vPlaceId; SHOWINFORMATION ('Анализ данных, пожалуйста, подождите'); EXECUTESQL ('STS_DB', mSQL); HIDEINFORMATION (); ) ); // IF - // IF (FIELDEXISTS ('JRDO3', 'ALBUMVERSION'), IF(Length(JRDO3.ALBUMVERSION) <> 0, sXMLVersion := JRDO3.ALBUMVERSION, sXMLVersion := GetAlbumVersionFromMonitor() ), sXMLVersion := GetAlbumVersionFromMonitor() ); SHOWINFORMATION ('Процесс может занять некоторое время, подождите..'); EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'DATA\IMPEX\SCRIPTS\' + sXMLVersion + '\do3_album.exp'); HIDEINFORMATION (); // IF ), sTmpFileName := sDir + 'DO3_' + UPPERSTR(JRDO3.RefDocumentID) + '_' + JRDO3.ReportNumber + '_' + FDT('DD-MM-YYYY', JRDO3.ReportDate) + '.xml' ); EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'PROCDOCS\utils\xslt_func.prd'); ShowXml2Html(sTmpFileName); IF (ValidateXml(sTmpFileName), IF (YESNO ('Передать Форму ДО-3?'), Block( sDir := INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'STS-MED\iin\'; IF (USERINFO ('', 'UserUUID') <> '', sDir := sDir + USERINFO ('', 'UserUUID') + '\'); FORCEDIRECTORIES (sDir); COPYFILE (sTmpFileName, sDir + 'DO3_' + UPPERSTR(JRDO3.RefDocumentID) + '_' + JRDO3.ReportNumber + '_' + FDT('DD-MM-YYYY', JRDO3.ReportDate) + '.xml'); If(isNewDo3=1, Block( sDir := INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'JOURNALS\DO3XML\'+FORMATDATETIME('YYYY', JRDO3.SendDateTime) + '\'; FORCEDIRECTORIES (sDir); COPYFILE (sTmpFileName, sDir + 'DO3_' + UPPERSTR(JRDO3.RefDocumentID) + '_' + JRDO3.ReportNumber + '_' + FDT('DD-MM-YYYY', JRDO3.ReportDate) + '.xml'); )); mSQL := 'update jrdo3' + ' set' + ' customstate=' +char(39)+ 'ДО-3 подготовлена к отправке' +char(39)+ ' where' + ' refdocumentid=' +char(39)+ JRDO3.REFDOCUMENTID +char(39); EXECUTESQL ('dbJournals', mSQL); //SETFIELDVALUE ('JRDO3', 'CustomState', 'Рассматривается инспектором'); vDocId := JRDO3.RefDocumentId; DoType := 'ДО-3'; DoNo := JRDO3.REPORTNUMBER; DoDate := JRDO3.REPORTDATE; strStatus:= 'ДО-3 подготовлена к отправке'; dRegDate := DATE()+TIME(1); sJourGuid := vDocId; ) // Block // ), // IF - // ); // IF - // ), Block( Showmessage('ДО-3 не отправлен. Не совпадают версии форматов'+char(13)+char(10)+'в настройках ВЭД-Склад и Монитор ЭД. Проверьте настройки.'); ) );