Шаблоны кода 1С


Добавить новый Назад

Диалог выбора файла

Стандартный диалог выбора файла

ДиалогВыбораФайла РежимДиалогаВыбораФайла

    Режим = РежимДиалогаВыбораФайла.Открытие; 
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); 
    ДиалогОткрытияФайла.ПолноеИмяФайла = ""; 
    Фильтр = "Текст(*.txt)|*.txt"; 
    ДиалогОткрытияФайла.Фильтр = Фильтр; 
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь; 
    ДиалогОткрытияФайла.Заголовок = "Выберите файл"; 

    Если ДиалогОткрытияФайла.Выбрать() Тогда 
        ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла; 
    КонецЕсли;
Добавить комментарий

Дата создания ссылки

Получение даты и времени по ГУИДу ссылки

Функция ДатаСозданияСсылки(Ссылка) Экспорт
	
	Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
		Возврат Неопределено;
	КонецЕсли;	
		
	Момент = Дата(1, 1, 1);
	Попытка
		
        УИ = Строка(Ссылка.УникальныйИдентификатор());
        УИ = ВРег(СтрЗаменить(УИ,"-",""));
		
		Если Сред(УИ, 13, 1) = "1" Тогда
			
            Значение16 = ВРег(Сред(УИ, 14, 3) + Сред(УИ, 9, 4) + Сред(УИ, 1, 8));
            Цифры16    = "123456789ABCDEF";
            Значение10 = 0;
            Длина16    = СтрДлина(Значение16);
			
			Для Ном = 1 По Длина16 Цикл
                Значение10 = Значение10 + Pow(16, Длина16-Ном)*Найти(Цифры16, Сред(Значение16, Ном, 1));
			КонецЦикла;
			
            Значение10 = Значение10/10000000;
            Момент     = Дата(1582, 10, 15, 3, 0, 0) + Значение10;
			
		КонецЕсли;
		
    Исключение
    КонецПопытки;
	
	Возврат Момент;
		
КонецФункции
Добавить комментарий

Кнопки управления группировками

Кнопки управления группировками, отчет

Процедура СгенерироватьКнопкиУправленияГруппировкой(ЭлементТабПоле, Панель)

//	ЭлементТабПоле = ЭлементыФормы.ТабДопИнформация;
	
    НачалоВерх = ЭлементТабПоле.Верх + 3; // Привязка к верхнему левому углу ПоляТабличногоДокумента
    НачалоЛево = ЭлементТабПоле.Лево + 3; // Привязка к верхнему левому углу ПоляТабличногоДокумента

	Имя = ЭлементТабПоле.Имя;
	
    ШагКнопок      		= 13;
    ПрефиксИмениКн 		= "КнГрГор_" + Имя + "_";
	ПрефиксИмениКнВерт 	= "КнГрВерт_" + Имя + "_";

    // Удалить старые кнопки
    Сч = 0;
    Пока Сч < ЭлементыФормы.Количество() Цикл
        ТекЭлемент = ЭлементыФормы.Получить(Сч);
		Если (Найти(ТекЭлемент.Имя, ПрефиксИмениКн) > 0) ИЛИ
			 (Найти(ТекЭлемент.Имя, ПрефиксИмениКнВерт) > 0) Тогда
            ЭлементыФормы.Удалить(ТекЭлемент);
        Иначе
            Сч = Сч + 1;
        КонецЕсли;
    КонецЦикла;

    // Добавть новые кнопки по количеству группировок
    КоличествоГруппировок = ЭлементТабПоле.КоличествоУровнейГруппировокСтрок();
    Для Сч = 1 По КоличествоГруппировок Цикл
        НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ПрефиксИмениКн + Сч, , Панель);
        НоваяКнопка.Верх      = НачалоВерх;
        НоваяКнопка.Лево      = НачалоЛево + (ШагКнопок * (Сч - 1));
        НоваяКнопка.Высота    = 11;
        НоваяКнопка.Ширина    = 11;
        НоваяКнопка.Шрифт     = Новый Шрифт("Шрифт диалогов и меню", 6);
        НоваяКнопка.Заголовок = "" + Сч;
        НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("СвернутьДоУровня"));
	КонецЦикла;
	
	НачалоЛево = НачалоЛево + Сч * ШагКнопок + 3;
	// Добавть новые кнопки по количеству группировок
    КоличествоГруппировок = ЭлементТабПоле.КоличествоУровнейГруппировокКолонок();
    Для Сч = 1 По КоличествоГруппировок Цикл
        НоваяКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), ПрефиксИмениКнВерт + Сч, , Панель);
        НоваяКнопка.Верх      = НачалоВерх + (ШагКнопок * (Сч - 1));
        НоваяКнопка.Лево      = НачалоЛево;
        НоваяКнопка.Высота    = 11;
        НоваяКнопка.Ширина    = 11;
        НоваяКнопка.Шрифт     = Новый Шрифт("Шрифт диалогов и меню", 6);
        НоваяКнопка.Заголовок = "" + Сч;
        НоваяКнопка.УстановитьДействие("Нажатие", Новый Действие("СвернутьДоУровняКолонки"));
    КонецЦикла;

