Публикации

БСП
Разработки

Пример формирования внешней печатной формы из макета Word. БСП

Демонстрация процесса формирования внешней печатной формы документа из макета Word средствами БСП

Функция СведенияОВнешнейОбработке() Экспорт
	
	// Стандартное описание сведений о внешней печатной форме

	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	
	ПараметрыРегистрации.БезопасныйРежим = Ложь;
	ПараметрыРегистрации.Вставить("Версия", "1.0");
	ПараметрыРегистрации.Наименование = "Название печатной формы";
	
	ПараметрыРегистрации.Назначение.Добавить("Справочник.ФизическиеЛица");
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = "Название команды";   //Синоним
	НоваяКоманда.Идентификатор = "НазваниеКоманды";   //ПолноеИмя
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
		
	Возврат ПараметрыРегистрации;
	
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	// Просто передаем управление дальше если удовлетворяет условию

	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "НазваниеКоманды") Тогда
		ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати);
	КонецЕсли;
	
КонецПроцедуры

Процедура ПечатьДокумента(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати) Экспорт
	
	 // Сначала получим данные а потом передадим их для заполнения макета
		
	МассивДанныхЗаполнения = ПолучитьДанныеДляПечатиДокумента(МассивОбъектов);	
		
	ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати);
		
КонецПроцедуры 

Функция ПолучитьДанныеДляПечатиДокумента(МассивОбъектов)

	// здесь происходит заполнение данными для ПФ

	Данные = Новый Структура;
	
	...
	
	Возврат Данные;
	
КонецФункции 

Процедура ВывестиДанныеДокументаВТабличныйДокумент(КоллекцияПечатныхФорм, МассивДанныхЗаполнения, ОбъектыПечати)

	ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_НазваниеМакета");
	
	Если ДвоичныеДанныеМакета <> Неопределено Тогда
		
	// Инициализируем печатную форму	
	
		ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "НазваниеКоманды");

	// Наличие пустого табличного документа в коллекции обязательно

		ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
		
		Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета,Неопределено);
		ПечатнаяФормаДокумента = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Макет.НастройкиСтраницыМакета, Макет);		

	// Определим какие области в документе Word хотим заполнить 
	// Для этого у нас документ должен быть размечен конструкциями 
	// {v8 Область.НазваниеОбласти} 
	// {/v8 Область.НазваниеОбласти}
	// наличие областей обязательно

		ОбластьЗаявление = Новый Структура;
		ОбластьЗаявление.Вставить("ИмяОбласти", "Заявление");
		ОбластьЗаявление.Вставить("ТипОбласти", "Общая");
		
	// Передаем данные заполнения для заполнения печатной формы 
	// Имена параметров данных заполнения должны совпадать с размеченными параметрами в документе в виде  
	// {v8 НазваниеПараметра}

		Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьЗаявление);
		УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, МассивДанныхЗаполнения, Ложь);

	// Поместим получившийся документ в коллекцию печатных форм, в раздел ОфисныеДокументы
	// так БСП поймет что нужно открывать Word при формировании печатной формы

		АдресХранилищаОфисныйДокумент = УправлениеПечатью.СформироватьДокумент(ПечатнаяФормаДокумента);
		УправлениеПечатью.ОчиститьСсылки(ПечатнаяФормаДокумента, Ложь);
		УправлениеПечатью.ОчиститьСсылки(Макет);
		
		ОфисныеДокументы = Новый Соответствие;
		
		ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, НСтр("ru = 'Название документа'"));
		
		ПечатнаяФорма.СинонимМакета    = НСтр("ru = 'Название документа (документ Microsoft Word)'");
		ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
		
	КонецЕсли;

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

Не модально ввести значение определенного типа от пользователя

buketoff 30 5
/// Как не модально ввести значение определенного
/// типа от пользователя в 1с 8.3, 8.2 
 
