E ai galera, belezeria???Depois um tempo sem postar nada, estou de volta!!! Hoje vou dar uma dica sobre como fazer um estorno de um lancamento contabil do GL vai PL/SQL.Em primeiro lugar temos que atualizar o ACCRUAL_REV_FLAG da GL_JE_HEADERS, para fazer isso estou usando uma API conforme abaixogl_je_headers_pkg.update_row( x_rowid => l_rowid -- ROWID da linha a ser atualizada, x_je_header_id => r_gl_je_headers.je_header_id, x_last_update_date => r_gl_je_headers.last_update_date, x_last_updated_by => r_gl_je_headers.last_updated_by, x_ledger_id => r_gl_je_headers.ledger_id, x_je_category => r_gl_je_headers.je_category, x_je_source => r_gl_je_headers.je_source, x_period_name => r_gl_je_headers.period_name, x_name => r_gl_je_headers.NAME, x_currency_code => r_gl_je_headers.currency_code, x_status => r_gl_je_headers.status, x_date_created => r_gl_je_headers.date_created, x_accrual_rev_flag => 'Y' --Flag que atualiza os dados para Y confirmando o estorno, x_multi_bal_seg_flag => r_gl_je_headers.multi_bal_seg_flag, x_actual_flag => r_gl_je_headers.actual_flag, x_default_effective_date => r_gl_je_headers.default_effective_date, x_conversion_flag => r_gl_je_headers.conversion_flag, x_last_update_login => r_gl_je_headers.last_update_login, x_encumbrance_type_id => r_gl_je_headers.encumbrance_type_id, x_budget_version_id => r_gl_je_headers.budget_version_id, x_balanced_je_flag => r_gl_je_headers.balanced_je_flag, x_balancing_segment_value => r_gl_je_headers.balancing_segment_value, x_je_batch_id => r_gl_je_headers.je_batch_id, x_from_recurring_header_id => r_gl_je_headers.from_recurring_header_id, x_unique_date => r_gl_je_headers.unique_date, x_earliest_postable_date => r_gl_je_headers.earliest_postable_date, x_posted_date => r_gl_je_headers.posted_date, x_accrual_rev_effective_date => r_gl_je_headers.accrual_rev_effective_date, x_accrual_rev_period_name => r_gl_je_headers.period_name, x_accrual_rev_status => r_gl_je_headers.accrual_rev_status, x_accrual_rev_je_header_id => r_gl_je_headers.accrual_rev_je_header_id, x_accrual_rev_change_sign_flag => r_gl_je_headers.accrual_rev_change_sign_flag, x_description => r_gl_je_headers.description, x_tax_status_code => r_gl_je_headers.tax_status_code, x_control_total => r_gl_je_headers.control_total, x_running_total_dr => r_gl_je_headers.running_total_dr, x_running_total_cr => r_gl_je_headers.running_total_cr, x_running_total_accounted_dr => r_gl_je_headers.running_total_accounted_dr, x_running_total_accounted_cr => r_gl_je_headers.running_total_accounted_cr, x_currency_conversion_rate => r_gl_je_headers.currency_conversion_rate, x_currency_conversion_type => r_gl_je_headers.currency_conversion_type, x_currency_conversion_date => r_gl_je_headers.currency_conversion_date, x_external_reference => r_gl_je_headers.external_reference, x_attribute1 => r_gl_je_headers.attribute1, x_attribute2 => r_gl_je_headers.attribute2, x_attribute3 => r_gl_je_headers.attribute3, x_attribute4 => r_gl_je_headers.attribute4, x_attribute5 => r_gl_je_headers.attribute5, x_attribute6 => r_gl_je_headers.attribute6, x_attribute7 => r_gl_je_headers.attribute7, x_attribute8 => r_gl_je_headers.attribute8, x_attribute9 => r_gl_je_headers.attribute9, x_attribute10 => r_gl_je_headers.attribute10, x_context => r_gl_je_headers.CONTEXT, x_ussgl_transaction_code => r_gl_je_headers.ussgl_transaction_code, x_context2 => r_gl_je_headers.context2, x_doc_sequence_id => r_gl_je_headers.doc_sequence_id, x_doc_sequence_value => r_gl_je_headers.doc_sequence_value);COMMIT; --Commit no processamento da API que atualiza os dados do cabecalho dos lancamentos contabeisDepois da atualizacao pego o IMPLICIT_ACCESS_SET_ID do livro contabil, esse valor sera usado como parametro para submeter o concurrent de estorno.SELECT implicit_access_set_idINTO l_implicit_access_set_idFROM gl_ledgersWHERE ledger_id = r_gl_je_headers.ledger_id;O proximo e ultimo passo seria chamar o concurrent que estorna os lancamentos (GLPREV) passando como parametros o IMPLICIT_ACCESS_SET_ID e o ID do lote (JE_HEADER_ID da GL_JE_HEADERS).l_n_request_id := fnd_request.submit_request( application => 'SQLGL', program => 'GLPREV', description => 'Estornar Lancamentos', argument1 => l_implicit_access_set_id, argument2 => r_gl_je_headers.je_header_id);COMMIT; --Commit no processamento do ConcorrenteBom, aqui isso ta funcionando... os lancamentos estao sendo estornados.Absss Ola pessoal!!!Desculpa pela demora em postar mais dicas, estava muito enrolado mes passado (por aquele motivo) e ainda tive uma mini-ferias... Vou tentar voltar a postar as dicas com mais frequencia agora...Bom, vou dar um dia de query acumulado... por exemplo: Quero que o resultado de minha query seja o numero da nota, data emissao, o valor da nota, o acumulado da nota por dia e o acumulado geral, o resultado tem ser algo parecido com: Para montar esse resultado, vou usar o comando OVER!!! Ficara assim:Apesar da query nao ter ficado alinhada (fui obrigado a colocar como figura), acho que da pra entender... nao sei porque nao fica alinhado do jeito que monto, isso ta limitando um monte de dicas que quero passar, com tem trechos de codigo maiores fica muito ruim de entender quando nao esta alinhando...Abs, Uma coisinha bem simples e bastante util e a diferenca do EXIT para o RETURN em um LOOP.EXIT = quando passa pelo EXIT ele vai sair do LOOP e continuar o programa... Este comando so pode