CftClub.ru
Клуб специалистов ЦФТ-Банк

Запуск JOBа от имени другого пользователя
На страницу Пред.  1, 2, 3, 4  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 24, 2016 13:42    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Цитата:
Сути дело это не меняет

именно.

перефразирую вопрос - как повторно переинициализировать переменную пакета, при многократном его вызове?


В пред предыдущем посте уже написал )
Очень просто
Инициализируй переменную не в проверке, а в теле
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеЧт Ноя 24, 2016 13:45    Ответить с цитатой
Полезность: Нет оценки
Матвеев Евгений пишет:
wolfio пишет:
Цитата:
Сути дело это не меняет

именно.

перефразирую вопрос - как повторно переинициализировать переменную пакета, при многократном его вызове?


В пред предыдущем посте уже написал )
Очень просто
Инициализируй переменную не в проверке, а в теле


проблема в том, что , как я уже написал, это упрощенный пример дистрибутива.
Т.е. я, условно говоря, не могу изменить вызываемую операцию. только если перекрывать ее расширением. Но этот вариант мне уж очень не нравится.
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 24, 2016 13:56    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Матвеев Евгений пишет:
wolfio пишет:
Цитата:
Сути дело это не меняет

именно.

перефразирую вопрос - как повторно переинициализировать переменную пакета, при многократном его вызове?


В пред предыдущем посте уже написал )
Очень просто
Инициализируй переменную не в проверке, а в теле


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


Если дистрибутив, напиши короткое имя, ну и переменную например
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеЧт Ноя 24, 2016 14:02    Ответить с цитатой
Полезность: Нет оценки
Цитата:
Если дистрибутив, напиши короткое имя, ну и переменную например


это не глобальная переменная, чтобы ее можно было изменить напрямую. Она локальная
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 24, 2016 14:04    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Цитата:
Если дистрибутив, напиши короткое имя, ну и переменную например


это не глобальная переменная, чтобы ее можно было изменить напрямую. Она локальная


Так ты покажи её, я не могу мысли читать сегодня, как говорит vtar, хрустальный шар дома забыл )
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеЧт Ноя 24, 2016 14:13    Ответить с цитатой
Полезность: Нет оценки
Матвеев Евгений пишет:

Так ты покажи её, я не могу мысли читать сегодня, как говорит vtar, хрустальный шар дома забыл )

я не понимаю, что показать то? как она обьявлена в локальных?
так три раза уже ж написал:

Код:

OurDepart ref [DEPART] := ::[SYSTEM].[VARIABLES].OurDepart;
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 24, 2016 14:13    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Матвеев Евгений пишет:

Так ты покажи её, я не могу мысли читать сегодня, как говорит vtar, хрустальный шар дома забыл )

я не понимаю, что показать то? как она обьявлена в локальных?
так три раза уже ж написал:

Код:

OurDepart ref [DEPART] := ::[SYSTEM].[VARIABLES].OurDepart;

Ее я имел в виду операцию
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеЧт Ноя 24, 2016 14:58    Ответить с цитатой
Полезность: Нет оценки
[FACTURA_DOC].[NEW_INITION]
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 24, 2016 15:10    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
[FACTURA_DOC].[NEW_INITION]


Постановка задачи в чём?

Код:
OurDepart ref [DEPART] := ::[SYSTEM].[VARIABLES].OurDepart;

тут нет

Код:
 ::[SYSTEM].[VARIABLES].OurDepart;

тоже нет



Код:

function Copy_Factura(fact ref [FACTURA_DOC]) return ref [FACTURA_DOC]
is
sc1 number;
is_found boolean;
NewObj ref [FACTURA_DOC];
Obj [FACTURA_DOC];
itemObj [SERVICE];
itemRef ref [SERVICE];
connObj [TMC_FACT_CONN];
p_adds varchar2(2000) := '';
alls_before number;
nds_before   number;
begin
    Obj:=fact;
    Obj%init(false,true);
    Obj.[INITION_CORR] := Obj%id;
    if Obj.[KIND].[0] = &fSale then --на продажу
        Obj.[NUM_FACT]     := ::[FACTURA_DOC].[NUM_LIB].New_Num_Fact(true, null, fact.[DEPART], V_DATE, p_adds);-- Сформируем новый номер сч.-фактуры
        Obj.[DOCUMENT_NUM] := ::[FACTURA_DOC].[NUM_LIB].Str2Num(True, Obj.[NUM_FACT], fact.[DEPART], V_DATE, p_adds);-- Сформируем новый номер сч.-фактуры
    else
        Obj.[DOCUMENT_NUM] := ::[FACTURA_DOC].[NUM_LIB].New_Num_Document(False, fact.[DEPART], V_DATE, p_adds);-- Сформируем новый номер сч.-фактуры
    end if;


