Источник: appl_equip_client.update_ec_by_zakaz_master -- Обновляет Оборудование Клиента по услуге по ремонту PROCEDURE UPDATE_EC_BY_ZAKAZ_MASTER(ZAKAZ_MASTER_ID$ NUMBER) IS ZAKAZ_MASTER$ CARABI_DOCUMENT := CARABI_DOCUMENT(ZAKAZ_MASTER_ID$); EQUIP_CLIENT$ NUMBER; EQUIP_CLIENT_CURRENT$ NUMBER; BEGIN -- Текущее оборудование по ссылке EQUIP_CLIENT_CURRENT$ := ZAKAZ_MASTER$.GET_REF('ZAKAZ_MASTER-REF-EQUIP_CLIENT'); -- Если оборудование уже заполнено IF EQUIP_CLIENT_CURRENT$ IS NOT NULL THEN -- Поиск обрудования по критерияем Клиент, SN, не архим и не аннулировано EQUIP_CLIENT$ := FIND_EC_BY_ZAKAZ_MASTER(ZAKAZ_MASTER$.DOCUMENT_ID); -- Если найденное обрудование не совпадает с текущим и текущее не в статусе не задан IF NVL(EQUIP_CLIENT$, 0) != EQUIP_CLIENT_CURRENT$ THEN --dbms_output.put_line(EQUIP_CLIENT$); IF CARABI_DOCUMENT(EQUIP_CLIENT_CURRENT$) .GET_STATUS_NAME != 'created' THEN RAISE_ERROR(DOCUMENTS.GET_DOC_DESCR(ZAKAZ_MASTER_ID$) || CHR(13) || CHR(10) || 'Оборудование клиента уже используется, невозможно внести изменения!' || CHR(13) || CHR(10) || 'Найденное оборудование клиента: ' || NVL(EQUIP_CLIENT$, 0)); END IF; END IF; -- Если мы нашли оборудование по нашим критериям IF EQUIP_CLIENT$ IS NOT NULL THEN --Если найденное оборудование не равно текущему и текущее в не задан IF EQUIP_CLIENT$ != EQUIP_CLIENT_CURRENT$ THEN -- Если текущее не имеет ссылки на другие Услуги по ремонту, то удаляем текущее IF IS_UNIQUE_EC_REFERENCE(ZAKAZ_MASTER$.DOCUMENT_ID, EQUIP_CLIENT_CURRENT$) THEN DOCUMENTS.DOCF_DELETE(EQUIP_CLIENT_CURRENT$, TRUE); END IF; ZAKAZ_MASTER$.INSERT_REF('ZAKAZ_MASTER-REF-EQUIP_CLIENT', EQUIP_CLIENT$); ELSE UPDATE_EC(EQUIP_CLIENT_CURRENT$, ZAKAZ_MASTER$.DOCUMENT_ID); END IF; ELSE -- Если мы не нашли оборудование по нашим критериям -- Если текущее не имеет ссылки на другие Услуги по ремонту IF IS_UNIQUE_EC_REFERENCE(ZAKAZ_MASTER$.DOCUMENT_ID, EQUIP_CLIENT_CURRENT$) THEN -- Обновляем оборудование, т.к. мы первые UPDATE_EC(EQUIP_CLIENT_CURRENT$, ZAKAZ_MASTER$.DOCUMENT_ID); ELSE -- Если клиент в обордовании указан, то меняем адрес -- Если клиент не указан, то создавем оборудование заново EQUIP_CLIENT$ := GET_EC_BY_ZAKAZ_MASTER(ZAKAZ_MASTER$.DOCUMENT_ID); ZAKAZ_MASTER$.INSERT_REF('ZAKAZ_MASTER-REF-EQUIP_CLIENT', EQUIP_CLIENT$); END IF; END IF; ELSE -- Если оборудование не заполнено ищем, если нет, то создаем EQUIP_CLIENT$ := GET_EC_BY_ZAKAZ_MASTER(ZAKAZ_MASTER$.DOCUMENT_ID); IF EQUIP_CLIENT$ IS NOT NULL THEN ZAKAZ_MASTER$.INSERT_REF('ZAKAZ_MASTER-REF-EQUIP_CLIENT', EQUIP_CLIENT$); END IF; END IF; END;