Возможно глупый вопрос, но BPMonline только изучаю.... Никак не могу понять, как правильно перенести данные из детали одного раздела в деталь другого. А именно - есть Лид, я хочу при квалификации и создании Продажи перенести данные некоторых полей карточки Лида в поля карточки Продажи, но никак не разберусь как это правильно сделать. Гуру, подскажите....
Баглан, Вам будет удобно организовать удаленное подключение для скорейшего разрешения проблемы?
С уважением,
Каспаревич Андрей
Эксперт 3-й линии поддержки
Удаленный доступ есть по vpn, вы можете обратиться Генову Евгений, у него имееться пароли для vpn, как получите напишите мне я доведу до этого шага где открываеться страница.
Баглан, в связи с высокой трудоемкостью процесса воспроизведения и поисков причины возникновения ошибки, не хватает времени и ресурсов для решения проблемы.
Возможно, на следующей неделе получится получить результаты.
Владимир, если Вы имеете ввиду настроить доступ пользователей к разделу, то в базовой версии это не предусмотрено.
Но можно добавить или удалить "Единое окно" из рабочего места, это можно настроить в разделе "Рабочие места".
Владимир, скрыть раздел можно удалив его регистрацию из таблицы [SysModuleInSysModuleFolder] скриптом
delete from SysModuleInSysModuleFolder where sysmoduleId =(select Id from SysModule where Caption ='Журнал процессов')
Другим решением было бы удалить его из рабочего места, но так как больше не останется экземпляров, раздел удалится полностью, что нежелательно. Поэтому рекомендую использовать скрипт.
Добрый день. Возникла проблема по перехвату закрытия пользователем окна "крестиком" в бизнес процессе.
Вопрос, как реализовать этот перехват и пустить процесс по другой ветке?
Илья, при закрытии окна "крестиком" бизнес-процесс прерывается. Продолжить выполнение бизнес-процесса возможно из раздела "Журнал процессов".
Возможно, для решения Вашей задачи подойдет элемент "Вопрос пользователю"?
Например, задается вопрос пользователю: "Открыть карточку редактирования контакта?". Если пользователь нажимает "Да" - процесс идет по одной ветке. Если пользователь нажимает "Нет" - по другой.
Вот как раз это я и хочу сделать.
Вопрос: в какую сторону смотреть на получение события о закрытии окна?
Общая идея, предотвратить остановку процесса в случае закрытия пользователем окна по крестику. (задача, вопрос пользователю и т.д.)
Как уже ранее я писал по другой проблеме: мне нужно добавить кнопку "Установить скидку на все продукты в счете" в воркспейс "Продукт" (wnd_OfferingDetailTreeArea) детали раздела "Счета".
Естественно, необходимо каким-то образом определить размер устанавливаемой скидки.
Я попробовал добавить floatDataControl на форму (см. приложенный скриншот fltDataControl.png).
Однако, при работе, значение в этом поле невозможно изменить, поле подсвечено серым и недоступно для редактирования.
Как это исправить?
Если такой способ выбора размера скидки невозможно реализовать, то как его можно реализовать по-другому?
"Алейник Алексей Вадимович" написал:Я попробовал добавить floatDataControl на форму
Алексей, попробуйте добавить не floatDataControl, а NumericEdit + допишите нужное количество знаков после запятой в его свойствах, например, Precision=2 (по умолчанию там 0, кажется).
дело в том, что ДатаКонтролы "привязаны" к датасету (следовательно, данные берутся из какой-то таблицы либо же МемориДатасета), в Вашем же случае привязки нету, поэтому нужно использовать "обычный" контрол.
чтобы "взять" из него значение, пропишите NumericEdit.Value
Спасибо за помощь, Ольга. Подскажите, в таком случае, как мне обновить значения поля скидка и связанных с ним других полей записей продуктов в счете? Массив записей отфильтровал по 'InvoiceID':
function btnSetDiscountOnClick(Control){
var InvoiceDataset = Services.GetNewItemByUSI('ds_OfferingInInvoice');
InvoiceDataset.Open();
ApplyDatasetFilter(InvoiceDataset, 'InvoiceID', InvoiceDataset.Values('InvoiceID'), true);if(InvoiceDataset.Values('InvoiceID')== null){
MessageBox('Нет привязанного счета!');return;}//... здесь нужен код обновляющий записи (по одной и в цикле, как я понимаю)...}
При обращении с помощью InvoiceDataset.Values('DiscountPercent') мы обращаемся сразу ко всем записям?
И надо-ли создавать новый UpdateQuery для обновления записей?
Хотел посмотреть как обновляются записи при изменении, например поля "% Скидки" карточки редактирования "Продукт" детали продукты раздела счета (wnd_OfferingDetailEdit). Нашёл обработчик dlDataOnDatasetDataChange, но в нём вызывается функция DatasetDataChange(), которая почему-то обрабатывает изменения только полей "OfferingID", "CustomOffering", "CurrencyID" и всё. Где реализовано обновление полей связанных со скидкой? я бы хотел воспользоваться кодами этих функций.
в событиях датасета (не окна) ds_OfferingInInvoice тоже есть событие ДатаЧендж, в котором прописана функция OfferingDetailDataChange(DataField, ScriptObject).
вот в ней и все "кейсы"-поля.
насчет "как обновить" -- думаю, если не отключать события датасета, пройтись в цикле по всем записям Продуктов в счете и сделать Едит() -- прописать скидку -- Пост(), то должно быть все ок.
события Вы не будете отключать -- значит, "сработает" базовый пересчет других полей.
или Вам нужно свою логику дописать? тогда "копайте" дальше в функции OfferingDetailDataChange...
П.С. пересмотрела Вашу функцию...
можно узнать, почему Вы
А. берете новый екземпляр датасета ds_OfferingInInvoice
Б. накладываете фильтр по значению поля ИнвойсИД в нем...
ладно бы, если ИнвойсИД Вы откуда-то брали (из аттрибутов окна, например).
тут же оно непонятно какое значение подставит (теоретически -- понятно. оно откроет датасет и возьмет ИД счета из первой записи в нём. а вот какая это будет запись, зависит от сортировки по умолчанию и общей структуры запроса...)
если у Вас wnd_OfferingsDetailTreeArea (т.е. деталь Продукты в счете), то попробуйте так:
function btnSetDiscountOnClick(Control){
var InvoiceDataset = dlData.Dataset;;
InvoiceDataset.GotoFirst();//фильтр не надо, т.к. деталь уже отфильтрована по счетуwhile(!InvoiceDataset.IsEOF){
InvoiceDataset.Edit();
InvoiceDataset.Values('DiscountPercent')= numEditDiscount.Value;
InvoiceDataset.Post();
InvoiceDataset.GotoNext();}
RefreshDataset(InvoiceDataset);}
Попробовал как Вы предложили. При нажатии на кнопку меняется значения во всех связанных со скидкой полях кроме поля "% Скидки" (как раз то, которое которое явно инициализируется в только что написанной функции) и только для первой записи, затем выскакивает ошибка(см. скриншоты) и до второй итерации дело не доходит.
"Алейник Алексей Вадимович" написал:затем выскакивает ошибка(см. скриншоты) и до второй итерации дело не доходит.
судя по всему, ошибка выскакивает "дальше" (на ДатаЧендже), ее сообщение имеет ввиду, что не подключен какой-то скрипт или где-то опечатка в вызове функции. поскольку весь функционал "завернут" в конструкцию "try-finally", то оно и "вываливается" на finally.
Вы ничего в этом скрипте не меняли?
можно попробовать закомментировать строчки "try-finally"-- чтобы оно точно указало, чего ему "не хватает"..
Ольга, закомментировал try/fynally в датаченжде: при нажатии на кнопку, везде добавляет скидку, но подсвеченный (выделенный) продукт копирует дважды, ошибок не выдаёт.
Ошибка была устранена в ходе сеанса удаленного доступа.
Причина ошибки - обращение к отключенным полям датасета, которое происходило в момент пересчета суммы налога.
Понадобилось добавить возможность установить абсолютное значение скидки, перенести установку значения скидки на отдельную открывающуюся форму с разными вариантами установления скидки. Создал форму, вызываю её с помощью "ShowEditWindowEx()". Как получить значения полей из этой формы? Можно-ли их вытащить из возвращаемого функцией ShowEditWindowEx() значения?
здравствуйте, Алексей!
можно использовать или Нотифай, или через модальное окно, которое может возвращать результат.
второй вариант -- посмотрите здесь
2) в самом окне, при нажатии "ок" или где у Вас там окно закрывается (т.е. перед его закрытием) пишите функцию СендНотифай(Селф, "месседж", данные)
SendNotify(Self, 'TodoSomething', Result);
Result -- сюда можете "положить" данные, которые нужно передать (как массив, строку или обьект, неважно. главное, при обработке к нему "правильно" обратится")
3) в первом окне, которое "получает" это сообщение, прописываете обработчик онНотифай (так, как Вы написали), там конструкция вида "если сообщение == "месседж", то выполняем чтото с данными".
если это какой-то воркспейс, т.е. есть базовые функции онНотифай, то после своей обработки пропишите базовую.
Реализовал, как Вы по Вашему алгоритму, однако столкнулся с некоторыми проблемами.
1) Не выполняется функция SendNotify() добавленная в код обработчика btnOKOnClick(control)
см. скриншот notify_error.png
2) Не вызывается обработчик dlDataOnDatasetDataChange(DataField). Он должен блокировать и разблокировать соответствующие поля ввода значения скидки, в зависимости от типа скидки (абсолютное значение или значение в процентах)
скриншот OnDatasetDataChange.png
Алексей, такое ощущение, что проблема не в Self, а в обращении к функции SendNotify().
Проверьте, пожалуйста, происходит ли переход к описанию функции при клике по ее вызову с зажатой клавишей Ctrl.
Если нет - нужно подключить скрипт, в котором реализована функция (скрипт scr_WindowUtils).
Каким образом на стороне .Net можно создать объект таким образом, чтобы после получения его из COM компонента можно было бы обращаться к свойствам возвращенного объекта на JavaScript.
Спасибо, Павел! Но это не совсем то, что мне надо. Я уже имел похожую проблему с типом данных Scripting.Dictionary при разработке под C#, но она решилась подключением нужного пространства имен.
Думаю, что в .Net имеются типы данных аналогичные Object, которые позволят мне не создавать новый компонент под каждый мало-мальски сложный объект.
Массив создаю под .NET сл. образом (более сложные коллекции пробовал, но это полный фейл):
var Array =new object[size];
затем определяю набор значений для моего Array и записываю в свойство, которое будет доступно из COM объекта.
В JavaScript отладчик для Array.lenght определяет и тип и значение = undefined. А для самого массива тип определен как: "Массив Variant". В качестве значения показывает - {...} указывая на то, что это объект.
Пробовал создавать индексатор сразу же после того как ничего не получилось с прямой передачей массива. К сожалению не помогло. Сейчас чтобы упростить пример попробовал вставить код по ссылке, но результат тот же.
Индексатор на стороне JavaScript не откликается на обращение типа
...
var Value = Obj[i];
...
Поскольку кому-то ваш пример помог делаю вывод, что либо проблем в версии (у меня - 3.2.0.86), либо в прямизне рук. Кстати, если важно, то ОС - Windows 7.
Стоит задача интеграции BPMOnline 7 со сторонним приложением. Есть стандартный бизнес процесс. Необходимо, чтобы при добавлении записи из внешнего приложения запускался бизнес процесс, наступало следующее действие (формировалась задача менеджеру и т.д.). Каким образом это лучше реализовать?
1. Добавление записи через OData. Но в таком случае сработает ли начальное событие "Сигнал"?
При работе с объектами через сервис OData все внутренние события и обработчики в процессах системы отрабатывают так же, если бы вы добавляли запись через интерфейс или с помощью импорта из excel.
Вы можете создать процесс с начальным событием "Сигнал", отрабатывающим на создание нового объекта в системе и добавить условия которым должен соответствовать вновь созданный объект.
Но в таком случае процесс будет запускаться автоматически для всех созданных объектов, не зависимо от того объект создан пользователем через интерфейс или создан запросом к OData с помощью стороннего приложения.
Второй вариант, с использованием ProcessEngineService, больше подходит если процесс должен отрабатывать только для объектов созданных с помощью стороннего приложения. В таком случае вы создаете бизнес процесс с простым стартовым элементом. В процесс добавляете все параметры, которые должны приходить из стороннего приложения и сами управляете созданием объекта и дальнейшими действиями
Также обратите внимание на зарезервированный параметр "ResultParameterName". Он используется для указания имени параметра, значение которого необходимо вернуть по завершении процесса.
Пр.
/Execute?ParamA=Den&ResultParameterName=Param2
После завершения процесса в теле ответа будет лежать сериализированное значение параметра Param2
Ознакомился с постом. Насколько я представляю (пока теоретически) создается на сервере 1С COM-объект со ссылкой на COM службу 1С. Далее через .NET Remoting BPMonline обращается к нему.
Для реализации этого в бизнес-процессе необходимо добавить компонент C# скрипта, где реализовать логику обращения и работы с методами?
Нет, почему... Можно, конечно, и под 5.4 использовать. Но, разумеется, результатов гарантировать Вам не могу.
Интеграция по этой технологии разрабатывалась и появится именно в 7.х в скором времени.
Честно говоря, думал это стандартный отчет. К сожалению, нет.
Он используется просто для проверки наличия записей в плане обмена...
Просто откройте консоль запросов и выполните запрос:
ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Контрагенты.Изменения
где справочник.контрагенты - объект 1с, подключенный к плану обмена.
Не совсем понятно что в bpm'online (Версия 7.6.0.840) нужно добавить чтоб синхронизировать данные (например справочник контрагентов). Есть какое то видео или наглядный пример? Буду очень признателен.
Александр,
спасибо за очередную попытку впарить 1C Connector. Но скажите, пжл, как этот чудо продукт поможет мне использовать web сервисы сторонних разработчиков? Например, банальную загрузку курса валют. Или web сервис из этой статьи... Меня интересует информация как программиста, а не как пользователя.
Роман, базовая версия продукта 1C Connector абсолютно бесплатна и в скором времени будет включена во все базовые сборки bpm'online.
Изначально вопрос стоял, чтобы по событию в bpm'online вызывался web-сервис 1С, именно по такому принципу работает 1C Connector.
Если Вы хотите из кода 1С получить данные "web сервисов сторонних разработчиков", то не совсем понятно при чем тут bpm'online:smile:. Если все таки Вы хотите получить данные в код 1С из сервисов bpm'online, достаточно обратиться к сервисам bpm'online по протоколу OData, как указано в 1м комментарии к этому посту.
В приведенной Вами статье нет ни слова про синхронизацию, только про одностороннее получение данных в 1С из внешних сервисов. Кстати там в дисклеймере написано, что указанный код НЕ будет работать в последних версиях 1С.
Кстати, чтобы отправить какую то информацию из 1С в bpm'online, мы тоже не пишем код на 1С. Мы используем план обмена и обращения ИЗ bpm'online В 1C. Это отдельная тема, обещаю пост на эту тему до конца месяца:smile:
Александр, мне нужно в bpm'online использовать web сервисы. Все равно чьи, будто 1С или другой поставщик. По скольку я сам программист 1С, мне проще создать web сервис в ней. Не понятно как в bpm'online использовать эти сервисы. Например, в 1С есть WS-ссылки в которые позволяют подтянуть web-сервисы и работать с ними... Принцип работы через план обмена мне понятен...
Мне к концу месяца нужно увязать 1С и SharePoint с bpm'online, иначе смысла дальше не будет мне изучать... :-(
P.S. Где я могу получить 1C Connector?
Заранее благодарен.
Вопрос может и простой, но ответа сам найти не могу, BPM 7.6, 1C 8.2, интеграция с СамараСофт, веб сервис IIS создан без файла 1cws, а для ссылки, мне сказали, он обязателен, на форумах пишут что в 8.2 его нет, как поступить?
Владимир, добрый день!
Все очень просто - следуете в точности шагам инструкции, настраиваете работоспособность коннектора в соответствии с пунктами руководства, а уже потом можете пытаться варьировать параметрами настройки на основе рекомендаций сторонних форумов и опыта в 1С.
На сколько я понимаю, у вас сейчас проблемы с пунктом 1.3.3 руководства (НАСТРОЙКА СВОЙСТВ WEB-СЕРВИСА)?
Я прошу вас проверить, что все предыдущие пункты вы выполнили без отклонений в точном соответствии с руководством и прислать свойства веб-сервиса. Согласно инструкции, они должны выглядеть именно так:
Владимир, просьба - устраните пожалуйста отклонения 1-4 от инструкции и напишите мне, если проблема сохранилась. Если сохранилась - подключимся и сразу решим!
Интересует более детальное описание, как правильно прописывать путь к веб сервису.
Вот у меня версия BPM onsite sales 7.6 установлена на компьютере, 1С Предприятие 8.2, имя публикации веб-сервиса ws1.1cws. Это все на локальном компьютере. Вот адрес системы: http://localhost:81/0/Nui/ViewModule.aspx#IntroPage/OmnichannelIntro Тогда как мне нужно прописать веб-сервис в 1С коннекторе?
Добрый день, коллеги! Проблема Владимира была выявлена. Она заключалась в том, что в логине прописали некорректные данные. Вместо английской буквы "Си" была использована, видимо, русская "С". Поэтому возникали ошибки. Сейчас веб-сервис доступен.
Я правильно понял, что Вы прошли все шаги инструкции по установки до публикации и настройки сервисов включительно и сервисы у вас опубликованы и доступны из браузера, но недоступны из 1C Connector?
Да, я все проделал по инструкции. Я не знаю как проверить доступны ли они из браузера, потому как не понимаю, какой сервер прописать. 1С у меня на компе. Публикацию и настройку сервисов проделал.
Боюсь, что нахожусь уже в черном списке поддержки Самарасофт, поэтому спрошу здесь на виду общественности :smile:
7.6.0 sales + 1с 8.3
В рамках самообразования проделал все шаги мануала по настройке коробочной интеграции.
Сервис созданный вижу в браузере, ссылка получилась вида "http://192.168.40.174/InfoBase/ws/PT1CCONNECTOR.1cws" и работает в браузере (то есть вебсервис 1c виден и откликается).
Но вот при запуске интеграции из bpm штатной кнопкой в логе вот такой текст:
13-10-201501:08:59::message: Start Sync
13-10-201501:08:59::message: Start Sync 80bb62e8-dbbe-4df3-9f68-6f2360b25ed1
13-10-201501:08:59::message: to 1C. 1C Table:Контрагенты
13-10-201501:08:59::message: to 1C. 1C Table:Контрагенты bpm table: Account
13-10-201501:08:59::message: ESQ. Get47 records
13-10-201501:09:00::message: Start Sync 234f8e3a-d3f0-43a4-904d-02ae9b5e4a9b
13-10-201501:09:00::message: Integration in bpm
13-10-201501:09:00::message: start in bpm
13-10-201501:09:00::message: Контрагенты
13-10-201501:09:00::message: syncPairs.Count:213-10-201501:09:00::message: Запрос HTTP не разрешен для схемы аутентификации клиента "Basic". От сервера получен заголовок аутентификации "Basic realm="1C:Enterprise 8.3"".
13-10-201501:09:00: Error: error in on 1C -> bpm'online with таблица bpm'online Account, таблица 1С Контрагенты, Запрос HTTP не разрешен для схемы аутентификации клиента "Basic". От сервера получен заголовок аутентификации "Basic realm="1C:Enterprise 8.3"".
13-10-201501:09:00::message: Integration in bpm end
Очень хочется получить подсказку, куда копать и где искать причины того, что созданный вебсервис 1с не может достучаться до развернутого локально под iis сайта (правильно понял я источник проблемы?) - что надо хитрого сделать с настройками iis или windows server 2008 r2 (где развернут сайт), чтобы наконец соединение прошло?
1c вместе с вебсервисом поднято на другой машине под Windows 7, локальная сеть одна, домена нет.
Написал ответ в тот же день, как Вы написали данный запрос.
Поддержка Программных технологий никого не ставит в черный список:)
Здесь может быть несколько вариантов:
1. Могут быть неверными логин и пароль
2. Может быть не включена анонимная аутентификация на iis
3. Возможно какой-то пункт из инструкции был сделан неправильно(к сожалению, такое чаще всего происходит)
Для более оперативного общение можно писать мне напрямую в скайп: zaichikovilya_samarasoft
С уважением,
Зайчиков Илья
Менеджер продуктов
ООО «Программные Технологии»
Центр разработки и внедрения Террасофт Поволжье
Тел. +7 (846) 266-55-69
samarasoft.com
"Зайчиков Илья Алексеевич" написал:1. Могут быть неверными логин и пароль
2. Может быть не включена анонимная аутентификация на iis
3. Возможно какой-то пункт из инструкции был сделан неправильно(к сожалению, такое чаще всего происходит)
Добрый день, Илья!
1. Логин/пароль в bpmonline задаются в параметрах синхронизации - там логин/пароль 1с верный, а вот для bpm только логин - проверил, все заполнено корректно.
2. Включена на стороне iis с вебсервисом и на стороне bmponline. Удостоверение анонимного пользователя=указанный пользователь IUSR
3. Вот это самое сложное, хотя проверял шаги несколько раз. Кстати кнопка Проверить соединение в настройках интеграции также выдает ошибку.
Пытался я разобраться с сертификатами для серверов, но безрезультатно. Мне все же кажется тут какой-то галочки или параметра не хватает в разрешениях на iis (недаром про протокол http пишет), понять бы хоть на каком)
В таком случае нам нужно подключиться и посмотреть, что именно не так было настроено.
В котором часу Вы завтра можете предоставить нам доступ?
С уважением,
Зайчиков Илья
Менеджер продуктов
ООО «Программные Технологии»
Центр разработки и внедрения Террасофт Поволжье
Тел. +7 (846) 266-55-69
Сот. +7 (937) 076-12-84
samarasoft.com
Добрый день сообщество. Установил Oracle 9i на локальную машину. Поставил клиентские драйвера. Создал базу данных с именем ts и востановил из дампа базу данных террасофт. Подключился с помощью менеджера к ней, все таблицы вроде как создались. Пытаюсь настроить подключение в террасофт 3.3.1 и возникает ошибка:
ORA-12514 TNS процесс прослушивания не нашел SERVICE_NAME для данного дескриптора соединения.
С ораклом знаком первую неделю так что куда смотреть не знаю. Помогите кто сталкивался.
Здравствуйте.
Не совсем понятно отношение версии SQL-сервера к данному вопросу, но если всё же Вы настраиваете подключение к Oracle-схеме, то такая проблема может возникать если в настройках строки соединения указать название схемы в нижнем регистре. Для возможности подключения обязательным условием является указание схемы в верхнем регистре.
Вы меня не совсем правильно поняли. Настройку подключения к Oracle удалось произвести.
Но теперь при логине сразу возникает ошибка
ORA-00902 неверный тип данных.
Куда смотреть не понятно, в какой таблице неверный тип данных или где вообше
ORA-00902 неверный тип данных.
Понял что надо было имя схемы установить полностью в верхний регистр.
След ошибка вылезла:
ORA-04092 COMMIT в триггере невозможно
----------------------------------
Timestamp:14:04:01.299
Logon attempt failed. username:'SUPERVISOR'; database:'tswork'----------------------------------
Timestamp:14:04:01.299
Runtime error occurred:1005(ORA-01005: задан пустой пароль; вход в систему запрещается)----------------------------------
Timestamp:14:04:05.940
Successful logon attempt (session tag:0xE417140)
username:'SUPERVISOR'; database:'tswork'----------------------------------
Timestamp:14:04:05.940
declare cursor NlsParamsCursor is SELECT * FROM nls_session_parameters;begin SELECT Nvl(Lengthb(Chr(65536)),
Nvl(Lengthb(Chr(256)), 1)) INTO :CharLength FROM dual;for NlsRecord in NlsParamsCursor loop if NlsRecord.parameter='NLS_DATE_LANGUAGE' then :NlsDateLanguage := NlsRecord.value; elsif NlsRecord.parameter='NLS_DATE_FORMAT' then
:NlsDateFormat := NlsRecord.value; elsif NlsRecord.parameter='NLS_NUMERIC_CHARACTERS' then :NlsNumericCharacters :=
NlsRecord.value; elsif NlsRecord.parameter='NLS_TIMESTAMP_FORMAT' then :NlsTimeStampFormat := NlsRecord.value;
elsif NlsRecord.parameter='NLS_TIMESTAMP_TZ_FORMAT' then :NlsTimeStampTZFormat := NlsRecord.value; end if; end loop;
SELECT NLS_CHARSET_ID(:Charset) INTO :CharsetId FROM dual;end;
CharLength =1
NlsDateLanguage ='RUSSIAN'
NlsDateFormat ='DD.MM.RR'
NlsNumericCharacters =', '
NlsTimeStampFormat ='DD.MM.RR HH24:MI:SSXFF'
NlsTimeStampTZFormat ='DD.MM.RR HH24:MI:SSXFF TZR'
Charset ='UTF8'
CharsetId =871----------------------------------
Timestamp:14:04:05.955
ALTER SESSION SET CURRENT_SCHEMA = SUPERVISOR
----------------------------------
Timestamp:14:04:05.955
select * from table(CAST("SUPERVISOR"."fn_GetLoginInfo"('SUPERVISOR') AS "SUPERVISOR"."tbl_GetLoginInfo"))----------------------------------
Timestamp:14:04:05.971
SELECT
Column_Name Col, Con.Constraint_Name Con
FROM
All_Constraints Con, All_Cons_Columns Col
WHERE
Con.Owner=:Owner and
Col.Owner=:Owner and
Con.Table_Name=:Name and
Col.Table_Name=:Name and
Con.Constraint_Type in ('P', 'U')and
Con.Constraint_Name= Col.Constraint_Name
ORDER BY
Con.Constraint_Name,Col.Position
Name ='TABLE'
Owner ='SUPERVISOR'----------------------------------
Timestamp:14:04:05.986
Logoff (session tag:0xE417140).
----------------------------------
Timestamp:14:04:05.986
Runtime error occurred:4092(ORA-04092: COMMIT в триггере невозможно)
Однозначно определить причину проблемы очень непросто. Возможно при установке схемы в ней есть "невалидные" объекты (функции, процедуры, триггера). Если это так, нужно попробовать их откмпилировать. Это можно сделать командой из контекстного меню в каком-нибудь Oracle-менеджере, например TOAD. Важно то, как устанавливалась схема. Обязательно это нужно выполнять при помощи скриптов, которые находятся в дистрибутиве в папке "DB" (запускается на выполнение командный файл RestoreDatabase.cmd). Какая схема устанавливалась? Чистая из дистрибутива или перенос уже работавшей. Если схема переносится, то это нужно выполнять только при помощи инструментария: http://community.terrasoft.ua/blogs/4524. Как вариант попробувать выполнить через какой-то инструмент работы с Oracle запрос из лога выше: select * from table(CAST("SUPERVISOR"."fn_GetLoginInfo" ('SUPERVISOR') AS "SUPERVISOR"."tbl_GetLoginInfo"))
Александр в скриптах по созданию фигурирует схема TSAUTOBUILD которой как я понял у меня нету. Откуда она береться? я создаю базу данных первоначально с помощью dbca на сервере. После чего запускаю bat файл из папки DB с инсталяцией террасофта.
При выполнении скрипта востановления из дампа выходят такие ошибки
IMP-00017: при выполнении следующей команды ORACLE возвращает ошибку 23308:
"BEGIN DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY('"TSAUTOBUILD"', '"tr_tbl_Oppo"
"rtunityHistory_BI"', FALSE); END;"
IMP-00003: ORACLE выдал ошибку 23308
ORA-23308: объект TSAUTOBUILD.tr_tbl_OpportunityHistory_BI либо неправильный, либо не существует
ORA-06512: на "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: на "SYS.DBMS_DDL_INTERNAL", line 41
ORA-06512: на "SYS.DBMS_DDL", line 255
ORA-06512: на line 1
Схема TSAUTOBUILD - это та, с которой делается дамп, поставляемый с дистрибутивом. Её у Вас нет и не должно быть. "" Пользовательскую схему не нужно создавать в ручном режиме. Как я сообщал выше для этого предназначен инструментарий из папки "DB". Там в скриптах предусмотрено что дамп был создан со схемы TSAUTOBUILD. Обращаю Ваше внимание на то, что термин "база данных" в Oracle радикальным образом отличается от такого же по звучанию и написанию в MS SQL Server. Если проводить аналогию с SQL, то база в Oracle - это экземпляр в MS SQL Server, а база в SQL - это схема в Oracle. Таким образом создавая базу на Oracle через DBCA - это всё равно, что установить ещё один SQL-экземпляр. Как я уже сообщал, установите схему через запуск RestoreDatabase.cmd. Приу становке в процессе будут сообщения об ошибках при создании триггеров - не обращайте внимания (только на эти сообщения, на остальные - обращайте) они создаются.
Хочу узнать, есть-ли какой-нибудь упрощённый стандартный вариант вызова диалогового окна с параметром? При вызове которого система, например, ожидала от пользователя ввода численного значения.