Вот такая беда есть, тут легче доп обработкой на fact ref [FACTURA_DOC] поменять

Код:

    v_pay.[INITION_CORR] := v_corr.[INITION_CORR];
    --подразделение возьмем из первичного счет-фактуры
    v_pay.[DEPART] := v_corr.[DEPART];
   
   v_corr.[DATE_PAY]:= v_pay.[DATE_PAY];

и тут тоже
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеЧт Ноя 24, 2016 15:20    Ответить с цитатой
Полезность: Нет оценки
Матвеев Евгений пишет:

Постановка задачи в чём?


Евгений, у меня складывается ощущение, что вы троль 80 уровня, и до 81 вы решили докачаться на мне)

я не знаю, что за код вы показали, и не знаючто хотели увидеть.

задача: переинициализировать локальную переменную в операции, при многократном вызове оной
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 24, 2016 15:29    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Матвеев Евгений пишет:

Постановка задачи в чём?


Евгений, у меня складывается ощущение, что вы троль 80 уровня, и до 81 вы решили докачаться на мне)

я не знаю, что за код вы показали, и не знаючто хотели увидеть.

задача: переинициализировать локальную переменную в операции, при многократном вызове оной



)))

Настройка SF_USE_CENTRAL_WORK чему равна?

Код:

      if nvl (::[FP_TUNE].[LIB].get_bool_value('SF_USE_CENTRAL_WORK'), false) then
         P_DEPART := coalesce(P_DOCUMENT.[DEPART], OurDepart);
      else
         P_DEPART := OurDepart;
         [CSMD].Disable(V_VB, 'P_DEPART');
      end if;   
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеЧт Ноя 24, 2016 15:36    Ответить с цитатой
Полезность: Нет оценки
Матвеев Евгений пишет:


Настройка SF_USE_CENTRAL_WORK чему равна?


вы продолжаете, да?))
а как вы думаете, чему она равна, если я бы мог спокойно заполнить значение P_DOCUMENT.[DEPART] и не тупить себе голову, если б она была в true?)

Код:

      if nvl (::[FP_TUNE].[LIB].get_bool_value('SF_USE_CENTRAL_WORK'), false) then
         P_DEPART := coalesce(P_DOCUMENT.[DEPART], OurDepart);
      else
         P_DEPART := OurDepart;
         [CSMD].Disable(V_VB, 'P_DEPART');
      end if;   
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 24, 2016 15:39    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Матвеев Евгений пишет:


Настройка SF_USE_CENTRAL_WORK чему равна?


вы продолжаете, да?))
а как вы думаете, чему она равна, если я бы мог спокойно заполнить значение P_DOCUMENT.[DEPART] и не тупить себе голову, если б она была в true?)

Код:

      if nvl (::[FP_TUNE].[LIB].get_bool_value('SF_USE_CENTRAL_WORK'), false) then
         P_DEPART := coalesce(P_DOCUMENT.[DEPART], OurDepart);
      else
         P_DEPART := OurDepart;
         [CSMD].Disable(V_VB, 'P_DEPART');
      end if;   


А что мешает поставить Да? и ...
Цитата:
спокойно заполнить значение P_DOCUMENT.[DEPART]


Это первый способ, он законный
------------------------------------------------------------------------
Второй способ, тоже относительно законный, сделай локальную копию операции и в теле добавь строку
Код:

   OurDepart := ::[SYSTEM].[VARIABLES].OurDepart;