КонецПроцедуры //СгенерироватьКнопкиУправленияГруппировкой()

Процедура СвернутьДоУровня(Элемент)

    Уровень = Число(Элемент.Заголовок); // здесь записан нужный уровень
	
	Имя = СтрЗаменить(Элемент.Имя, "_", Символы.ПС);
	Имя = СтрПолучитьСтроку(Имя, 2);
	
    ЭлементыФормы[Имя].ПоказатьУровеньГруппировокСтрок(Уровень - 1);

КонецПроцедуры //СвернутьДоУровня()

Процедура СвернутьДоУровняКолонки(Элемент)

    Уровень = Число(Элемент.Заголовок); // здесь записан нужный уровень
	
	Имя = СтрЗаменить(Элемент.Имя, "_", Символы.ПС);
	Имя = СтрПолучитьСтроку(Имя, 2);
	
    ЭлементыФормы[Имя].ПоказатьУровеньГруппировокКолонок(Уровень - 1);

КонецПроцедуры //СвернутьДоУровня()
Добавить комментарий

Очистка регистра сведений

Очистка независимого регистра сведений. Минимум кода. Будьте внимательны при использовании. (удаление всех записей, форматирование)

НаборЗаписей = РегистрыСведений.НазваниеМоегоРегистра.СоздатьНаборЗаписей(); 
//если нужно, например, очистить по одному конкретному измерению, то раскоментируем строчку,
//меняем измерение:
//НаборЗаписей.Отбор.Организация.Установить(УдаляемаяОрганизация); 
НаборЗаписей.Записать();
Добавить комментарий

Отправка Интернет Почты

Отправить почту из 1С

//Прежде всего нам понадобится smtp-сервер для отправки писем. Параметры сервера записываем в переменную с типом  ИнтернетПочтовыйПрофиль.

ПараметрыПочты = новый ИнтернетПочтовыйПрофиль;
ПараметрыПочты.АдресСервераSMTP = "smtp.server.com";
ПараметрыПочты.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
ПараметрыПочты.ПользовательSMTP = "user";
ПараметрыПочты.ПарольSMTP="pass";

//После этого создаем само письмо. Необходимо задать имена и адреса отправителя и получателя, тему письма, текст. Можно добавить вложения.

Письмо=новый ИнтернетПочтовоеСообщение;
Письмо.Тема="Уведомление о задолженности";
Письмо.ИмяОтправителя="ООО Рога и копыта";
Письмо.Отправитель="bill@roga.ru";
Письмо.Получатели.Добавить("director@firma.ru");
Письмо.Тексты.Добавить("Текст письма");
Письмо.Вложения.Добавить("адрес файла вложения на жестком диске");

//И в конце концов отправляем сформированное письмо.

Подключение=новый ИнтернетПочта;
Попытка
Подключение.Подключиться(ПараметрыПочты);
Подключение.Послать(Письмо);
Сообщить ("Письмо отправлено успешно.");
Исключение
Сообщить ("Письмо не отправлено." + ОписаниеОшибки());
КонецПопытки;
Добавить комментарий

