Имя: Пароль:
1C
1С v8
Получить текст запроса что 1С передает ОРАКЛу
,
0 Апшерон
 
03.07.19
10:55
Просьба сильно не бить ссаными трапками, я аникейщики на которого начальство повесило 1Ску поэтому зараннее извините если что пишу криво и не теми терминами..

Есть Бух 3.0 в ней сделана интеграция с ОРАКЛОМ, а именно 1Ска выгружает туда информацию по счетам... код такой


    // передача в Оракл
    DataBaseConnection = ПодключениеКОракл();

    Command = Новый COMObject("ADODB.Command");
    
    Command.CommandText = "MMAST.F1CPK.PAYMENTFM";
    Command.ActiveConnection = DataBaseConnection;
    Command.CommandType = 4; // adCmdStoredProc
    
    //Param1 = Command.CreateParameter("", 131, 1);     // NUMBER, Идентификатор счета заказчика
    Param1 = Command.CreateParameter("", 3, 1);     // NUMBER, Идентификатор счета заказчика
    Param2 = Command.CreateParameter("", 200, 1, 36); // VARCHAR2, Идентификатор документа оплаты из 1С
    Param3 = Command.CreateParameter("", 200, 1, 20); // VARCHAR2, Номер документа оплаты из 1С
    Param4 = Command.CreateParameter("", 200, 1, 25); // VARCHAR2, Источник поступления банк/касса
    Param5 = Command.CreateParameter("", 7, 1, 4);    // DATE, Дата оплаты
    Param6 = Command.CreateParameter("", 200, 1, 20); // VARCHAR2, Валюта договора контрагента
    Param7 = Command.CreateParameter("", 5, 1);       // NUMBER, Сумма валютная
    Param8 = Command.CreateParameter("", 5, 1);       // NUMBER, Сумма рублёвая
    Param9 = Command.CreateParameter("", 3, 1);       // INTEGER DEFAULT 0, Признак удаления оплат, перед добавлением [0 - нет, 1 - да]
    Param10 = Command.CreateParameter("", 200, 1, 36); // VARCHAR2, Идентификатор документа Счет
    
    Command.Parameters.Append(Param1);
    Command.Parameters.Append(Param2);
    Command.Parameters.Append(Param3);
    Command.Parameters.Append(Param4);
    Command.Parameters.Append(Param5);
    Command.Parameters.Append(Param6);
    Command.Parameters.Append(Param7);
    Command.Parameters.Append(Param8);
    Command.Parameters.Append(Param9);
    Command.Parameters.Append(Param10);
    
    Param1.Value = ИдСчета;
    Param2.Value = Строка(ДокументОплаты.УникальныйИдентификатор());
    Param3.Value = ?(ЭтоБанк, ДокументОплаты.НомерВходящегоДокумента, ДокументОплаты.Номер);
    Param4.Value = ИсточникПоступления;
    Param5.Value = ДатаОплаты;
        Param6.Value = КодВалюты;
    Param7.Value = СуммаВВалюте;
    Param8.Value = Сумма;
    Param9.Value = Очищать;
    Param10.Value = Строка(ДокументСчет.УникальныйИдентификатор());
    
    Command.Execute();

В процессе выполнения генерится ошибка

    [Oracle][ODBC][Ora]ORA-06550: Строка 1, столбец 7:
    PLS-00306: ошибочно число или типы аргументов при обращении к 'PAYMENTFM'
    ORA-06550: Строка 1, столбец 7:
    PL/SQL: Statement ignored

Программисты что занимаются ОРАКЛОМ сказали что 1Ска передает некорректные параметры, но какой именно некорректный они не знают и что бы им это узнать я должен предоставить им запрос что 1Ска отправляет в ОРАКЛ. Я им показал код 1С, они говорят не то... далее цитата "Надо перехватить событие когда объект ADODB.Command отправляет данные в скуль и оттуда вытащить текст запроса что он сформировал"
Ну собственно вопрос, в какую сторону рыть что бы это получить...
1 novichok79
 
03.07.19
11:27
с ораклом не знаком, наверное ТЖ надо смотреть.
2 ДенисЧ
 
03.07.19
11:31
Если они такие умные, то почему не подскажут, как перехватить обращение к серверу сторонней прграммы?
На МССКЛ я знаю. Наверняка и у оракла есть подобная приблуда...
3 silent person
 
03.07.19
11:31
с ораклом тоже не знаком, но вот что пишут.

https://docs.microsoft.com/ru-ru/dotnet/api/system.data.oracleclient.oraclecommand.commandtext?view=netframework-4.8

OracleCommand.CommandText Property
Определение
Пространство имен:
System.Data.OracleClient
Assembly:
System.Data.OracleClient.dll
Возвращает или задает оператор SQL или хранимую процедуру, которую необходимо выполнить в базе данных.

судя по тому, что в строке     Command.CommandText = "MMAST.F1CPK.PAYMENTFM"; явно не текст запроса, то это хранимая процедура. а ее вроде в sql базе посмотреть можно.
4 ДенисЧ
 
03.07.19
11:32
5 ДенисЧ
 
03.07.19
11:32
(3) от смотрения на процедуру? Нужно смотреть на то, как её зовут...
6 catena
 
03.07.19
11:39
(3)Там не важно, что написано, будет все равно хранимая, т.к. Command.CommandType = 4;)))
7 Exxter
 
03.07.19
11:42
(0) Может тут?
Param5.Value = ДатаОплаты

Формат даты какой?
8 rphosts
 
03.07.19
11:50
(0) >Программисты что занимаются ОРАКЛОМ
Может это аникейщики которым впихнули оракл?
Не запрос передается, а вызывается хранимая процедура MMAST.F1CPK.PAYMENTFM , пусть они по очереди (или всей толпой сразу) ее текст смотрят.
9 Апшерон
 
03.07.19
12:44
(4) Спасибо, буду смотреть
10 Garykom
 
гуру
03.07.19
12:51
11 Garykom
 
гуру
03.07.19
12:52
Описание хранимки у ораклистов выбей, только не называй их так лучше ораклоидами ))
12 Garykom
 
гуру
03.07.19
12:54
13 Cyberhawk
 
03.07.19
12:54
Так хранимка же вызывается, какой еще текст "вытащить текст запроса что он сформировал"
14 Cyberhawk
 
03.07.19
12:54
А, выше указали уже, ладно
15 singlych
 
03.07.19
12:57
да по-любому дата передается 03.07.2019 а надо 2019.07.03
16 Garykom
 
гуру
03.07.19
13:02
(15) Хрен там скорее уже

"Сумма валютная" плохо соотносится с "Указывает значение с плавающей запятой двойной точности (DBTYPE_R8)."
17 singlych
 
03.07.19
13:07
(16) ну кстати там даже написано "столбец 7"
18 kolts23381
 
03.07.19
15:40
Попробуйте программу flextracer