8.х Отбор по дате рождения

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Isupovalex, 20 май 2015.

  1. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Всем доброго времени суток.
    Нацарапал отчет, который отображает контрагентов, его контактные лица, контактные данные (мобильный номер) и дату рождения.
    Проблема заключается в том, что дата рождения хранится в формате дата.месяц.год.
    А при формировании отчета хотелось бы сортировать по дате рождения. Т.к. год рождения не 2015, возникает вопрос, как сделать отбор по дате и месяцу, игнорируя год.
    Что бы пользователь нажал сегодняшнюю дату и ему сформировался список людей, у которых день рождения выпадает на сегодняшнее число этого месяца или выбрать период (месяц, неделя), в котором будет игнорироваться год.
    Данный выбираются из регистра сведений
    Код:
    ВЫБРАТЬ
        КонтактнаяИнформация.Объект.Владелец,
        КонтактнаяИнформация.Объект.КонтактноеЛицо,
        КонтактнаяИнформация.Объект.ДатаРождения,
        КонтактнаяИнформация.Объект.Пол,
        КонтактнаяИнформация.Представление,
        КонтактнаяИнформация.Тип,
        КонтактнаяИнформация.Объект.Владелец.СогласиеНаОбработкуДанных,
        КонтактнаяИнформация.Объект.ПрофПраздник.Наименование,
        КонтактнаяИнформация.Объект.ПрофПраздник.ДатаПраздника,
        КонтактнаяИнформация.Объект.ПрофПраздник
    ИЗ
        РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    Последнее редактирование модератором: 20 май 2015
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    А кто мешает сделать так:
    Код:
    Упорядочить По КонтактнаяИнформация.Объект.ДатаРождения
    В макете можно сделать форматирование, чтоб отображался только год. Так же и запросом можно.
  3. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.977
    Симпатии:
    397
    Баллы:
    104
    1. Зачем хранить дату как число? Никогда этого не понимал. Если этого требует задача, то открою секрет, дату можно преобразовать во что угодно. А хранить надо как дату.
    2. В Вашем случае это можно сделать, если программно достучаться до КомпоновщикНастроек.Настройки.Отбор и уже методами встроенного языка установить необходимые отборы.
  4. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Если таких тысячи, и сортировать их по дате, то придется листать весь список, что не удобно для ежедневного использования
  5. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Хранить дату как число - ошибка многих начинающих программистов, потом они исправляются, видя до чего доводят их кривые руки :)
    --- Объединение сообщений, 20 май 2015 ---
    Нет, а что вы тогда хотите-то ???
  6. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Что бы пользователь нажал сегодняшнюю дату и ему сформировался список людей, у которых день рождения выпадает на сегодняшнее число этого месяца. Приведу пример:
    Иванов Иван Иваныч родился 20.05.1965 года
    Петров Петр Петрович родился 20.05.1974 года
    если я выберу сегодняшнюю дату 20.05.2015, то все, окажутся вне списка.
    Если я выберу 20.05.1965 года, то в списке будет только Иван, и Петр поздравления не получит в этом году.
    Последнее редактирование: 20 май 2015
  7. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Тогда вообще не вижу проблемы. Если у вас реквизит дата рождения является типом Дата, тогда тупо устанавливайте отбор:
    Код:
    ВЫБРАТЬ
    КонтактнаяИнформация.Объект.Владелец,
    КонтактнаяИнформация.Объект.КонтактноеЛицо,
    КонтактнаяИнформация.Объект.ДатаРождения,
    КонтактнаяИнформация.Объект.Пол,
    КонтактнаяИнформация.Представление,
    КонтактнаяИнформация.Тип,
    КонтактнаяИнформация.Объект.Владелец.СогласиеНаОбработкуДанных,
    КонтактнаяИнформация.Объект.ПрофПраздник.Наименование,
    КонтактнаяИнформация.Объект.ПрофПраздник.ДатаПраздника,
    КонтактнаяИнформация.Объект.ПрофПраздник
    ИЗ
    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    ГДЕ
    КонтактнаяИнформация.Объект.ДатаРождения = &ТекущаяДата;
    
    Запрос.УстановитьПараметр("ТекущаяДата", День(ТекущаяДата());
    Вот как-то так, на коленке
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну если быстро то я бы сначало добавли дава поля в запрос

    КонтактнаяИнформация.Объект.ДатаРождения,
    МЕСЯЦ(КонтактнаяИнформация.Объект.ДатаРождения) КАК МесяцРождения,
    ДЕНЬ(КонтактнаяИнформация.Объект.ДатаРождения) КАК ДеньРождения,

    и теперь в отборе можно сделать отборы по месяцу рождения и дню
    т.е пользователю нужно получить всех кто родился в мае сделал отбор по Месяцрождения равно 5
    Сортировку сначала по месяцу родения потом по дню и то же без учета когда получиться
    IceBeerG нравится это.
  9. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Это работает, спасибо
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну там далее можно совершенствовать если уж автоматом надо от сегодняшней даты ее раскладывать так же и в параметры отбора устнавливать
  11. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    по вашему методу возникает ошибка:
    Ошибка получения информации набора данных
    по причине:
    Ошибка в запросе набора данных
    по причине:
    {(22, 2)}: Синтаксическая ошибка "КонтактнаяИнформация.Объект.ДатаРождения"
    <<?>>КонтактнаяИнформация.Объект.ДатаРождения = &ТекущаяДата;
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Это к чему?
  13. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Ну в идеале не автоматом выбирать дату сегодня, а иметь возможность выбрать дату в календарике, ну просто для удобства. Проблема решается вашим способом, но не совсем эргономично, вводить месяц и день в разных полях, неопытные пользователи боятся и могут запутаться, увидев такое)
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну я же написал, что там через программирование можно решить этот момент, что бы СКД сама текущую или установленную дату разбивала и ставила отборы
  15. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    я пробую все способы, что бы в будущем иметь не одно решение одной проблемы.
  16. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    тут просто с одной стороны не эргономично а с другой функционал. Хотите получть у кого в мае ДР, без даты и года - вуаля.
    Хотите получить у кого ДР с 1по 10 число без года и месяца -вуаля. (ну например вашей компании 15 лет и всем у кого 15 числа ДР - скидка 15%)- выкрутить список и оповестить
  17. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    Все верно, кстати очень хорошая идея)
  18. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    ну есть другие способы - это брать дату
    есть дата 01052015 берем 01052015-НачалоГода(01052015) ну т.е получаем количество секунда вс начала года до первого мая
    аналогичсно делает с текущей или установленой датой и проверяете эти значения.
  19. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Допустил синтактическую ошибку :)
  20. TopicStarter Overlay
    Isupovalex
    Offline

    Isupovalex

    Регистрация:
    23 апр 2015
    Сообщения:
    31
    Симпатии:
    0
    Баллы:
    1
    А я голову ломаю) в чем же дело)

Поделиться этой страницей