Форум Чистова. Подготовка к экзаменам 1С

О форуме => Конфигурирование => Тема начата: s41_blizzard от Июль 25, 2015, 04:18:10 pm

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

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

   КонецЦикла;
   

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


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

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

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

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

Название: Re: напоминалка о днях рождения при запуске 1с
Отправлено: GROOVY от Июль 26, 2015, 02:53:15 pm
Мне кажется, запросом будет намного быстрей.

Цитировать
После того, в модуле сеанса я пару циклов делаю, где в теле цикла выводится сообщение об именинах. Проблема в том, что я не знаю, как связать в одном СообщениеПользователю и дату рождения и имя. Намекните, плз, в какую сторону хотя бы думать.
Конкатенацией.
Название: Re: напоминалка о днях рождения при запуске 1с
Отправлено: s41_blizzard от Июль 26, 2015, 04:35:22 pm
Мне кажется, запросом будет намного быстрей.

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

А можно мне намекнуть к чему делать запрос? так-то у меня в общих механизмах только массивы созданы, а их обходить только циклами. Вот я на циклах голову и сломал.
Название: Re: напоминалка о днях рождения при запуске 1с
Отправлено: s41_blizzard от Июль 30, 2015, 04:50:28 pm
Все сделал, все чётко.
Название: Re: напоминалка о днях рождения при запуске 1с
Отправлено: Nickolay77 от Ноябрь 14, 2015, 03:29:22 pm
А можно полный текст программы?