17 октября, среда 04:09
Bankir.Ru

Объявление

Свернуть
Пока нет объявлений.

contrkbk проверка статуса

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • contrkbk проверка статуса

    У нас не проверяется статус состовителя, заполнен он или нет.
    Если поставить пробел, то он сохраняет документ, а в файле XML для ЦБ нет КБК. Как сделать так чтобы он проверил документ и выдал ошибку если стоит пробел в статусе состовителя.

  • #2
    Shtirlitz Не знаю как сейчас, но год назад - ручками, ручками. Пишите свои проверки и все. Может правда Rstyle чего изменил за год, но буду сильно удивлена.

    Комментарий


    • #3
      Oks2001
      но буду сильно удивлена.
      Не изменил
      Да и смысла нет Кому-то актуально, кому-то нет

      Shtirlitz
      Поставьте проверку в ..\Operday\Document.mac
      Вам помочь?
      Опишите ситуацию что, как и куда хочется, и какая сборка

      Комментарий


      • #4
        Если можно подскажите код проверки на пробел в макросе.

        Комментарий


        • #5
          Shtirlitz
          Например (tb_doc тут может быть, например, и file. Если TBFile или TRecHandler, то доступ к полям - через rec, tb_doc.rec.ComposerStatus)
          Код:
          record tb_doc("document.dbt");
          ...
          
          if(trim(tb_doc.ComposerStatus)=="")
           MsgBox("Не заполнен статус составителя");
           ...
          end;
          
          ...

          Комментарий


          • #6
            В какой файл надо вносить изменения??? Я пока чайник и не знаю языка. Напишите плиз подробную иструкцию

            Комментарий


            • #7
              Shtirlitz в файлах документов: document.mac (проведенные), postdoc.mac (отложенные), arhdoc.mac (архивные), index.mac (планируемые). В общем в тех местах, где могут провести документы. Во всех этих макросах есть процедура "Проверить_документ" (как-то похоже называется)
              Советую играться сперва на тестовой базе, а не на рабочей.

              Комментарий


              • #8
                Shtirlitz документация по RS-Банку достаточно подробная... советую начать с неё, а не просто экспериментировать! и про тестовую базу - это правильно!!!
                а то помню, как-то у нас человечек clone(document) в макрос вставил... вот приколу было

                Комментарий


                • #9
                  Shtirlitz В какой файл надо вносить изменения??? Я пока чайник и не знаю языка

                  Если вы совсем чайник, то советую тренироваться не на этих макросах, а просто сперва написать макрос проверки отправленных документов, чтобы хотя бы задним числом знать напортачено что-то или нет. Все перечисленные мной макросы напрямую затрагивают основные функции работы базы - проводка документов. Там, к сожалению, очень просто натворить что-то слишком критичное. Оперотдел, как минимум, спасибо не скажет

                  Комментарий


                  • #10
                    Я в тестовой базе буду пробовать. Макросы нашел. Какой код проверки на пробел в статусе мне впихнуть???

                    Комментарий


                    • #11
                      Shtirlitz
                      В макрофункцию Проверить_документ пихаете примерно такой код

                      Код:
                      ...
                      record          Документ( document );
                      record          СтарыйДокумент( document );
                      ...
                      
                      
                      macro    Проверить_документ( Режим, Тип_документа )
                      ...
                      // вот тут Ваш кусок кода 
                          if((Режим == 2) or (Режим == 3)) //ввод или корректировка 
                           if((Документ.Origin=="f") or (Документ.Origin=="t")) // документ пойдет 'наружу'
                            if(trim(Документ.ComposerStatus)=="")
                             MsgBox("Не заполнен статус составителя");
                             return 1;
                            end;
                           end;
                          end;
                      
                          return 0;
                      end;
                      Вот примерно так

                      Здесь проверяется, что если документ т.н. 'начальный', и у него не заполнен код составителя, то кричим и документ (новый или измененный) не сохраняем
                      Но, вообще говоря, статус составителя заполняется не для всех внешних документов. Для каких - определяйтесь со своими бухами

                      Комментарий


                      • #12
                        Сделал как вы сказали в файлы document.mac (проведенные), postdoc.mac (отложенные)
                        Добавил в самый низ код:
                        macro Проверить_документ12( Режим, Тип_документа )
                        // вот тут Ваш кусок кода
                        if((Режим == 2) or (Режим == 3)) //ввод или корректировка
                        if((Документ.Origin=="f") or (Документ.Origin=="t")) // документ пойдет 'наружу'
                        if(trim(Документ.ComposerStatus)=="")
                        MsgBox("Не заполнен статус составителя");
                        return 1;
                        end;
                        end;
                        end;

                        return 0;
                        end;
                        Изменил только macro т.к. была ошибка. Когда оператор в платежке нажимает ctrl + p перебивает статус пробелом и жмет esc то на статус не ругается и пропускает документ. Он сам потом автоматически ставит статус 01 и при этом он его не сохраняет в XML и все поля для налоговой туда не попадают.

                        Комментарий


                        • #13
                          Shtirlitz т.к. была ошибка Какая?

                          Когда оператор в платежке нажимает ctrl + p перебивает статус пробелом и жмет esc то на статус не ругается и пропускает документ.

                          Проверьте при таком порядке работы какие значения принимают Режим, Документ.Origin, Документ.ComposerStatus. Попадаете ли вы вообще в эту проверку? По-моему, при нажатии ctrl-p, вы вообще не попадаете в document.mac - проверьте.
                          А автоматом он не "ставит 01", а просто показывает первый в списке из справочника. Поэтому и не сохраняет.

                          Комментарий


                          • #14
                            Shtirlitz macro Проверить_документ12
                            а почему 12 то? :-)

                            Комментарий


                            • #15
                              Shtirlitz
                              Изменил только macro т.к. была ошибка
                              Да, что за ошибка - в студию

                              Имя макроса Проверить_документ - фиксированное, менять его нельзя. Т.е. менять можно, но будет как у Вас с Вашим Проверить_документ12, который просто элементарно ни коим образом ни откуда не дергается и нигде не отрабатывает

                              Комментарий


                              • #16
                                вот мой document.mac
                                /*---------------------------------------------------------------------------\
                                | Файл document.mac |
                                | Для проведенных документов |
                                \---------------------------------------------------------------------------*/

                                record Документ( document );
                                record СтарыйДокумент( document );

                                import globals;
                                import plcommon,plcomrep;
                                /******** Начало изменений для БОУРМ *****************/
                                import clb_main;
                                /******** Конец изменений для БОУРМ ******************/

                                macro Новый_документ( тип_документа )
                                /************ Начало изменений для БОУРМ *************/
                                /******* Данные вызовы не удалять!!! ***********/
                                var __clb_ret = clb_ListNewDoc(Документ,СтарыйДокумент,тип_документа,clb_IdDOCUMENT);
                                if(ValType(__clb_ret) != V_UNDEF)
                                return __clb_ret;
                                end;
                                /************ Конец изменений для БОУРМ **************/
                                return 0;
                                end;

                                macro Проверить_документ( Режим, Тип_документа )

                                if ( ( (Режим == 2 ) or (Режим == 3 ) ) and
                                ( Документ.Shifr_Oper == "01" ) and
                                ( SubStr( Документ.Numb_Document, StrLen(Документ.Numb_Document)-2 ) == "000" )
                                )
                                MsgBox("Три последних разряда номера должны быть отличны от '000'");
                                return 1;
                                end;

                                if ( (Режим == 2 ) or (Режим == 3 ) )
                                if ( IsGround93( Документ, Тип_документа ) )
                                return 34;
                                end;
                                end;

                                /************ Начало изменений для БОУРМ *************/
                                /******* Данные вызовы не удалять!!! ***********/
                                var __clb_ret = clb_ListCheckDoc(Документ,СтарыйДокумент,Режим,Тип_документа,clb_IdDOCUMENT);
                                if(ValType(__clb_ret) != V_UNDEF)
                                return __clb_ret;
                                end;
                                /************ Конец изменений для БОУРМ **************/

                                return 0;
                                end;

                                macro ФункцияПользователя( тип_документа )
                                /************ Начало изменений для БОУРМ *************/
                                /******* Данные вызовы не удалять!!! ***********/
                                var __clb_ret = clb_ListUserFunc(Документ,СтарыйДокумент,тип_документа,clb_IdDOCUMENT);
                                if(ValType(__clb_ret) != V_UNDEF)
                                return __clb_ret;
                                end;
                                /* Диалог отправки подтверждения. Может модифицироваться по усмотрению пользователя */
                                clb_RunDialogCreateReceipt(Документ);
                                /************ Конец изменений для БОУРМ **************/
                                return 0;
                                end;

                                macro Проверить_документ ( Режим, Тип_документа )
                                // вот тут Ваш кусок кода
                                if((Режим == 2) or (Режим == 3)) //ввод или корректировка
                                if((Документ.Origin=="f") or (Документ.Origin=="t")) // документ пойдет 'наружу'
                                if(trim(Документ.ComposerStatus)=="")
                                MsgBox("Не заполнен статус составителя");
                                return 1;
                                end;
                                end;
                                end;

                                return 0;
                                end;

                                macro Постобработка_документа( Режим, Тип_документа )
                                /************ Начало изменений для БОУРМ *************/
                                /******* Данные вызовы не удалять!!! ***********/
                                var __clb_ret = clb_ListPostProcDoc(Документ,СтарыйДокумент,Режим,Тип_документа,clb_IdDOCUMENT);
                                if(ValType(__clb_ret) != V_UNDEF)
                                return __clb_ret;
                                end;
                                /******** Конец изменений для БОУРМ ******************/
                                return 0;
                                end;

                                Комментарий


                                • #17
                                  ошибка: ругается на "macro Проверить_документ ( Режим, Тип_документа )" - строка 66{10}: переопределение индефикатора Проверить_документ

                                  Комментарий


                                  • #18
                                    Shtirlitz Минуточку! У вас получается, что в одном макросе 2 (!!!) функции "Проверить_документ". Это недопустимо, т.к. во вторую функцию программа не зайдет никогда. Этот кусок кода надо было вставить после строк

                                    /************ Начало изменений для БОУРМ *************/
                                    /******* Данные вызовы не удалять!!! ***********/
                                    var __clb_ret = clb_ListCheckDoc(Документ,СтарыйДокумент,Режим,Тип_документа,clb_IdDOCUMENT);
                                    if(ValType(__clb_ret) != V_UNDEF)
                                    return __clb_ret;
                                    end;
                                    /************ Конец изменений для БОУРМ **************/

                                    Комментарий


                                    • #19
                                      Посмотри теперь правельно???
                                      /*---------------------------------------------------------------------------\
                                      | Файл document.mac |
                                      | Для проведенных документов |
                                      \---------------------------------------------------------------------------*/

                                      record Документ( document );
                                      record СтарыйДокумент( document );

                                      import globals;
                                      import plcommon,plcomrep;
                                      /******** Начало изменений для БОУРМ *****************/
                                      import clb_main;
                                      /******** Конец изменений для БОУРМ ******************/

                                      macro Новый_документ( тип_документа )
                                      /************ Начало изменений для БОУРМ *************/
                                      /******* Данные вызовы не удалять!!! ***********/
                                      var __clb_ret = clb_ListNewDoc(Документ,СтарыйДокумент,тип_документа,clb_IdDOCUMENT);
                                      if(ValType(__clb_ret) != V_UNDEF)
                                      return __clb_ret;
                                      end;
                                      /************ Конец изменений для БОУРМ **************/
                                      return 0;
                                      end;

                                      macro Проверить_документ( Режим, Тип_документа )

                                      if ( ( (Режим == 2 ) or (Режим == 3 ) ) and
                                      ( Документ.Shifr_Oper == "01" ) and
                                      ( SubStr( Документ.Numb_Document, StrLen(Документ.Numb_Document)-2 ) == "000" )
                                      )
                                      MsgBox("Три последних разряда номера должны быть отличны от '000'");
                                      return 1;
                                      end;

                                      if ( (Режим == 2 ) or (Режим == 3 ) )
                                      if ( IsGround93( Документ, Тип_документа ) )
                                      return 34;
                                      end;
                                      end;

                                      /************ Начало изменений для БОУРМ *************/
                                      /******* Данные вызовы не удалять!!! ***********/
                                      var __clb_ret = clb_ListCheckDoc(Документ,СтарыйДокумент,Режим,Тип_документа,clb_IdDOCUMENT);
                                      if(ValType(__clb_ret) != V_UNDEF)
                                      return __clb_ret;
                                      end;
                                      /************ Конец изменений для БОУРМ **************/

                                      return 0;
                                      end;

                                      macro Проверить_документ ( Режим, Тип_документа )
                                      // вот тут Ваш кусок кода
                                      if((Режим == 2) or (Режим == 3)) //ввод или корректировка
                                      if((Документ.Origin=="f") or (Документ.Origin=="t")) // документ пойдет 'наружу'
                                      if(trim(Документ.ComposerStatus)=="")
                                      MsgBox("Не заполнен статус составителя");
                                      return 1;
                                      end;
                                      end;
                                      end;

                                      return 0;
                                      end;

                                      macro ФункцияПользователя( тип_документа )
                                      /************ Начало изменений для БОУРМ *************/
                                      /******* Данные вызовы не удалять!!! ***********/
                                      var __clb_ret = clb_ListUserFunc(Документ,СтарыйДокумент,тип_документа,clb_IdDOCUMENT);
                                      if(ValType(__clb_ret) != V_UNDEF)
                                      return __clb_ret;
                                      end;
                                      /* Диалог отправки подтверждения. Может модифицироваться по усмотрению пользователя */
                                      clb_RunDialogCreateReceipt(Документ);
                                      /************ Конец изменений для БОУРМ **************/
                                      return 0;
                                      end;



                                      macro Постобработка_документа( Режим, Тип_документа )
                                      /************ Начало изменений для БОУРМ *************/
                                      /******* Данные вызовы не удалять!!! ***********/
                                      var __clb_ret = clb_ListPostProcDoc(Документ,СтарыйДокумент,Режим,Тип_документа,clb_IdDOCUMENT);
                                      if(ValType(__clb_ret) != V_UNDEF)
                                      return __clb_ret;
                                      end;
                                      /******** Конец изменений для БОУРМ ******************/
                                      return 0;
                                      end;

                                      Комментарий


                                      • #20
                                        с таким файлом Выдает ошибку переопределение индефикатора

                                        Комментарий


                                        • #21
                                          Shtirlitz с таким файлом Выдает ошибку переопределение индефикатора

                                          так у тебя же 2 строчки "macro Проверить_документ ( Режим, Тип_документа )" должна быть одна


                                          macro Проверить_документ( Режим, Тип_документа )

                                          if ( ( (Режим == 2 ) or (Режим == 3 ) ) and ( Документ.Shifr_Oper == "01" ) and
                                          ( SubStr( Документ.Numb_Document, StrLen(Документ.Numb_Document)-2 ) == "000" )
                                          )
                                          MsgBox("Три последних разряда номера должны быть отличны от '000'");
                                          return 1;
                                          end;

                                          if ( (Режим == 2 ) or (Режим == 3 ) )
                                          if ( IsGround93( Документ, Тип_документа ) )
                                          return 34;
                                          end;
                                          end;

                                          /************ Начало изменений для БОУРМ *************/
                                          /******* Данные вызовы не удалять!!! ***********/
                                          var __clb_ret = clb_ListCheckDoc(Документ,СтарыйДокумент,Режим,Тип_документа,clb_IdDOCUMENT);
                                          if(ValType(__clb_ret) != V_UNDEF)
                                          return __clb_ret;
                                          end;
                                          /************ Конец изменений для БОУРМ **************/


                                          // вот тут Ваш кусок кода !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                          if((Режим == 2) or (Режим == 3)) //ввод или корректировка
                                          if((Документ.Origin=="f") or (Документ.Origin=="t")) // документ пойдет 'наружу'
                                          if(trim(Документ.ComposerStatus)=="")
                                          MsgBox("Не заполнен статус составителя");
                                          return 1;
                                          end;
                                          end;
                                          end;

                                          return 0;
                                          end;

                                          Комментарий


                                          • #22
                                            Напишите полностью document.mac пожалуйста. Весь код.

                                            Комментарий


                                            • #23
                                              Shtirlitz
                                              Напишите полностью document.mac пожалуйста. Весь код.

                                              Код:
                                              /*---------------------------------------------------------------------------\
                                              | Файл document.mac |
                                              | Для проведенных документов |
                                              \---------------------------------------------------------------------------*/
                                              
                                              record Документ( document );
                                              record СтарыйДокумент( document );
                                              
                                              import globals;
                                              import plcommon,plcomrep;
                                              /******** Начало изменений для БОУРМ *****************/
                                              import clb_main;
                                              /******** Конец изменений для БОУРМ ******************/
                                              
                                              macro Новый_документ( тип_документа )
                                              /************ Начало изменений для БОУРМ *************/
                                              /******* Данные вызовы не удалять!!! ***********/
                                              var __clb_ret = clb_ListNewDoc(Документ,СтарыйДокумент,тип_документа,clb_IdDOCUMENT);
                                              if(ValType(__clb_ret) != V_UNDEF)
                                              return __clb_ret;
                                              end;
                                              /************ Конец изменений для БОУРМ **************/
                                              return 0;
                                              end;
                                              
                                              macro Проверить_документ( Режим, Тип_документа )
                                              
                                              if ( ( (Режим == 2 ) or (Режим == 3 ) ) and
                                              ( Документ.Shifr_Oper == "01" ) and
                                              ( SubStr( Документ.Numb_Document, StrLen(Документ.Numb_Document)-2 ) == "000" )
                                              )
                                              MsgBox("Три последних разряда номера должны быть отличны от '000'");
                                              return 1;
                                              end;
                                              
                                              if ( (Режим == 2 ) or (Режим == 3 ) )
                                              if ( IsGround93( Документ, Тип_документа ) )
                                              return 34;
                                              end;
                                              end;
                                              
                                              /************ Начало изменений для БОУРМ *************/
                                              /******* Данные вызовы не удалять!!! ***********/
                                              var __clb_ret = clb_ListCheckDoc(Документ,СтарыйДокумент,Режим,Тип_документа,clb_IdDOCUMENT);
                                              if(ValType(__clb_ret) != V_UNDEF)
                                              return __clb_ret;
                                              end;
                                              /************ Конец изменений для БОУРМ **************/
                                              
                                              // вот тут Ваш кусок кода
                                              if((Режим == 2) or (Режим == 3)) //ввод или корректировка
                                               if((Документ.Origin=="f") or (Документ.Origin=="t")) // документ пойдет 'наружу'
                                                if(trim(Документ.ComposerStatus)=="")
                                                 MsgBox("Не заполнен статус составителя");
                                                 return 1;
                                                end;
                                               end;
                                              end;
                                              
                                              return 0;
                                              end;
                                              
                                              macro ФункцияПользователя( тип_документа )
                                              /************ Начало изменений для БОУРМ *************/
                                              /******* Данные вызовы не удалять!!! ***********/
                                              var __clb_ret = clb_ListUserFunc(Документ,СтарыйДокумент,тип_документа,clb_IdDOCUMENT);
                                              if(ValType(__clb_ret) != V_UNDEF)
                                              return __clb_ret;
                                              end;
                                              /* Диалог отправки подтверждения. Может модифицироваться по усмотрению пользователя */
                                              clb_RunDialogCreateReceipt(Документ);
                                              /************ Конец изменений для БОУРМ **************/
                                              return 0;
                                              end;
                                              
                                              
                                              macro Постобработка_документа( Режим, Тип_документа )
                                              /************ Начало изменений для БОУРМ *************/
                                              /******* Данные вызовы не удалять!!! ***********/
                                              var __clb_ret = clb_ListPostProcDoc(Документ,СтарыйДокумент,Режим,Тип_документа,clb_IdDOCUMENT);
                                              if(ValType(__clb_ret) != V_UNDEF)
                                              return __clb_ret;
                                              end;
                                              /******** Конец изменений для БОУРМ ******************/
                                              return 0;
                                              end;

                                              Комментарий


                                              • #24
                                                Shtirlitz
                                                Это в C++ допускается наличие одноименных функций, но даже и там параметры должны отличаться по типам

                                                В вашем же первом (да и втором) вариантах фактически происходит следующее:
                                                системе нужно дернуть функцию по фамилии Проверить_документ. Она радостно идет в макрос, думает, ну ща я, как отработаю, он меня любить будет Но фик! Потому что она видит 2 определенные функции с таким именем... Какую из них дергать? Она чувствует, что кто-то (а именно Вы) решил над ней поглумиться И начинает кричать и возмущаться всячески

                                                Комментарий


                                                • #25
                                                  Shtirlitz Слушай, а у вас вообще нет больше никого кто в RSL что-нибудь рубит? Честно говоря тебе надо многому научиться, а учиться на подобных примерах все-таки чревато. Для начала нужны какие-нибудь простенькие отчеты. Чтобы ты хотя бы представлял возможности языка.

                                                  Комментарий


                                                  • #26
                                                    Нет людей которые в RSL рубят у нас нет. Врубится надо мне .
                                                    Какие вы можете книги порекомендовать или на каких примерах учится?

                                                    Комментарий


                                                    • #27
                                                      Shtirlitz Самое простое скачать с R-styleвского сайта литературу по RSL ("Проблемно-ориентированный язык RSL" и "Редактирование и отладка программ на языке RSL") По крайней мере первое впечатление получите. А у вас поддержка есть? ИМХО, в вашем случае она просто необходима.

                                                      Комментарий


                                                      • #28
                                                        Поддержка есть

                                                        Комментарий


                                                        • #29
                                                          Shtirlitz Хорошо. У вас ссылки на Rstyleвские форумы есть?

                                                          Комментарий


                                                          • #30
                                                            Да все есть большое спасибо за помощь

                                                            Комментарий

                                                            Пользователи, просматривающие эту тему

                                                            Свернуть

                                                            Присутствует 1. Участников: 0, гостей: 1.

                                                            Обработка...
                                                            X