Кнопка выбора периода

Довольно редко использую, потому забываю постоянно, вот сделал себе очередную шпаргалку, как делается кнопка выбора периода в 1с на управляемых формах. Итак, первым делом создайте реквизит формы, с типом «стандартный период»:

кнопка выбора периода

Далее, перетаскиваем этот реквизит на форму, и добавляю обычные реквизиты с типом Дата+Время:

Осталось всего ничего — добавить обработчик события «при изменении»:


&НаКлиенте
Процедура ВыборПериодаПриИзменении(Элемент)
	НачПериода = ВыборПериода.ДатаНачала;
	КонПериода = ВыборПериода.ДатаОкончания;
	
	Сообщить("Начало: " + НачПериода + ", окончание: " + КонПериода);
КонецПроцедуры

На этом задача «кнопка выбора периода» будем считать завершена. Еще больше всяких шпаргалок по 1С, легко найдется здесь.

Сколько дней в году

Иногда возникает задача, как определить сколько дней в году на языке 1С. Их есть у нас (с), ну я имею ввиду решение.. Странно конечно, что в 1С нет готовой функции, приходится напрягать мозжечок (ну или гугл/яндекс) и велосипедить. Ну на самом деле есть несколько вариантов, Например первый вариант:

Функция ДнейВЭтомГоду()
 Дата = ТекущаяДата();
 ДнейВГоду = ДеньГода(КонецГода(Дата));
 возврат ДнейВГоду;
конецфункции

Основан на функциях 1С которые позволяют определить порядковый номер дня по переданной дате. Т.е. передаём в неё последний день текущего года, и получаем или 365 или 366, в зависимости от високосности года.

Есть другой вариант того-же решения:

Функция ДнейВЭтомГоду()
 Попытка
   А = Дата(Год(ТекущаяДата()),2,29);
   Возврат 366;
 Исключение
   Возврат 365;
 КонецПопытки;
КонецФункции 

,проверяем наличие 29 Февраля в этом году. Если возникает исключение, значит в этом году 365 дней, иначе — 366.

Есть еще вариант с делением года на 4. Если он делится без остатка, то год високосный. Но там есть исключения для некоторых годов. Ну и самый тупой 😉 способ определить сколько дней в году:

Сколько дней в году

1С: Поиск слова обрамлённого символами

В продолжение этого. Пользователи оказались немножко более изобретательными, чем предполагал программист, и начали в комментариях писать и что-то типа:

Контролер процесса {Коновалова Е.П.} очень хочет получить премию в размере (20 рублей)!

Соответственно описанная в предыдущей статье функция начала определять только «20 рублей». Т.е. алгоритм не предусматривал наличие нескольких вложений скобок внутри строки. Поправим это:


Функция СложитьМассивы(массив1,массив2) экспорт
	для каждого эл из массив2 цикл
		массив1.добавить(эл);
	конеццикла;	
	возврат массив1;
конецфункции	
              
             
Функция ВычленитьМассивФИОИзСкобок(стр,стрн,стрк) экспорт
	 МассивФИО=Новый Массив();
	 // сначала вычленяем из ()
	 массивКонцовСкобки=СтрРазделить(стр,стрк);
	 для каждого эл из массивКонцовСкобки цикл
		если СтрНайти(эл,стрн)>0 тогда
			МассивНачалСкобки=СтрРазделить(эл,стрн);	 		
			если СокрЛП(МассивНачалСкобки[1])<>"" тогда
				МассивФИО.Добавить(СокрЛП(МассивНачалСкобки[1]));		
			конецесли;
		конецесли;
	конеццикла;	 	
	возврат МассивФИО; 
конецфункции	

				контролеры=ВычленитьМассивФИОИзСкобок(body.message,"(",")");
				контролеры=СложитьМассивы(контролеры,ВычленитьМассивФИОИзСкобок(body.message,"{","}"));
				контролеры=СложитьМассивы(контролеры,ВычленитьМассивФИОИзСкобок(body.message,"<",">"));
				контролеры=СложитьМассивы(контролеры,ВычленитьМассивФИОИзСкобок(body.message,"[","]"));

В результате в переменную попадает массив слов заключенных в скобки

1С: поиск слова обрамлённого символами

Задача: поместить в переменную содержимое строки обрамленной скобками. Т.е. например Есть строка вида:

начальная_строка="Это строка {пример} того что нужно сделать";

