Бухгалтерия / Говнокод #1867 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
Запрос1 = Новый Запрос;
	Запрос1.Текст = "ВЫБРАТЬ
	|	Номенклатура.ЕдиницаИзмерения
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|	Номенклатура.Ссылка = &ном";
	
	
	Запрос1.УстановитьПараметр("Ном", ЭлементыФормы.Товары.ТекущаяСтрока.Номенклатура);
	
	
	
	Результат1 = Запрос1.Выполнить();
	Выборка1 = Результат1.Выбрать();
	
	Пока Выборка1.Следующий() Цикл
		ед = выборка1.единицаизмерения;
	КонецЦикла;			
	
	ЭлементыФормы.Товары.ТекущаяСтрока.ЕдИзм= ед;

"Простой" способ подставить единицу измерения в табличную часть))

Запостил: vedvd vedvd, (Updated )

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

  • Для полного счастья не хватает:
    ...
    ед = выборка1.единицаизмерения.ссылка;
    ...
    И всё это положить в "ПриВыводеСтроки".
    Ответить
  • Зря наехали на этот код.
    Сравните, что будет в скуле, когда напишите так:
    ЭлементыФормы.Товары.ТекущаяСтрока.ЕдИзм= Номенклатура.ЕдиницаИзмерения;

    У вас еще и блокировка ляжет на объект....
    А при такой реализации произойдет грязное чтение, которому пофиг на блокировку. Да и по скорости большой разницы не будет
    Ответить
    • С какого переляка блокировка ляжет? То что ты написал сработает точно также как приведённый код. Разницы нет.
      Ответить
  • Согласен с напрасным наездом... Код этот надобно в отдельную функцию, да отрефакторить, это да... Но идея лучше, чем получение через точку. Со скулем работал три года в плотном режиме, потому про блокировки знаю не по наслышке.
    Ответить
    • Вы чего, ребята? Разве при обращении к ссылке, типа: ЭлементыФормы.Товары.ТекущаяСтрока.Номен клатура - она не кэшируется, и не выполняется тот же запрос? Кэшируется и выполняется.
      Эдак, давайте, налепим сюда ещё проверку на количество выборки, на существование колонки "ЕдИзм" и прочего говна. А что, по скорости большой разницы не будет.
      Кстати, что выдаст этот код, если номенклатура окажется пустой ссылкой?
      В общем, не стоит мудрить, когда это того не стоит. В 90% случаев, через жопу получается только хуже.
      Ответить
      • ТекущаяСтрока.Номенклатура хранится в уже полученном объекте в памяти сервера 1С.
        ТекущаяСтрока.Номенклатура.ЕдиницаИзмере ния - это запрос к БД с получением объекта в память, со всеми его реквизитами.
        То, как сделано - получение только ссылки.

        Более короткий код не всегда эффективнее. Кто сомневается - пузырьковая сортировка против например Quicksort Чарльза Хоара.
        Ответить
  • А ты замерь производительность. Создание объекта Запрос и прочее тоже время занимают
    Ответить
    • Обращение к ссылке через точку тоже ведет к созданию запроса. Просто его платформа неявно выполняет, может получиться и чуть быстрее, но не намного. Я имею в виду создание самого объекта Запрос, а не его выполнение.
      А тянуть единственный мне нужный реквизит запросом - имеет смысл. Потому что платформа-то потянет все реквизиты.
      В итоге проиграем 10 нс, а выиграем 1 мс и трафик и нагрузку на скуль.
      Ответить
      • Какая разница - брать 1 реквизит или все? Один хрен запрос выберет строку таблицы, и только потом получит из нее нужные поля.
        Ответить
        • Выберет, но не отправит. Отправить одно поле или все - нагрузка на сеть для особо крупных объектов в тысячи раз отличается.
          А сеть, насколько я знаю, самый медленный элемент в цепи HDD/Память/Процессор/Сеть
          Ответить
          • Не стоит путать latency (задержку) и throughput (пропускную способность).

            Один пакет на 10 байт и один пакет на килобайт будут идти примерно одинаково. В общем-то, даже два-три пакета подряд будут идти чуть-чуть дольше, чем только один первый.

            З.Ы. Но если эта ваша платформа вытягивает поля по одному, а не пачкой - тогда да, запрос всего объекта будет лагать как говно.
            Ответить
  • Вызов запросом оптимален.
    Единственное, что нужно было сделать - вызвать стандартную функцию БСП ЗначениеРеквизитаОбъекта, а не лепить свою.
    Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8