16 июля, четверг 15:33
Bankir.Ru

Объявление

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

Универсальные транзакции

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

  • Чернушка
    У нас аналогичная картина была на ранних патчах. Для обхода - ввели операцию без проверки - Создание с ошибкой. В последних патчах - непроверяли другие алгоритмы. Предварительно проверяем состояние счета и в зависимости от результатов проверки либо создаем нормальный документ, либо со статусом В.

    Комментарий


    • Осваиваю Универсальные транзакции. Создаю транзакцию по формированию внутреннего документа. Хочу чтобы назначение платежа формировалось динамически, т.е. , например, чтобы в назначение платежа подставлялось название счета-кредита. Пробовал много разных вариантов, ничего не получается. Может, кто-нибудь подскажет !!!

      Комментарий


      • alexbis
        Скорее всего проблема в том, что проводка создается после создания самого документа, поэтому на момент заполнения реквизита details значение реквизита acct-cr недоступно. Попробуй искать счет в разделе "выполнить до" или шаблона или транзакции, затем искать наименование счета, например функцией РЕКВИЗИТ.

        Комментарий


        • В раздел "выполнить после" шаблона я записал функцию: @details = НАИМЕНОВАНИЕ_СЧЕТА(@acct-cr(15)) В отладчике я вижу, что определяется и номер счета и его название, но присвоение не работает, т.е. в документе поле "Содержание операции" пустое.
          Если поставить эту формулу в раздел "выполнить до", то совсем ничего не работает.

          Комментарий


          • beloll Есть еще вариант.
            Создать шаблон op действие "модификация", где исправить details.
            Главное, чтобы он работал после того шаблона, где документ создаётся

            alexbis в полях after/before присвоение полей записям БД работать не будет. Только в соответствующих полях шаблона.

            Комментарий


            • beloll Есть еще вариант.
              Создать шаблон op действие "модификация", где исправить details.
              Главное, чтобы он работал после того шаблона, где документ создаётся

              Столько идей
              alexbis
              Действительно, значения полей меняются только через реквизиты.

              Комментарий


              • Создал еще один шаблон на классе opbvn c действием "модификация"
                В рекизите details задаю новое значение. При выполнении транзакции выдается ошибка:
                "Шаблонированный объект [opbvn] не содержит условий выбора"
                Что бы это означало ? О каком выборе идет речь ?

                Комментарий


                • Сообщение от alexbis Посмотреть сообщение
                  Создал еще один шаблон на классе opbvn c действием "модификация"
                  В рекизите details задаю новое значение. При выполнении транзакции выдается ошибка:
                  "Шаблонированный объект [opbvn] не содержит условий выбора"
                  Что бы это означало ? О каком выборе идет речь ?
                  Речь идет о том, что прежде чем модифицировать объект его надо найти, для поиска используется функция SEARCH, в твоем случае, я думаю нужно добавить реквизит op в этот шаблон, в выражении которого прописать SEARCH(@op(номер шаблона создания>)).

                  Есть другая опция - связать шаблоны через наследование, но в этом случае действие на шаблоне нужно сделать "Создание"

                  Комментарий


                  • Все получилось !

                    Всем большое спасибо !!!

                    Комментарий


                    • Столкнулся с такой проблемой. Если при вводе данных в универсальной транзакции отменяем ввод нажатием клавиши "Esc", начинает выдаваться масса сообщений об ошибке ввода. Можно ли каким-то образом отменить эту выдачу, т.е. просто завершить транзакцию (как это работает в стандартных транзакциях) ?

                      Комментарий


                      • alexbis Ввод данных в форму процедуры PROMPT() или в форму метода "Экранный ввод" ? Если первое - то можно проверять возвращенное процедурой значение на равенство переменной @__error

                        Комментарий


                        • Можно ли каким-то образом отменить эту выдачу, т.е. просто завершить транзакцию (как это работает в стандартных транзакциях) ?

                          1. Можно отправить все в протокол, указав для транзакции доп.рек СС_ВыводНаЭкран = "Нет"
                          2. Можно вообще игнорировать, установив СС_УровеньОтладки = -2
                          3. Можно использовать действие "ЭкранныйВводОш"

                          Какой вариант лучше, решать тебе, но 1-й наиболее часто используется.
                          Я не очень уверен насчет точных имен упомянутых мной доп.реков, но думаю, тебе не составит труда их найти.

                          Комментарий


                          • А как проверить нажатие клавиши ESC при использовании метода "Экранный ввод" ?

                            Комментарий


                            • А как проверить нажатие клавиши ESC при использовании метода "Экранный ввод" ?

                              Действие "экранный ввод" всегда будет генерить ошибку при нажатии ESC, для того чтобы этого избежать надо использовать действие "экранный ввод ош", которое помещает в переменную __return значение @__error.
                              Т.е. в действии выполнить после допустима следующая конструкция
                              Код:
                              if (@__return == @__error) then
                              message("Пользователь нажал ESCAPE");
                              endif

                              Комментарий


                              • На классе ор есть только метод "Экранный ввод". Но там такая проверка не работает

                                Комментарий


                                • На классе ор есть только метод "Экранный ввод". Но там такая проверка не работает

                                  Прошу прощения, действие называется "ЭкрВводОтказ"

                                  Комментарий


                                  • На классе ор нет и такого метода !

                                    Комментарий


                                    • На классе ор нет и такого метода !

                                      Для шаблона значение имеет не метод, а ДЕЙСТВИЕ, которое указывается в свойствах шаблона. Поэтому на классе op искать ничего не надо надо установить правильное действие на шаблоне.

                                      Комментарий


                                      • У меня на шаблоне в поле "действие" в появляющемся списке нет такого действия

                                        Комментарий


                                        • Сейчас проверю...
                                          Класс объекта на шаблоне какой?

                                          Комментарий


                                          • У меня на шаблоне в поле "действие" в появляющемся списке нет такого действия

                                            Действительно, такого действия нет в патчах к системе, в принципе его можно добавить самому в классификатор Действие, указав в качестве значения строку "!form".

                                            Комментарий


                                            • bulklodd
                                              1) Стоит ввести в основную версию для текущей поставки все подобные варианты действий... а то потом будет разброд в вариантих написания
                                              2) Если пользоваться действиями, допускающими возникновение ошибок, то можно (и полезно) проверять - была или ошибка при обработке шаблона. Переменную навскидку не скажу.

                                              Комментарий


                                              • В классификатор Действие добавил ЭкрВводОтказ со значением !form. В шаблоне в поле действие установил ЭкрВводОтказ. Теперь, при выполнении такой транзакции на экране сразу появляется сообщение, что транзакция выполнена, даже не показав экранную форму для ввода данных.

                                                Комментарий


                                                • В классификатор Действие добавил ЭкрВводОтказ со значением !form. В шаблоне в поле действие установил ЭкрВводОтказ. Теперь, при выполнении такой транзакции на экране сразу появляется сообщение, что транзакция выполнена, даже не показав экранную форму для ввода данных
                                                  Я правильно понимаю, что если действие переключить назад на ЭкранныйВвод, то форма появляется?
                                                  Можно запостить листинг транзакции?

                                                  Комментарий


                                                  • Да, если задать Экранный ввод, то форма появляется.
                                                    Транзакция самая простая. Могу сделать экспорт транзакции в файл и выслать Вам. Скажите адрес.

                                                    Комментарий


                                                    • Скажите адрес sklimov @ bis.ru

                                                      Без пробелов естественно

                                                      Комментарий


                                                      • To alexbis

                                                        Я посмотрел, транзакцию. Да, признаю, наличие ошибки в УТ, которая препятствует нормальному функционированию формы, при указании действия "ЭкрВводОтказ". Тем не менее, проблема является решаемой. Причина проблемы – некорректная структура шаблона для экранной формы, для того чтобы получить корректную структуру надо выбрать в меню шаблона пункт "Настройка шаблона", далее в поле "Структ.шаблонов:" указать "Экранная форма", нажать CTRL-ENTER, откроется форма документа, которую надо сохранить нажатием CTRL-ENTER. Собственно все, теперь ваш шаблон содержит все необходимые подшаблоны экранной формы. Транзакцию можно запускать.

                                                        Комментарий


                                                        • Поделитесь тайным знанием. Как в НТ получить список физиков с произвольной ролью.
                                                          Делаю выборку по фамилии (например), далее хочу дать пользователю список-результат. На экране отображаются только ImagineClient'ы
                                                          Меня же, в первую очередь, волнуют не клиенты.
                                                          Чем больше связей, тем меньше степеней свободы.

                                                          Комментарий


                                                          • Чернушка
                                                            Может я и ошибаюсь, но во всех запросах браузер pers.p пытается прицепить счет клиента, и если его нет - строка не будет присутствовать в выборке.

                                                            Комментарий


                                                            • Мне кажется, там несколько по-другому. Теперь pers.p на входе берет фильтр. И по-умолчанию у него:
                                                              FOR each cust-role WHERE cust-role.cust-cat EQ "Ч" AND
                                                              cust-role.Class-Code eq 'ImaginClient' NO-LOCK,
                                                              first person WHERE person.person-id EQ INT(cust-role.cust-id)
                                                              NO-LOCK...

                                                              А в справочниках по-старому: FOR each person WHERE NO-LOCK

                                                              Вот из НТ вызывается pers.p с первым фильтром. И никак я его обмануть не могу
                                                              Чем больше связей, тем меньше степеней свободы.

                                                              Комментарий

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