[DEFINE] ;глобальнные константы (имена заранее определены, тип определяется именем) $MCName = "200116-100337-00000003.scanned" $MCType = 2 $MCode = "001012345678912992100000000W910bad924Nu8bdv/ikQ4OnqmHexAAuQ3bJce3CyDrH1qHQ/jB/+Pa4zgYsRLuSmSRuCQGrU3F3t27Oo+39E3UOcExSdSiw==" ;глобальнные переменные (имена произвольные, тип определяется первым символом имени (I - целое, S - стьрока, D - дата, F - с плав точкой) ICOUNT_1059_2101 = 0 ICOUNT_1059_1270 = 0 DATE_DOC_1012 = 0 ;SVAL_1005 ;SVAL_1016 ;SVAL_1026 ;SVAL_1044 ;SVAL_1073 ;SVAL_1074 ;SVAL_1075 ;SVAL_1171 [Rules_00001] Rule02="SETNEED 1" Rule03="IF TLV_1001==1; SETNEED 1; ELSE; SETNEED 0; ENDIF" Rule04="IF TLV_1002==0; SETNEED 1; ELSE; SETNEED 3; ENDIF; IF $CurCode==1017 && TLV_1002==1 && ISPRESENT(TLV_1017) && TLV_1017 != 000000000000; SETMESSAGE "Реквизит (тег 1017) должен иметь значение 000000000000"; ENDIF" Rule05="IF Value>=0 && Value<=63; ELSE; SETMESSAGE "Реквизит (тег 1062) имеет недопустимое значение"; ENDIF" Rule06="IF TLV_1001==1; SETNEED 1; ELSE; SETNEED 3; ENDIF" Rule07="IF TLV_1002==1; SETNEED TLV_1046 3; ELSE; SETNEED TLV_1046 1; IF TLV_1002==1 && TLV_1056==1; SETMESSAGE "Реквизит (тег 1056) не может принимать значение 1"; ENDIF" Rule09="IF Value != 1; SETMESSAGE "Реквизит (тег 1040) не может принимать значение отличное от 1"" Rule11="IF TLV_1002==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" Rule12="SETNEED 1" Rule13="SETNEED 1" Rule14="SETNEED 1" [Rules_00011] Rule02="SETNEED 1" Rule03="IF TLV_1001==1; SETNEED 1; ELSE; SETNEED 0; ENDIF" Rule04="IF TLV_1002==0; SETNEED 1; ELSE; SETNEED 3; ENDIF; IF $CurCode==1017 && TLV_1002==1 && ISPRESENT(TLV_1017) && TLV_1017 != 000000000000; SETMESSAGE "Реквизит (тег 1017) должен иметь значение 000000000000"; ENDIF" Rule05="IF Value>=0 && Value<=63; ELSE; SETMESSAGE "Реквизит (тег 1062) имеет недопустимое значение"; ENDIF" Rule06="IF TLV_1001==1; SETNEED 1; ELSE; SETNEED 3; ENDIF" Rule07="IF TLV_1002==1; SETNEED TLV_1046 3; ELSE; SETNEED TLV_1046 1; IF TLV_1002==1 && TLV_1056==1; SETMESSAGE "Реквизит (тег 1056) не может принимать значение 1"; ENDIF" Rule09="IF Value != 1; SETMESSAGE "Реквизит (тег 1040) не может принимать значение отличное от 1"" Rule11="IF TLV_1002==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" Rule12="SETNEED 1" Rule13="SETNEED 1" Rule14="SETNEED 1" Rule15="IF TLV_1205==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" [Rules_00002] Rule01="SETNEED 3" Rule03="SETNEED 1" ;Rule04="IF REG$TLV_1001==1 || REG$TLV_1009==1; SETNEED 1; ELSE; SETNEED 0; ENDIF " Rule05="IF TLV_1001==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" [Rules_00021] Rule01="IF $SessOpened; SETNEED 1; ELSE; SETNEED 0; ENDIF" Rule02="IF ISPRESENT(TLV_1002); TLV_1002=1; ELSE; SETNEED TLV_1116 1; SETNEED TLV_1097 1; SETNEED TLV_1098 1; SETNEED TLV_1158 1; ENDIF" Rule04="SETNEED 1" [Rules_00003] ;код инициализации для данной структуры Init="ICOUNT_1059_2101=0; ICOUNT_1059_1270=0" ;General="SHOWMESSAGE "Структура - чек, завершение, текущие значение ICOUNT_1059_2101 и ICOUNT_1059_1270 - $, $" ICOUNT_1059_2101 ICOUNT_1059_1270" Rule01="IF FSUM(TLV_1031, TLV_1081, TLV_1215, TLV_1216, TLV_1217) != TLV_1020; SETMESSAGE "Сумма значений реквизитов (тег 1031), (тег 1081), (тег 1215), (тег 1216) и (тег 1217) не равна значению реквизита (тег 1020)"; ENDIF" ;правило 2 пока не реализую - оно описано, странно указанных реквизитов вообще нет в описании структуры 1059 - задать вопрос! ;Rule02="" Rule03="IF REG$TLV_1002==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" Rule04="IF REG$TLV_1002==1; SETNEED 1; ENDIF" ;правило 5 странное, т.к поля 1043 в списке нет - задать вопрос Rule05="IF ICOUNT(TLV_1043) > 1 && FSUM(TLV_1043) != Value; SETMESSAGE "Сумма значений реквизитов (тег 1043) не равна значению реквизита (тег 1020))"; ENDIF" Rule06="IF ISNOTPRESENT(TLV_1102) && ISNOTPRESENT(TLV_1103) && ISNOTPRESENT(TLV_1104) && ISNOTPRESENT(TLV_1105) && ISNOTPRESENT(TLV_1106) && ISNOTPRESENT(TLV_1107); SETMESSAGE "Документ должен содержать хотя ,ы один реквизит: (тег 1102),(тег 1103),(тег 1104),(тег 1105),(тег 1106),(тег 1107)"; ENDIF" Rule08="IF REG$TLV_1108==1; SETNEED 1; ENDIF" Rule10="IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1048); SETNEED TLV_1048 1; ELSE SETNEED TLV_1048 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1018); SETNEED TLV_1018 1; ELSE; SETNEED TLV_1018 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1060); SETNEED TLV_1060 1; ELSE; SETNEED TLV_1060 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1017); SETNEED TLV_1017 1; ELSE; SETNEED TLV_1017 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1036); SETNEED TLV_1036 1; ELSE; SETNEED TLV_1036 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1009); SETNEED TLV_1009 1; ELSE; SETNEED TLV_1009 3; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1187); SETNEED TLV_1187 1; ELSE; SETNEED TLV_1187 0; ENDIF" ;вообще то правило 13 не нужно оно дублирует признак ДОПУСТИМОСТЬ ПОВТОРА Rule13="IF ICOUNT(TLV_1054) > 1; SETMESSAGE "Документ содержит более 1 реквизита (тег 1054)"; ENDIF" Rule18="IF REG$TLV_1101==1; SETNEED 3; ELSE; SETNEED 1; ENDIF" ;похоже в самой таблице вместо примечания 21 для реквизита 2107 должно быть 22 - задать вопрос Rule22="IF ICOUNT_1059_2101 > 1; SETNEED 1; ELSE; SETNEED 0; ENDIF" ;Rule22="IF ICOUNT_1059_2101 > 1; SHOWMESSAGE "ЖОПА 2101"; ENDIF" ;скобки в IF не работает поэтому пишу так много отдельных выражений ;правило 24 25 невозможно реализовать - тик КМ не известен при разборе структуры 00003 ;Rule24="IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(0, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(1, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(2, TLV_2106)==1 && IBITVAL(3, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(2, TLV_2106)==1 && TLV_2109==2; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(2, TLV_2106)==1 && TLV_2109==3; SETNEED 3; ELSE SETNEED 1; ENDIF;" ;Rule25="IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(0, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(1, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(3, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && TLV_2109==2; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && TLV_2109==3; SETNEED 3; ELSE SETNEED 1; ENDIF;" Rule27="IF ICOUNT_1059_1270 > 10; SETMESSAGE "Документ содержит более 10 реквизитов (тег 1059)"; ENDIF" [Rules_00031] ;код инициализации для данной структуры Init="ICOUNT_1059_2101=0; DATE_DOC_1012 = TLV_1012" ;General="DATE_DOC_1012 = TLV_1012" Rule01="IF FSUM(TLV_1031, TLV_1081, TLV_1215, TLV_1216, TLV_1217) != TLV_1020; SETMESSAGE "Сумма значений реквизитов (тег 1031), (тег 1081), (тег 1215), (тег 1216) и (тег 1217) не равна значению реквизита (тег 1020)"; ENDIF" ;правило 2 пока не реализую - оно описано, странно указанных реквизитов вообще нет в описании структуры 1059 - задать вопрос! ;Rule02="" Rule03="IF REG$TLV_1002==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" Rule04="IF REG$TLV_1002==1; SETNEED 1; ENDIF" ;правило 5 странное, т.к поля 1043 в списке нет - задать вопрос Rule05="IF ICOUNT(TLV_1043) > 1 && FSUM(TLV_1043) != Value; SETMESSAGE "Сумма значений реквизитов (тег 1043) не равна значению реквизита (тег 1020))"; ENDIF" Rule06="IF ISNOTPRESENT(TLV_1102) && ISNOTPRESENT(TLV_1103) && ISNOTPRESENT(TLV_1104) && ISNOTPRESENT(TLV_1105) && ISNOTPRESENT(TLV_1106) && ISNOTPRESENT(TLV_1107); SETMESSAGE "Документ должен содержать хотя ,ы один реквизит: (тег 1102),(тег 1103),(тег 1104),(тег 1105),(тег 1106),(тег 1107)"; ENDIF" Rule08="IF REG$TLV_1108==1; SETNEED 1; ENDIF" Rule10="IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1048); SETNEED TLV_1048 1; ELSE SETNEED TLV_1048 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1018); SETNEED TLV_1018 1; ELSE; SETNEED TLV_1018 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1060); SETNEED TLV_1060 1; ELSE; SETNEED TLV_1060 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1017); SETNEED TLV_1017 1; ELSE; SETNEED TLV_1017 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1036); SETNEED TLV_1036 1; ELSE; SETNEED TLV_1036 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1009); SETNEED TLV_1009 1; ELSE; SETNEED TLV_1009 3; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1187); SETNEED TLV_1187 1; ELSE; SETNEED TLV_1187 0; ENDIF" ;вообще то правило 13 не нужно оно дублирует признак ДОПУСТИМОСТЬ ПОВТОРА Rule13="IF ICOUNT(TLV_1054) > 1; SETMESSAGE "Документ содержит более 1 реквизита (тег 1054)"; ENDIF" ;правило 17 возможно ли и нужно ли - задать вопрос! ;Rule17="" Rule18="IF Value==0 || Value==2; ELSE; SETMESSAGE "Реквизит (тег 1173) имеет недопустимое значение"; ENDIF" Rule21="IF ICOUNT_1059_2101 > 1; SETNEED 1; ELSE; SETNEED 0; ENDIF" [Rules_00004] ;код инициализации для данной структуры Init="ICOUNT_1059_2101=0; ICOUNT_1059_1270=0" ;General="SHOWMESSAGE "Структура - чек, завершение, текущие значение ICOUNT_1059_2101 и ICOUNT_1059_1270 - $, $" ICOUNT_1059_2101 ICOUNT_1059_1270" Rule01="IF FSUM(TLV_1031, TLV_1081, TLV_1215, TLV_1216, TLV_1217) != TLV_1020; SETMESSAGE "Сумма значений реквизитов (тег 1031), (тег 1081), (тег 1215), (тег 1216) и (тег 1217) не равна значению реквизита (тег 1020)"; ENDIF" ;правило 2 пока не реализую - оно описано, странно указанных реквизитов вообще нет в описании структуры 1059 - задать вопрос! ;Rule02="" Rule03="IF REG$TLV_1002==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" Rule04="IF REG$TLV_1002==1; SETNEED 1; ENDIF" ;правило 5 странное, т.к поля 1043 в списке нет - задать вопрос Rule05="IF ICOUNT(TLV_1043) > 1 && FSUM(TLV_1043) != Value; SETMESSAGE "Сумма значений реквизитов (тег 1043) не равна значению реквизита (тег 1020))"; ENDIF" Rule06="IF ISNOTPRESENT(TLV_1102) && ISNOTPRESENT(TLV_1103) && ISNOTPRESENT(TLV_1104) && ISNOTPRESENT(TLV_1105) && ISNOTPRESENT(TLV_1106) && ISNOTPRESENT(TLV_1107); SETMESSAGE "Документ должен содержать хотя ,ы один реквизит: (тег 1102),(тег 1103),(тег 1104),(тег 1105),(тег 1106),(тег 1107)"; ENDIF" Rule08="IF REG$TLV_1108==1; SETNEED 1; ENDIF" Rule10="IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1048); SETNEED TLV_1048 1; ELSE SETNEED TLV_1048 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1018); SETNEED TLV_1018 1; ELSE; SETNEED TLV_1018 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1060); SETNEED TLV_1060 1; ELSE; SETNEED TLV_1060 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1017); SETNEED TLV_1017 1; ELSE; SETNEED TLV_1017 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1036); SETNEED TLV_1036 1; ELSE; SETNEED TLV_1036 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1009); SETNEED TLV_1009 1; ELSE; SETNEED TLV_1009 3; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1187); SETNEED TLV_1187 1; ELSE; SETNEED TLV_1187 0; ENDIF" ;вообще то правило 13 не нужно оно дублирует признак ДОПУСТИМОСТЬ ПОВТОРА Rule13="IF ICOUNT(TLV_1054) > 1; SETMESSAGE "Документ содержит более 1 реквизита (тег 1054)"; ENDIF" Rule18="IF REG$TLV_1101==1; SETNEED 3; ELSE; SETNEED 1; ENDIF" ;похоже в самой таблице вместо примечания 21 для реквизита 2107 должно быть 22 - задать вопрос Rule22="IF ICOUNT_1059_2101 > 1; SETNEED 1; ELSE; SETNEED 0; ENDIF" ;Rule22="IF ICOUNT_1059_2101 > 1; SHOWMESSAGE "ЖОПА 2101"; ENDIF" ;скобки в IF не работает поэтому пишу так много отдельных выражений ;правило 24 25 невозможно реализовать - тик КМ не известен при разборе структуры 00003 ;Rule24="IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(0, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(1, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(2, TLV_2106)==1 && IBITVAL(3, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(2, TLV_2106)==1 && TLV_2109==2; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==2 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(2, TLV_2106)==1 && TLV_2109==3; SETNEED 3; ELSE SETNEED 1; ENDIF;" ;Rule25="IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(0, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(1, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && IBITVAL(3, TLV_2106)==0; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && TLV_2109==2; SETNEED 3; ELSE SETNEED 1; ENDIF;IF ISPRESENT(TLV_2106,TLV_2100) && TLV_2102==3 && TLV_2100>=1 && TLV_2100<=5 && TLV_2109==3; SETNEED 3; ELSE SETNEED 1; ENDIF;" Rule27="IF ICOUNT_1059_1270 > 10; SETMESSAGE "Документ содержит более 10 реквизитов (тег 1059)"; ENDIF" [Rules_00041] ;код инициализации для данной структуры Init="ICOUNT_1059_2101=0; DATE_DOC_1012 = TLV_1012" Rule01="IF FSUM(TLV_1031, TLV_1081, TLV_1215, TLV_1216, TLV_1217) != TLV_1020; SETMESSAGE "Сумма значений реквизитов (тег 1031), (тег 1081), (тег 1215), (тег 1216) и (тег 1217) не равна значению реквизита (тег 1020)"; ENDIF" ;правило 2 пока не реализую - оно описано, странно указанных реквизитов вообще нет в описании структуры 1059 - задать вопрос! ;Rule02="" Rule03="IF REG$TLV_1002==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" Rule04="IF REG$TLV_1002==1; SETNEED 1; ENDIF" ;правило 5 странное, т.к поля 1043 в списке нет - задать вопрос Rule05="IF ICOUNT(TLV_1043) > 1 && FSUM(TLV_1043) != Value; SETMESSAGE "Сумма значений реквизитов (тег 1043) не равна значению реквизита (тег 1020))"; ENDIF" Rule06="IF ISNOTPRESENT(TLV_1102) && ISNOTPRESENT(TLV_1103) && ISNOTPRESENT(TLV_1104) && ISNOTPRESENT(TLV_1105) && ISNOTPRESENT(TLV_1106) && ISNOTPRESENT(TLV_1107); SETMESSAGE "Документ должен содержать хотя ,ы один реквизит: (тег 1102),(тег 1103),(тег 1104),(тег 1105),(тег 1106),(тег 1107)"; ENDIF" Rule08="IF REG$TLV_1108==1; SETNEED 1; ENDIF" Rule10="IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1048); SETNEED TLV_1048 1; ELSE SETNEED TLV_1048 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1018); SETNEED TLV_1018 1; ELSE; SETNEED TLV_1018 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1060); SETNEED TLV_1060 1; ELSE; SETNEED TLV_1060 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1017); SETNEED TLV_1017 1; ELSE; SETNEED TLV_1017 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1036); SETNEED TLV_1036 1; ELSE; SETNEED TLV_1036 0; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1009); SETNEED TLV_1009 1; ELSE; SETNEED TLV_1009 3; ENDIF; IF REG$TLV_1002==0 && ISNOTPRESENT(REG$TLV_1187); SETNEED TLV_1187 1; ELSE; SETNEED TLV_1187 0; ENDIF" ;вообще то правило 13 не нужно оно дублирует признак ДОПУСТИМОСТЬ ПОВТОРА Rule13="IF ICOUNT(TLV_1054) > 1; SETMESSAGE "Документ содержит более 1 реквизита (тег 1054)"; ENDIF" ;правило 17 возможно ли и нужно ли - задать вопрос! ;Rule17="" Rule18="IF Value==0 || Value==2; ELSE; SETMESSAGE "Реквизит (тег 1173) имеет недопустимое значение"; ENDIF" Rule21="IF ICOUNT_1059_2101 > 1; SETNEED 1; ELSE; SETNEED 0; ENDIF" [Rules_01059] ;Общий код для данной структуры (меняю значение глобальных переменных ICOUNT_1059_2101 и ICOUNT_1059_1270) General = "IF ISPRESENT(TLV_2101); INC ICOUNT_1059_2101 1; ENDIF; IF ISPRESENT(TLV_1270); INC ICOUNT_1059_1270 1; ENDIF" ;SHOWMESSAGE "Структура - предмет расчета, завершение, текущие значение ICOUNT_1059_2101 и ICOUNT_1059_1270 - $, $" ICOUNT_1059_2101 ICOUNT_1059_1270" Rule01="IF FMULT(TLV_1079, TLV_1023) != Value; SETMESSAGE "Значение реквизита тег 1043, не равно произведению значений реквизитов тег 1079 и тег 1023)"; ENDIF" ;правило обязательности реквизитов 2 не применяется до 1 февраля 2021г, пока 3 Rule02="SETNEED 3" Rule03="SETNEED 3" Rule04="SETNEED 3" Rule05="IF IBITVAL(0, TLV_2106)==1; SETNEED 1; ELSE; SETNEED 3; ENDIF" Rule06="IF TLV_1214==3; SETNEED 0; ELSE; SETNEED 1; ENDIF" Rule08="IF Value>=1 && Value<=7; ELSE; SETMESSAGE "Реквизит (тег 1214) имеет недопустимое значение"; ENDIF" ;скобки в IF не работают поэтому разделю на два выражения (должно быть от 1 до 26 и от 30 до 33 остальные неверные) Rule09="IF Value>=1 && Value<=33; ELSE; SETMESSAGE "Реквизит (тег 1212) имеет недопустимое значение"; ENDIF; IF Value==27 || Value==28 || Value==29; SETMESSAGE "Реквизит (тег 1212) имеет недопустимое значение"; ENDIF" ;проверить правильно ли я понял правило 10, возможно достаточно SETNEED 3 Rule10="SETNEED 3; IF ISPRESENT(TLV_1222,TLV_1223,TLV_1224,TLV_1226) || ISNOTPRESENT(TLV_1222,TLV_1223,TLV_1224,TLV_1226); ELSE; SETMESSAGE "Реквизиты (тег 1222, 1223, 1224, 1226) должны все вместе отсутствовать или присутствовать"; ENDIF" Rule11="IF ISPRESENT(TLV_1222) || ISPRESENT(TLV_1223) || ISPRESENT(TLV_1224); SETNEED 1; ELSE; SETNEED 3; ENDIF" Rule12="SETNEED 3" Rule13="SETNEED 3" Rule14="IF TLV_1209==2; SETNEED 1; ELSE; SETNEED 3; ENDIF" ;непонятное требование пока закоментировал, проверить правило 14 - задать вопрос ; IF TLV_1214==4; SETMESSAGE "Реквизит (тег 1214) имеет недопустимое значение"; ENDIF"" Rule16="SETNEED 3" Rule17="SETNEED 3" Rule18="SETNEED 3" Rule18="SETNEED 3; IF ISPRESENT(TLV_2101, TLV_2102, TLV_2106) || ISNOTPRESENT(TLV_2101, TLV_2102, TLV_2106); ELSE; SETMESSAGE "Реквизиты (тег 2101, 2102, 2106) должны все вместе отсутствовать или присутствовать"; ENDIF" Rule20="SETNEED 3" Rule21="SETNEED 3" Rule22="IF ISPRESENT(TLV_1260) && $ParentLen > 1024; SETMESSAGE "Полная длина реквизита (тег 1059), не может превышать 1024 байт"; ENDIF" ;пока SGET_2101 реализоывана формально, $MCType - определен в секции DEFINE Rule23="IF ISPRESENT(TLV_2101) && Value!=SGET_2101($MCType, $MCode); SETMESSAGE "Реквизиты тег 2101, 2100 и 2000 имеют несогласованые значения"; ENDIF" ;пока SCRC32_4 реализоывана формально, $MCode - определен в секции DEFINE Rule25="SETNEED 3; IF ISPRESENT(TLV_2115) && Value!=SCRC32_4($MCode); SETMESSAGE "Реквизиты тег 2115 и 2000 имеют несогласованые значения"; ENDIF" [Rules_01174] Rule01="IF Value > DATE_DOC_1012; SETMESSAGE "Значение реквизита тег 1178, больше даты документа коррекции 1012; ENDIF" [Rules_01256] Rule03="IF ISINLIST(Value,21,22,26,27,28,31,32,33,34,35,36,37,38,40); ELSE; SETMESSAGE "Реквизит тег 1245, имеет недопустимое значение"; ENDIF" Rule04="IF ISNOTPRESENT(TLV_1243) && ISNOTPRESENT(TLV_1245) && ISNOTPRESENT(TLV_1246); SETNEED 1; ELSE; SETNEED 0; ENDIF" Rule05="IF ISNOTPRESENT(TLV_1228); SETNEED 1; ELSE; SETNEED 0; ENDIF" [Rules_00005] ;правило 02 не реализую - это невозможно, нужно сначала провесть все ответы от ОФД Rule04="IF TLV_1002==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" ;правило 05 не понятно пока как реализовать Rule06="IF TLV_1001==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" ;правило 08 и 09 не реализую - это невозможно, нужно сначала провесть все ответы от ИСМ Rule10="SETNEED 3" [Rules_00006] Rule01="IF TLV_1001==1; SETNEED 0; ELSE; SETNEED 1; ENDIF" [Rules_00007] Rule01="SETNEED 3" [Rules_00081] Rule03="IF TLV_2003==2 || TLV_2003==4; SETNEED 1; ELSE; SETNEED 0; ENDIF" Rule04="IF ISINLIST(Value,0,10,11,12,20,21,22,30,31,32,40,41,42,50,51,70,71,72,73,80,81,82,83,255); ELSE; SETMESSAGE "Реквизит тег 2108, имеет недопустимое значение"; ENDIF" Rule05="IF Value!=0; SETMESSAGE "Реквизит тег 2102 может принимать только значение '0'"; ENDIF" Rule06="IF TLV_2108==0; SETNEED 1; ELSE; SETNEED 0; ENDIF" [Rules_00082] Rule02="SETNEED 3" Rule03="SETNEED 3" Rule04="SETNEED 3" [Rules_02007] Rule01="IF TLV_2110==2 || TLV_2110==4; SETNEED 1; ELSE; SETNEED 0; ENDIF" Rule02="SETNEED 3" ;правило 03 не реализую - это невозможно, т.к содержимого структупры 1059 я не знаю или может быть это можно сделать на эталонных данных Rule03="SETNEED 3" Rule04="IF Value!=0; SETMESSAGE "Реквизит тег 2102 может принимать только значение '0'"; ENDIF" Rule07="IF TLV_2108==0; SETNEED 1; ELSE; SETNEED 0; ENDIF" [Rules_00083] Rule02="IF ISINLIST(Value,1,2,3); ELSE; SETMESSAGE "Реквизит тег 2109, имеет недопустимое значение"; ENDIF" Rule03="IF ISINLIST(Value,5,7,13,15); ELSE; SETMESSAGE "Реквизит тег 2005, имеет недопустимое значение"; ENDIF" Rule04="IF TLV_2105==0; SETNEED 1; ELSE; SETNEED 3; ENDIF" Rule05="IF IBITVAL(1, TLV_2005)==0; SETNEED 3; ELSE; SETNEED 1; ENDIF" ;правило 06 не реализую - это невозможно, или возможно только на эталонных данных Rule06="SETNEED 3" [Rules_00084] Rule02="IF TLV_2111==0; SETNEED 1; ELSE; SETNEED 0; ENDIF"