// проверка номера контейнера ============================НАЧАЛО sGroupName := 'ДО-1: Контейнеры'; IF (INIFILE ('DOCCLOSB', 'CheckContNo', 1), Block( IF (DocType = 1, Block( EXECUTESCRIPT (INCLUDETRAILINGBACKSLASH (PROGRAMPATH ()) + 'ProcDocs\check_contno.prd'); FIRST ('KRD_CONT'); WHILE (EOF ('KRD_CONT') = 0, Block( IF (CheckContNo (KRD_CONT.CONTNO) = 0, Block( bError := 1; AddError ( sGroupName, 'Ошибка', 'Номер контейнера', KRD_CONT.CONTNO, 'Номер крупнотоннажного контейнера должен быть 11-значным, 4 буквы + 7 цифр (пример AMTU4003372).' +char(13)+ 'Номер среднетоннажного морского контейнера должен быть 9-значным и состоящим только из цифр (пример 519503660).', sErrorsListId, 0 ); // AddError ) ); // IF NEXT ('KRD_CONT') ) ); // WHILE ) ); // IF ) ); // IF // проверка номера контейнера =============================КОНЕЦ // проверка дублирования номера контейнера в ближайшие 10 дней =============================НАЧАЛО sSQL := ' SELECT DISTINCT KM.ID, KM.NBD, KC.CONTNO FROM KRD_CONT KC ' + ' RIGHT JOIN KRD_MAIN KM ON KM.PLACEID = KC.PLACEID AND KM.ID = KC.ID ' + ' WHERE KC.ID <> ' + KRD_MAIN.ID + ' AND KM.BD_DATE >= ' + DBFORMATDATETIME (KRD_MAIN.BD_DATE - INIFILE ('DOCCLOSB', 'ContDuplicateDayLimit', 10), GETDATABASETYPE ('STS_DB'), 0, 1) + ' AND KC.CONTNO IN (SELECT DISTINCT CONTNO FROM KRD_CONT WHERE ID=' + KRD_MAIN.ID + ' AND PLACEID = ' + KRD_MAIN.PLACEID + ') '; OPENQUERY ('qDoublContNo', 'STS_DB', sSQL, 1); FIRST ('qDoublContNo'); IF (FIELDISNULL ('qDoublContNo', 'ID') <> 1, BLOCK ( WHILE (EOF ('qDoublContNo') = 0, BLOCK( bError := 1; AddError ( sGroupName, 'Предупр.', 'Повтор № контейнера', qDoublContNo.CONTNO, 'Контейнер с указанным номером уже помещался на СВХ в течении 10 дней (В ДО1: ' + qDoublContNo.NBD + ')', sErrorsListId, 0 ); // AddError NEXT ('qDoublContNo'); ) ); // WHILE ) ); // IF CLOSEDATASET('qDoublContNo'); // проверка дублирования номера контейнера в ближайшие 10 дней =============================КОНЕЦ // проверка размера и типа контейнера ====================НАЧАЛО FIRST ('KRD_CONT'); WHILE (EOF ('KRD_CONT') = 0, Block( IF ((LENGTH (KRD_CONT.CONTSIZE) > 0) * (LENGTH (KRD_CONT.CONTTYPE) = 0), Block( bError := 1; AddError ( sGroupName, 'Предупр.', 'Тип контейнера', KRD_CONT.CONTTYPE, 'Буквенное обозначение типа контейнера (ожидается так как указан размер контейнера: ' + KRD_CONT.CONTSIZE + ')', sErrorsListId, 0 ); // AddError ) ); // IF IF ((LENGTH (KRD_CONT.CONTSIZE) = 0) * (LENGTH (KRD_CONT.CONTTYPE) > 0), Block( bError := 1; AddError ( sGroupName, 'Предупр.', 'Размер контейнера', KRD_CONT.CONTSIZE, 'Цифровое обозначение размера контейнера (ожидается так как указан тип контейнера: ' + KRD_CONT.CONTTYPE + ')', sErrorsListId, 0 ); // AddError ) ); // IF NEXT ('KRD_CONT') ) ); // WHILE // проверка размера и типа контейнера =====================КОНЕЦ