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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
Функция ЗначениеСвойства(Объект, ИмяСвойства) Экспорт
	
	Возврат Объект[ИмяСвойства]
	
КонецФункции

Пипец полезная функция!

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

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

  • Может, это используется в какой-нибудь функциональщине?
    Ответить
      • А если серьёзно, то совсем недавно показывал имеющую право на жизнь конструкцию для php:
        $arr3 = array_map(function($value, $key) {return $value[$key];}, $arr1, $arr2);
        В адынэсе случайно подобных callback-функций не бывает?
        Ответить
        • Странный код. Я правильно понимаю, что $arr1 - массив массивов? Для чего это юзалось, если не секрет?
          Ответить
          • Так и есть, можете смело участвовать в битве экстрасенсов.

            Может быть, существует более элегантное решение, но это первое, что пришло в голову на ночь глядя:
            http://govnokod.ru/13420#comment188689
            Ответить
            • * g o a t s e x * g o a t s e x * g o a t s e x *
              g                                               g  
              o /     \             \            /    \       o
              a|       |             \          |      |      a
              t|       `.             |         |       :     t
              s`        |             |        \|       |     s
              e \       | /       /  \\\   --__ \\       :    e
              x  \      \/   _--~~          ~--__| \     |    x  
              *   \      \_-~                    ~-_\    |    *
              g    \_     \        _.--------.______\|   |    g
              o      \     \______// _ ___ _ (_(__>  \   |    o
              a       \   .  C ___)  ______ (_(____>  |  /    a
              t       /\ |   C ____)/      \ (_____>  |_/     t
              s      / /\|   C_____)       |  (___>   /  \    s
              e     |   (   _C_____)\______/  // _/ /     \   e
              x     |    \  |__   \\_________// (__/       |  x
              *    | \    \____)   `----   --'             |  *
              g    |  \_          ___\       /_          _/ | g
              o   |              /    |     |  \            | o
              a   |             |    /       \  \           | a
              t   |          / /    |         |  \           |t
              s   |         / /      \__/\___/    |          |s
              e  |           /        |    |       |         |e
              x  |          |         |    |       |         |x
              * g o a t s e x * g o a t s e x * g o a t s e x *
              Ответить
  • а как на счет получения реквизита в тонком клиенте? эта функция для такого рода деятельности.
    мимо кассы, господа.
    Ответить
    • Пока не могу себе представить, где и как оно могло бы выполняться.
      Ответить
      • Получение реквизита со ссылки, очевидно же. Гляньте БСП, там аж четыре такие функции в ОбщегоНазначения: значение/значения свойства объекта/объектов. Правда более корректным способом, без получения объекта целиком. до ветки 2.1.3 в этом модуле еще и вызов сервера стоял. Потом убирали, но большинство типовых сразу обертки написали 🙂
        Ответить
        • ОбщегоНазначения.ПолучитьЗначениеРеквизи та()
          Активно юзаю этот метод. но назначение Объект[ИмяСвойства] ваще не представляю! что мешает просто через точку получить свойство?
          Ответить
          • То, что на стороне тонкого клиента не сработает Объект.Контрагент.Наименование
            и придется использовать
            ЗначениеСвойства(Объект.Контрагент, "Наименование")

            Вы, молодой человек, не постигли
            Ответить
            • я то всё постиг, а вот вы попробуйте со своего тонкого клиента вызвать ЗначениеСвойства(Объект.Контрагент, "Наименование"), и посмотрите, что из этого выйдет. Обращаю внимание - процедура лежит в общем модуле (для непонятливых поясню: чтобы вызвать её из упр формы, придется писать обертку, иначе говоря, получать свойство ЧЕРЕЗ ЖОПУ))) )
              Ответить
              • Если на модуле стоит флаг "вызов сервера", то вызов такой функции возможен и с тонкого и с толстого клиента. Флаг для того и сделан как бы.
                Ответить
          • Имя свойства - строка, которую можно собрать по кусочкам из подстрок или получить любым другим способом. При работе через точку имя свойства должно быть заранее известно.
            Ответить
          • Почему бы не реализовать более универсальное решение - получение группы реквизитов для группы объектов. Проблем не вижу, выигрыш налицо.
            Ответить
            • Для группы реквизитов есть
              ОбщегоНазначения.ПолучитьЗначениеРеквизи тов(Ссылка, СписокРеквизитовЧерезЗапятую)
              Возвращает структуру.
              Ответить
              • Вместо ссылки массив можно передать? Там же элементарно, в запросе вместо "Ссылка = &Ссылка" написать "Ссылка В (&Ссылка)".
                Хотя я, если честно, этой лабудой не пользуюсь. Все равно обычно все Ссылки у меня появляются из какого-нибудь запроса, так почему бы и реквизиты не дернуть в том же запросе. Так и делаю, и это кошерно ИМХО.
                Ответить
                • я чуть выше писал, что есть 4 реализации в ОбщегоНазначения. получение из 1 ссылки 1 свойство, из 1 ссылки много свойств и такая же пара для массива ссылок 1 свойство и много свойств.
                  Ответить
  • Эта функция используется во внешнем соединении при открытии 1С через COM, например из 7.7.
    Ответить
    • а во внешнем соединении нельзя через точку получать значения?
      Ответить
      • Можно.
        Со внешним соединением другой косяк.
        Вот попробуйте (не во внешнем соединении) получить 2 ссылки на один и тот же объект двумя разными способами, напр. двумя запросами. А потом проверьте на равенство, типа
        Если Ссылка1 = Ссылка2 тогда
        Сообщить("Равны")
        Иначе
        Сообщить("Не равны")
        КонецЕсли
        А потом тот же финт проверните во внешнем соединении.
        Вуаля! Они ВСЕГДА не равны, даже если ссылка на один и тот же объект!
        В принципе, зная системное программирование и COM-объекты, я могу это понять, но любой 1С-ник будет ругаться...
        Ответить
        • ну так в случае внешнего соединения он возвращает не ссылки, а ком-объекты. разные ком-объекты. потому они и не равны. тут надо сравнивать в терминах базы-хоста - по строковому представлению гуида, например.
          Ответить
          • Я и говорю, я могу это понять как системный кодер. Даже в контексте базы-хоста, это две разные переменные-"ссылки", но с одинаковым содержимым. Логично было бы у ком-соединения реализовать метод (как есть методы String(), NewObject()) метод Equal() чтобы сравнивать ТОЧНО так же, как идет сравнение в контексте хоста.
            Ответить
  • Господа, сейчас поясню - как рождается подобное. Недавно сам наткнулся на точно такой же код в древней базе 7.7. Так вот, суть в том, что когда-то в эта функция была молода и наполнена методами и кодом. Но требования заказчика и ситх-программер сделали своё дело - она стала такой, как есть. Вместо того, чтобы убивать функцию, искать точки вызова(а их может быть тоже масса) и отрубать их, ситх сделал всё в течении нескольких секунд - он очистил функцию и оставил только возврат параметра. Это идеальное решения с точки зрения затраченного времени и решения задачи заказчика. Так что это - минималистичный говнокод
    Ответить
  • Функция полезна, если выполняет на сервере, а функцию вызывают на стороне клиенте (Тонкий клиент).
    Ответить
  • Не согласен что это говнокод.
    Как и писалось выше такой метод используется для получения значения реквизита объекта из web или тонкого клиента. Так как на этих клиентах не доступны реквизиты объекта.
    Тоесть код: "КодПоЕДРПОУКонтрагент = ДокументОбъект.Контрагент.КодПоЕДРПОУ" вызовет исключение.

    Автор не учёл особенности платформы.
    Ответить
    • У модуля нет галки "Вызов сервера", так что использовать этот метод для получения значения реквизита объекта из web или тонкого клиента нельзя.
      Ответить
      • С этого стоило начать. Тогда это либо любитель функционального подхода, либо это обрубок какой-то большей функции.
        Ответить
    • По-хорошему это делается запросом к нужному реквизиту нужного объекта. А то вот захотел я узнать номер документа, а там ТЧ на 2000 строк... И всё это подгрузилось в кэш при вызове через [].
      Так что в любом случае говнокод.
      И соглашусь, что это любитель функционального подхода. На обрубок мало походит по логике названия.
      Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

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


    8