Автор Тема: напоминалка о днях рождения при запуске 1с  (Прочитано 3546 раз)

0 Пользователей и 1 Гость просматривают эту тему.

s41_blizzard

  • Новичок
  • *
  • Сообщений: 5
Хочу сделать так, чтобы при запуске 1с появлялось сообщение "у человека Х через У дней день рождения".
Вот код, где создаются два массива, в один  из них загоняются  даты рождений, в другой имена
Функция ПолучитьСписокИменинников ()  Экспорт
   ТД_День= День(ТекущаяДата());
   ТД_Месяц= Месяц(ТекущаяДата());
   Выборка = Справочники.Ученики.Выбрать( ,, ,"ДатаРождения");
   //Создание пустого массив
   Массив_Имя= Новый Массив();
   Пока Выборка.Следующий()  Цикл
      Если Выборка.ЭтоГруппа Тогда
         Продолжить;   
      
      КонецЕсли;
      ДР_День= День(Выборка.ДатаРождения);      
      ДР_Месяц= Месяц(Выборка.ДатаРождения);
      Если  ТД_Месяц= ДР_Месяц И ТД_День <= ДР_День   
         Тогда
         Массив_Имя.Добавить(Выборка.Наименование);
         //Массив_Имя.Добавить(Выборка.ДатаРождения);
      КонецЕсли;    
         
   
   КонецЦикла;
   
Возврат Массив_Имя;

КонецФункции
Функция ПолучитьДатыДР() Экспорт
   ТД_День= День(ТекущаяДата());
   ТД_Месяц= Месяц(ТекущаяДата());
   Выборка= Справочники.Ученики.Выбрать();
   Массив_ДатаРождения= Новый Массив();
   Пока Выборка.Следующий() = Истина Цикл
      Если Выборка.ЭтоГруппа Тогда
         Продолжить;   
      
      КонецЕсли;
      ДР_День= День(Выборка.ДатаРождения);      
      ДР_Месяц= Месяц(Выборка.ДатаРождения);
      Если  ТД_Месяц= ДР_Месяц И ТД_День <= ДР_День   
         Тогда
         Массив_ДатаРождения.Добавить(Выборка.ДатаРождения);
                  
      КонецЕсли;    

   КонецЦикла;
   

Возврат Массив_ДатаРождения;
   
КонецФункции


После того, в модуле сеанса я пару циклов делаю, где в теле цикла выводится сообщение об именинах. Проблема в том, что я не знаю, как связать в одном СообщениеПользователю и дату рождения и имя. Намекните, плз, в какую сторону хотя бы думать.

Процедура ПриНачалеРаботыСистемы()
   СписокИменинников = ОбщиеМеханизмы.ПолучитьСписокИменинников();
   ДатыИменин= ОбщиеМеханизмы.ПолучитьДатыДР();
   Для каждого Элемент из СписокИменинников Цикл
      Сообщение= Новый СообщениеПользователю ;
      Сообщение.Текст= Строка(Элемент) + "  родился";
      Сообщение.Сообщить();
      Сообщени
      
   КонецЦикла;
      
   
   
      
   
      
      
   Для каждого Элемент2 Из ДатыИменин Цикл
      //Сообщение= Новый СообщениеПользователю;
      Сообщение.Текст= "Дата Рождения -  " + День(Элемент2) + "-го" + ". Осталось " + (День(Элемент2) - День(ТекущаяДата()) )+ " дней.";
      Сообщение.Сообщить();
   КонецЦикла;
         
      

КонецПроцедуры

Я пытался один массив сделать, и его как-то мудро циклом обходить, но получилось не особо. Вот примерно так:
//Для каждого Элемент Из СписокИменинников Цикл
   //      Если ТипЗнч(Элемент)= Тип("Строка")Тогда
   //         Часть2= Элемент;
   //                  
   //      Иначе
   //         Часть1=Элемент;
   //         
   //      КонецЕсли;
   //      Если ТипЗнч(Часть2)= Тип("Строка") И ТипЗнч(Часть1)= Тип("Дата")  Тогда
   //         Сообщить(Часть2 + " родился " + День(Часть1) +"."+ Месяц(Часть1)+"." + " Осталось " + Строка((День(Часть1) - День(ТекущаяДата()))) + " дней");
   //      Иначе
   //         Продолжить;
   //      КонецЕсли;
         
         
         
    //КонецЦикла;


GROOVY

  • Администратор
  • Старожил
  • *****
  • Сообщений: 284
  • ФИО: Павел Чистов
Re: напоминалка о днях рождения при запуске 1с
« Ответ #1 : Июль 26, 2015, 02:53:15 pm »
Мне кажется, запросом будет намного быстрей.

Цитировать
После того, в модуле сеанса я пару циклов делаю, где в теле цикла выводится сообщение об именинах. Проблема в том, что я не знаю, как связать в одном СообщениеПользователю и дату рождения и имя. Намекните, плз, в какую сторону хотя бы думать.
Конкатенацией.


s41_blizzard

  • Новичок
  • *
  • Сообщений: 5
Re: напоминалка о днях рождения при запуске 1с
« Ответ #2 : Июль 26, 2015, 04:35:22 pm »
Мне кажется, запросом будет намного быстрей.

Цитировать
После того, в модуле сеанса я пару циклов делаю, где в теле цикла выводится сообщение об именинах. Проблема в том, что я не знаю, как связать в одном СообщениеПользователю и дату рождения и имя. Намекните, плз, в какую сторону хотя бы думать.
Конкатенацией.
Как применить конкатенацию, если переменные, значения которых нужно связать, находятся в разных циклах? Ведь значения переменных существуют только внутри цикла.

А можно мне намекнуть к чему делать запрос? так-то у меня в общих механизмах только массивы созданы, а их обходить только циклами. Вот я на циклах голову и сломал.

s41_blizzard

  • Новичок
  • *
  • Сообщений: 5
Re: напоминалка о днях рождения при запуске 1с
« Ответ #3 : Июль 30, 2015, 04:50:28 pm »
Все сделал, все чётко.

Nickolay77

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Николай
Re: напоминалка о днях рождения при запуске 1с
« Ответ #4 : Ноябрь 14, 2015, 03:29:22 pm »
А можно полный текст программы?