получится вот так
Код:

   &setpar(p_adds, 'CLASS', v_class);
   &setpar(p_adds, 'VALUE', This%id);
   OurDepart := ::[SYSTEM].[VARIABLES].OurDepart;
    if P_CLIENT.[0]=1 then
        &setpar(p_adds, 'CLIENT', P_CLIENT.[1].[1]%id);
    end if;
   &setpar(p_adds, 'DOCUMENT', P_DOCUMENT%id);
   &setpar(p_adds, 'CONN', P_CONN%collection);

------------------------------------------------------------------------
Для того чтобы окончательно затроллить тебя, предложу еще один вариантик, но он немного выходит за рамки лицензионного соглашения с ЦФТ

Заходишь в любой SQL клиент, подключаешься к схеме

Код:

select rowid,TEXT from sources b where b.NAME = (select id from methods a where a.short_name = 'NEW_INITION') and  b.type = 'EXECUTE' order by b.line


Ищешь первую пустую строку, на моей версии строка 29 и добавляешь туда

Код:

   OurDepart := ::[SYSTEM].[VARIABLES].OurDepart;

получается вот так, потом не забудь операцию откомпилировать
Код:

   &setpar(p_adds, 'CLASS', v_class);
   &setpar(p_adds, 'VALUE', This%id);
   OurDepart := ::[SYSTEM].[VARIABLES].OurDepart;
    if P_CLIENT.[0]=1 then
        &setpar(p_adds, 'CLIENT', P_CLIENT.[1].[1]%id);
    end if;
   &setpar(p_adds, 'DOCUMENT', P_DOCUMENT%id);
   &setpar(p_adds, 'CONN', P_CONN%collection);


В итоге операция начнет работать так, как ты и ожидал в самом начале


Последний раз редактировалось: Матвеев Евгений (Чт Ноя 24, 2016 16:19), всего редактировалось 1 раз
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеЧт Ноя 24, 2016 16:18    Ответить с цитатой
Полезность: Нет оценки
Матвеев Евгений пишет:

А что мешает поставить Да? и ...


ну это немного нецелевое использование настройки. К тому же, согласно описанию, у пользователя появится возможность выбрать его вручную, а сейчас такой возможности нет.

а через расширение эту бредятину можно реализовать?
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 24, 2016 16:26    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Матвеев Евгений пишет:

А что мешает поставить Да? и ...


ну это немного нецелевое использование настройки. К тому же, согласно описанию, у пользователя появится возможность выбрать его вручную, а сейчас такой возможности нет.

а через расширение эту бредятину можно реализовать?


Троллю дальше... сам повод даешь

ну это немного нецелевое использование настройки. К тому же, согласно описанию, у пользователя появится возможность выбрать его вручную, а сейчас такой возможности нет.

Судя по исходникам, ты можешь в расширении блокировать на форме любой контрол для изменения, для пользователей (Это честный метод)
Поэтому можешь настройку поставить в да и запрет на редактирование
Код:

      if nvl(P_AGENT_DOG, false) then
         [CSMD].Enable(V_VB, 'P_AGENT_REQS');
         P_AGENT_REQS.[BANK_COMISS] := nvl(P_AGENT_REQS.[BANK_COMISS], false);
         if nvl(P_AGENT_REQS.[BANK_COMISS], false) then   
            [CSMD].Enable(V_VB, 'P_AGENT_REQS.SUB');
            [CSMD].Enable(V_VB, 'P_AGENT_REQS.CODE');
         else
            [CSMD].Disable(V_VB, 'P_AGENT_REQS.SUB');
            [CSMD].Disable(V_VB, 'P_AGENT_REQS.CODE');
         end if;
      else
         [CSMD].Disable(V_VB, 'P_AGENT_REQS');
      end if;



Очень большие сомнения, что в данной операции у тебя получится из вне (в том числе через расширение) изменить значение переменной, объявленной в локальных описаниях

Локальные, они для того и локальные, чтобы они были доступны только внутри

Попробуй конечно, но едва ли

Вообще все 3 варианта решения имеют право на существование... и применялись в свое время (в том числе с вариант с изменением исходников в случаях крайней необходимости)
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4  След.
Страница 3 из 4

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru