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

«Во славу» ЦФТшного кода

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Ваше мнение о компании «Центр Финансовых Технологий»
Предыдущая тема :: Следующая тема  
Автор Сообщение
w00per
Профи


Вступление в Клуб: 17.10.2007
СообщениеВт Фев 17, 2009 16:24   «Во славу» ЦФТшного кода Ответить с цитатой

Код:

jurist := false;
....
   -- проверим является ли v_client Юристом, или Нотариусом
      begin
         select   co(1) in v_client->(::[CL_CORP])[CODES_OKONH]
         where   co.[CODE ] = '97820' and rownum < 2
         into    I;
         
         select   okv(1) in v_client->(::[CL_CORP])[OKVEDS]
         where   okv.[CODE ] = '74.11' and rownum < 2
         into    I;
         
         jurist := true;
      exception
         when NO_DATA_FOUND then null;
      end;

Внимание вопрос: "Что произойдет если у клиента не заполнен массив ОКОНХ, но заполнен ОКВЭД?".
Совершенно верно: "Исключение 'NO_DATA_FOUND' в первом запросе и кривое значение флага 'jurist'!!!".
_________________
I Lie About Everything.
zinovjeva_n
Участник - экстремал


Вступление в Клуб: 15.10.2008
СообщениеЧт Фев 19, 2009 17:19    Ответить с цитатой

Меня тут порадовало другое немножко. Надо было по условиям заказчика создать в справочнике текстовое поле размером в 32000 символов. Создали средствами ЦФТ - на тестировании все падает. Причина проста - Оракл предусматривает величину типа varchar до 4000 байт и ЦФТ великолепно вместо запрошенных 32000 обрезает их до 4000. Пришлось скриптами напрямую на базе править тип поля на long в таблице.
_________________
Coding for food
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПт Фев 20, 2009 06:53    Ответить с цитатой

zinovjeva_n пишет:
Меня тут порадовало другое немножко. Надо было по условиям заказчика создать в справочнике текстовое поле размером в 32000 символов. Создали средствами ЦФТ - на тестировании все падает. Причина проста - Оракл предусматривает величину типа varchar до 4000 байт и ЦФТ великолепно вместо запрошенных 32000 обрезает их до 4000. Пришлось скриптами напрямую на базе править тип поля на long в таблице.

А зачем напрямую в БД правили? ИБСО прекрасно поддерживает типы LONG, RAW, LONG RAW, CLOB, BLOB. ИМХО, не кошерно менять модель мимо Администратора словаря...

А текстовые поля размером 32000 используются только в коде операций.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеЧт Мар 03, 2011 18:35    Ответить с цитатой

Вывожу в Excel реализации ф.135 на разные даты и вижу все время в шапке отчета "по состоянию на 03 марта". Wink
Оставил в коде строки, где используется dDate:
Код:
Procedure WriteHeader(rRP ref [REPS_PARAMS] ) is
...
   dDate         Date;
Begin
...
   If dDate is null Then
      dDate   := ::[SYSTEM].OP_DATE;
   End If;

   debug_pipe( 'Дата в заголовке: ' || to_char(dDate, 'dd/mm/yyyy'), 2 );

   vMonth   := [REPS]::[SLIB].Date_Str( dDate, False);
   Put( 10,   11, to_char(dDate, 'dd')   );
   Put( 10,   13, vMonth               );
   Put( 10,   17, to_char(dDate, 'yyyy')   );
...
end;

версия 10.5.21
dbmaslov
Профи


Вступление в Клуб: 11.07.2007
СообщениеСб Мар 05, 2011 15:04    Ответить с цитатой

В 10.6.15 ничего не изменилось. Но отдел отчетности похоже не беспокоит данный вопрос, во всяком случае молчат.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеСб Мар 05, 2011 16:00    Ответить с цитатой

dbmaslov пишет:
В 10.6.15 ничего не изменилось. Но отдел отчетности похоже не беспокоит данный вопрос, во всяком случае молчат.
Мне написали, что работы планируется завершить 29 марта Wink
dbmaslov
Профи


Вступление в Клуб: 11.07.2007
СообщениеЧт Мар 10, 2011 16:12    Ответить с цитатой

PS. Я имел ввиду отдел отчетности нашего банка, в ЦФТ не сообщал.
alexiy
Профи


Вступление в Клуб: 29.06.2007
СообщениеВт Сен 23, 2014 15:16   ::[HOOK].[RC_GET_DOG_DPP_2] Ответить с цитатой

код, загадочный донельзя. смотрим на 2-ю и 7-ю строки:
Код:
   if hook_bank_flag then
      hook_bank_flag := true;
      if ::[DOCUM_RC].[CACHE].cache_is_doc(P_DOC) then
         declare
         d date;
         begin
            P_DOC := nvl(P_DOC, null); -- BS00112959 - не удалять!
            ::[DOCUM_RC].[CACHE].cache_enter_critical_section;
            d := [RC_GET_DOG_DPP_1](P_AGR, P_DOC, P_ADD);
            ::[DOCUM_RC].[CACHE].cache_exit_critical_section;
            return d;
         end;
      else
         return [RC_GET_DOG_DPP_1](P_AGR, P_DOC, P_ADD);
      end if;
   end if;

