[ОТВЕТИТЬ]
Опции темы
16.02.2012 19:17  
Amphibios
Всем здравствовать!
Есть необходимость в создании документов в базе скриптом!
Поискал по форуму - есть ответы и рекомендации, работающих вариантов не нашел.
Подходил с разных сторон :) .. всяко натыкался на ошибку : ORA-01403: данных не найдено. Чего не хватает при выполнении супермажных процедур создания документов?

Сразу уточню - создать документы прямым внесением записей в соответствующие таблицы - не проблема. Использование почтовика прошу не предлагать, не про это пост.

Напишите, пожалуйста, кто знает, какой - нить простой .. и главное работающих на версиях 1.028 - 1.029 пример, по любому типу документов.

Если нужно что уточнить .. пишите.
 
16.02.2012 19:25  
OlegON
Нужно уточнить вопрос. Пишешь: "я делал это и это, получил ошибку такую". Тогда можно будет что-то предполагать. А то, то пишешь, что не проблема, то просишь пример...
 
16.02.2012 19:40  
Amphibios
Не проблема без использования супермажных процедур данные вставить куда требуется, но.. как известно, лучше использовать готовые механизмы.

Вот пример по ПН:

CREATE OR REPLACE PROCEDURE SUPERMAG.DDD_CREATEWI
(
or_num in varchar2,
mx in number,
clientind in number,
doc_cod_no out varchar2
) is
p pls_integer := supermag.core.startsmapp;
doc_no varchar2(50);
loc_no number(10);
num_cl number(10);
or_cod_num varchar2(50);

begin
or_cod_num := or_num;
if (or_num is not null)
then
begin
select location, clientindex into loc_no, num_cl
from supermag.smdocuments
where id=or_cod_num and doctype='OR';
exception
when no_data_found then raise;
when others then raise;
end;
end if;

if(or_num is null)
then
loc_no := mx;
num_cl := clientind;
end if;

doc_no := supermag.SMGENERATEDOCNO('WI',loc_no);
supermag.SMDOCCREATEWI(doc_no,sysdate,num_cl,loc_no,0,'','','','','','','','','','');
doc_cod_no:= doc_no;
smdocunlock ('WI',doc_no);
end;

Вот кусок по EO (как вариант исполнения):
CREATE OR REPLACE PROCEDURE SUPERMAG.LODEORO
IS
docno varchar2(20);
Core_Result pls_integer;
--p pls_integer:= Supermag.Core.Startsmapp;
begin
if supermag.core.getproc is null then
Core_Result := supermag.Core.StartSMApp();
end if;
select SUPERMAG.DOCUMENTS.GENERATEDOCNO('EO', 3 , NULL) into docno from dual; --áåç SRV
IF docno IS NULL THEN
RAISE_APPLICATION_ERROR(-20000, 'Íå ìîãó ñîçäàòü äîêóìåíò', TRUE);
END IF;
supermag.smdoccreateeo(aid => docno
,aorderid => 666
,acreatedat => sysdate
,alocation => 3
,aopcode => 50
,auserop => null
,aclientindex => 285
,aourselfclient => 5
,apaydate => sysdate
,aiscash => '0'
,aisroubles => '1'
,acurrencyid => 0
,apaymenttype => 1);
SUPERMAG.DOCUMENTS.UNLOCKDOC('EO', docno);
supermag.documents.clearssdocgen;
commit;
end;

чего не хватает?

Добавлено через 2 минуты 48 секунд
Первую процедуру нашел среди готовых !!! ранее использовавшихся одной известной конторой для создания ПН с ТСД! Исполняю - та же ошибка. Есть аналогичные процедуры по WO и IW.