&НаКлиенте
Процедура КакИнтерактивноВвестиЗначениеОпределенногоТипа(Команда)
 
    Оповещение = Новый ОписаниеОповещения("ПослеВводаЗначения", 
      ЭтотОбъект);	
 
    ПоказатьВводЗначения(
        Оповещение,
        , // пропускаем начальное значение
        "Введите значение",
        "Число"
    );
 
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеВводаЗначения(Результат, Параметры) Экспорт	
 
    Если Не Результат = Неопределено Тогда
        Сообщить(Результат);		
    КонецЕсли;
 
КонецПроцедуры
 

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз Промо

Быстрое и надежное обновление файловых и серверных баз, защита от шифровальщиков, автоматическое обновление доработанных конфигураций и расширений, а также многое другое.
bolsun
950 руб.

html представление виджета

html представление виджета взято из ДО и переделано
buketoff 30 5
// Возвращает html представление виджета.
//
// Параметры:
//   Заголовок - Строка - html текст заголовка виджета.
//   Подвал - Строка - html текст подвала виджета.
//   ТелоВиджета - Строка - html текст тела виджета.
//   ФонаВиджета - Строка - цвет фона виджета в виде шестнадцатеричного значения.
//   ЦветРамкиТаблицы - Строка - цвет рамок таблиц в виджете, в виде шестнадцатеричного значения.
//
// Возвращаемое значение:
//   Строка - html представление виджета.
//
Функция HTMLПредставлениеВиджета(
		Заголовок = "", Подвал = "", ТелоВиджета, ФонаВиджета, ЦветРамкиТаблицы)
	
	HTMLТекст = "<html><head><meta name=""viewport"" content=""viewport-fit=cover, width=device-width"" />"
		+ СтильHTML(ЦветРамкиТаблицы)
		+ "<body bgcolor=" + ФонаВиджета + ">";
		
	HTMLТекст = HTMLТекст + СтрЗаменить("
	|<table class=""one"">
	|<tr><td>
	|<table class=""title"">
	|<tr>
	|<td class=""menu"">
	|</td>
	|<td class=""title"">
	|<p>	
	|" + Заголовок + "
	|</td>
	|</tr>
	|</table>	
	|</td></tr>	
	|<tr class=""height100""><td>
	|" + ТелоВиджета + "
	|</td></tr>	
	|<tr><td>	
	|<table>
	|<tr>	
	|<td width=""5"">
	|</td>	
	|<td height=""18"">
	|" + Подвал + "
	|</td>	
	|</tr>
	|</table>	
	|</td></tr>	
	|</table>	
	|</body></html>", "|","");
		
		
	
	УдалитьВредоносныйКодИзТекста(HTMLТекст); 
	
	Возврат HTMLТекст;
	
КонецФункции

// Удаляет вредоносный код html из текста.
//
// Параметры:
//   Текст - Строка - текст
//
Процедура УдалитьВредоносныйКодИзТекста(Текст) Экспорт
	
	НРегТекст = НРег(Текст);
	
	МассивСтрокБезВредоносногоТекста = Новый Массив;
	
	// Удаление скриптов
	НомерСкрипта = 1;
	ПозицияНачалаОбработки = 1;
	
	Пока Истина Цикл
		
		ПозицияНачалаОткрывающегоТегаScript = СтрНайти(НРегТекст, "<script",,, НомерСкрипта);
		ПозицияНачалаЗакрывающегоТегаScript = СтрНайти(НРегТекст, "</script",,, НомерСкрипта);
		
		Если ПозицияНачалаОткрывающегоТегаScript = 0 Или ПозицияНачалаЗакрывающегоТегаScript = 0 Тогда
			Прервать;
		КонецЕсли;
		
		ПозицияОкончанияОткрывающегоТегаScript = СтрНайти(НРегТекст, ">",, ПозицияНачалаОткрывающегоТегаScript + 1);
		ПозицияОкончанияЗакрывающегоТегаScript = СтрНайти(НРегТекст, ">",, ПозицияНачалаЗакрывающегоТегаScript + 1);
		
		Если ПозицияОкончанияОткрывающегоТегаScript = 0 Или ПозицияОкончанияЗакрывающегоТегаScript = 0 Тогда
			Прервать;
		КонецЕсли;
		
		// Добавим текст до скрипта
		ТекстДоСкрипта = Сред(Текст, ПозицияНачалаОбработки, ПозицияНачалаОткрывающегоТегаScript - ПозицияНачалаОбработки);
		МассивСтрокБезВредоносногоТекста.Добавить(ТекстДоСкрипта);
		
		ПозицияНачалаОбработки = ПозицияОкончанияЗакрывающегоТегаScript + 1;
		НомерСкрипта = НомерСкрипта + 1;
		
	КонецЦикла;
	
	Если МассивСтрокБезВредоносногоТекста.Количество() > 0 Тогда
		
		// Добавим текст после последнего скрипта
		ТекстДоСкрипта = Сред(Текст, ПозицияНачалаОбработки);
		МассивСтрокБезВредоносногоТекста.Добавить(ТекстДоСкрипта);
		
		// Сформируем итоговую строку без скрипта
		Текст = СтрСоединить(МассивСтрокБезВредоносногоТекста);
	КонецЕсли;
	
КонецПроцедуры

Условное оформление на обычных формах (ОФ)

Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ОформлениеСтроки.Ячейки.Отгружен.ЦветФона = ?(ДанныеСтроки.Отгружен, WebЦвета.СветлоРозовый, WebЦвета.БледноБирюзовый);
КонецПроцедуры

Форматирование после вставки (скрипт для TurboConf)

Скрипт для TurboConf, который после вставки из буфера форматирует вставляемый фрагмент кода (например, выравниваются отступы относительно окружающего кода). //@script_name FormatAfterPaste //@script_display_name Форматировать фрагмент после вставки //@scri...
Sneer 1

СтрШаблон (8.1, 8.2, 8.3 в режиме совместимости 8.2)

Аналог функции СтрШаблон версии 8.3 для младших версий платформы. Подставляет параметры в строку по номеру. Возвращает готовую строку с подставленными параметрами.
Функция _СтрШаблон_(Шаблон, Парам1 = "", Парам2 = "", Парам3 = "", Парам4 = "", Парам5 = "",
					Парам6 = "", Парам7 = "", Парам8 = "", Парам9 = "") экспорт					
					
	Для Сч=1 По 9 Цикл
		
		Выполнить("Шаблон = СтрЗаменить(Шаблон, ""%""+Сч, Парам"+Сч+")");
		
	КонецЦикла; 						
	
	Возврат Шаблон;
		
КонецФункции

Переменные среды (windows)

Ищет переменные среды (системные, локальные, временные)
// Функция - Переменные среды
//
// Параметры:
//  Тип	 - Строка - "System" - переменные среды операционной системы.
//					"User" - переменные среды пользователя.
//					"Volatile" - временные переменные.
//					"Process" - переменные среды текущего командного окна.
// 
// Возвращаемое значение:
//   - Соответствие, содержащая переменные среды
//
Функция ПеременныеСреды(Тип = "System") Экспорт
	
	Перем Оболочка;
	
	сПеременныеСреды = Новый Соответствие;
	
	Если ЭтоКлиентWindows() Тогда
		
		Попытка
			Оболочка = Новый COMОбъект("WScript.Shell");
			КоллекцияПеременных = Оболочка.Environment(Тип);
		Исключение
			Сообщить("Не удалось подключить компоненту 'WScript.Shell' по причине: "+ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
			Возврат сПеременныеСреды;
		КонецПопытки;
		
		Для каждого ЭлКоллекции Из КоллекцияПеременных Цикл
			
			Если НЕ ЗначениеЗаполнено(ЭлКоллекции) Тогда
				Продолжить;
			КонецЕсли; 
			
			МассивЧастей = РазложитьСтрокуВМассив(ЭлКоллекции, "=");
			
			Если МассивЧастей.Количество() = 2 Тогда
				сПеременныеСреды.Вставить(МассивЧастей.Получить(0), МассивЧастей.Получить(1));
			КонецЕсли; 
			
		КонецЦикла; 
		
		Оболочка = Неопределено;

	КонецЕсли; 
		
	Возврат сПеременныеСреды;
	
КонецФункции

Чтение значения атрибута узла XML или объекта XDTO

Позволяет произвести чтение значения атрибута узла/объекта xdto по имени, с помощью Фабрики XDTO. В конце пример использования. При чтении XML фабрикой XDTO во всех названиях узлов и свойств имеющих знак тире "-", платформа автоматически меняет тире на нижнее подчеркивание. Этот нюанс учтен в функции.
Функция ЗначениеСвойстваXDTO(ОбъектXDTO, Имя)

	ВариантИмени = СтрЗаменить(Имя, "-", "_");
	
	Значение = Неопределено;
	
	ИмяПоиска = Неопределено;
	
	Если ТипЗнч(ОбъектXDTO) = Тип("ОбъектXDTO") Тогда
		
		Свойства = ОбъектXDTO.Свойства();
		
		Для Каждого Свойство Из Свойства Цикл
			
			Если Свойство.Имя = Имя Тогда 
				
				ИмяПоиска = Имя;
				
				Прервать;
				
			ИначеЕсли Свойство.Имя = ВариантИмени Тогда
				
				ИмяПоиска = ВариантИмени;
				
				Прервать;
				
			КонецЕсли;
			
		КонецЦикла;
		
		Если ИмяПоиска <> Неопределено Тогда 
			
			Если ТипЗнч(ОбъектXDTO[ИмяПоиска]) = Тип("СписокXDTO") Тогда
				
				Значение = ОбъектXDTO.ПолучитьСписок(ИмяПоиска);
				
			Иначе
				
				Значение = ОбъектXDTO.ПолучитьXDTO(ИмяПоиска);
				
			КонецЕсли;
						
			Если ТипЗнч(Значение) = Тип("ЗначениеXDTO") Тогда
				
				Значение = Значение.Значение;
			
			КонецЕсли;
						
		КонецЕсли;
		
	ИначеЕсли ТипЗнч(ОбъектXDTO) = Тип("ЗначениеXDTO") Тогда
		
		Значение = ОбъектXDTO.Значение;
		
	КонецЕсли;

	
	Возврат Значение;

КонецФункции

// ИСПОЛЬЗОВАНИЕ
//
// На входе имеем XML. И нам нужно получить значение атрибута "message"

СтрокаXML = "
| <response>
| <payment message='Техническая ошибка'>
|  <from>
|    <amount>0.00</amount>
|  </from>
| </payment>
| </response>";

// Полный процесс получения будет выглядеть так

ЧтениеXML = Новый ЧтениеXML(); 
ЧтениеXML.УстановитьСтроку(СтрокаXML); 

Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

ЧтениеXML.Закрыть();

Платеж = ЗначениеСвойстваXDTO(Данные, "payment");

Если Платеж <> Неопределено Тогда
	
	Ошибка = ЗначениеСвойстваXDTO(Платеж, "message");  // Ошибка = "Техническая ошибка"

	Сообщить(Ошибка);

КонецЕсли;

Сообщение с открытием только что созданного документа

	Сообщение = Новый СообщениеПользователю();
	Сообщение.Текст = "Создан документ начисления паритетных взносов: " + Док;
	Сообщение.КлючДанных = Док.Ссылка;
	Сообщение.ПутьКДанным = "Объект";
	Сообщение.Сообщить();

Соединяем план и факт

Коллеги добрый вечер. Составляю отчет на СКД "Анализ расхода продуктов питания". Отчёт должен сравнивать фактические расходы продуктов с плановыми показателями. Ниже набросок Запроса (набора данных) ВЫБРАТЬ РасходПродуктовПоКДОбороты.Учреждение, РасходПр...
SDV 34 7

Обращение к имени субконто по COM

Субконто.PredefinedDataName

Менеджер ссылки по менеджеру объектов

Преобразует Справочники.Банки в СправочникСсылка.Банки
Функция МенеджерСсылкиПоМенеджеруМД(МенеджерМД)
    Результат = Неопределено;
    
    ПозицияТочки = Найти(МенеджерМД, ".");
    Результат    = Лев(МенеджерМД,   ПозицияТочки - 2) + "Ссылка" + Сред(МенеджерМД, ПозицияТочки);
    
    Возврат Результат;
КонецФункции

&НаСервере
Процедура МенеджерОбъектаСтрокойПриИзмененииНаСервере()
    МенеджерСсылка = МенеджерСсылкиПоМенеджеруМД(Объект.МенеджерОбъектовСтрокой);
    Элементы.Ссылка.ОграничениеТипа = Новый ОписаниеТипов(МенеджерСсылка);
КонецПроцедуры

Сопоставления объектов проводок в базе-приемнике БП3 по COM-соединению

Функция СчетБазы(База,КодСчета,Предопределенный = Истина)
    Если Предопределенный Тогда
        Результат = База.ПланыСчетов.Хозрасчетный[КодСчета];
    Иначе
        Результат = База.ПланыСчетов.Хозрасчетный.НайтиПоКоду(КодСчета);
    КонецЕсли;
    
    Возврат Результат;
КонецФункции

Функция СубконтоБазы(База,ИмяСубконто,Предопределено = Истина,ИмяПВХСубконто = "ВидыСубконтоХозрасчетные")
    Если Предопределено = Истина Тогда
        Результат = База.ПланыВидовХарактеристик[ИмяПВХСубконто][ИмяСубконто];            
    Иначе
        Результат = База.ПланыВидовХарактеристик[ИмяПВХСубконто].НайтиПоНаименованию(ИмяСубконто);
    КонецЕсли;
    Возврат Результат;    
КонецФункции

Процедура УстановитьСубконтоБазы(База,Счет, Субконто, ИмяСубконто, ЗначениеСубконто)
    База.БухгалтерскийУчет.УстановитьСубконто(Счет, Субконто, ИмяСубконто, ЗначениеСубконто);
КонецПроцедуры

Проверка поля на существование

buketoff 30 5
Если Документ.Метаданные().Реквизиты.Найти("ИмяРеквизита") = Неопределено Тогда
     Сообщить("Поле ИмяРеквизита отсутствует");
КонецЕсли;

Открытие настроек профилей безопасности в БСП

РаботаВБезопасномРежимеКлиент.ОткрытьДиалогНастройкиИспользованияПрофилейБезопасности();

Открытие значения текущей строки колонки ТабличногоПоля на УФ

&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    ИмяПоля = Сред(Поле.Имя,СтрДлина(Элемент.Имя) + 1);
    ПоказатьЗначение(Новый ОписаниеОповещения, Элемент.ТекущиеДанные[ИмяПоля]);
КонецПроцедуры

Сервер взаимодействия 1С на Python

Разработай сервер взаимодействия для 1C на Python за 5 часов!
bolsun 37 4
-10%

Создание схемы компоновки данных программно

Функция на вход принимает Запрос, Текст запроса, таблицу значений и дерево значений
miha 6 1
// Пример универсальной функции для создания схемы компоновки данных
// Опубликовал Дмитрий Иванов (kambl) в раздел Программирование - Практика программирования
// http://infostart.ru/public/575659/
//
// Если вам приходится часто создавать схему компоновки данных программно или вы начинающий специалист и пытаетесь разобраться, что же за зверь такой СКД, то эта статья может оказаться вам полезной. Функция создает схему компоновки с минимально необходимой структурой данных. С помощью передачи дополнительных параметров есть возможность добавления ресурсов и оформления.
// Появилась необходимость часто прибегать к программному созданию схемы компоновки данных. Было принято решение написать универсальную функцию принимающую различные наборы данных и на выходе возвращающую готовую СКД. Функция на вход принимает Запрос, Текст запроса, таблицу значений и дерево значений.
// Помимо набора данных функция принимает ряд необязательных параметров:
//
//  Структура ресурсов: содержит перечень полей ресурсов, где ключ - ИмяПоля, Значение(Строка) - Агрегатная функция ("Сумма", "Среднее", "Количество",  и т.д.);
//  Флаг АвтоЗаполнениеДоступныхПолей;
//  Строковое Имя макета оформления.
//
// НаборДанных (Типы: Строка, Запрос, ТаблицаЗначений, ДеревоЗначений)
// Искомый набор данных
//
// СтруктураРесурсов (Тип: Структура) - Структура полей ресурсов, где ключ - ИмяПоля, Значение(Строка) - Агрегатная функция
//
// ВноситьПоляВыбора (Тип: Булево) - Флаг добавление полей набора
//
// ИмяСтандартногоМакетаОформления (Тип: Строка) - Имя макета оформления
//
Функция СоздатьСхемуКомпоновкиДанных(НаборДанных, СтруктураРесурсов = Неопределено, АвтоЗаполнениеДоступныхПолей = Истина, ИмяСтандартногоМакетаОформления = "")
	СКД = Новый СхемаКомпоновкиДанных;

	// Заполнение основных данных схемы
	ИсточникДанных = СКД.ИсточникиДанных.Добавить();
	ИсточникДанных.Имя                = "ИсточникДанных";
	ИсточникДанных.ТипИсточникаДанных = "Local";

	Если      ТипЗнч(НаборДанных) = Тип("Строка") или
	          ТипЗнч(НаборДанных) = Тип("Запрос") Тогда
		ТекущийНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
		ТекущийНаборДанных.Имя                          = "ОсновнойНабор";
		ТекущийНаборДанных.Запрос                       = ?(ТипЗнч(НаборДанных) = Тип("Строка"), НаборДанных, НаборДанных.Текст);
		ТекущийНаборДанных.ИсточникДанных               = "ИсточникДанных";
		ТекущийНаборДанных.АвтоЗаполнениеДоступныхПолей = АвтоЗаполнениеДоступныхПолей;

		ТипНабора = "Запрос";
	ИначеЕсли ТипЗнч(НаборДанных) = Тип("ТаблицаЗначений") или
	          ТипЗнч(НаборДанных) = Тип("ДеревоЗначений") Тогда
		ТекущийНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
		ТекущийНаборДанных.Имя            = "ОсновнойНабор";
		ТекущийНаборДанных.ИмяОбъекта     = "ТаблицаИсточник"; // связывание с внешними данными идёт именно по нему
		ТекущийНаборДанных.ИсточникДанных = "ИсточникДанных";

		ТипНабора = "Объект";
	Иначе
		Возврат Неопределено;
	КонецЕсли;

	НастройкиПоУмолчанию = СКД.НастройкиПоУмолчанию;

	// Создание структуры.
	// Группировка, детальные записи и автовыбранное поле
	Группировка = НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	Группировка.Использование = Истина;

	АвтоПоле = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	АвтоПоле.Использование = Истина;

	КоллекцияКолонок = Новый ТаблицаЗначений;
	КоллекцияКолонок.Колонки.Добавить("Имя");
	КоллекцияКолонок.Колонки.Добавить("ТипЗначения");
	КоллекцияКолонок.Колонки.Добавить("Заголовок");

	Если      ТипНабора = "Запрос" Тогда
		ПостроительЗапроса = Новый ПостроительЗапроса;
		Если ТипЗнч(НаборДанных) = Тип("Строка") Тогда
			ПостроительЗапроса.Текст = СокрЛП(НаборДанных);
		Иначе
			ПостроительЗапроса.Текст = СокрЛП(НаборДанных.Текст);
		КонецЕсли;
		ПостроительЗапроса.ЗаполнитьНастройки();

		Для Каждого ПолеОтбора Из ПостроительЗапроса.ВыбранныеПоля Цикл
			НоваяКолонка = КоллекцияКолонок.Добавить();
			НоваяКолонка.Имя         = ПолеОтбора.Имя;
			НоваяКолонка.ТипЗначения = ПостроительЗапроса.ДоступныеПоля[ПолеОтбора.ПутьКДанным].ТипЗначения;
			НоваяКолонка.Заголовок   = ПолеОтбора.Представление
		КонецЦикла;
	ИначеЕсли ТипНабора = "Объект" Тогда
		Для Каждого Колонка Из НаборДанных.Колонки Цикл
			НоваяКолонка = КоллекцияКолонок.Добавить();
			НоваяКолонка.Имя = Колонка.Имя;
			НоваяКолонка.ТипЗначения = Колонка.ТипЗначения;
			НоваяКолонка.Заголовок = Колонка.Имя;
		КонецЦикла;
	КонецЕсли;

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

	// Добавление полей в набор
	Для Каждого НоваяКолонка Из КоллекцияКолонок Цикл
		ПолеНабора = ТекущийНаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		ПолеНабора.Заголовок   = СокрЛП(НоваяКолонка.Заголовок);
		ПолеНабора.Поле        = СокрЛП(НоваяКолонка.Имя);
		ПолеНабора.ПутьКДанным = СокрЛП(НоваяКолонка.Имя);

		// Удалим Неопределено и NULL
		Массив = Новый Массив;
		Для Каждого ТекущийТип Из НоваяКолонка.ТипЗначения.Типы() Цикл
			Если ТекущийТип = Тип("Неопределено") ИЛИ ТекущийТип = Тип("NULL") ИЛИ
			     ТекущийТип = Неопределено ИЛИ ТекущийТип = Null Тогда
				Продолжить;
			КонецЕсли;
			Массив.Добавить(ТекущийТип);
		КонецЦикла;
		ПолеНабора.ТипЗначения = Новый ОписаниеТипов(Массив, НоваяКолонка.ТипЗначения.КвалификаторыЧисла,
		                                             НоваяКолонка.ТипЗначения.КвалификаторыСтроки,
		                                             НоваяКолонка.ТипЗначения.КвалификаторыДаты);

		ВыбранноеПолеКомпоновкиДанных = НастройкиПоУмолчанию.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
		ВыбранноеПолеКомпоновкиДанных.Поле          = Новый ПолеКомпоновкиДанных(ПолеНабора.ПутьКДанным);
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
	КонецЦикла;

	// Оформление
	Если не ПустаяСтрока(ИмяСтандартногоМакетаОформления) Тогда
		ЗначениеПараметраВывода = НастройкиПоУмолчанию.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("МакетОформления"));
		ЗначениеПараметраВывода.Значение      = ИмяСтандартногоМакетаОформления;
		ЗначениеПараметраВывода.Использование = Истина;
	КонецЕсли;

	Возврат СКД;
КонецФункции  // СоздатьСхемуКомпоновкиДанных

Изменение видимости колонок табличной части по параметру свойству таблицы "ПланыВидовРасчета"

Алгоритм позволяет управлять видимостью колон в зависимости от значения в данной колонке. Например, если в строке, в колонке "Вид расчета" введен объект "Прогул", то колонка "Параметр" должна изменить видимость. Не используются функ опции. НаКлиенте...

Создать запись в регистре сведений

Набор = РегистрыСведений.бит_стр_СтатусыОбъектов.СоздатьМенеджерЗаписи();
Набор.ДатаИзмененияСтатуса = ТекущаяДата();
Набор.Объект = Док.Ссылка;
Набор.Статус = Справочники.бит_стр_СтатусыОбъектов.НайтиПоКоду("000000031");
Набор.Пользователь = ПараметрыСеанса.ТекущийПользователь;
Набор.Записать();