Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос на конфигурирование №2
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Готовимся к сдаче специалистов по платформе 8 > 1С:Специалист по Управлению торговлей 8
ignsv
Вопрос
В качестве исходной использовать типовую конфигурацию "Управление торговлей для Украины".
Необходимо внести изменения в механизм напоминания о днях рождения.
Как в личных контактах, так и в контактах контрагентов необходимо предусмотреть возможность установки флага "Подарок". В случае если флаг для контакта отмечен, перед наступление дня рождения (заранее за указаное специально для подарка количество дней) должно формироваться дополнительное напоминание сотруднику, ответственному за подготовку подарка. Количество дней до напоминания о дне рождении и подготовке подарке могут различаться.
В разное время обязанности по подготовке подарка могут возлагаться на разных сотрудников. Напоминание должно формироваться на того сотрудника, кто на момент его формирования исполняет данные обязаности.
ignsv
Мой вариант:
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 сек например.

Из ошибок: идеально сделать пользователя, ответственного за подарки через регистр сведений. (я сдал и без этого, но правильно через регистр сведений)
BoryaMbi
Вопрос: какие измерения в регистре сведений?
Hokum
Решение с регистром сведений:
1. Создаем регистр сведений «ОтветственныйЗаПодарок», Измерения – нет, Ресурс: Ответственный()
2. У «КонтактныеЛица» и «ЛичныеКонтакты» создаем реквизиты «НапомнитьОПодарке» и «КолвоДнейДоПодарка»
3. В ОщемМодуле «МодульРегламентныхЗаданий» правим процедуру «СоздатьЗадачиПоздравленияСДнемРождения» (точнее запрос)
4. По аналогии с напоминанием о дне рождения формируем напоминание о подарке, (запрос один с объединением)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.