// ***************************************************************************** // Название: Восстановление документа // Описание: Восстановление документа // Кнопка вызова: 1 // Подпись кнопки: Восстановление документа // Язык: FuncScript // Вызов по событию: // Без подтверждения: 0 // ***************************************************************************** // // ПОДВКЛЮЧЕНИЕ ВНЕШНИХ СКРИПТОВ EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'ProcDocs\WriteLog.prd'); // Импортируем функцию SQLDate ([ДатаВремя], GetBaseDriver ([База данных (0 - ВЭД-Склад, 1 - СТМ-Журналы, 2 - Справочники)])) EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'PROCDOCS\sqldate.prd'); // Импортируем функцию INSERT ([Имя таблицы], [Имя поля], [Значение поля], [Тип данных (0 - Строка, 1 - Число, 2 - ДатаВремя]) EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'PROCDOCS\sql_insert.prd'); // Импортируем функцию WriteEpsLog EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'PROCDOCS\write_eps_log.prd'); // ПОДВКЛЮЧЕНИЕ ВНЕШНИХ СКРИПТОВ // ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ VAR ('sRestoreLog', String, INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'LOGS\Restore.log'); VAR ('o', Variant); VAR ('sUserName', String, ''); VAR ('sUserComputer', String, ''); VAR ('sSQL' , String, ''); VAR ('vPlaceId', Integer, JREVENTLOG.DOCPLACEID); VAR ('vId', Integer, JREVENTLOG.DOCID); VAR ('vDocName', String, ''); VAR ('vDocNo', String, ''); VAR ('vDocDate', DateTime); VAR ('XmlDoc', Integer); // ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ TRYEXCEPT ( Block( o := CREATEOLEOBJECT ('svh.Extention'); sUserName := o.CurrentUser(); sUserComputer := o.ComputerName(); ), Block( WriteLog ('EventLog', EXCEPTIONMESSAGE()); ) ); // TRYEXCEPT FUNC ('WriteJrEventLog', Block( PARAM ('pDocPlaceId', Integer, 0); PARAM ('pDocId', Integer, 1); PARAM ('pDocSubId', Integer, 2); PARAM ('pDocType', Integer, 3); PARAM ('pDocName', String, 4); PARAM ('pOperType', String, 5); PARAM ('pDocNo', String, 6); PARAM ('pDocDate', DateTime, 7); PARAM ('pDocCounter', Integer, 8); PARAM ('pUserName', String, 9); PARAM ('pUserComputer', String, 10); PARAM ('pOperDate', DateTime, 11); PARAM ('pDocStatus', DateTime, 12); PARAM ('pDocumentId', String, 13); ), Block( VAR ('sJournal_UUID', String, GENERATEUUID ()); VAR ('sDBName', String, 'STS_DB'); VAR ('mDocBody', Memo, ''); VAR ('iJournalMasterId', Integer); OPENQUERY ('Q_MAX', 'SELECT MAX (JOURNAL_MASTER_ID) AS MAXID FROM JREVENTLOG', sDBName, 1); IF (FIELDISNULL ('Q_MAX', 'MAXID'), iJournalMasterId := 1, iJournalMasterId := Q_MAX.MAXID + 1); CLOSEDATASET ('Q_MAX'); sSQL := 'INSERT INTO JREVENTLOG ' + '(JOURNAL_MASTER_ID' + ', JOURNAL_UUID' + ', DOCPLACEID' + ', DOCID' + ', DOCSUBID' + ', DOCTYPE' + ', DOCNAME' + ', OPERTYPE' + ', DOCNO' + ', DOCDATE' + ', DOCCOUNTER' + ', DOCREMARK' + ', STSUSERNAME' + ', USERNAME' + ', USERCOMPUTER' + ', OPERDATE' + ', DOCBODY' + ', DOCSTATUS' + ', DOCUMENTID' + ') VALUES (' + iJournalMasterId + ', ' +char(39)+ COPY (sJOURNAL_UUID, 1, 32) +char(39) + ', ' + pDocPlaceId + ', ' + pDocId + ', ' + pDocSubId + ', ' + pDocType + ', ' +char(39)+ REMOVECHAR (COPY (pDocName , 1, 20), char(39)) +char(39)+ ', ' +char(39)+ REMOVECHAR (COPY (pOperType, 1, 20), char(39)) +char(39)+ ', ' +char(39)+ REMOVECHAR (COPY (pDocNo, 1, 20), char(39)) +char(39)+ ', ' + DBFORMATDATETIME (pDocDate, GetDatabaseType (sDBName), 1, 0, 1) + ', ' + pDocCounter + ', ' +char(39)+ REMOVECHAR (COPY ('', 1, 20), char(39)) +char(39)+ ', ' +char(39)+ UserInfo ('', 'UserLogin') +char(39)+ ', ' +char(39)+ REMOVECHAR (COPY (pUserName, 1, 20), char(39)) +char(39)+ ', ' +char(39)+ REMOVECHAR (COPY (pUserComputer, 1, 20), char(39)) +char(39)+ ', ' + DBFORMATDATETIME (pOperDate, GetDatabaseType (sDBName), 1, 0, 1) + ', ' +char(39)+ mDocBody +char(39)+ ', ' +char(39)+ pDocStatus + char(39)+ ', ' +char(39)+ pDocumentId +char(39)+ ')'; TRYEXCEPT (EXECUTESQL (sDBName, sSQL), WriteLog ('EventLog', EXCEPTIONMESSAGE ())); ) ), // FUNC FUNC ('OpenXml', Block( PARAM ('pFileName', String, 0); ), Block( XmlDoc := XMLDOCUMENTCREATE(); XMLDOCUMENTLOAD (XmlDoc, pFileName); XmlDoc := XMLDOCUMENTROOT (XmlDoc); XmlDoc := XMLNODECHILD (XmlDoc, 0); ) ), // FUNC - OpenXml FUNC ('ImportCommAct', Block( PARAM ('pNBD', String, 0); PARAM ('pBDDate', String, 1); ), Block( VAR ('sLicenceNo', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WarehouseOwner'), 'catWH_ru:WarehouseLicense'), 'catWH_ru:CertificateNumber'))); //VAR ('sLicenceDate', String, CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WarehouseOwner'), 'catWH_ru:WarehouseLicense'), 'catWH_ru:CertificateDate')), String)); VAR ('sLicenceDate', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WarehouseOwner'), 'catWH_ru:WarehouseLicense'), 'catWH_ru:CertificateDate'))); sLicenceDate := DBFORMATDATETIME (STRTODATE (sLicenceDate, 'YYYY-MM-DD', '-'), GetDatabaseType ('STS_DB'), 0, 1, 1); // VAR ('sActDate', String, SQLDate (CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActDate')), String), GetBaseDriver (0))); VAR ('sActDate', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActDate'))); sActDate := FDT ('DD.MM.YYYY' , STRTODATE (sActDate, 'YYYY-MM-DD', '-')); VAR ('sActNumber', string, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActNumber'))); VAR ('bAddAct', Integer, 1); VAR ('bLoadAct', Integer, 1); // Ищем ДО-1 sSQL := 'SELECT PLACEID, MAIN_ID, ID FROM KRD_MAIN WHERE NBD=' +char(39)+ pNBD +char(39)+ ' AND BD_DATE BETWEEN ' +char(39)+ pBDDate + ' 00:00:00' +char(39)+ ' AND ' +char(39)+ pBDDate + ' 23:59:59' +char(39)+ ' AND PLACEID IN (SELECT PLACEID FROM STORES WHERE LICENCENO=' +char(39)+ sLicenceNo +char(39)+ ' AND LICENCEDATE=' + sLicenceDate + ')'; OPENQUERY ('qFindDO', 'STS_DB', sSQL); IF (FIELDISNULL ('qFindDO', 'PLACEID'), Block( APPENDLOGFILE (sRestoreLog, FDT ('YYYY.MM.DD HH:MM:SS', DATE()+TIME(1)) + ' | ' + 'Загрузка коммерческого акта № ' + LEFTPAD (sActNumber, 7, ' ') + ' от ' + sActDate + ' невозможна!' +char(13)+ 'Причина: ДО-1 № ' + pNBD + ' от ' + REMOVECHAR (pBDDate, char(39)) + ' не найдена в БД'); //RAISEEXCEPTION ('Загрузка коммерческого акта № ' + sActNumber + ' от ' + REMOVECHAR (sActDate, char(39)) + ' невозможна!' +char(13)+ 'Причина: ДО-1 № ' + pNBD + ' от ' + REMOVECHAR (pBDDate, char(39)) + ' не найдена в БД'); bLoadAct := 0; ) ); // IF // Ищем комм. акт sSQL := 'SELECT PLACEID, ID FROM KRD_DOP WHERE PLACEID=' + qFindDO.PLACEID + ' AND DOC_NO=' +char(39)+ sActNumber +char(39)+ ' AND DOC_DATETIME BETWEEN ' +char(39)+ sActDate + ' 00:00:00' +char(39)+ ' AND ' +char(39)+ sActDate + ' 23:59:59' +char(39)+ ' AND DOC_ORDER_NUMBER=' + XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActOrderNumber')) + ' AND PLACEID=' + qFindDO.PLACEID + ' AND ID=' + qFindDO.MAIN_ID; OPENQUERY ('qFindAct', 'STS_DB', sSQL); IF (bLoadAct * (FIELDISNULL ('qFindAct', 'PLACEID') = 0), Block( APPENDLOGFILE (sRestoreLog, FDT ('YYYY.MM.DD HH:MM:SS', DATE()+TIME(1)) + ' | ' + 'Коммерческий акт № ' + LEFTPAD (sActNumber, 7, ' ') + ' от ' + sActDate + ' уже существует'); //RAISEEXCEPTION ('Коммерческий акт № ' + sActNumber + ' от ' + REMOVECHAR (sActDate, char(39)) + ' уже существует'); bLoadAct := 0; ) ); // IF sSQL := 'SELECT DOC_ORDER_NUMBER FROM KRD_DOP WHERE PLACEID=' + qFindDO.PLACEID + ' AND ID IN (' + UNIONVALUES ('qFindDO', ['ID'], ',', '') + ')' + ' AND DOC_ORDER_NUMBER >= ' + XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActOrderNumber')); OPENQUERY ('qOrderNo', 'STS_DB', sSQL); IF (bLoadAct * (FIELDISNULL ('qOrderNo', 'DOC_ORDER_NUMBER') = 0), Block( APPENDLOGFILE (sRestoreLog, FDT ('YYYY.MM.DD HH:MM:SS', DATE()+TIME(1)) + ' | ' + 'В базе данных уже есть коммерческий акт с порядковым номером (' + XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActOrderNumber')) + ') или больше. Акт № ' + LEFTPAD (sActNumber, 7, ' ') + ' от ' + sActDate + ' (к ДО-1 ' + pNBD + ' от ' + REMOVECHAR (pBDDate, char(39)) + ') не загружен'); //RAISEEXCEPTION ('В базе данных уже есть коммерческий акт с порядковым номером (' + XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActOrderNumber')) + ') или больше'); bLoadAct := 0; ) ); // IF IF (bLoadAct, Block( VAR ('sStage', String, IF (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), 'ca:Stage')) = 'mist_AtAcceptance', 0, 1)); VAR ('sMistDateTime', String, FDT ('DD.MM.YYYY', STRTODATE (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), 'ca:Date')), 'YYYY-MM-DD','-')) + ' ' + XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), 'ca:Time'))); VAR ('iDICount', Integer, XMLNODECHILDCOUNT (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'))); VAR ('iDIIndex', Integer, 0); WHILE (iDIIndex <= iDICount, Block( VAR ('XmlGood', Integer, 0); CASE (XMLNODENAME (XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), iDIIndex)), ['ca:MissingGoods', Block( XmlGood := XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), iDIIndex); sSQL := 'SELECT PLACEID, ID, GN, G32, G35, G311, G315A, G315C, G315CN, G42, G42_CURRENCY, G33, G312 FROM KRD_COMM ' + ' WHERE PLACEID=' + qFindDO.PLACEID + ' AND ID IN (' + UNIONVALUES ('qFindDO', ['ID'], ',', '') + ')' + ' AND GN=' + XMLNODEVALUE (XMLNODEFIND (XmlGood, 'ca:DO1GoodNumber')); OPENQUERY ('qFindComm', 'STS_DB', sSQL); IF (FIELDISNULL ('qFindComm', 'PLACEID') = 0, Block( sSQL := 'SELECT MAX(COUNTER) MC FROM KRD_DOP WHERE PLACEID=' + qFindComm.PLACEID + ' AND ID=' + qFindComm.ID; OPENQUERY ('qMaxCounter', 'STS_DB', sSQL); VAR ('iMC', Integer, qMaxCounter.MC); IF (bAddAct, Block( VAR ('sLeaksDescr', String, ''); VAR ('iNodeCount', Integer, XMLNODECHILDCOUNT (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'))); VAR ('iNodeIndex', Integer, 0); WHILE (iNodeIndex < iNodeCount, Block( IF (XMLNODENAME (XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), iNodeIndex)) = 'ca:LeaksDescription', Block( sLeaksDescr := sLeaksDescr + XMLNODEVALUE (XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), iNodeIndex)); ) ); // IF - // iNodeIndex := iNodeIndex + 1; ) ); // WHILE - // iMC := iMC + 1; // Добавляем запись в KRD_DOP Insert ('KRD_DOP', 'PLACEID', qFindComm.PLACEID, 1); Insert ('', 'ID', qFindComm.ID, 1); Insert ('', 'COUNTER', iMC, 1); Insert ('', 'DOC_NO', CONVERT (sActNumber, String), 0); Insert ('', 'DOC_DATETIME', sActDate, 2); Insert ('', 'DOC_NAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActName')), String), 0); Insert ('', 'DOC_ORDER_NUMBER', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActOrderNumber')), String), 1); Insert ('', 'WAREHOUSEPERSON_SURNAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonSurname')), String), 0); Insert ('', 'WAREHOUSEPERSON_NAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonName')), String), 0); Insert ('', 'WAREHOUSEPERSON_MDLNAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonMiddleName')), String), 0); Insert ('', 'WAREHOUSEPERSON_POST', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonPost')), String), 0); Insert ('', 'REASONS', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), 'ca:Reasons')), String), 0); Insert ('', 'RECIPIENTPERSON_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:RecipientFlag')), String), 1); Insert ('', 'CARRIERPERSON_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:CarrierFlag')), String), 1); Insert ('', 'LEAKS_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:LeaksFlag')), String), 1); Insert ('', 'LEAKS_DESCRIPTION', sLeaksDescr, 0); Insert ('', '', '', 0, 'STS_DB'); // Выставляем значение 0, чтобы не добавлять больше один и тот же акт bAddAct := 0; ) ); // Добавляем запись в KRD_CSDM Insert ('KRD_CSDM', 'PLACEID', qFindComm.PLACEID, 1); Insert ('', 'ID', qFindComm.ID, 1); Insert ('', 'G32', qFindComm.G32, 1); Insert ('', 'COUNTER', iMC, 1); Insert ('', 'SDM_DATETIME', sMistDateTime, 2); Insert ('', 'SDM_STAGE', CONVERT (sStage, String), 1); Insert ('', 'SDM_KIND', 1, 1); Insert ('', 'DOC_G33', CONVERT (qFindComm.G33, String), 0); Insert ('', 'DOC_G311', CONVERT (qFindComm.G311, Float), 1); Insert ('', 'DOC_G35', CONVERT (qFindComm.G35, Float), 1); Insert ('', 'DOC_G42', CONVERT (qFindComm.G42, Float), 1); Insert ('', 'DOC_G42_CURRENCY', CONVERT (qFindComm.G42_CURRENCY, String), 1); Insert ('', '', '', 0, 'STS_DB'); //REFRESH ('KRD_DOP'); // Обновляем "Информацию о товаре" по факту (KRD_COMM) sSQL := 'UPDATE KRD_COMM SET G42=0, G311=0, G315A=0, G35=0, G315C=0, G315CN=' +char(39)+char(39)+ ' WHERE PLACEID=' + qFindComm.PLACEID + ' AND ID=' + qFindComm.ID + ' AND G32=' +qFindComm.G32; EXECUTESQL ('STS_DB', sSQL); ) ); // IF - // ), 'ca:DiscrepantGoods', Block( XmlGood := XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), iDIIndex); sSQL := 'SELECT PLACEID, ID, GN, G32, G35, G311, G315A, G315C, G315CN, G42, G42_CURRENCY, G33, G312 FROM KRD_COMM WHERE PLACEID=' + qFindDO.PLACEID + ' AND ID IN (' + UNIONVALUES ('qFindDO', ['ID'], ',', '') + ')' + ' AND GN=' + XMLNODEVALUE (XMLNODEFIND (XmlGood, 'ca:DO1GoodNumber')); OPENQUERY ('qFindComm', 'STS_DB', sSQL); IF (FIELDISNULL ('qFindComm', 'PLACEID') = 0, Block( sSQL := 'SELECT MAX(COUNTER) MC FROM KRD_DOP WHERE PLACEID=' + qFindComm.PLACEID + ' AND ID=' + qFindComm.ID; OPENQUERY ('qMaxCounter', 'STS_DB', sSQL); VAR ('iMC', Integer, qMaxCounter.MC); IF (bAddAct, Block( VAR ('sLeaksDescr', String, ''); VAR ('iNodeCount', Integer, XMLNODECHILDCOUNT (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'))); VAR ('iNodeIndex', Integer, 0); WHILE (iNodeIndex < iNodeCount, Block( IF (XMLNODENAME (XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), iNodeIndex)) = 'ca:LeaksDescription', Block( sLeaksDescr := sLeaksDescr + XMLNODEVALUE (XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), iNodeIndex)); ) ); // IF - // iNodeIndex := iNodeIndex + 1; ) ); // WHILE - // iMC := iMC + 1; // Добавляем запись в KRD_DOP Insert ('KRD_DOP', 'PLACEID', qFindComm.PLACEID, 1); Insert ('', 'ID', qFindComm.ID, 1); Insert ('', 'COUNTER', iMC, 1); Insert ('', 'DOC_NO', CONVERT (sActNumber, String), 0); Insert ('', 'DOC_DATETIME', sActDate, 2); Insert ('', 'DOC_NAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActName')), String), 0); Insert ('', 'DOC_ORDER_NUMBER', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActOrderNumber')), String), 1); Insert ('', 'WAREHOUSEPERSON_SURNAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonSurname')), String), 0); Insert ('', 'WAREHOUSEPERSON_NAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonName')), String), 0); Insert ('', 'WAREHOUSEPERSON_MDLNAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonMiddleName')), String), 0); Insert ('', 'WAREHOUSEPERSON_POST', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonPost')), String), 0); Insert ('', 'REASONS', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), 'ca:Reasons')), String), 0); Insert ('', 'RECIPIENTPERSON_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:RecipientFlag')), String), 1); Insert ('', 'CARRIERPERSON_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:CarrierFlag')), String), 1); Insert ('', 'LEAKS_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:LeaksFlag')), String), 1); Insert ('', 'LEAKS_DESCRIPTION', sLeaksDescr, 0); Insert ('', '', '', 0, 'STS_DB'); // Выставляем значение 0, чтобы не добавлять несколько раз один и тот же акт bAddAct := 0; ) ); // IF - bAddAct // // !! описание товара нужно "склеивать" в цикле VAR ('iNodeCount', Integer, XMLNODECHILDCOUNT (XMLNODEFIND (XmlGood, 'ca:GoodsDescription'))); VAR ('iNodeIndex', Integer, 0); VAR ('sDescrByDocs', String, ''); VAR ('sDescrByFact', String, ''); WHILE (iNodeIndex < iNodeCount, Block( CASE (XMLNODENAME (XMLNODECHILD (XMLNODEFIND (XmlGood, 'ca:GoodsDescription'), iNodeIndex)), ['ca:GoodsDescriptionByDocs', sDescrByDocs := sDescrByDocs + XMLNODEVALUE (XMLNODECHILD (XMLNODEFIND (XmlGood, 'ca:GoodsDescription'), iNodeIndex)), 'ca:GoodsDescriptionByFact', sDescrByFact := sDescrByFact + XMLNODEVALUE (XMLNODECHILD (XMLNODEFIND (XmlGood, 'ca:GoodsDescription'), iNodeIndex)), ], ); // CASE iNodeIndex := iNodeIndex + 1; ) ); // WHILE VAR ('factG33', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:GoodsTNVEDCode'), 'ca:TNVEDCodeByFact'))); VAR ('factG42', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByFact'), 'ca:CostAmount'))); VAR ('factG311', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:PlaceNumber'), 'ca:PlaceNumberByFact'))); VAR ('factG315A', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:GoodsQuantityByFact'), 'catWH_ru:GoodsQuantity'))); VAR ('factG35', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:BruttoVolQuant'), 'ca:BruttoVolQuantByFact'), 'catWH_ru:GoodsQuantity'))); VAR ('factG315C', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:BruttoVolQuant'), 'ca:BruttoVolQuantByFact'), 'catWH_ru:GoodsQuantity'))); VAR ('factG315CN', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:BruttoVolQuant'), 'ca:BruttoVolQuantByFact'), 'catWH_ru:MeasureUnitQualifierCode'))); VAR ('factG312', String, sDescrByFact); VAR ('factG42_CURRENCY', String, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostCurrencyCode'))); IF ( XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:PlaceNumber'), 'ca:PlaceNumberByDocs'), IF ((LENGTH (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:PlaceNumber'), 'ca:PlaceNumberByDocs'))) = 0) * (LENGTH (factG311) = 0), factG311 := qFindComm.G311 ) ); // IF IF (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:BruttoVolQuant'), 'ca:BruttoVolQuantByDocs'), 'catWH_ru:GoodsQuantity'), IF ((LENGTH (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:BruttoVolQuant'), 'ca:BruttoVolQuantByDocs'), 'catWH_ru:GoodsQuantity'))) = 0) * (LENGTH (factG35) = 0), factG35 := qFindComm.G35 ) ); // IF IF (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostAmount'), IF ((LENGTH (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostAmount'))) = 0) * (LENGTH (factG42) = 0), factG42 := qFindComm.G42 ) ); // IF IF ((XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostCurrencyCode') = 0) * (LENGTH (factG42_CURRENCY) = 0), factG42_CURRENCY := qFindComm.G42_CURRENCY ); // IF IF (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:GoodsTNVEDCode'), 'ca:TNVEDCodeByDocs'), IF ((LENGTH (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:GoodsTNVEDCode'), 'ca:TNVEDCodeByDocs'))) = 0) * (LENGTH (factG33) = 0), factG33 := qFindComm.G33 ) ); // IF // Добавляем запись в KRD_CSDM Insert ('KRD_CSDM', 'PLACEID', qFindComm.PLACEID, 1); Insert ('', 'ID', qFindComm.ID, 1); Insert ('', 'G32', qFindComm.G32, 1); Insert ('', 'COUNTER', iMC, 1); Insert ('', 'SDM_DATETIME', sMistDateTime, 2); Insert ('', 'SDM_STAGE', CONVERT (sStage, String), 1); Insert ('', 'SDM_KIND', 0, 1); IF ( XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:PlaceNumber'), 'ca:PlaceNumberByDocs'), IF (LENGTH (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:PlaceNumber'), 'ca:PlaceNumberByDocs'))) > 0, Insert ('', 'DOC_G311', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:PlaceNumber'), 'ca:PlaceNumberByDocs')), String), 1), Insert ('', 'DOC_G311', CONVERT (qFindComm.G311, String), 1), ) ); // IF Insert ('', 'FACT_G311', CONVERT (factG311, String), 1); IF (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:BruttoVolQuant'), 'ca:BruttoVolQuantByDocs'), 'catWH_ru:GoodsQuantity'), IF (LENGTH (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:BruttoVolQuant'), 'ca:BruttoVolQuantByDocs'), 'catWH_ru:GoodsQuantity'))) > 0, Insert ('', 'DOC_G35', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:BruttoVolQuant'), 'ca:BruttoVolQuantByDocs'), 'catWH_ru:GoodsQuantity')), String), 1), Insert ('', 'DOC_G35', CONVERT (qFindComm.G35, String), 1); ) ); // IF Insert ('', 'FACT_G35', CONVERT (factG35, String), 1); IF( XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostAmount'), IF (LENGTH (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostAmount'))) > 0, Insert ('', 'DOC_G42', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostAmount')), String), 1), Insert ('', 'DOC_G42', CONVERT (qFindComm.G42, String), 1), ) ); // IF Insert ('', 'FACT_G42', CONVERT (factG42, String), 1); IF (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostCurrencyCode') > 0, Insert ('', 'DOC_G42_CURRENCY', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:InvoiceCost'), 'ca:InvoiceCostByDocs'), 'ca:CostCurrencyCode')), String), 1), Insert ('', 'DOC_G42_CURRENCY', CONVERT (qFindComm.G42_CURRENCY, String), 1); ); // IF Insert ('', 'FACT_G42_CURRENCY', CONVERT (factG42_CURRENCY, String), 1); IF (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:GoodsTNVEDCode'), 'ca:TNVEDCodeByDocs'), IF (LENGTH (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:GoodsTNVEDCode'), 'ca:TNVEDCodeByDocs'))) > 0, Insert ('', 'DOC_G33', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'ca:GoodsTNVEDCode'), 'ca:TNVEDCodeByDocs')), String), 0), Insert ('', 'DOC_G33', CONVERT (qFindComm.G33, String), 0) ) ); // IF Insert ('', 'FACT_G33', CONVERT (factG33, String), 0); IF (LENGTH (sDescrByDocs) > 0, Block( Insert ('', 'DOC_G312', sDescrByDocs, 0); ), Block( Insert ('', 'DOC_G312', qFindComm.G312, 0); ) ); // IF IF (LENGTH (sDescrByFact) > 0, Block( Insert ('', 'FACT_G312', sDescrByFact, 0); ), Block( IF (LENGTH (sDescrByDocs) = 0, Insert ('', 'FACT_G312', qFindComm.G312, 0); ); // IF ) ); // IF Insert ('', 'SDM_REASONS', CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'ca:Comments')), String), 0); Insert ('', '', '', 0, 'STS_DB'); // Обновляем "Информацию о товаре" по факту (KRD_COMM) sSQL := 'UPDATE KRD_COMM SET '; // Код ТН ВЭД sSQL := sSQL + 'G33=' +char(39)+ factG33 +char(39); // Описание товара IF (LENGTH (sDescrByFact) > 0, sSQL := sSQL + ', G312=' +char(39)+ sDescrByFact +char(39)); // Стоимость sSQL := sSQL + ', G42=' + CONVERT (factG42, Float); // Количество грузовых мест sSQL := sSQL + ', G311=' + CONVERT (factG311, Float); // Количество в доп. еденицах измерения sSQL := sSQL + ', G315A=' + CONVERT (factG315A, Float); // Вес брутто/Объём IF (factG315CN = '166', Block( sSQL := sSQL + ', G35=' + CONVERT (factG35, Float); ), Block( sSQL := sSQL + ', G315C=' + CONVERT (factG315C, Float); sSQL := sSQL + ', G315CN=' +char(39)+ CONVERT (factG315CN, String) +char(39); ) ); sSQL := sSQL + ' WHERE PLACEID=' + qFindComm.PLACEID + ' AND ID=' + qFindComm.ID + ' AND G32=' +qFindComm.G32; EXECUTESQL ('STS_DB', sSQL); ) ); // IF - // ), 'ca:ExtraGoods', Block( VAR ('XmlExtraGoods', Integer, XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), iDIIndex)); VAR ('iExtraGoodsChildCount', Integer, XMLNODECHILDCOUNT (XmlExtraGoods)); VAR ('iExtraGoodsChildIndex', Integer, 0); VAR ('sPaperCode', String, CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlExtraGoods, 'catWH_ru:PresentedDocumentModeCode')), String)); VAR ('sPaperName', String, CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlExtraGoods, 'cat_ru:PrDocumentName')), String)); VAR ('sPaperDate', String, REMOVECHAR (SQLDate (CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlExtraGoods, 'cat_ru:PrDocumentDate')), String), GetBaseDriver (0)), char(39))); VAR ('sPaperNumber', String, CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlExtraGoods, 'cat_ru:PrDocumentNumber')), String)); //IF (LENGTH (sPaperCode) = 0, sPaperCode := REFERENCE ('PAPERS', 'PAPERNAME', sPaperName, 'PAPER_DOCG44_CODE')); IF (LENGTH (REFERENCE('PAPERS', 'PAPERFULLNAME', sPaperName, 'PAPERNAME')) > 0, sPaperName := REFERENCE('PAPERS', 'PAPERFULLNAME', sPaperName, 'PAPERNAME') ); // IF sSQL := 'SELECT MAX (COUNTER) AS MC FROM KR_PAPER WHERE PLACEID=' + qFindDO.PLACEID + ' AND ID=' + qFindDO.ID; OPENQUERY ('qMaxC', 'STS_DB', sSQL); VAR ('iMC', Integer, (qMaxC.MC + 1)); // Добавляем новую накладную (даже если такая уже была в БД) Insert ('KR_PAPER', 'PLACEID', qFindDO.PLACEID, 1); Insert ('', 'ID', qFindDO.ID, 1); Insert ('', 'COUNTER', iMC, 1); Insert ('', 'PAPERNO', CONVERT (sPaperNumber, String), 1); Insert ('', 'PAPERNAME', CONVERT (sPaperName, String), 1); Insert ('', 'PAPERDATE', CONVERT (sPaperDate, String), 2); Insert ('', 'PAPERCODE', CONVERT (sPaperCode, String), 0); Insert ('', '', '', 0, 'STS_DB'); WHILE (iExtraGoodsChildIndex < iExtraGoodsChildCount, Block( IF (XMLNODENAME (XMLNODECHILD (XmlExtraGoods, iExtraGoodsChildIndex)) = 'catWH_ru:Goods', Block( XmlGood := XMLNODECHILD (XmlExtraGoods, iExtraGoodsChildIndex); sSQL := 'SELECT MAX (GN) AS MC FROM KRD_COMM WHERE PLACEID=' + qFindDO.PLACEID + ' AND ID=' + qFindDO.ID; OPENQUERY ('qMaxCC', 'STS_DB', sSQL); VAR ('iMCC', Integer, (qMaxCC.MC + 1)); // Добавляем товар на новую накладную Insert ('KRD_COMM', 'PLACEID', qFindDO.PLACEID, 1); Insert ('', 'ID', qFindDO.ID, 1); Insert ('', 'G32', iMCC, 1); Insert ('', 'GN', iMCC, 1); Insert ('', 'G311', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:CargoPlace'), 'catWH_ru:PlaceNumber')), String), 1); Insert ('', 'G313', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:CargoPlace'), 'catWH_ru:PlaceDescription')), String), 0); // !! описание товара нужно "склеивать" в цикле VAR ('iNodeCount', Integer, XMLNODECHILDCOUNT (XmlGood)); VAR ('iNodeIndex', Integer, 0); VAR ('sDescrByFact', String, ''); WHILE (iNodeIndex < iNodeCount, Block( IF (XMLNODENAME (XMLNODECHILD (XmlGood, iNodeIndex)) = 'catWH_ru:GoodsDescription', Block( sDescrByFact := sDescrByFact + XMLNODEVALUE (XMLNODECHILD (XmlGood, iNodeIndex)), ) ); // IF - // iNodeIndex := iNodeIndex + 1; ) ); // WHILE - // Insert ('', 'G312', sDescrByFact, 0); Insert ('', 'G33', CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'catWH_ru:GoodsTNVEDCode')), String), 0); // Определяем что это - объём или вес брутто? IF (CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:BruttoVolQuant'), 'catWH_ru:MeasureUnitQualifierCode')), String) = '166', Block( Insert ('', 'G35', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:BruttoVolQuant'), 'catWH_ru:GoodsQuantity')), String), 1); ), Block( Insert ('', 'G35', 0, 1); Insert ('', 'G315C', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:BruttoVolQuant'), 'catWH_ru:GoodsQuantity')), String), 1); Insert ('', 'G315CN', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:BruttoVolQuant'), 'catWH_ru:MeasureUnitQualifierName')), String), 0); Insert ('', 'G31_82', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:BruttoVolQuant'), 'catWH_ru:MeasureUnitQualifierCode')), String), 0); ) ); // IF - // // Загружаем количество в дополнительных еденицах измерения Insert ('', 'G315A', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:MeasureQuantity'), 'catWH_ru:GoodsQuantity')), String), 1); Insert ('', 'G315', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:MeasureQuantity'), 'catWH_ru:MeasureUnitQualifierName')), String), 0); Insert ('', 'G41A', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:MeasureQuantity'), 'catWH_ru:MeasureUnitQualifierCode')), String), 0); Insert ('', 'G42', CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'catWH_ru:InvoiceCost')), String), 1); Insert ('', 'G42_CURRENCY', CONVERT (CURRENCYCODE (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'catWH_ru:CurrencyCode'))), String), 0); Insert ('', 'BOXNO', CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'catWH_ru:GoodsWHNumber')), String), 0); Insert ('', 'N_TTN', iMC, 1); Insert ('', 'N_TTN_G32', (iExtraGoodsChildIndex + 1), 1); Insert ('', 'ACCEPTDATE', REMOVECHAR (SQLDate (CONVERT ((XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:KeepingLimit'), 'catWH_ru:AcceptDate')) + ' ' + XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:KeepingLimit'), 'catWH_ru:AcceptTime'))), String), GetBaseDriver (0)), char(39)), 2); Insert ('', 'STORAGE_TYPE', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:KeepingLimit'), 'catWH_ru:StoringDateType')), String), 0); Insert ('', 'STORAGE_DATE', REMOVECHAR (SQLDate (CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:KeepingLimit'), 'catWH_ru:DeadLineDate')), String), GetBaseDriver (0)), char(39)), 2); Insert ('', '', '', 0, 'STS_DB'); //REFRESH ('KRD_COMM'); sSQL := 'SELECT MAX(COUNTER) MC FROM KRD_DOP WHERE PLACEID=' + qFindDO.PLACEID + ' AND ID=' + qFindDO.ID; OPENQUERY ('qMaxCounter', 'STS_DB', sSQL); VAR ('iMCounter', Integer, qMaxCounter.MC); IF (bAddAct, Block( VAR ('sLeaksDescr', String, ''); VAR ('iNodeCount', Integer, XMLNODECHILDCOUNT (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'))); VAR ('iNodeIndex', Integer, 0); WHILE (iNodeIndex < iNodeCount, Block( IF (XMLNODENAME (XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), iNodeIndex)) = 'ca:LeaksDescription', Block( sLeaksDescr := sLeaksDescr + XMLNODEVALUE (XMLNODECHILD (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), iNodeIndex)); ) ); // IF - // iNodeIndex := iNodeIndex + 1; ) ); // WHILE - // iMCounter := iMCounter + 1; // Добавляем запись в KRD_DOP Insert ('KRD_DOP', 'PLACEID', qFindDO.PLACEID, 1); Insert ('', 'ID', qFindDO.ID, 1); Insert ('', 'COUNTER', iMCounter, 1); Insert ('', 'DOC_NO', CONVERT (sActNumber, String), 0); Insert ('', 'DOC_DATETIME', sActDate, 2); Insert ('', 'DOC_NAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActName')), String), 0); Insert ('', 'DOC_ORDER_NUMBER', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:ActDetails'), 'ca:ActOrderNumber')), String), 1); Insert ('', 'WAREHOUSEPERSON_SURNAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonSurname')), String), 0); Insert ('', 'WAREHOUSEPERSON_NAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonName')), String), 0); Insert ('', 'WAREHOUSEPERSON_MDLNAME', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonMiddleName')), String), 0); Insert ('', 'WAREHOUSEPERSON_POST', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:WareHousePerson'), 'cat_ru:PersonPost')), String), 0); Insert ('', 'REASONS', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyInfo'), 'ca:Reasons')), String), 0); Insert ('', 'RECIPIENTPERSON_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:RecipientFlag')), String), 1); Insert ('', 'CARRIERPERSON_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:CarrierFlag')), String), 1); Insert ('', 'LEAKS_FLAG', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DiscrepancyDetails'), 'ca:LeaksFlag')), String), 1); Insert ('', 'LEAKS_DESCRIPTION', sLeaksDescr, 0); Insert ('', '', '', 0, 'STS_DB'); //REFRESH ('KRD_MAIN'); // Выставляем значение 0, чтобы не добавлять несколько раз один и тот же акт bAddAct := 0; ) ); // IF - bAddAct // // Добавляем запись в KRD_CSDM Insert ('KRD_CSDM', 'PLACEID', qFindDO.PLACEID, 1); Insert ('', 'ID', qFindDO.ID, 1); Insert ('', 'G32', iMCC, 1); Insert ('', 'COUNTER', iMCounter, 1); Insert ('', 'SDM_DATETIME', sMistDateTime, 2); Insert ('', 'SDM_STAGE', CONVERT (sStage, String), 1); Insert ('', 'SDM_KIND', 2, 1); Insert ('', 'FACT_G311', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:CargoPlace'), 'catWH_ru:PlaceNumber')), String), 1); Insert ('', 'FACT_G35', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:BruttoVolQuant'), 'catWH_ru:GoodsQuantity')), String), 1); Insert ('', 'FACT_G42', CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'catWH_ru:InvoiceCost')), String), 1); Insert ('', 'FACT_G42_CURRENCY', CONVERT (CURRENCYCODE (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'catWH_ru:CurrencyCode'))), String), 1); Insert ('', 'FACT_G33', CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'catWH_ru:GoodsTNVEDCode')), String), 0); // !! описание товара нужно "склеивать" в цикле Insert ('', 'FACT_G312', sDescrByFact, 0); // Insert ('', 'FACT_G312', sDescrByFact, 0); Insert ('', 'FACT_ACCEPTDATE', REMOVECHAR (SQLDate (CONVERT ((XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:KeepingLimit'), 'catWH_ru:AcceptDate')) + ' ' + XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:KeepingLimit'), 'catWH_ru:AcceptTime'))), String), GetBaseDriver (0)), char(39)), 2); Insert ('', 'FACT_STORAGE_TYPE', CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:KeepingLimit'), 'catWH_ru:StoringDateType')), String), 0); Insert ('', 'FACT_STORAGE_DATE', REMOVECHAR (SQLDate (CONVERT (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlGood, 'catWH_ru:KeepingLimit'), 'catWH_ru:DeadLineDate')), String), GetBaseDriver (0)), char(39)), 2); Insert ('', 'FACT_BOXNO', CONVERT (XMLNODEVALUE (XMLNODEFIND (XmlGood, 'catWH_ru:GoodsWHNumber')), String), 0); Insert ('', '', '', 0, 'STS_DB'); //REFRESH ('KRD_DOP'); ) ); // IF - // iExtraGoodsChildIndex := iExtraGoodsChildIndex + 1; ) ); // WHILE - // ) ] ); // CASE - // iDIIndex := iDIIndex + 1; ) ); // WHILE - // APPENDLOGFILE (sRestoreLog, FDT ('YYYY.MM.DD HH:MM:SS', DATE()+TIME(1)) + ' | ' + 'Коммерческий акт № ' + LEFTPAD (sActNumber, 7, ' ') + ' от ' + sActDate + ' успешно загружен.'); ), Block( //!! ) ); ) ), // FUNC - ImportCommAct // Функция восстановления документа FUNC ('RestoreDocument', Block( PARAM ('pWhId', Integer, 0); PARAM ('pWhDocId', String, 1); PARAM ('pWhDocId2', Integer, 2); PARAM ('pDocType', Integer, 3); ), Block( VAR ('sRestoredFileName', String, INCLUDETRAILINGBACKSLASH (TEMPDIRECTORY ()) + GENERATEUUID () + '.xml'); IF (pDocType <> 1, Block( sSQL := 'SELECT DOCBODY FROM JREVENTLOG WHERE JOURNAL_MASTER_ID=' + qRestoreList.JOURNAL_MASTER_ID; OPENQUERY ('qDocBody', 'STS_DB', sSQL, 1); VAR ('sFileMemo', Memo, Base64Decode (qDocBody.DOCBODY)); VAR ('sZipFileName', String, INCLUDETRAILINGBACKSLASH (TEMPDIRECTORY ()) + GENERATEUUID() + '.zip'); STRINGTOFILE (sFileMemo, sZipFileName); VAR ('sExtractDir', String, INCLUDETRAILINGBACKSLASH (TEMPDIRECTORY ()) + EXTRACTSTR (EXTRACTFILENAME (sZipFileName), 1, '.')); ZIPEXTRACTFILE (sZipFileName, sExtractDir); CLOSEDATASET ('qDocBody'); sRestoredFileName := INCLUDETRAILINGBACKSLASH (sExtractDir) + EXTRACTSTR (GETFILELIST (sExtractDir, '*.xml', '|'), 1, '|'); ) ); // IF IF (FILEEXISTS (sRestoredFileName), Block( VAR ('slDocument', Integer, StringListCreate()); StringListLoadFromFile (slDocument, sRestoredFileName); StringListSetItem (slDocument, 0, ''); StringListSaveToFile (slDocument, sRestoredFileName); StringListDestroy (slDocument); CASE (pDocType, [1, Block( IMPORTDOCUMENT (8, sRestoredFileName, 0); // ПОСЛЕ ЗАГРУЗКИ ПРОВЕРЯЕМ ПОЯВИЛСЯ ЛИ ДОКУМЕНТ? sSQL := 'SELECT ID FROM KRD_MAIN ' + ' WHERE PLACEID=' + pWhId + ' AND NBD=' +char(39)+ vDocNo +char(39)+ ' AND BD_DATE=' +char(39)+ vDocDate +char(39); OPENQUERY ('qRestoredDO1', 'STS_DB', sSQL, 1); IF (FIELDISNULL ('qRestoredDO1', 'ID'), Block( APPENDLOGFILE (sRestoreLog, 'Не удалось восстановить ДО-1 № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate)); ), Block( sSQL := 'UPDATE KRD_MAIN SET DOCUMENTID=' +char(39)+ pWhDocId +char(39)+ ' WHERE PLACEID=' + pWhId + ' AND NBD=' +char(39)+ vDocNo +char(39)+ ' AND BD_DATE=' +char(39)+ vDocDate +char(39); EXECUTESQL ('STS_DB', sSQL); WriteJrEventLog (pWhId, vId, pWhDocId2, pDocType, vDocName, 'Восстановление', vDocNo, vDocDate, qRestoreList.DOCCOUNTER, sUserName, sUserComputer, Date() + Time(1), qRestoreList.DOCSTATUS, pWhDocId ); // WriteJrEventLog APPENDLOGFILE (sRestoreLog, vDocName + ' № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate) + ' восстановлен.'); WriteEpsLog ( pWhId, vId, pWhDocId2, pWhDocId, vDocName, vDocNo, FDT ('DD.MM.YYYY HH:NN:SS', vDocDate), vDocName + ' восстановлена после удаления', FDT ('DD.MM.YYYY HH:NN:SS', (Date() + Time(1))), GENERATEUUID (), '', '', '1', FDT ('DD.MM.YYYY HH:NN:SS', (Date() + Time(1))), 2 ); // WriteEpsLog ) ); // IF CLOSEDATASET ('qRestoredDO1'); ), 5, Block( IMPORTDOCUMENT (8, sRestoredFileName, 0); // ПОСЛЕ ЗАГРУЗКИ ПРОВЕРЯЕМ ПОЯВИЛСЯ ЛИ ДОКУМЕНТ? sSQL := 'SELECT ID FROM ' + CorrectTableName('RELEASE') + ' WHERE PLACEID=' + pWhId + ' AND RELEASE_NO=' +char(39)+ vDocNo +char(39)+ ' AND OUT_DATE=' +char(39)+ vDocDate +char(39); OPENQUERY ('qRestoredDO2', sSQL, 'STS_DB', 1); IF (FIELDISNULL ('qRestoredDO2', 'ID'), Block( APPENDLOGFILE (sRestoreLog, 'Не удалось восстановить ДО-2 № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate) + '. Возможно в базе отсутствует соответствующий документ Д0-1.'); ), Block( sSQL := 'UPDATE ' + CorrectTableName ('RELEASE') + ' SET DOCUMENTID=' +char(39)+ pWhDocId +char(39)+ ' WHERE PLACEID=' + pWhId + ' AND RELEASE_NO=' +char(39)+ vDocNo +char(39)+ ' AND OUT_DATE=' +char(39)+ vDocDate +char(39); EXECUTESQL ('STS_DB', sSQL); WriteJrEventLog (pWhId, vId, pWhDocId2, pDocType, vDocName, 'Восстановление', vDocNo, vDocDate, qRestoreList.DOCCOUNTER, sUserName, sUserComputer, Date() + Time(1), qRestoreList.DOCSTATUS, pWhDocId ); // WriteJrEventLog APPENDLOGFILE (sRestoreLog, vDocName + ' № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate) + ' восстановлен.'); WriteEpsLog ( pWhId, vId, pWhDocId2, pWhDocId, vDocName, vDocNo, FDT ('DD.MM.YYYY HH:NN:SS', vDocDate), vDocName + ' № ' + vDocNo + ' восстановлена после удаления', FDT ('DD.MM.YYYY HH:NN:SS', (Date() + Time(1))), GENERATEUUID (), '', '', '1', FDT ('DD.MM.YYYY HH:NN:SS', (Date() + Time(1))), 2 ); // WriteEpsLog ) ); // IF CLOSEDATASET ('qRestoredDO2'); ), 38, Block( OpenXml (sRestoredFileName); XmlDoc := XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ContainerDoc'), 'DocBody'), 'ca:CommercialAct'); VAR ('ReportDate', string, XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DO1ReportLinkData'), 'catWH_ru:ReportDate'))); ReportDate:= FDT ('DD.MM.YYYY', STRTODATE (ReportDate, 'YYYY-MM-DD', '-')); ImportCommAct (XMLNODEVALUE (XMLNODEFIND (XMLNODEFIND (XmlDoc, 'ca:DO1ReportLinkData'), 'catWH_ru:ReportNumber')), ReportDate); XmlDestroy (XmlDoc); ), 39, Block( ) ] ); // CASE ), Block( // ПОДКЛЮЧАЕМ БАЗУ ДАННЫХ МОНИТОР ЭД EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'ProcDocs\open_monitor_db.prd'); // ПОДКЛЮЧАЕМ БАЗУ ДАННЫХ МОНИТОР ЭД sSQL := 'SELECT BackupFile, MsgId, FmtVersion, INCOMING ' + ' FROM ED_ProcMessages E ' + ' WHERE E.WHId=' + pWhId + ' AND E.WHDocId=' +char(39)+ pWhDocId +char(39)+ ' AND E.WHDocId2=' + pWhDocId2; CASE (pDocType, [1, Block( sSQL := sSQL + ' AND E.MsgId IN (' +char(39)+ 'CMN.13009' +char(39)+ ', ' +char(39)+ 'CMN.13010' +char(39)+ ')'; ), 5, Block( sSQL := sSQL + ' AND E.MsgId IN (' +char(39)+ 'CMN.13011' +char(39)+ ', ' +char(39)+ 'CMN.13010' +char(39)+ ')'; ), 38, Block( sSQL := sSQL + ' AND E.MsgId IN (' +char(39)+ 'CMN.13020' +char(39)+ ', ' +char(39)+ 'CMN.13021' +char(39)+ ')'; ), 39, Block( sSQL := sSQL + ' AND E.MsgId IN (' +char(39)+ 'CMN.13023' +char(39)+ ', ' +char(39)+ 'CMN.13021' +char(39)+ ')'; )], sSQL := sSQL + ' AND E.MsgId=' +char(39)+ 'CMN.NONE' +char(39); ); // CASE OPENQUERY ('qEdProcMessages', 'dbMonitor', sSQL, 1); IF (BOF ('qEdProcMessages') = 0, FIRST ('qEdProcMessages')); WHILE (EOF ('qEdProcMessages') = 0, Block( IF (FIELDISNULL ('qEdProcMessages', 'BackupFile'), Block( APPENDLOGFILE (sRestoreLog, 'В Монитор ЭД не найден протокол. Восстановление документа ' + vDocName + ' № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate) + ' невозможно.'); ), Block( // подключение функции GetBackupFile EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'ProcDocs\utils\get_backup_file.prd'); VAR ('sBackupFile', String, GetBackupFile (qEdProcMessages.BACKUPFILE, qEdProcMessages.INCOMING)); IF (FILEEXISTS (sBackupFile), Block( VAR ('sTempFile', String, TempDirectory () + 'tmp_restore_do.xml'); VAR ('XmlDoc', Integer, XMLDOCUMENTCREATE ()); VAR ('XmlObject', Integer); VAR ('XmlBody', Integer); VAR ('slDocument', Integer, StringListCreate()); XMLDOCUMENTLOAD (XmlDoc, sBackupFile); XmlObject := XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XMLNODECHILD (XMLDOCUMENTROOT (XmlDoc), 0), "Body"), "Signature"), "Object"); IF (XMLNODEFIND (XmlObject, "ED_Container"), XmlObject := XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XMLNODEFIND (XmlObject, "ED_Container"), "ContainerDoc"), "DocBody"), "Signature"), "Object") ); // IF XmlBody := XMLNODECHILD (XmlObject, 0); XMLNODESETATTRIBUTE (XmlBody, 'whid', pWhId); XMLNODESETATTRIBUTE (XmlBody, 'do1id', pWhDocId); XMLNODESETATTRIBUTE (XmlBody, 'do2id', pWhDocId2); XMLNODESETATTRIBUTE (XmlBody, 'dodt', FDT ('YYYY-MM-DD HH:NN:SS', Date() + Time(1))); XMLNODESAVE (XmlBody, sTempFile); XMLDESTROY (XmlDoc); CASE (qEdProcMessages.MsgId, ['CMN.13009', Block( StringListLoadFromFile (slDocument, sTempFile); StringListSetItem (slDocument, 0, '' + char (13) +' ' + char (13) +' ' + GENERATEUUID (1) + '' + char (13) +' ' + char (13) +' '); StringListAddItem (slDocument, ' '+ char (13) + ' '+ char (13) + ''); StringListSaveToFile (slDocument, sTempFile); StringListDestroy (slDocument); IMPORTDOCUMENT (8, sTempFile, 0); // ПОСЛЕ ЗАГРУЗКИ ПРОВЕРЯЕМ ПОЯВИЛСЯ ЛИ ДОКУМЕНТ? sSQL := 'SELECT ID FROM KRD_MAIN ' + ' WHERE PLACEID=' + pWhId + ' AND NBD=' +char(39)+ vDocNo +char(39)+ ' AND BD_DATE=' +char(39)+ vDocDate +char(39); OPENQUERY ('qRestoredDO1', 'STS_DB', sSQL, 1); IF (FIELDISNULL ('qRestoredDO1', 'ID'), Block( APPENDLOGFILE (sRestoreLog, 'Не удалось восстановить ДО-1 № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate)); ), Block( sSQL := 'UPDATE KRD_MAIN SET DOCUMENTID=' +char(39)+ pWhDocId +char(39)+ ', ALBUM_VERSION=' +char(39)+ qEdProcMessages.FmtVersion +char(39)+ ' WHERE PLACEID=' + pWhId + ' AND NBD=' +char(39)+ vDocNo +char(39)+ ' AND BD_DATE=' +char(39)+ vDocDate +char(39); EXECUTESQL ('STS_DB', sSQL); WriteJrEventLog (pWhId, vId, pWhDocId2, pDocType, vDocName, 'Восстановление', vDocNo, vDocDate, qRestoreList.DOCCOUNTER, sUserName, sUserComputer, Date() + Time(1), qRestoreList.DOCSTATUS, pWhDocId ); // WriteJrEventLog APPENDLOGFILE (sRestoreLog, vDocName + ' № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate) + ' восстановлен.'); WriteEpsLog ( pWhId, vId, pWhDocId2, pWhDocId, vDocName, vDocNo, FDT ('DD.MM.YYYY HH:NN:SS', vDocDate), vDocName + ' восстановлена после удаления', FDT ('DD.MM.YYYY HH:NN:SS', (Date() + Time(1))), GENERATEUUID (), '', '', '1', FDT ('DD.MM.YYYY HH:NN:SS', (Date() + Time(1))), 2 ); // WriteEpsLog ) ); // IF CLOSEDATASET ('qRestoredDO1'); DELETEFILE (sTempFile); ), 'CMN.13011', Block( StringListLoadFromFile (slDocument, sTempFile); StringListSetItem (slDocument, 0, '' + char (13) +' ' + char (13) +' ' + GENERATEUUID (1) + '' + char (13) +' ' + char (13) +' '); StringListAddItem (slDocument, ' '+ char (13) + ' '+ char (13) + ''); StringListSaveToFile (slDocument, sTempFile); StringListDestroy (slDocument); IMPORTDOCUMENT (8, sTempFile, 0); // ПОСЛЕ ЗАГРУЗКИ ПРОВЕРЯЕМ ПОЯВИЛСЯ ЛИ ДОКУМЕНТ? sSQL := 'SELECT ID FROM ' + CorrectTableName('RELEASE') + ' WHERE PLACEID=' + pWhId + ' AND RELEASE_NO=' +char(39)+ vDocNo +char(39)+ ' AND OUT_DATE=' +char(39)+ vDocDate +char(39); OPENQUERY ('qRestoredDO2', sSQL, 'STS_DB', 1); IF (FIELDISNULL ('qRestoredDO2', 'ID'), Block( APPENDLOGFILE (sRestoreLog, 'Не удалось восстановить ДО-2 № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate) + '. Возможно в базе отсутствует соответствующий документ Д0-1.'); ), Block( sSQL := 'UPDATE ' + CorrectTableName ('RELEASE') + ' SET DOCUMENTID=' +char(39)+ pWhDocId +char(39)+ ' WHERE PLACEID=' + pWhId + ' AND RELEASE_NO=' +char(39)+ vDocNo +char(39)+ ' AND OUT_DATE=' +char(39)+ vDocDate +char(39); EXECUTESQL ('STS_DB', sSQL); WriteJrEventLog (pWhId, vId, pWhDocId2, pDocType, vDocName, 'Восстановление', vDocNo, vDocDate, qRestoreList.DOCCOUNTER, sUserName, sUserComputer, Date() + Time(1), qRestoreList.DOCSTATUS, pWhDocId ); // WriteJrEventLog APPENDLOGFILE (sRestoreLog, vDocName + ' № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate) + ' восстановлен.'); WriteEpsLog ( pWhId, vId, pWhDocId2, pWhDocId, vDocName, vDocNo, FDT ('DD.MM.YYYY HH:NN:SS', vDocDate), vDocName + ' № ' + vDocNo + ' восстановлена после удаления', FDT ('DD.MM.YYYY HH:NN:SS', (Date() + Time(1))), GENERATEUUID (), '', '', '1', FDT ('DD.MM.YYYY HH:NN:SS', (Date() + Time(1))), 2 ); // WriteEpsLog ) ); // IF CLOSEDATASET ('qRestoredDO2'); DELETEFILE (sTempFile); ) ], Block( COPYFILE (sTempFile, IncludeTrailingBackslash (IncludeTrailingBackslash (PROGRAMPATH ()) + 'STS-MED\iout\' + USERINFO ('', 'UserUUID')) + FDT ('YYYY-MM-DD_HH-NN-SS', Date() + Time(1)) + '-' + pWhDocId2 + '.xml'); ) ); // CASE ), Block( APPENDLOGFILE (sRestoreLog, 'Файл резервной копии не найден. (' + qEdProcMessages.BackupFile + '). Восстановление документа ' + vDocName + ' № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY', vDocDate) + ' невозможно.'); ) ); // IF ) ); // IF NEXT ('qEdProcMessages'); ) ); // WHILE CLOSEDATASET ('qEdProcMessages'); CLOSEDATABASE ('dbMonitor'); ) ); // IF ) ), // FUNC vDocName := JREVENTLOG.DOCNAME; vDocNo := JREVENTLOG.DOCNO; vDocDate := JREVENTLOG.DOCDATE; CREATELOGFILE (sRestoreLog, 0); APPENDLOGFILE (sRestoreLog, CHARSTR ('=', 120)); APPENDLOGFILE (sRestoreLog, 'Восстановление документа из резервной копии.'); APPENDLOGFILE (sRestoreLog, CHARSTR ('=', 120)); sSQL := 'SELECT DISTINCT JOURNAL_MASTER_ID, DOCSUBID, DOCTYPE, DOCNAME, DOCNO, DOCDATE, DOCCOUNTER, DOCSTATUS, DOCUMENTID FROM JREVENTLOG ' + ' WHERE DOCPLACEID=' + vPlaceId + ' AND DOCID=' + vId + CASE (CHOICEVARIANT ('Выберите вариант восстановления', 1, 0, 'Текущий документ', 'Все связанные документы (ДО-1 + ДО-2 + Комм. акты)'), [-1, Block( RAISEEXCEPTION ('Отменено пользователем'); ), 0, Block( ' AND JOURNAL_MASTER_ID=' + JREVENTLOG.JOURNAL_MASTER_ID ), 1, Block( '' ) ], '' ) + ' ORDER BY DOCDATE'; OPENQUERY ('qRestoreList', 'STS_DB', sSQL, 1); IF (BOF ('qRestoreList') = 0, FIRST ('qRestoreList')); WHILE (EOF ('qRestoreList') = 0, Block( vDocName := qRestoreList.DOCNAME; vDocNo := qRestoreList.DOCNO; vDocDate := qRestoreList.DOCDATE; VAR ('bDocExist', Integer, 0); CASE (qRestoreList.DOCTYPE, [1, Block( sSQL := 'SELECT ID FROM KRD_MAIN ' + ' WHERE PLACEID=' + vPlaceId + ' AND NBD=' +char(39)+ vDocNo +char(39)+ ' AND BD_DATE=' +char(39)+ vDocDate +char(39); OPENQUERY ('qExistDO1', 'STS_DB', sSQL, 1); bDocExist := (FIELDISNULL ('qExistDO1', 'ID') = 0); CLOSEDATASET ('qExistDO1') ), 5, Block( sSQL := 'SELECT ID FROM ' + CorrectTableName('RELEASE') + ' WHERE PLACEID=' + vPlaceId + ' AND RELEASE_NO=' +char(39)+ vDocNo +char(39)+ ' AND OUT_DATE=' +char(39)+ vDocDate +char(39); OPENQUERY ('qExistDO2', sSQL, 'STS_DB', 1); bDocExist := (FIELDISNULL ('qExistDO2', 'ID') = 0); CLOSEDATASET ('qExistDO2'); ), 38, Block( bDocExist := 0; // APPENDLOGFILE (sRestoreLog, 'Для восстановления удаленного коммерческого акта обратитесь в техническую поддержку.'); ), 39, Block( bDocExist := -1; APPENDLOGFILE (sRestoreLog, 'Для восстановления удаленного письма об ошибках обратитесь в техническую поддержку.'); ) ], ); // CASE IF (bDocExist, Block( APPENDLOGFILE (sRestoreLog, 'Документ ' + vDocName + ' № ' + vDocNo + ' от ' + FDT ('DD.MM.YYYY',vDocDate)+ ' уже есть в базе. Восстановление не требуется.'); ), Block( IF (bDocExist = 0, Block( APPENDLOGFILE (sRestoreLog, 'Восстановление ' + qRestoreList.DOCNAME + ' № ' + qRestoreList.DOCNO + ' от ' + FDT ('DD.MM.YYYY', qRestoreList.DOCDATE) + ' (' + qRestoreList.DOCUMENTID + ')'); RestoreDocument (vPlaceId, qRestoreList.DOCUMENTID, qRestoreList.DOCSUBID, qRestoreList.DOCTYPE); ), Block( // просто заглушка ) ); ) ); // IF NEXT ('qRestoreList'); ) ); CLOSEDATASET ('qRestoreList'); APPENDLOGFILE (sRestoreLog, CHARSTR ('=', 120)); SHOWLOGFILE (sRestoreLog, 'Журнал событий: восстановление документа из резервной копии'); EXECUTESCRIPT (IncludeTrailingBackslash (PROGRAMPATH ()) + 'Data\Impex\Scripts\eps.imp'); GLOBALREFRESH ();