-- PS: Цикл - кредитные договора по текущему портфелю for crd in [CRED_IN_PORT] all -- PS: очень важная фигня -- all! where ( crd%collection = prt.[CREDITS] --and crd.[PR_CRED].[DATE_BEGIN] >= P_DATE_BEGIN --and crd.[PR_CRED].[DATE_CLOSE] <= P_DATE_END ) loop -- PS: Цикл - кредитные договора в портфеле (даты включения/исключения) for crd_this in prt.[CREDITS] where ( --crd_this.[PR_CRED].[NUM_DOG] = crd.[PR_CRED].[NUM_DOG] crd_this.[PR_CRED]%id = crd.[PR_CRED]%id and (crd_this.[DATE_BEGIN] >= P_DATE_BEGIN and (crd_this.[DATE_END] <= P_DATE_END or crd_this.[DATE_END] is null)) ) loop declare -- портфель на дату включения prt_begin varchar2(10) := &GetPortByCred(crd.[PR_CRED], crd_this.[DATE_BEGIN]).[NUM_DOG]; -- портфель на дату исключения prt_end varchar2(10) := &GetPortByCred(crd.[PR_CRED], crd_this.[DATE_END]).[NUM_DOG]; begin -- 1, Ф.И.О. клиента str_t := crd.[PR_CRED].[CLIENT].[NAME]; &Put(8+counter, 1, str_t); -- 2, № и дата договора str_t := '№' || crd.[PR_CRED].[NUM_DOG] || ' от ' || to_Char(crd.[PR_CRED].[DATE_BEGIN], 'dd.mm.yyyy'); &Put(8+counter, 2, str_t); -- 3, Сумма договора --str_t := Replace(ltrim(to_char(crd.[PR_CRED].[SUMMA_DOG], '999G999G999G999G999G990D00')), SubStr(Trim(to_Char(1111,'9G999')), 2, 1), CHR(39)); str_t := Replace(ltrim(to_char(crd.[PR_CRED].[SUMMA_DOG], '999G999G999G999G999G990D00')), SubStr(Trim(to_Char(1111, '9G999')), 2, 1), ','); &Put(8+counter, 3, str_t); -- 4, С О Б Ы Т И Е if ((crd_this.[DATE_BEGIN] is not null and crd_this.[DATE_BEGIN] >= P_DATE_BEGIN) and (crd_this.[DATE_END] is not null and crd_this.[DATE_END] <= P_DATE_END) and (prt_end is not null)) then /* если есть дата включения и дата исключения, а также есть портфель на дату исключения (включен в другой)... */ /* ...выводим исходный портфель, конечный портфель, дату включения в конечный портфель; пишем, что кредитный договор перемещен в другой портфель */ str_t := 'Перемещение в другой портфель'; &Put(8+counter, 4, str_t); --&Put(8+counter, 5, to_char(crd_this.[DATE_BEGIN], 'dd.mm.yyyy')); &Put(8+counter, 5, to_char(crd_this.[DATE_END], 'dd.mm.yyyy')); &Put(8+counter, 6, &GetPortByCred(crd.[PR_CRED], crd_this.[DATE_BEGIN]).[NUM_DOG]); &Put(8+counter, 7, &GetPortByCred(crd.[PR_CRED], crd_this.[DATE_END]).[NUM_DOG]); elsif ((crd_this.[DATE_BEGIN] is not null and crd_this.[DATE_BEGIN] >= P_DATE_BEGIN) and (crd_this.[DATE_END] is not null and crd_this.[DATE_END] <= P_DATE_END) and prt_end is null ) then /* если есть дата включения и дата исключения, но портфеля на дату исключения НЕТ... */ /* ...выводим портфель (на дату включения), из которого исключен кредитный договор, дату исключения; пишем, что кредитный договор исключен из портфеля. */ str_t := 'Исключение из портфеля'; &Put(8+counter, 4, str_t); &Put(8+counter, 5, to_char(crd_this.[DATE_END], 'dd.mm.yyyy')); --&Put(8+counter, 6, &GetPortByCred(crd.[PR_CRED], crd_this.[DATE_BEGIN]+1).[NUM_DOG]); if &GetPortByCred(crd.[PR_CRED], crd_this.[DATE_END]-1).[NUM_DOG] is null then -- ОБХОД #1 str_t := prt.[NUM_DOG]; else str_t := &GetPortByCred(crd.[PR_CRED], crd_this.[DATE_END]-1).[NUM_DOG]; end if; &Put(8+counter, 6, str_t); --&Put(8+counter, 6, prt_end); elsif ((crd_this.[DATE_BEGIN] is not null and crd_this.[DATE_BEGIN] >= P_DATE_BEGIN) and crd_this.[DATE_END] is null) then /* если есть дата включения и нет даты исключения... */ /* ...выводим исходный портфель (единственный); пишем, что крединый договор включен в портфель. */ str_t := 'Включение в портфель'; &Put(8+counter, 4, str_t); &Put(8+counter, 5, to_char(crd_this.[DATE_BEGIN], 'dd.mm.yyyy')); &Put(8+counter, 6, ''); -- ОБХОД #2 &Put(8+counter, 7, prt_begin); --elsif () then end if; EXCEL.Set_Font_Size(8+counter, 1, 8+counter, table_columns, 12); -- PS: вся строка - 12pt counter := counter + 1; end; end loop; end loop;