1. Список говнокодов пользователя Genius1C

    Всего: 2

  2. 1C / Говнокод #20235

    −53

    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
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    Законы де Моргана в 1С
    Казалось бы, при чем Булева Алгебра к 1С?
    
    
    
    Предположим, есть задача - отобрать действующие договора на некую дату проверки &Дата.
    
    При этом у договора есть дата начала и дата окончания, если дата окончания не задана, то договор действует до конца времен.
    
    Как решается задача? В лоб так:
    
    
    ВЫБРАТЬ Ссылка ИЗ Справочник.Договоры ГДЕ ДатаНачала <= &Дата И (ДатаОкончания >= &Дата ИЛИ ДатаОкончания = ДатаВремя(1,1,1))
    
    Но операция ИЛИ вызывает некоторые проблемы по скорости, поэтому есть желание обойтись без нее. Как это сделать? Тут приходит на помощь законы Де Моргана.
    
    Перепишем так:
    
    
    ВЫБРАТЬ Ссылка ИЗ Справочник.Договоры ГДЕ ДатаНачала <= &Дата И НЕ (ДатаОкончания < &Дата И ДатаОкончания <> ДатаВремя(1,1,1))
    
    И всё работает.
    
    Проверяем выделенную зеленым часть условия:
    
    1. Если дата окончания договора меньше даты проверки, то получим НЕ (ИСТИНА И ИСТИНА) = ЛОЖЬ
    
    2. Если дата окончания договора больше или равно даты проверки, то получим НЕ (ЛОЖЬ И ИСТИНА) = ИСТИНА
    
    3. Если дата окончания договора не заполнена, то получим НЕ (ЛОЖЬ) = истина.
    
    Торжество формальной логики! Причем некоторые товарщи пытаются оптимизировать этот запрос через запросы с объединением, а ларчик открывается просто!

    Немножко обо мне:
    Действующий пикапер. Честно соблазнил 174 женщин и купил 42 феи (на август 2015)
    Использует функциональную 5 бальную шкалу оценок женщин.
    Известный 1сник с кличкой Гений 1С. Получает от 120 тыщ.
    Изобрел фонд «Секс за ваши» - занимаюсь сексом с проститутками за счет пожертвований фанатов.
    Изобрел Религию Дембеля.

    Genius1C, 20 Июня 2016

    Комментарии (245)
  3. 1C / Говнокод #20224

    −16

    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
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    Небольшой гуру-тест по сопровождению типовых конфигураций.
    
    
    Есть запрос, который получает себестоимость и выручку документа возврата товара от клиента (процедура ТекстЗапросаТаблицаВыручкаИСебестоимостьПродаж в модуле менеджера документа):
    
    
    ТекстЗапроса = "
    ....
     | - ВидыЗапасов.СуммаСНДСУпр          КАК СуммаВыручки,
    ....
     | ВЫБОР КОГДА ВидыЗапасов.ТипЗапасов = ЗНАЧЕНИЕ(Перечисление.ТипыЗапасов.КомиссионныйТовар)
     |  ИЛИ ВидыЗапасов.ДокументРеализации = НЕОПРЕДЕЛЕНО
     | ТОГДА
     |  - ВидыЗапасов.СуммаСНДСУпр
     | ИНАЧЕ
     |  0
     | КОНЕЦ КАК Себестоимость,
    
    
    Для удобства сопровождения текст запроса меняется далее в коде, а не в самом запросе, в конструкции вида:
    
    
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "... что искать ...",
    ".. на что заменять...");
    
    
    Нужно заменить использование ВидыЗапасов.СуммаСНДСУпр так, чтобы СуммаВыручки не изменилась, а Себестоимость изменилась, допустим на число 666 (для гуру-теста).
    
    
    Это частая задача для УТ11, т.к. там не реализована возможность конкретного указания себестоимости, если возврат осущесвлятся без документа продажи (например, за прошлые периоды, до ввода начальных остатков), в этих случаях УТ11 принимает себестоимость возврата, равную цене продажи, а это не совсем правильно.
    
    
    В этом случае есть один хитрый трюк, чтобы без использования регулярных выражений добиться замены себестоимости на заданное число. Вопрос - как? Думаем.

    Немножко обо мне:
    Действующий пикапер. Честно соблазнил 174 женщин и купил 42 феи (на август 2015)
    Использует функциональную 5 бальную шкалу оценок женщин.
    Известный 1сник с кличкой Гений 1С. Получает от 120 тыщ.
    Изобрел фонд «Секс за ваши» - занимаюсь сексом с проститутками за счет пожертвований фанатов.
    Изобрел Религию Дембеля.

    Genius1C, 17 Июня 2016

    Комментарии (22)