вопрос в студию: в чем смысл этих строк?
_________________
two bee or not two bee
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Сен 24, 2014 05:12   Re: ::[HOOK].[RC_GET_DOG_DPP_2] Ответить с цитатой

alexiy пишет:
код, загадочный донельзя. смотрим на 2-ю и 7-ю строки:
Код:
   if hook_bank_flag then
      hook_bank_flag := true;
      if ::[DOCUM_RC].[CACHE].cache_is_doc(P_DOC) then
         declare
         d date;
         begin
            P_DOC := nvl(P_DOC, null); -- BS00112959 - не удалять!
            ::[DOCUM_RC].[CACHE].cache_enter_critical_section;
            d := [RC_GET_DOG_DPP_1](P_AGR, P_DOC, P_ADD);
            ::[DOCUM_RC].[CACHE].cache_exit_critical_section;
            return d;
         end;
      else
         return [RC_GET_DOG_DPP_1](P_AGR, P_DOC, P_ADD);
      end if;
   end if;

вопрос в студию: в чем смысл этих строк?


Поржал. До слёз!
Слушайте, скиньте название операций и ТБП? Лучше короткие.
Я тут замучу тему типа "Ляпы в нашем городке". Или "Нарочно не придумаешь".

Название темы тоже можете посоветовать Smile

Пусть страна знает своих героев!
Amper
Профи


Вступление в Клуб: 29.10.2010
СообщениеСр Сен 24, 2014 06:14   Re: ::[HOOK].[RC_GET_DOG_DPP_2] Ответить с цитатой

Random пишет:
alexiy пишет:
код, загадочный донельзя. смотрим на 2-ю и 7-ю строки:
Код:
   if hook_bank_flag then
      hook_bank_flag := true;
      if ::[DOCUM_RC].[CACHE].cache_is_doc(P_DOC) then
         declare
         d date;
         begin
            P_DOC := nvl(P_DOC, null); -- BS00112959 - не удалять!
            ::[DOCUM_RC].[CACHE].cache_enter_critical_section;
            d := [RC_GET_DOG_DPP_1](P_AGR, P_DOC, P_ADD);
            ::[DOCUM_RC].[CACHE].cache_exit_critical_section;
            return d;
         end;
      else
         return [RC_GET_DOG_DPP_1](P_AGR, P_DOC, P_ADD);
      end if;
   end if;

вопрос в студию: в чем смысл этих строк?


Поржал. До слёз!
Слушайте, скиньте название операций и ТБП? Лучше короткие.
Я тут замучу тему типа "Ляпы в нашем городке". Или "Нарочно не придумаешь".

Название темы тоже можете посоветовать Smile

Пусть страна знает своих героев!


Цитата:
rem Устранено сбрасывание параметра вследствие обнуления глобальной переменной.
METH HOOK RC_GET_DOG_DPP_2

Более того, в этой заявке добавлена ровно одна эта строка. У меня есть предположение, что это особый костыль, который на той версии ядра (это заявка 2009 года) компилировался во что-то отличное от того, во что компилируется сейчас. Возможно, что целью было не столько использовать nvl, сколько "тронуть" переменную так, чтобы компилятор не вырезал код как бесполезный. Может быть тогда она действительно имела какой-то смысл, но я долго рассматривал код и так и не смог понять, что именно имелось в виду.
Random
Эксперт


Вступление в Клуб: 27.06.2011
СообщениеСр Сен 24, 2014 10:31   Re: ::[HOOK].[RC_GET_DOG_DPP_2] Ответить с цитатой

Amper пишет:
alexiy пишет:
Код:
P_DOC := nvl(P_DOC, null); -- BS00112959 - не удалять!


Цитата:
rem Устранено сбрасывание параметра вследствие обнуления глобальной переменной.
METH HOOK RC_GET_DOG_DPP_2

Более того, в этой заявке добавлена ровно одна эта строка. У меня есть предположение, что это особый костыль, который на той версии ядра (это заявка 2009 года) компилировался во что-то отличное от того, во что компилируется сейчас. Возможно, что целью было не столько использовать nvl, сколько "тронуть" переменную так, чтобы компилятор не вырезал код как бесполезный. Может быть тогда она действительно имела какой-то смысл, но я долго рассматривал код и так и не смог понять, что именно имелось в виду.


Согласен. Тем более, что я тоже использую функции +0 и ||'' в случае если мне нужно, чтобы оптимизатор не использовал индекс по какому-то реквизиту.

При таком использовании входящего in-параметра создаётся локальная переменная-копия этого параметра, которая по всему телу используется вместо этого параметра.
Но ведь параметр-то ведь IN.
Будь он IN-OUT, и такое присваивание не создало бы локальную переменную.
Если же что-то обналливалось внутри вызываемых функций (если у них к тому же IN-OUT-параметры), то во-первых, в случае in-out параметра создалась бы точно такая же локальная копия, а во-вторых, какая разница, что использовать - параметр или переменную, если действия над тем и над другим выполняются аналогичные?

Согласно заявке, проблемы были из-за кэширования. Подозреваю, что в 2009 году тут действительно формировался несколько другой код, чем сейчас.

В общем, к сожалению, здесь тайна покрыта мраком.
Было бы интересно и познавательно попробовать потестировать эту операцию лично в том далёком году...
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Ваше мнение о компании «Центр Финансовых Технологий» Часовой пояс: GMT + 3
Страница 1 из 1

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