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

    −124

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    КоличествоОбъектов_ = 0;
    	
    	Для Каждого СтрокаТаблицы Из Объекты Цикл
    		Если СтрокаТаблицы.Объект = Элемент.Значение Тогда
    			КоличествоОбъектов_ = КоличествоОбъектов_ + 1;
    		КонецЕсли;
    	КонецЦикла;
    
    	Если КоличествоОбъектов_ > 1 Тогда
    		Элемент.Значение = Справочники.ОбъектыСтрахования.ПустаяСсылка();
    		Предупреждение("Выбранный объект уже присутствует в списке");
    		Возврат;
    	КонецЕсли;

    Нашел такое в конфе, которую поддерживаю.
    Программер накнопал алгоритм, чтобы исключить попадание одного и того же объекта в таблицу.
    Вначале был ступор, потом дошло.

    Запостил: Ivon, 18 Марта 2013

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

    • Обычный дебил, который не может пользоваться стандартными коллекциями (сказать правду - препоганейшими). Ну и по мелочи, типа отсутствия знания типовых алгоритмов.
      Ответить
      • А в 1С есть стандартный set?
        Ответить
        • А стандартный из какого языка?
          Вообще этот алгоритм умещается в гораздо меньшем количестве строк примерно вот так:
          Если Объекты.НайтиСтроки(Новый Структура("Объект", Элемент.Значение)).Количество() > 1 Тогда
          		Элемент.Значение = Справочники.ОбъектыСтрахования.ПустаяСсылка();
          		Предупреждение("Выбранный объект уже присутствует в списке");
          		Возврат;
          	КонецЕсли;
          Ответить
          • > А стандартный из какого языка?
            Стандартный в математическом смысле

            > Справочники.ОбъектыСтрахования.ПустаяСсы лка()
            Типизированный NULL 0_O
            Ответить
            • Типизированное пустое значение заданного вида.
              Емнип,
              А = Неопределено;
              А.Наименование = "Тест";

              упадёт (возможно даже с неотловимой ошибкой), а
              А = Справочники.Ололо.ПустаяСсылка();
              А.Наименование = "Тест";

              - нет, потому что в данном случае А - валидный объект, только пустой.
              Ответить
              • А, вон оно что. Default.
                Остаётся только гадать, почему ПустаяСсылка(), а не ЗначениеПоУмолчанию().
                Ответить
                • потому что это пустая ссылка, а не значение по умолчанию
                  Ответить
              • тоже будет ошибка
                Ответить
                • Вполне возможно, я же не настоящий сварщик. Но чтение из него пройдёт нормально.
                  Ответить
          • А нахрена тут НайтиСтроки, если достаточно Найти. Незачем искать все.
            Ответить
            • А затем, что "Найти()" вернет только одну (первую попавшуюся) строку, а задача - проверка на наличие дублей.

              Не позорь профессию, она из-за таких, как ты, имеет дурную репутацию.
              Ответить
              • Согласен, проморгал момент, там проверяется на > 1, а не на > 0.
                А вот хамить не надо. Я программировать начинал еще с советских программируемых калькуляторов и прошел всё от ассемблера до мобильных приложений. Ну бывает, ошибся.
                Ответить

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