Нужно положить в переменную строчку содержащуюся внутри скобок. Решение:

&НаСервере
Функция ПолучитьПеременнуюИзСтроки(ПереданнаяСтрока,Откр,Закр) Экспорт
	Переменная = "";
	ПервыйСимвол = Найти(ПереданнаяСтрока,Откр);
	Если  ПервыйСимвол > 0 Тогда
		ВторойСимвол = Найти(ПереданнаяСтрока,Закр);
		Если  (ВторойСимвол > 0) И (ВторойСимвол > ПервыйСимвол) Тогда
			Переменная = (Сред(ПереданнаяСтрока,ПервыйСимвол+1,ВторойСимвол-ПервыйСимвол-1));
		КонецЕсли;	
		
	КонецЕсли;	
	Возврат Переменная;	
КонецФункции  

&НаСервере
Процедура ТрямНаСервере()
	сооб="Контролер процесса {Коновалова Е.П.} очень хочет получить премию!";
	контролер=ПолучитьПеременнуюИзСтроки(сооб,"{","}");
КонецПроцедуры

Cпособы отправки письма из 1С

Итак, рассмотрю способы отправки письма из 1С. На самом деле навелосипедить можно и больше, но мне хватит 😉

1) На «прямую», без использования БСП:

	Профиль = Новый ИнтернетПочтовыйПрофиль;
	Профиль.АдресСервераSMTP = "цукацукацука";
	Профиль.ПортSMTP = 465;
	
	Профиль.POP3ПередSMTP = ложь;
	Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
	
	Профиль.ИспользоватьSSLSMTP = ложь;
	
	Профиль.ТолькоЗащищеннаяАутентификацияSMTP = ложь;
	
	Профиль.Пользователь = "vуцкацука1-Noreply@укацукацука.ru";
	Профиль.Пароль = "Hцукацукаg";
	Профиль.ПользовательSMTP = "vцукауцкаly@цукацука.ru";
	Профиль.ПарольSMTP = "укацукацу";
	
	//Профиль.Таймаут = 60;
	
	Почта = Новый ИнтернетПочта;
	                                 
	Сообщить("Проверка cоединения..");
	Попытка
		Почта.Подключиться(Профиль, ПротоколИнтернетПочты.POP3);
		Сообщить("POP3: соединение ОК");
		Сообщить("SMTP: соединение ОК");
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	
	
	Попытка
		Почта.Подключиться(Профиль);
		
		Письмо = Новый ИнтернетПочтовоеСообщение;
		Письмо.Тема = Заголовок;
	
		// формируем адрес получателя	
		Получатель = Письмо.Получатели.Добавить(Кому);
		Получатель.ОтображаемоеИмя = Кому;
	
		// добавляем к письму имя отправителя
		Письмо.ИмяОтправителя              = "Сцукауцкания";
		Письмо.Отправитель.ОтображаемоеИмя = "Сцукаувцукацукания";
		сообщить(константы.СК_Почта_Отправитель.Получить());
		Письмо.Отправитель.Адрес           = "noreply@цукаука.ru";
	
		// добавляем текст
		Текст = Письмо.Тексты.Добавить(Тело);
		Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
		
		Почта.Послать(Письмо, , ПротоколИнтернетПочты.SMTP);
		
		Сообщить("SMTP: посылка ОК");
		
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;

2) Используя БСП «Свежих» версий. Не могу сказать точно с какой версий, года примерно с двадцатого:

    УчетнаяЗаписьПочты = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); 
 
	попытка                                                                                  
	ПараметрыСообщения = Новый Структура;
	ПараметрыСообщения.Вставить("Кому",     Кому);
	ПараметрыСообщения.Вставить("Тема",     Заголовок);
	ПараметрыСообщения.Вставить("Тело",     Тело);

		Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗаписьПочты, ПараметрыСообщения);
		РаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗаписьПочты, Письмо);		
	исключение
		сообщить("ой!");
		Сообщить(ОписаниеОшибки());
	конецпопытки;

3) Используя БСП «старых версий»… Очень старых… Где-то года 2015 и ранее:

УчетнаяЗаписьПочты = РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись();
ПараметрыПисьма = Новый Структура("Кому, Тема, Тело,ТипТекста", email, "цуацукау", тело,"HTML");
		РаботаСПочтовымиСообщениями.ОтправитьСообщение(УчетнаяЗаписьПочты, ПараметрыПисьма);

1 7 8 9 10 11 37