Разложить строку в массив

Функция 	РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
	МассивСтрок = Новый Массив();
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр, Разделитель);
			Если Поз = 0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр, Поз - 1));
			Стр = СокрЛ(Сред(Стр, Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр,Разделитель);
			Если Поз = 0 Тогда
				МассивСтрок.Добавить(Стр);
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(Лев(Стр, Поз - 1));
			Стр = Сред(Стр, Поз + ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;	
КонецФункции
Добавить комментарий

Поиск в таблице значений неуникальных значений

Отбор = Новый Структура;
Отбор.Вставить("Цвет", "Зелёный");
Строки = Таб.НайтиСтроки(Отбор);
Для Каждого Стр Из Строки Цикл
    Сообщить(Стр.Фрукт); // Яблоко Киви
КонецЦикла;
Добавить комментарий

Загрузка из excel, xls

Простая загрузка из excel, xls


////1
Процедура Загрузить();
                                
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.displayalerts = 0;
        Excel.WorkBooks.Open(КаталогДБФ);
        Состояние("Обработка файла Microsoft Excel...");
        ExcelЛист = Excel.Sheets(1);
    Исключение 
        Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
        Excel.WorkBooks.Close(); Excel = 0;
        Возврат;
    КонецПопытки;  
    
    ТЗ = ПрочитатьЛистExcel(, ExcelЛист,,,,6);
    
    Excel.WorkBooks.Close();
    Excel = 0;          
    
КонецПроцедуры;  


Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
    
    Если ЛистЭксель = Неопределено Тогда
        ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
    КонецЕсли;
    Если ВсегоСтрок = 0 Тогда
        ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
    КонецЕсли;
    Если ВсегоКолонок = 0 Тогда
        ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
    КонецЕсли;
    Если ТЗ = Неопределено Тогда
        ТЗ =  Новый ТаблицаЗначений;
        Для Счетчик = 1 По ВсегоКолонок Цикл
            ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
        КонецЦикла;
    КонецЕсли;
    Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
        НоваяСтрока = ТЗ.Добавить();
    КонецЦикла;
    
    Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
    Данные = Область.Value.Выгрузить();
    
    Для Счетчик = 0 По ВсегоКолонок-1 Цикл
        ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
    КонецЦикла;
    ЛистЭксель = Неопределено;
    Возврат ТЗ;
КонецФункции   

////2    
Добавить комментарий

Программное проведение документа

Программное проведение документа с закрытием формы

&НаСервере
Процедура ОпубликоватьНаСервере()
	ЭО = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.Заявка"));
	
	ЭО.Записать(РежимЗаписиДокумента.Проведение);
	
	ЗначениеВДанныеФормы(ЭО, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура Опубликовать(Команда)
	
	ОпубликоватьНаСервере();
	
	ЭтаФорма.Закрыть(); 
	
	ОбновитьИнтерфейс();
	
КонецПроцедуры
Добавить комментарий

Обработка проводок по дереву

Обработка проводок по дереву

Дерево  = мРезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
Колво   = Дерево.Строки.Количество();
Счетчик = 0;
Для каждого Строка1 Из Дерево.Строки Цикл
	
	Счетчик = Счетчик + 1;
	ОбработкаПрерыванияПользователя();
	Состояние(Строка(Счетчик) + " из " + Строка(Колво) + " " + Строка(Строка1.Регистратор));
	
	НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Регистратор.Установить(Строка1.Регистратор);
	НаборЗаписей.Прочитать();
	
	Для каждого Строка2 Из Строка1.Строки Цикл
		
		Запись = НаборЗаписей[Строка2.НомерСтроки - 1];
		
		Если Строка2.ДтКт = "Дт" Тогда
		Иначе
		КонецЕсли;	
		
	КонецЦикла;	
	
	НаборЗаписей.ОбменДанными.Загрузка = Истина;
	НаборЗаписей.Записать();
	
КонецЦикла;
Добавить комментарий

TurboConf

Удобный поиск шаблонов кода

прямо в Конфигураторе

Узнать подробнее