Пример процедуры создания АП. Не все конечно, но для начала самое то :).
CREATE OR REPLACE PROCEDURE DO_GENERATE_ACT_ACTION(STORE_LOC IN NUMBER,
PRICE_TYPE IN NUMBER,
NOTES IN SUPERMAG.SMDOCUMENTS.COMMENTARY%TYPE,
STATUS_DOC IN SUPERMAG.SMDOCUMENTS.DOCSTATE%TYPE,
MESSAGE_STR OUT VARCHAR2)
IS
DOC_ID_AC SUPERMAG.SMDOCUMENTS.ID%TYPE;
NEW_PRICE NUMBER;
DOC_ID NUMBER;
HAS_ARTICLES NUMBER;
CURSOR AC_CUR IS
SELECT 1 SPECITEM, 1 ITEMPRICE, '123456789' ARTICLE FROM DUAL;
AC_ROW AC_CUR%ROWTYPE;
FUNCTION GET_DOC_NO (DOC_TYPE SUPERMAG.SMDOCUMENTS.DOCTYPE%TYPE, STORE_LOC NUMBER) RETURN VARCHAR2 IS
DOC_ID SUPERMAG.SMDOCUMENTS.ID%TYPE;
BEGIN
DOC_ID := SUPERMAG.DOCUMENTS.GENERATEDOCNO(ADOCTYPE => DOC_TYPE, ALOCATION => STORE_LOC, AFIRSTPREFIX => NULL);
RETURN DOC_ID;
END GET_DOC_NO;
PROCEDURE REAPPRAISALACTSPEC(ADOCID IN SUPERMAG.SMDOCUMENTS.ID%TYPE,
AARTICLE IN SUPERMAG.SMCARD.ARTICLE%TYPE,
AQUANTITY IN NUMBER,
ADISPLAYITEM IN SUPERMAG.SMSPEC.DISPLAYITEM%TYPE,
AITEMPRICE IN SUPERMAG.SMSPEC.ITEMPRICE%TYPE) IS
BEGIN
SUPERMAG.DOCUMENTS.ADDSPEC('AC', ADOCID, AARTICLE, AQUANTITY, ADISPLAYITEM, NULL, NULL, NULL);
UPDATE SUPERMAG.SMSPEC S
SET S.ITEMPRICE = AITEMPRICE
WHERE S.DOCTYPE = 'AC' AND
S.DOCID = ADOCID AND
S.DISPLAYITEM = ADISPLAYITEM;
END REAPPRAISALACTSPEC;
BEGIN
-- получим номер для нового акта переоценки
DOC_ID_AC := GET_DOC_NO ('AC', STORE_LOC);
IF DOC_ID_AC IS NULL THEN
RAISE_APPLICATION_ERROR(-20000, 'Не могу создать документ', TRUE);
END IF;
-- Cоздаем акт переоценки
SUPERMAG.DOCUMENTS.CREATEDOCUMENTPROLOGUE('AC', DOC_ID_AC, TRUNC(SYSDATE), NULL, STORE_LOC, NULL, NULL);
-- У созданного АЦ проставлять основание
--SUPERMAG.SMDOCADDCOMMONBASEAC(DOC_ID_AC, 'CO', DOC_ID_BASE);
SUPERMAG.DOCUMENTSAC.DOCCREATESPECIALAC(DOC_ID_AC,
PRICE_TYPE,
NOTES,
1); -- EXECIF = По наступлению даты
-- выставим дату начала исполнения на завтра
UPDATE SUPERMAG.SMACTS T
SET T.EXECDATE=SYSDATE+1
WHERE T.DOCTYPE='AC'
AND T.ID=DOC_ID_AC;
-- обход артикулов времянки, соответ-х месту хранения
OPEN AC_CUR;
LOOP
FETCH AC_CUR INTO AC_ROW;
EXIT WHEN AC_CUR%NOTFOUND;
-- добавим позицию в спецификацию нового акта
REAPPRAISALACTSPEC(DOC_ID_AC,
AC_ROW.ARTICLE,
0, -- QUANTITY,
AC_ROW.SPECITEM,
SUPERMAG.PRICES.GETROUNDEDPRICE(1,AC_ROW.ITEMPRICE)); --Округленная цена
END LOOP;
CLOSE AC_CUR;
-- поднимем статус акта до "Принят к исполнению"
IF STATUS_DOC = 2 THEN
SUPERMAG.DOCUMENTS.CHANGEDOCSTATE('AC', DOC_ID_AC, 1, 2);
END IF;
-- разблокируем документ
SUPERMAG.DOCUMENTS.UNLOCKDOC('AC', DOC_ID_AC);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
MESSAGE_STR:=SQLERRM||'. АС='||DOC_ID_AC||'. DO_GENERATE_ACT_ACTION';
IF AC_CUR%ISOPEN THEN
CLOSE AC_CUR;
END IF;
END DO_GENERATE_ACT_ACTION;