Имя: Пароль:
1C
1С v8
Отладка регламентного задания 1С 8.1
0 AnisaL
 
05.03.13
08:30
Добрый день!! Скажите пожалуйста, как отлаживать регламентное фоновое задание поздравления с днем рождения?
1 AnisaL
 
05.03.13
08:32
// Процедура формирует задачи о необходимости поздравить с днем рождения
//
Процедура СоздатьЗадачиПоздравленияСДнемРождения() Экспорт
   
   УсловиеЗадачи = УправлениеОтношениямиСПоставщикамиИПокупателями.ПолучитьСтрокуУсловияДР();
   
   Запрос = Новый Запрос;

   Запрос.Текст = "
   |ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    Контакты.КонтактноеЛицо                             КАК КонтактноеЛицо,
   |    Контакты.Владелец.ОсновнойМенеджерПокупателя        КАК Исполнитель,
   |    Контакты.КонтактноеЛицо.КоличествоДнейДоНапоминания КАК ИнтервалДней,
   |    Контакты.КонтактноеЛицо.ДатаРождения                КАК ДатаРождения,
   |    Задачи.СрокИсполнения                               КАК Срок
   |ИЗ
   |    Справочник.КонтактныеЛицаКонтрагентов КАК Контакты
   |ЛЕВОЕ СОЕДИНЕНИЕ
   |    Задача.ЗадачиПользователя КАК Задачи
   |ПО
   |    Задачи.Объект = Контакты.КонтактноеЛицо
   |    И Задачи.Оповещение = ИСТИНА
   |    И Задачи.СрокИсполнения > ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ГОД, РАЗНОСТЬДАТ(Контакты.КонтактноеЛицо.ДатаРождения, ДОБАВИТЬКДАТЕ(&ТекДата, ДЕНЬ, Контакты.КонтактноеЛицо.КоличествоДнейДоНапоминания), МЕСЯЦ)/12 - 1)
   |    И Задачи.ПамятнаяДата = ИСТИНА
   |ГДЕ
   |    Контакты.КонтактноеЛицо.НапоминатьОДнеРождения = ИСТИНА
   |    И Контакты.Владелец ССЫЛКА Справочник.Контрагенты
   |    И Контакты.Владелец <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
   |    И Контакты.Владелец.ОсновнойМенеджерПокупателя <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
   |    И ((ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ГОД, (ГОД(&ТекДата) - ГОД (Контакты.КонтактноеЛицо.ДатаРождения))) >= &ТекДата
   |    И ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ДЕНЬ, -(Контакты.КонтактноеЛицо.КоличествоДнейДоНапоминания)), ГОД, (ГОД(&ТекДата) - ГОД (Контакты.КонтактноеЛицо.ДатаРождения))) <= &ТекДата)
   |    ИЛИ (ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ГОД, (ГОД(&ТекДата) - ГОД (Контакты.КонтактноеЛицо.ДатаРождения))) >= ДОБАВИТЬКДАТЕ(&ТекДата, ГОД, -1)
   |    И ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(Контакты.КонтактноеЛицо.ДатаРождения, ДЕНЬ, -(Контакты.КонтактноеЛицо.КоличествоДнейДоНапоминания)), ГОД, (ГОД(&ТекДата) - ГОД (Контакты.КонтактноеЛицо.ДатаРождения))) <= ДОБАВИТЬКДАТЕ(&ТекДата, ГОД, -1)))
   |    И Задачи.СрокИсполнения ЕСТЬ NULL
   |
   |ОБЪЕДИНИТЬ
   |
   |ВЫБРАТЬ
   |    ЛичныеКонтакты.Ссылка,
   |    ЛичныеКонтакты.ПользовательДляОграниченияПравДоступа,
   |    ЛичныеКонтакты.КоличествоДнейДоНапоминания,
   |    ЛичныеКонтакты.ДатаРождения,
   |    Задачи.СрокИсполнения
   |ИЗ
   |    Справочник.ЛичныеКонтакты КАК ЛичныеКонтакты
   |ЛЕВОЕ СОЕДИНЕНИЕ
   |    Задача.ЗадачиПользователя КАК Задачи
   |ПО
   |    Задачи.Объект = ЛичныеКонтакты.Ссылка
   |    И Задачи.Оповещение = ИСТИНА
   |    И Задачи.СрокИсполнения > ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ГОД, РАЗНОСТЬДАТ(ЛичныеКонтакты.ДатаРождения, ДОБАВИТЬКДАТЕ(&ТекДата, ДЕНЬ, ЛичныеКонтакты.КоличествоДнейДоНапоминания), МЕСЯЦ)/12 - 1)
   |    И Задачи.ПамятнаяДата = ИСТИНА
   |ГДЕ
   |    ЛичныеКонтакты.НапоминатьОДнеРождения = ИСТИНА
   |    И ЛичныеКонтакты.ПользовательДляОграниченияПравДоступа <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
   |    И ((ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ГОД, (ГОД(&ТекДата) - ГОД (ЛичныеКонтакты.ДатаРождения))) >= &ТекДата
   |    И ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ДЕНЬ, -(ЛичныеКонтакты.КоличествоДнейДоНапоминания)), ГОД, (ГОД(&ТекДата) - ГОД (ЛичныеКонтакты.ДатаРождения))) <= &ТекДата)
   |    ИЛИ (ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ГОД, (ГОД(&ТекДата) - ГОД (ЛичныеКонтакты.ДатаРождения))) >= ДОБАВИТЬКДАТЕ(&ТекДата, ГОД, -1)
   |    И ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(ЛичныеКонтакты.ДатаРождения, ДЕНЬ, -(ЛичныеКонтакты.КоличествоДнейДоНапоминания)), ГОД, (ГОД(&ТекДата) - ГОД (ЛичныеКонтакты.ДатаРождения))) <= ДОБАВИТЬКДАТЕ(&ТекДата, ГОД, -1)))
   |    И Задачи.СрокИсполнения ЕСТЬ NULL
   |";
   
   Запрос.УстановитьПараметр("ТекДата"      , ТекущаяДата());
   
   РезультатЗапроса = Запрос.Выполнить().Выбрать();
   Пока РезультатЗапроса.Следующий()Цикл
       
       НоваяЗадача = Задачи.ЗадачиПользователя.СоздатьЗадачу();
       НоваяЗадача.Дата           =ТекущаяДата();
       НоваяЗадача.Наименование   = Строка(РезультатЗапроса.КонтактноеЛицо) + ". " + УсловиеЗадачи;
       НоваяЗадача.ПамятнаяДата   = Истина;
       НоваяЗадача.Исполнитель    = РезультатЗапроса.Исполнитель;
       НоваяЗадача.Инициатор      = РезультатЗапроса.Исполнитель;
       НоваяЗадача.СрокИсполнения = Дата(Год(ТекущаяДата() + (РезультатЗапроса.ИнтервалДней * 24 * 60 * 60)), Месяц(РезультатЗапроса.ДатаРождения), День(РезультатЗапроса.ДатаРождения), 00, 00, 00);
       НоваяЗадача.Оповещение     = Истина;
       НоваяЗадача.СрокОповещения = НоваяЗадача.СрокИсполнения - (РезультатЗапроса.ИнтервалДней * 24 * 60 * 60);
       НоваяЗадача.Объект         = РезультатЗапроса.КонтактноеЛицо;
       
       Попытка
           НоваяЗадача.Записать();
       Исключение
       КонецПопытки;
       
   КонецЦикла;
       
