Шаблоны 1С


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отправить почту из 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    
Добавить комментарий

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

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

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

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

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

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

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

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

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

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

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

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

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

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