Группа: Пользователи
Сообщений: 25
Спасибо сказали: 0 раз
Рейтинг: 0
Добрый день! Есть ли у кого-то кусочек кода, как сделать выборку из справочника "Клиенты" по дате рождения, полу, дате регистрации и пр. Для рассылки уведомлений по е-mail ?
Напишу пример. Чтобы заработал нужно немного подкорректировать.
Спр. СоздатьОбьект("Справочник.Соирудники;); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 цикл Если Спр.Пол ="м" тогда продолдить; //не выбираем мужчин КонецЕсли; Если Спр.ДатаРегистрации>(ТекущаяДата()-10) тогда Продолжить; //пропускаем недавно зарегистрированных (менее 10 дней) КонецЕсли;
// тут пишем текст что делать для оставшихся сотрудников
с днями рождения посложнее. Может ктото придумал вариант попроще. У меня была задача менять летнее время на зимнее и обратно. Я проверяю даты (конец марта/начало апреля и если еще в этом периоде не поменяно, то изменяю Вот мой код. Если разберетесь в нем то можете использовать.
МесяцТекущаяДата=ДатаМесяц(ТекущаяДата()); ЧислоТекущаяДата=ДатаЧисло(ТекущаяДата()); ГодТекущаяДата=ДатаГод(ТекущаяДата()); Если (МесяцТекущаяДата=3) или (МесяцТекущаяДата=4) Тогда Если НомерДняНедели(Дата(ГодТекущаяДата,3,31))=7 тогда ДатаПерехНаЛетнее=Дата(ГодТекущаяДата,3,31); Иначе ДатаПерехНаЛетнее=Дата(ГодТекущаяДата,3,31)-НомерДняНедели(Дата(ГодТекущаяДата,3,31)); КонецЕсли; Если МесяцТекущаяДата=3 Тогда Если ЧислоТекущаяДата>20 Тогда Если ТекущаяДата()>=ДатаПерехНаЛетнее Тогда Если Константа.ЛетнееВремя =0 Тогда Константа.ЛетнееВремя =1; // Сообщить("Змінили константу ЛетнееВремя в Березні !"); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Если МесяцТекущаяДата=4 Тогда Если ЧислоТекущаяДата<15 Тогда Если Константа.ЛетнееВремя =0 Тогда Константа.ЛетнееВремя =1; // Сообщить("Змінили константу ЛетнееВремя в Квітні !"); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли;
Группа: Местный
Сообщений: 224
Из: не ту страну назвали Гондурасом
Спасибо сказали: 83 раз
Рейтинг: 0
и где оно все ("дата рождения, пол, дата регистрации и пр.") лежит? и какие условия при выборке должны соблюдаться? прим.: ответ ожидается в виде "дата рождения лежи в реквизите <ИмяРеквизита> Справочника <ВидСправочника>, в выборку должны попадать только удолетворяющие условию <УсловиеХотяБыСвоимиСловами>
что неверно в коде 1. Значение переключателей вказано неверно. Если вказано для одного из них "первый в группе, то во всех условиях проверять именно его (Муж=1, Муж=2.....) Если нет, То тогда (Муж=1, Жен=1, Просрочка=1... ) - в смысле так как и флажок Какое значение у каждого флажка можете проверить ппрописав в формуле этого флажка (Сообщить("муж="+муж)) .... Сообщить("жен="+жен))
2. Пол не в ТЗ не нужно разделять, так как один и тот же человек не может быть одновременно и М и Ж...... (если верить вашему коду то пол у вас прописан в Перечислениях. Тогда нужно писать ТЗ.ПолЖ = Спр.Пол;
3. Выбор лучше сделать флажком а не переключателем.
4. По 4-му условию у вас попадут в выборку только те кто родился именно сегодня, а не те у кого день рождения попадает на сегоднешнюю дату, но на другой год.. И ТЗ.ДР = Спр.Дата_рождения; тут лишнее, вернее стоит не на своем месте (нужно переместить во внутреннее условие.).
5. Не совсем понятен смысл реквизита прострочка. Судя по коду это дата увольнения. Какой ее сакральный смысл в данной задаче? Если для уволенных сотрудников ненужно отправлять сообщения, то нужно вписать условие на эту проверку
Заключение: Вы точно программист? Судя по коду свой отчет вы закончите не скоро......
Сообщение отредактировал volodya1122 - 17.08.16, 14:58
Группа: Пользователи
Сообщений: 25
Спасибо сказали: 0 раз
Рейтинг: 0
В предыдущем коде не все так гладко. Если проверяли, то Таб. значений выводит пустые строки. Допустим у нас 5 жен. и 2 муж., то по выборке только муж. будет еще 5 пустых строк.
Вот нормальный код. Тему можно закрывать. Спасибо.
Процедура ПриОткрытии() Отбор = 1; КонецПроцедуры // ПриОткрытии Процедура Сформировать() //Сбор информации о пользователях ТЗ = СоздатьОбъект ("ТаблицаЗначений"); ТЗ.НоваяКолонка("ФИО","строка"); ТЗ.НоваяКолонка("МобТел","Строка"); ТЗ.НоваяКолонка("Почта","строка"); ТЗ.НоваяКолонка("Просрочка","Дата"); ТЗ.НоваяКолонка("ДР","Дата"); ТЗ.НоваяКолонка("Пол",""); Спр = СоздатьОбъект ("Справочник.Клиенты"); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент() = 1 Цикл ТЗ.НоваяСтрока(); Если Отбор = 1 Тогда //Муж ТЗ.Пол = Спр.Пол; Если ТЗ.Пол = Перечисление.Пол.Мужской Тогда ТЗ.ФИО = СокрЛП(Спр.Фамилия+" "+Спр.Имя+" "+Спр.Отчество); ТЗ.МобТел = СокрЛП(Спр.Моб_Тел); ТЗ.Почта = СокрЛП(Спр.ЭлектроннаяПочта); ТЗ.ДР = Спр.Дата_рождения; ТЗ.Просрочка = Спр.ДатаУвольнения; ИначеЕсли ТЗ.Пол = Перечисление.Пол.Женский Тогда ТЗ.УдалитьСтроку(); КонецЕсли; ИначеЕсли Отбор = 2 Тогда //Просрочка Если ТЗ.Просрочка = Спр.ДатаУвольнения Тогда ТЗ.Пол = Спр.Пол; ТЗ.ФИО = СокрЛП(Спр.Фамилия+" "+Спр.Имя+" "+Спр.Отчество); ТЗ.МобТел = СокрЛП(Спр.Моб_Тел); ТЗ.Почта = СокрЛП(Спр.ЭлектроннаяПочта); ТЗ.ДР = Спр.Дата_рождения; ИначеЕсли ТЗ.Просрочка <> Спр.ДатаУвольнения тогда ТЗ.УдалитьСтроку(); КонецЕсли; ИначеЕсли Отбор = 3 Тогда //жен ТЗ.Пол = Спр.Пол; Если ТЗ.Пол = Перечисление.Пол.Женский Тогда ТЗ.ФИО = СокрЛП(Спр.Фамилия+" "+Спр.Имя+" "+Спр.Отчество); ТЗ.МобТел = СокрЛП(Спр.Моб_Тел); ТЗ.Почта = СокрЛП(Спр.ЭлектроннаяПочта); ТЗ.ДР = Спр.Дата_рождения; ТЗ.Просрочка = Спр.ДатаУвольнения; ИначеЕсли ТЗ.Пол = Перечисление.Пол.Мужской Тогда ТЗ.УдалитьСтроку(); КонецЕсли; ИначеЕсли Отбор = 4 Тогда //всем ТЗ.Пол = Спр.Пол; ТЗ.ФИО = СокрЛП(Спр.Фамилия+" "+Спр.Имя+" "+Спр.Отчество); ТЗ.МобТел = СокрЛП(Спр.Моб_Тел); ТЗ.Почта = СокрЛП(Спр.ЭлектроннаяПочта); ТЗ.ДР = Спр.Дата_рождения; ТЗ.Просрочка = Спр.ДатаУвольнения; ИначеЕсли Отбор = 5 Тогда //ДР ДЧТ = ДатаЧисло(ТекущаяДата()); ДМТ = ДатаМесяц(ТекущаяДата()); ДЧС = ДатаЧисло (Спр.Дата_рождения); ДМС = ДатаМесяц(Спр.Дата_рождения); Если (ДЧТ = ДЧС) И (ДМТ = ДМС) тогда ТЗ.Пол = Спр.Пол; ТЗ.ФИО = СокрЛП(Спр.Фамилия+" "+Спр.Имя+" "+Спр.Отчество); ТЗ.МобТел = СокрЛП(Спр.Моб_Тел); ТЗ.Почта = СокрЛП(Спр.ЭлектроннаяПочта); ТЗ.ДР= Спр.Дата_рождения; ТЗ.Просрочка = Спр.ДатаУвольнения; Иначе ТЗ.УдалитьСтроку(); Сообщить("сегодня нет именинников"); КонецЕсли; Прервать; КонецЕсли; КонецЦикла; ТЗ.Сортировать(СокрЛП("ФИО")); ТЗ.Выгрузить(СписокКлиентов);
Браво!!!!!!!!!!! Конешно этот код можна оптимизировать но и так сойдет. Главное что работает правильно.
p.s. В этом куске кода не правильно/ (поработайте еще с ним) ИначеЕсли Отбор = 2 Тогда //Просрочка ................................... .................................
и еще если человек уже уволен. нужно ли чтоб он попадал в списки (по условиям 1, 3, 4, 5). Также подумайте над этим.
Сообщение отредактировал volodya1122 - 18.08.16, 11:01
Группа: Пользователи
Сообщений: 25
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(volodya1122 @ 18.08.16, 11:42)
и еще если человек уже уволен. нужно ли чтоб он попадал в списки (по условиям 1, 3, 4, 5). Также подумайте над этим.
Спасибо. Эта выборка для кредитного союза, а "Дата Увольнения" - это дата выхода из КС Поэтому, думаю поздравления с 8-марта, НГ, и ДР всегда актуальны. Ведь задача любой организации (магазин, банк и тд) не столько найти нового клиента, как не потерят старого. Поэтому и сервис, поэтому и скидки, поэтому и поздравления.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!