Мой вариант:
1. Изменяем спр. Личные контакты и спр КонтактныеЛица Добавляем Реквизиты, выводим на форму:
НапоминатьОПодарке - булево
КоличествоДнейДоПодарка - число 2,0
ОтветственныйЗаПодарок – спр.Пользователи
2.МодульФормы (для двух справочников):
Процедура ДоступностьДанныхНапоминанияОДнеРождения()
Если ДатаРождения = '00010101000000' Тогда
ЭлементыФормы.НапоминатьОДнеРождения.Доступность = Ложь;
ЭлементыФормы.КоличествоДнейДоНапоминания.Доступность = Ложь;
ЭлементыФормы.НадписьДней.Доступность = Ложь;
//УТСПЕЦИАЛИСТ +
ЭлементыФормы.НапоминатьОПодарке.Доступность = Ложь;
ЭлементыФормы.КоличествоДнейДоНапоминания1.Доступность = Ложь;
ЭлементыФормы.ОтветственныйЗаПодарок.Доступность = Ложь;
//УТСпециалист -
Иначе
ЭлементыФормы.НапоминатьОДнеРождения.Доступность = Истина;
ЭлементыФормы.КоличествоДнейДоНапоминания.Доступность = НапоминатьОДнеРождения;
ЭлементыФормы.НадписьДней.Доступность = НапоминатьОДнеРождения;
//УТСПЕЦИАЛИСТ +
ЭлементыФормы.НапоминатьОПодарке.Доступность = Истина;
ЭлементыФормы.КоличествоДнейДоНапоминания1.Доступность = НапоминатьОПодарке;
ЭлементыФормы.ОтветственныйЗаПодарок.Доступность = НапоминатьОПодарке;
//УТСпециалист -
КонецЕсли;
КонецПроцедуры // ДоступностьДанныхНапоминанияОДнеРождения()
(Если хватает времени то можно для справочника.КонтактныеЛицаКонтрагентов форма ФормаВводаНового проделать аналогичные действия (там реквизиты формы)
3. Находим ОбщийМодуль - МодульРегламентныхЗаданий:
//////////После всего добавляем
////УТ_Специалист +
//ПОДАРКИ
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Контакты.КонтактноеЛицо КАК КонтактноеЛицо,
| Контакты.КонтактноеЛицо.ОтветственныйЗаПодарок КАК Исполнитель,
| Контакты.КонтактноеЛицо.КоличествоДнейДоПодарка КАК ИнтервалДней,
| Контакты.КонтактноеЛицо.ДатаРождения КАК ДатаРождения,
| Задачи.СрокИсполнения КАК Срок
|ИЗ
| Справочник.КонтактныеЛицаКонтрагентов КАК Контакты
| ЛЕВОЕ СОЕДИНЕНИЕ Задача.ЗадачиПользователя КАК Задачи
| ПО (Задачи.Объект = Контакты.КонтактноеЛицо)
| И (Задачи.Оповещение = ИСТИНА)
| И (Задачи.ПамятнаяДата = ИСТИНА)
| И (Задачи.СрокИсполнения > ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ГОД, РАЗНОСТЬДАТ(Контакты.КонтактноеЛицо.ДатаРождения, ДОБАВИТЬКДАТЕ(&ТекДата, ДЕНЬ, Контакты.КонтактноеЛицо.КоличествоДнейДоПодарка), МЕСЯЦ) / 12 - 1))
|ГДЕ
| Контакты.КонтактноеЛицо.НапоминатьОПодарке = ИСТИНА
| И Контакты.КонтактноеЛицо.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1)
| И Контакты.Владелец ССЫЛКА Справочник.Контрагенты
| И Контакты.Владелец <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
| И Контакты.КонтактноеЛицо.ОтветственныйЗаПодарок <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
| И (ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ГОД, ГОД(&ТекДата) - ГОД(Контакты.КонтактноеЛицо.ДатаРождения)) >= &ТекДата
| И ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ДЕНЬ, -Контакты.КонтактноеЛицо.КоличествоДнейДоПодарка), ГОД, ГОД(&ТекДата) - ГОД(Контакты.КонтактноеЛицо.ДатаРождения)) <= &ТекДата
| ИЛИ ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ГОД, ГОД(&ТекДата) - ГОД(Контакты.КонтактноеЛицо.ДатаРождения)) >= ДОБАВИТЬКДАТЕ(&ТекДата, ГОД, -1)
| И ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ДЕНЬ, -Контакты.КонтактноеЛицо.КоличествоДнейДоПодарка), ГОД, ГОД(&ТекДата) - ГОД(Контакты.КонтактноеЛицо.ДатаРождения)) <= ДОБАВИТЬКДАТЕ(&ТекДата, ГОД, -1))
| И Задачи.СрокИсполнения ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ЛичныеКонтакты.Ссылка,
| ЛичныеКонтакты.ОтветственныйЗаПодарок,
| ЛичныеКонтакты.КоличествоДнейДоПодарка,
| ЛичныеКонтакты.ДатаРождения,
| Задачи.СрокИсполнения
|ИЗ
| Справочник.ЛичныеКонтакты КАК ЛичныеКонтакты
| ЛЕВОЕ СОЕДИНЕНИЕ Задача.ЗадачиПользователя КАК Задачи
| ПО (Задачи.Объект = ЛичныеКонтакты.Ссылка)
| И (Задачи.Оповещение = ИСТИНА)
| И (Задачи.ПамятнаяДата = ИСТИНА)
| И (Задачи.СрокИсполнения > ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ГОД, РАЗНОСТЬДАТ(ЛичныеКонтакты.ДатаРождения, ДОБАВИТЬКДАТЕ(&ТекДата, ДЕНЬ, ЛичныеКонтакты.КоличествоДнейДоПодарка), МЕСЯЦ) / 12 - 1))
|ГДЕ
| ЛичныеКонтакты.НапоминатьОПодарке = ИСТИНА
| И ЛичныеКонтакты.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1)
| И ЛичныеКонтакты.ОтветственныйЗаПодарок <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
| И (ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ГОД, ГОД(&ТекДата) - ГОД(ЛичныеКонтакты.ДатаРождения)) >= &ТекДата
| И ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ДЕНЬ, -ЛичныеКонтакты.КоличествоДнейДоПодарка), ГОД, ГОД(&ТекДата) - ГОД(ЛичныеКонтакты.ДатаРождения)) <= &ТекДата
| ИЛИ ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ГОД, ГОД(&ТекДата) - ГОД(ЛичныеКонтакты.ДатаРождения)) >= ДОБАВИТЬКДАТЕ(&ТекДата, ГОД, -1)
| И ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ДЕНЬ, -ЛичныеКонтакты.КоличествоДнейДоПодарка), ГОД, ГОД(&ТекДата) - ГОД(ЛичныеКонтакты.ДатаРождения)) <= ДОБАВИТЬКДАТЕ(&ТекДата, ГОД, -1))
| И Задачи.СрокИсполнения ЕСТЬ NULL ";
//УТ Специалист –
Запрос менялся «по аналогии».
Для проверки изменяем расписание регламентного задания ФормированиеПоздравленийСДнемРождения
Ставим каждые 60 сек например.
Из ошибок: идеально сделать пользователя, ответственного за подарки через регистр сведений. (я сдал и без этого, но правильно через регистр сведений)
Сообщение отредактировал ignsv - 12.12.12, 16:37