Шаблоны кода 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.ДтКт = "Дт" Тогда
		Иначе
		КонецЕсли;	
		
	КонецЦикла;	
	
	НаборЗаписей.ОбменДанными.Загрузка = Истина;
	НаборЗаписей.Записать();
	
КонецЦикла;
Добавить комментарий

Вернуть СКД (источник данных таблица значений)

Вернуть СКД в УФ

функция вернутьКомпоновку(СхемаКомпоновкиДанных,ВнешниеНаборыДанных)
	Настройки 					= СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
	КомпоновщикМакета 			= Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки 			= КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);
	ПроцессорКомпоновкиДанных 	= Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных);
	ТабДок 						= Новый ТабличныйДокумент; //этаФорма.птд1
	ПроцессорВывода 			= Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ТабДок);
	ПроцессорВывода.НачатьВывод();
	Пока Истина Цикл
		ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
		Если ЭлементРезультата = Неопределено Тогда
			Прервать;
		Иначе
			ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		КонецЕсли;
	КонецЦикла;
	ПроцессорВывода.ЗакончитьВывод();
	//Результат.ПоказатьУровеньГруппировокСтрок(0)
	
	ТабДок.ОтображатьСетку 		= Ложь;
	ТабДок.ОтображатьЗаголовки 	= Ложь;
	ТабДок.ТолькоПросмотр 		= Истина;
	табДок.ПоказатьУровеньГруппировокСтрок(0);
	возврат ТабДок;
конецФункции  //функция вернутьКомпоновку(СхемаКомпоновкиДанных,ВнешниеНаборыДанных,квартал1 = "ХХ",год1 = "ХХХХ",квартал2 = "ХХ",год2 = "ХХХХ")

//************исполенение***************
Рез 			= Запрос.Выполнить().Выгрузить();
	  СхемаКомпоновкиДанных 		= обработкаОбъект.ЭтотОбъект.ПолучитьМакет("форма6и7кратко");
	ВнешниеНаборыДанных 		= Новый Структура;
	ВнешниеНаборыДанных.Вставить("рез",Рез);
	вернутьКомпоновку(СхемаКомпоновкиДанных,ВнешниеНаборыДанных).показать();
Добавить комментарий

раскраска строки табличной части документа (обычные формы) по условию

раскраска строки табличной части документа (обычные формы) по условию

Процедура выбДокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	Если (ДанныеСтроки.п="-")или(данныеСтроки.у = "+") тогда
		ОформлениеСтроки.ЦветФона = Новый Цвет(204,255,204);
	конецЕсли;
КонецПроцедуры
Добавить комментарий

пересчет реквизита табличной части обычной формы

пересчет реквизита табличной части обычной формы

Процедура Пересчет()
	СтрокаТабличнойЧасти = ЭлементыФормы.Товар.ТекущиеДанные;
	Рекв = ЭлементыФормы.Товар.ТекущаяКолонка.Данные;
	Если Рекв = "Номенклатура" Тогда
		ЦенаТ = ПолучитьЦену(СтрокаТабличнойЧасти.Номенклатура);
		СтрокаТабличнойЧасти.Цена = ЦенаТ;
		СтрокаТабличнойЧасти.Количество = 1;
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Количество" Тогда	
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Цена" Тогда
		СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
	ИначеЕсли Рекв = "Сумма" Тогда	
		СтрокаТабличнойЧасти.Цена = СтрокаТабличнойЧасти.Сумма/?(СтрокаТабличнойЧасти.Количество=0,1,СтрокаТабличнойЧасти.Количество);
	КонецЕсли;	
КонецПроцедуры
Добавить комментарий

TurboConf

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

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

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