КонецПроцедуры // СоздатьЗадачиПоздравленияСДнемРождения()
2 AnisaL
 
05.03.13
08:32
(1) Вот сама процедура, но она не работает, не пойму почему
3 AnisaL
 
05.03.13
08:33
(2) Т.е. ЗадачаПользователя не формируется
4 Галахад
 
гуру
05.03.13
08:35
Может нету именинников?
5 AnisaL
 
05.03.13
08:36
(4) Есть, сегодня)
6 Лодырь
 
05.03.13
08:38
Может разделить задачу на две? 1 - получить уверенность что запрос выдает именно то что задумывалось, 2 - проверить что задача формируется из неких произвольных данных. И кстати добавить обработку ошибки записи задачи, хотя б узнаешь что она не срабатывает.
7 AnisaL
 
05.03.13
08:41
(6) Ага, можно) подскажи какие
8 Галахад
 
гуру
05.03.13
08:46
Прикольно.
9 AnisaL
 
05.03.13
08:48
(8) Что прикольного?
10 Галахад
 
гуру
05.03.13
08:50
(7) Прикольно.
11 AnisaL
 
05.03.13
08:50
А может запрос по-другому написать, упростить его)
12 Галахад
 
гуру
05.03.13
08:51
(11) Кто мешает-то?
13 AnisaL
 
05.03.13
08:53
(12) по сути нам не нужны контактные лица контрагентов, а нужно просто чтоб сотрудников фирмы поздравить
14 Галахад
 
гуру
05.03.13
08:57
(13) А нафига, тогда (0)? ДР сотрудников искать у контрагентов?
Наверное, нужно в ЗУП заглянуть. Или в Камин.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.