1. 1C / Говнокод #26998

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    ДанныеКальлулятора = ПолучитьДанныеКалькулятораПоЗаявке(Заявка);
    	Расчет = ДанныеКальлулятора["ТЧ.Расчет"].Скопировать();
    	
    	ОстаточнаяПроцент = ДанныеКальлулятора["впОстаточнаяСтоимость"];
    	ПроцентнаяСтавка = ПолучитьДанныеКалькулятораПоЗаявке(Заявка)["рпСтоимостьКапитала"];
    	СрокЛизингаСтарыйИзКалькулятора = ПолучитьДанныеКалькулятораПоЗаявке(Заявка)["впСрокЛизинга"];
    	
    	ГибридСтавкаФинансированияКапитальнаяЧасть = ПолучитьДанныеКалькулятораПоЗаявке(Заявка)["ГибридСтавкаФинансированияКапитальнаяЧасть"];
    	ГибридСтавкаФинансированияОстаточнаяЧасть = ПолучитьДанныеКалькулятораПоЗаявке(Заявка)["ГибридСтавкаФинансированияОстаточнаяЧасть"];
    	ГибридФианансоваяМаржаКапитальнаяЧасть = ПолучитьДанныеКалькулятораПоЗаявке(Заявка)["ГибридФианансоваяМаржаКапитальнаяЧасть"];
    	ГибридФианансоваяМаржаОстаточнаяЧасть = ПолучитьДанныеКалькулятораПоЗаявке(Заявка)["ГибридФианансоваяМаржаОстаточнаяЧасть"];

    Как ж бомбит. Отраслёвка лизинговая

    Запостил: sandvich, 02 Октября 2020

    Комментарии (24) RSS

    • Внутри функции ПолучитьДанныеКалькулятораПоЗаявке - запрос, исессно
      Ответить
      • Итого ПолучитьДанныеКалькулятораПоЗаявке (Заявка) будет вызвана шесть раз, и каждый вызов будет выполнять один и тот же запрос к базе?
        Ответить
        • Да.

          Это как в цикле сделать strlen в сишке или где там оно за O(n) работает?
          Ответить
        • Не заметил вызов в первой строке. Итого семь. Хотя результат положили в переменную «ДанныеКальлулятора», и его можно было бы использовать ниже.
          Ответить
          • А может быть, там очень умная функция, которая кеширует предыдущие вызовы? Можно такую написать?
            Ответить
            • А как кэшировать, если Заявка окажется объектом? Сериализовать, считать контрольную сумму значения или сравнивать адрес в памяти в надежде на то, что объект иммутабельный и вероятность создания нового на старом месте невелика?
              Ответить
              • Я бы вот такое наговнокодил: сохраняю данные заявки (копирую) в статическую переменную в функции «Получения» или что-то типа того, как в питоне. Потом, когда функция снова вызывается, нужно проверить, равны ли старые и новые данные от заявок. Если равны, то не лезем в базу, а возвращаем данные из той статической пельменной.

                Правда это всё соснёт по нескольким причинам сразу: многопоточность, чередующаяся обработка двух заявок и синтаксис «1С».
                Ответить
                • Да, если хранить результаты только одного вызова, переголова будет небольшой, но кэширование разобьётся о чередование обработки нескольких заявок. А если хранить несколько последних результатов, то по сложности обработки это может оказаться сопоставимым с запросом к базе.
                  Ответить
                  • > А если хранить несколько последних результатов

                    Можно хранить их в хеш-таблице, а хеш считать от всех полей объекта. Или будет слишком медленно? Я не знаю, насколько быстро работают функции хеширования в стравнении с дёрганьем базы: я программист, а не девопс.
                    Ответить
                    • > Или будет слишком медленно?

                      Ну что, никто не знает?
                      Ответить
        • Как ты попал в этот тред?
          Ответить
    • А чойто в последнее время "1С" начали форсить?
      Ответить
    • >Кальлулятор
      Ответить
      • да, там даже синонимы объектов и реквизитов наполовину с опечатками. Я не против программистов с дисграфией, но тогда нужно редактора нанимать
        Ответить
    • Код для аккуратных и внимательных.
      Но конечно не хватает в коде GUIDов. Назовите переменную
      9288b6f0-5fdb-4374-b5a2-1c46111543e9 = ПолучитьДанныеКалькулятораПоЗаявке(Заявка)["9288b6f0-5fdb-4374-b5a2-1c46111543e9"];
      Ответить
    • > Отраслёвка лизинговая

      Ну и кто кому отлизал?
      Ответить

    Добавить комментарий