Добавлено через 4 минуты 51 секунду
пытался через использование:
SUPERMAG.DOCUMENTS.CREATEDOCUMENTPROLOGUE('EO', docno, SYSDATE, null, 3, null, null);
для платежей смотрел вот такой пакет (по SMPAYORDERS Как я понимаю отрабатывает):
supermag.documentsroeo.doccreate(...
Все требуемые параметры заполняются.. предполагаю что дополнительно еще чего - то нужно!
 
16.02.2012 21:20  
vdm
Ну и в какой именно строке скрипта ORA-01403 выдает?
 
16.02.2012 21:33  
Amphibios
Всегда на выполнении супермажной процедуры создания документа.
 
17.02.2012 14:53  
CrazyWolf
Может немножко не в тему, но у меня прекрасно работает вот это (правда я на Шарпе лабаю ;) )
Код:
using (var conOra = new OracleConnection(ConnString)))
                    {
                        conOra.Open();
                        string strOrasql = "declare " +
                                              "core_result pls_integer; " +
                                              "vDocType varchar2(2) := :doctype; " +
                                              "vDocID varchar2(50) := :docid; " +
                                              "nLocationID number(3,0) := :locto; " +
                                              "vBaseDocID varchar2(50) := :basedocid; " +
                                              "MESSAGE_STR varchar2(250); " +
                                          "begin " +
                                              "if supermag.core.getproc is null then " +
                                                "core_result := supermag.Core.StartSMApp(); " +
                                              "end if; " +
                                              "if vDocType = 'IW' then " +
                                                    "supermag.smdoccreateiw(vDocID, trunc(sysdate), 1, nLocationID, vBaseDocID); " +
                                              "else " +
                                                    //"supermag.documents.createdocumentprologue('IW', vDocID, trunc(sysdate), null, null, 1, nLocationID); " +
                                                    "supermag.smdoccreatewo(vDocID, trunc(sysdate), 234, 1, 10, null); " +
                                                    "supermag.smdocaddcommonbase(vDocType, vDocID, 'SO', vBaseDocID); " +
                                              "end if; " +
                                              "Supermag.Documents.LockDoc(vDocType, vDocID); " +
                                              "commit;" +
                                         "EXCEPTION " +
                                         "WHEN OTHERS THEN " +
                                         ":MESSAGE_STR := SQLERRM; " +
                                         "end;";
                        using (var cmd = new OracleCommand(strOrasql, conOra))
                        {
                            cmd.Parameters.Add(new OracleParameter(":doctype", OracleType.VarChar));
                            cmd.Parameters[":doctype"].Value = strNewDocType;
                            cmd.Parameters.Add(new OracleParameter(":docid", OracleType.VarChar));
                            cmd.Parameters[":docid"].Value = strNewNumberDoc;
                            cmd.Parameters.Add(new OracleParameter(":locto", OracleType.Int16));
                            cmd.Parameters[":locto"].Value = intLocTo;
                            cmd.Parameters.Add(new OracleParameter(":basedocid", OracleType.VarChar));
                            cmd.Parameters[":basedocid"].Value = strNumberDoc;
                            OracleParameter parNRec = cmd.Parameters.Add(":MESSAGE_STR", OracleType.VarChar, 250);
                            parNRec.Direction = ParameterDirection.Output;
                            try
                            {
                                cmd.ExecuteNonQuery();
                                string strExMessage = parNRec.Value.ToString();
                                if (strExMessage.Length > 0)
                                    Console.WriteLine(String.Format("Ошибка при создании документа {0} привело к ошибке Oracle:{1}\r\n", strNewNumberDoc, strExMessage));
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(String.Format("Ошибка при создании документа {0} привело к ошибке: {1}\r\n", strNewNumberDoc, ex.Message));
                            }
                        }
}
 
17.02.2012 15:24  
Amphibios
Спасибо. Обязательно протестирую.. пока сделал прямой вставкой в таблицы, поскольку время не ждет.
Уточните, пожалуйста свою версию СМ2000?
 
17.02.2012 15:37  
CrazyWolf
1.28 sp 10, до обновления работало на 1.28 sp 1.
 
"Спасибо" CrazyWolf от:
21.02.2012 07:16  
cb
Уже было на форуме. Нужно вставить перед вызовом см-функций.

if supermag.core.getproc is null then
core_result := supermag.Core.StartSMApp();
end if;
 
"Спасибо" cb от:
 
Опции темы



Часовой пояс GMT +3, время: 01:20.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.