Публикации

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

ТаблицаЗначений из кроны ДереваЗначений

Функция - Возвращает ТаблицуЗначений из "бездетных" (листья всех ветвей/крона/конечные узлы) строк Дерева. Включена вспомогательная рекурсивная процедура
SDV 31 6
// Функция - Возвращает ТаблицЗначений из "бездетных" (листья всех ветвей/крона/конечные узлы) строк Дерева
//  Зависит от ЗаполнитьТаблицуЛистьямиВетви()
//
// Параметры:
//  Дерево      - ДеревоЗначений
//
// Возвращаемое значение:
//  ТаблицаЗначений -
//
Функция ТаблицаЗначенийИзКроныДереваЗначений(Дерево) Экспорт
     Таблица = Новый ТаблицаЗначений;
     Для каждого КолонкаДерева из Дерево.Колонки Цикл
          КолонкаТаблицы = Таблица.Колонки.Добавить(КолонкаДерева.Имя, КолонкаДерева.ТипЗначения);
     КонецЦикла;
     
     Для каждого Ветвь Из Дерево.Строки Цикл
          ЗаполнитьТаблицуЛистьямиВетви(Таблица, Ветвь);
     КонецЦикла;
     Возврат Таблица;
КонецФункции

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

Дополнительная расшифровка отчета БСП

Добавление своих вариантов расшифровки в ОбщиеФормы.ФормаОтчета
ChOP 24 4
// Общий модуль ОтчетыКлиентПереопределяемый

Процедура ОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
	
	ОбработкаРасшифровкиПереопределение(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка);
	
КонецПроцедуры

Процедура ОбработкаДополнительнойРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
	
	ОбработкаРасшифровкиПереопределение(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

//Общий модуль ОтчетыВызовСервера установлены галочки: сервер, вызов сервера

Функция ЗначениеДанныхВПолеРасшифровки(ОтчетДанныеРасшифровки, Расшифровка) Экспорт
	
	ДанныеРасшифровки = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки);
	Возврат ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля()[0].Значение;	
	
КонецФункции

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

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

Поместить таблицу в запрос

Процедура помещает Таблицу значений во временную таблицу Запроса
SDV 31 6
// Процедура - Поместить таблицу в запрос
// Зависит от ТипизированнаяТаблицаЗначений() https://fastcode.im/Templates/6734
// Параметры:
//  Запрос		 - Запрос 
//  Таблица		 - ТаблицаЗначений
//  ИмяТаблицы	 - Строка - Имя временной таблицы в Запросе
//
Процедура ПоместитьТаблицуВЗапрос(Запрос, Таблица, ИмяТаблицы)
	ТипизированнаяТаблица = ТипизированнаяТаблицаЗначений(Таблица);
	ИсходныйТекстЗапроса = Запрос.Текст;
	Запрос.Текст = "Выбрать * Поместить " + ИмяТаблицы + " Из &" + ИмяТаблицы + " как " + ИмяТаблицы;
	Если Запрос.МенеджерВременныхТаблиц = Неопределено Тогда
		Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	КонецЕсли;
	Если Запрос.Параметры.Свойство(ИмяТаблицы) Тогда
		_Параметр =  Запрос.Параметры.ИмяТаблицы;
		Запрос.УстановитьПараметр(ИмяТаблицы, ТипизированнаяТаблица);
		Запрос.Выполнить();
		Запрос.УстановитьПараметр(ИмяТаблицы, _Параметр);
	Иначе
		Запрос.УстановитьПараметр(ИмяТаблицы, ТипизированнаяТаблица);
		Запрос.Выполнить();
		Запрос.Параметры.Удалить(ИмяТаблицы);
	КонецЕсли;
	Запрос.Текст = ИсходныйТекстЗапроса;
КонецПроцедуры

Добавить движение в регистр накопления

Как добавить движение в регистр накопления
Источник: https://helpf.pro
freelance_1C 9 1
Процедура ОбработкаПроведения(Отказ, Режим)
	// регистр ТоварыНаСкладах Приход
	Движения.ТоварыНаСкладах.Записывать = Истина;
	Движения.ТоварыНаСкладах.Очистить();
	Для Каждого ТекСтрокаТовары Из Товары Цикл
		Движение = Движения.ТоварыНаСкладах.Добавить();
		Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
		Движение.Период = Дата;
		Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
		Движение.Количество = ТекСтрокаТовары.Количество;
	КонецЦикла;
КонецПроцедуры

Сортировка слиянием

Дано два отсортированных по возрастанию массива А и В. Необходимо вывести по возрастанию все элементы этих массивов.

Автор: ildarovich

FastCode 51 7
ёж = 0; 
Для уж = 0 По А.Количество() + В.Количество() - 1 Цикл 
    що = (уж - ёж) = В.Количество() ИЛИ ёж < А.Количество() И А[ёж] < В[уж - ёж]; 
    Сообщить(?(що, "а" + ёж + "=" + А[ёж], "в" + (уж - ёж) + "=" + В[уж - ёж])); 
    ёж = ёж + що 
КонецЦикла
ё = 0; 
Для Сч = 1 По А.Количество() + В.Количество() Цикл 
    ж = (Сч - 1 - ё) = В.Количество() ИЛИ ё < А.Количество() И А[ё] < В[Сч - 1 - ё]; 
    Сообщить(?(ж, "А[" + ё + "]=" + А[ё], "В[" + (Сч - 1 - ё) + "]=" + В[Сч - 1 - ё])); 
    ё = ё + ж 
КонецЦикла

Колонка сжато

В колонке табличной части находятся целые числа. Необходимо "сжать" ряд чисел, заменив подряд идущие числа их диапазоном. Например: 1, 3, 4, 5, 7, 10, 11, 12, 16 должно превратиться в 1, 3-5, 7, 10-12, 16.

Автор: ildarovich

FastCode 51 7
Функция КолонкаСжато(ДокументСсылка, ИмяТабличнойЧасти, ИмяКолонки, Слэш = ",", Тире = "-")
    Запрос = Новый Запрос("ВЫБРАТЬ Различные " + ИмяКолонки + " ИЗ Документ." + ДокументСсылка.Метаданные().Имя + "." + ИмяТабличнойЧасти + " ГДЕ Ссылка = &Ссылка Упорядочить ПО " + ИмяКолонки);
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Ряд = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(ИмяКолонки);
    Если Ряд.Количество() = 0 Тогда Возврат ""
    КонецЕсли;
    Ряд.Добавить(0); Ряд.Добавить(0);
    Сжато = Строка(Ряд[0]);
    Для ё = 1 По Ряд.Количество() - 3 Цикл
        Если Число(Ряд[ё + 1]) - Число(Ряд[ё - 1]) <> 2 Тогда
            Сжато = Сжато + Слэш + Строка(Ряд[ё])
        ИначеЕсли Число(Ряд[ё + 2]) - Число(Ряд[ё]) <> 2 Тогда
            Сжато = Сжато + Тире
        КонецЕсли
    КонецЦикла;
    Возврат СтрЗаменить(Сжато, Тире + Слэш, Тире)
КонецФункции

Квайн (программа, распечатывающая свой собственный текст)

Автор: ildarovich

FastCode 51 7
С="С="";Л=Лев(С,3);П=Сред(С,3);Сообщить(Л+Л+П+П)";Л=Лев(С,3);П=Сред(С,3);Сообщить(Л+Л+П+П)
Процедура КВН(К)С="Процедура КВН(К)С="";Л=Лев(С,19);П=Сред(С,19);Сообщить(Л+Л+П+П)КонецПроцедуры";Л=Лев(С,19);П=Сред(С,19);Сообщить(Л+Л+П+П)КонецПроцедуры

Уничтожение временной таблицы

Автор: HostHost

FastCode 51 7
//1.
ЗарплатаКадры.УничтожитьВТ(

        МенеджерВременныхТаблиц,

        СтрРазделить("ВТФизическиеЛицаПатент,ВТКадровыеДанныеСотрудников,ВТИностранцыСотрудники,ВТИностранцы,ВТНерезиденты,ВТФиксированныеСтатусыФизическихЛиц,ВТТекущиеСтатусыФизическихЛиц,ВТИностранцыСДатами,ВТНачисления,ВТРегистрация,ВТРассчитанныеДниВРФ",","));

//2.
		
УдалитьВТ = Новый Массив;

УдалитьВТ.Добавить("втВременныеПозиции");

УдалитьВТ.Добавить("втВременныеПодразделения");

УдалитьВТ.Добавить("втФинальная");

ЗарплатаКадры.УничтожитьВТ(МенеджерВТ, УдалитьВТ);

Установка видимости реквизита по умолчанию

Автор: HostHost

FastCode 51 7
	РеквизитыПозиции = ДанныеДолжности();
	
	Если РеквизитыПозиции <> Неопределено Тогда
		
		Объект.Учащийся = ?(РеквизитыПозиции.Учащийся = Неопределено, Ложь, РеквизитыПозиции.Учащийся);
		
		ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
		
		Элементы,
		
		"ОбразованиеКвалификация",
		
		"Видимость",
		
		Объект.Учащийся);
		
	КонецЕсли;

Просмотр временной таблицы

Автор: HostHost

FastCode 51 7
Запрос.МенеджерВременныхТаблиц.Таблицы.Получить(0).ПолучитьДанные().Выгрузить();

Перенести коллекцию КлючИЗначение

Дополняет коллекцию КлючИЗначение Приемник (Структура, Соответствие) из коллекции Источник. Можно использовать при копировании Структура или Соответствие.
SDV 31 6
// Процедура - перенести коллекцию КлючИЗначение
//
// Параметры:
//  Приемник - Структура, Соответствие
//  Источник - Структура, Соответствие
//  Заменять - Булево - Заменять [Значение] при наличии [Ключ] в [Приемник], иначе пропустить
Процедура ПеренестиКлючиИЗначения(Приемник, Источник, Заменять = Истина) Экспорт     
	
	ТипПриемника = ТипЗнч(Приемник);

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

СКД. Повторение шапки отчета на каждой странице

Как вывести шапку отчёта на каждой странице средствами СКД? То есть не формируя отчёт программно. О программных решениях есть достаточно информации, но хочется знать как это сделать самим компоновщиком. Отвечал на подобный вопрос на Инфостарте, настройки к...
bolsun 33 4

ТаблицаЗначений из DBF

Функция загружает данные из dbf файла в таблицу значений. За основу взято https://infostart.ru/public/103060/ Зависит от: ПутьКФайлу() https://fastcode.im/Templates/6672
SDV 31 6
// Функция загружает данные из dbf файла в таблицу значений.
// Зависит от ПутьКФайлу() https://fastcode.im/Templates/6672
// Параметры:
//  ИмяФайла - Строка - полный путь к файлу. Если не указан, то откроется диалог выбора пути к файлу.
//  Кодировка - КодировкаXBase - Если не указан, то КодировкаXBase.OEM
//
Функция ТаблицаЗначенийИзDBF(Кодировка = Неопределено, ПутьКФайлу = Неопределено) Экспорт
	
	Если Кодировка = Неопределено Тогда 
		Кодировка = КодировкаXBase.OEM;
	КонецЕсли;
	
	Если ПутьКФайлу = Неопределено Тогда
		ПутьКФайлу = ПутьКФайлу("Выберите dbf-файл","(*.dbf)|*.dbf",РежимДиалогаВыбораФайла.Открытие);
	КонецЕсли;
	
	// Открытие файла данных
	ФайлДанных = Новый XBase(ПутьКФайлу);
	ФайлДанных.Кодировка = Кодировка;
	Если Не ФайлДанных.Открыта() Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось открыть файл " + ПутьКФайлу;
		Сообщение.Сообщить();
		Возврат Неопределено;
	КонецЕсли;
	
	// Переменные и объекты, что бы не создавать постоянно в цикле
	ОписаниеБулево = Новый ОписаниеТипов("Булево");
	ОписаниеДаты = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.Дата));
	
	// Создание таблицы значений
	ТаблицаЗначений = Новый ТаблицаЗначений;
	Для Каждого Поле из ФайлДанных.Поля Цикл
		Если Поле.Тип = "L" Тогда
			Тип = ОписаниеБулево;
		ИначеЕсли Поле.Тип = "D" Тогда
			Тип = ОписаниеДаты;
		ИначеЕсли (Поле.Тип = "N") ИЛИ (Поле.Тип = "F") Тогда
			Тип = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(Поле.Длина, Поле.Точность));
		Иначе
			Тип = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(Поле.Длина));
		КонецЕсли;
		ТаблицаЗначений.Колонки.Добавить(Поле.Имя, Тип);
	КонецЦикла;
	
	// Заполнение строк таблицы
	Работаем = ФайлДанных.Первая();
	Пока Работаем Цикл
		СтрокаТаблицы = ТаблицаЗначений.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ФайлДанных);
		Работаем = ФайлДанных.Следующая();
	КонецЦикла;
	
	ФайлДанных.ЗакрытьФайл();
	Возврат ТаблицаЗначений;
КонецФункции

Типизированная таблица значений

Создаёт и возвращает копию ТаблицыЗначений с заполненным Типом Колонок
SDV 31 6
// Типизированная таблица значений
//     Создаёт и возвращает копию ТаблицыЗначений с заполненным Типом Колонок
// Зависит от ЗагрузитьКолонку() https://fastcode.im/Templates/6670
// Параметры:
//  Таблица      - ТаблицаЗначений
//
// Возвращаемое значение:
//  ТаблицаЗначений
//
Функция ТипизированнаяТаблицаЗначений(Таблица) Экспорт
    Результат = Новый ТаблицаЗначений;
    Для Каждого Колонка Из Таблица.Колонки Цикл
        ИмяКолонки = Колонка.Имя;
        СвернутаяТаблица = Таблица.Скопировать(, ИмяКолонки);
        СвернутаяТаблица.Свернуть(ИмяКолонки);
        МассивТипов = Новый Массив;
        Для Каждого СтрокаСвернутойТаблицы из СвернутаяТаблица Цикл
            ТипЗначения = ТипЗнч(СтрокаСвернутойТаблицы[ИмяКолонки]);
            Если МассивТипов.Найти(ТипЗначения) = Неопределено Тогда
                МассивТипов.Добавить(ТипЗначения);
            КонецЕсли;
        КонецЦикла;
        Если МассивТипов.Количество() = 1 Тогда
            //Меры по предотвращению ошибки "Тип не может быть выбран в запросе"
            //для колонок заполненных исключительно значениями типа Тип("Неопределено")
            Если МассивТипов[0] = Тип("Неопределено") Тогда
                МассивТипов[0] = Тип("Строка");//Не уверен
            КонецЕсли;
        КонецЕсли;
        Результат.Колонки.Добавить(ИмяКолонки, Новый ОписаниеТипов(МассивТипов), Колонка.Заголовок, Колонка.Ширина);
        ЗагрузитьКолонку(Результат, Таблица.ВыгрузитьКолонку(ИмяКолонки), ИмяКолонки, Ложь);
    КонецЦикла;
    Возврат Результат;
КонецФункции

Отправить двоичные данные в телеграм (zip/pdf/gif)

https://gist.github.com/PlugFox/4499132c45b73ae5bc8dda52a1218dff Готовая обработка бинарником Send2Telegram.epf В принципе можете интегрировать в свое решение, у её модуля объекта есть конструктор и экспортные процедуры отправки. НаСервере Процедура ПриСоз...
FOX 14 2

Downloader 1C

Консольное приложение для подготовки библиотеки дистрибутива 1С
Бесплатно

Скомпоновать результат отчета

Выполняет компоновку СКД по переданным настройкам
// Выполняет компоновку СКД по переданным настройкам
//
// Параметры:
//  Результат               - ТабличныйДокумент,ТаблицаЗначений,ДеревоЗначений                      - результат выполнения
//  СхемаКомпоновкиДанных   - СхемаКомпоновкиДанных                                                 - выполняемая СКД
//  НастройкиКомпоновки     - НастройкиКомпоновкиДанных,КомпоновщикНастроекКомпоновкиДанных,Строка  - выполняемые настройки или адрес временного хранилища или компоновщик с настройками
//  ДанныеРасшифровки       - ДанныеРасшифровкиКомпоновкиДанных, Неопределено                       - данные расшифровки
//  ВнешниеНаборыДанных     - Структура, Неопределено                                               - коллекция внешних наборов данных
//  ДополнительныеПараметры - Структура, Неопределено                                               - коллекция внешних наборов данных
//       * МакетОформления              - МакетОформленияКомпоновкиДанных   - Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных.
//       * ПроверятьДоступностьПолей    - Булево - Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
//       * ПараметрыФункциональныхОпций - Булево - Содержит параметры функциональных опций, используемые при исполнении отчета.
//       * ВозможностьИспользованияВнешнихФункций - Булево - Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
//
// SeiOkami: 
//     https://infostart.ru/profile/309462/
//     https://t.me/JuniorOneS
//Подробнее об использовании метода: https://infostart.ru/public/1082944/?ref=1159
//
Процедура СкомпоноватьРезультатОтчета(Результат, СхемаКомпоновкиДанных, НастройкиКомпоновки, 
    ДанныеРасшифровки = Неопределено, ВнешниеНаборыДанных = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
           
    
    //Инициализируем настройки
    Если ТипЗнч(НастройкиКомпоновки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
        ВыполняемыеНастройки    = НастройкиКомпоновки.ПолучитьНастройки();
    ИначеЕсли ТипЗнч(НастройкиКомпоновки) = Тип("Строка") И ЭтоАдресВременногоХранилища(НастройкиКомпоновки) Тогда
        ВыполняемыеНастройки    = ПолучитьИзВременногоХранилища(НастройкиКомпоновки);
    Иначе 
        ВыполняемыеНастройки    = НастройкиКомпоновки;   
    КонецЕсли;
    
    Если НЕ ТипЗнч(ВыполняемыеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда
        Возврат;
    КонецЕсли;
    

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

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

Преобразовать массив структур в ТаблицуЗначений

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

Отправить сообщение или табличный документ в телеграм

Отправить сообщение или табличный документ в телеграм
FOX 14 2
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/// The MIT License
/// 
/// Copyright (c) 2019 Plague Fox
/// 
/// Permission is hereby granted, free of charge, to any person obtaining a copy
/// of this software and associated documentation files (the "Software"), to deal
/// in the Software without restriction, including without limitation the rights
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
/// copies of the Software, and to permit persons to whom the Software is
/// furnished to do so, subject to the following conditions:
/// 
/// The above copyright notice and this permission notice shall be included in
/// all copies or substantial portions of the Software.
/// 
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
/// THE SOFTWARE.
/// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Перем Токен,ИдентификаторПолучателя; // Телеграм
Перем ПроксиПротокол,ПроксиСервер,ПроксиПорт,ПроксиПользователь,ПроксиПароль; // Прокси

Процедура ОтправитьСообщениеВТелеграм(Сообщение)
    // Глобальные переменные в процедуре:
    // + Токен
    // + ИдентификаторПолучателя
    
    // Сформировать соединение и запрос
    Соединение  = ПолучитьСоединение();
    Адрес       = СтрШаблон("/bot%1/sendMessage?chat_id=%2&parse_mode=HTML&text=%3"
                , Токен
                , ИдентификаторПолучателя
                , КодироватьСтроку(Сообщение, СпособКодированияСтроки.КодировкаURL, "UTF8"));
    Заголовки   = Новый Соответствие;
    Запрос      = Новый HTTPЗапрос(Адрес, Заголовки);
    
    // GET
    Ответ       = Соединение.Получить(Запрос);
    
    // Разбор ответа
    Если Ответ.КодСостояния <> 200 Тогда
        ОтветСтрокой    = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        ВызватьИсключение СтрШаблон("Ошибка отправки вложения в телеграм.
            |Код состояния: %1
            |Тело: %2"
            , Ответ.КодСостояния
            , ОтветСтрокой
        ); 
    КонецЕсли;  
КонецПроцедуры // ОтправитьСообщениеВТелеграм()
//************************************************************
Процедура ОтправитьТабличныйДокументВТелеграм(ТабличныйДокумент, ИмяФайла = "", Сообщение = "")
    // Глобальные переменные в процедуре:
    // + Токен
    // + ИдентификаторПолучателя
    
    // Сформировать тело запроса
    Разделитель     = Строка(Новый УникальныйИдентификатор());
    
    // Формируем основное составное сообщение
    Тело            = Новый ПотокВПамяти();
    ЗаписьДанных    = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Истина);
    
    // chat_id
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""chat_id""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку(ИдентификаторПолучателя);
    
    // disable_notification
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""disable_notification""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("True");
        
    Если Не ПустаяСтрока(Сообщение) Тогда 
        // caption
        ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
        ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""caption""");
        ЗаписьДанных.ЗаписатьСтроку("");
        ЗаписьДанных.ЗаписатьСтроку(Сообщение);        
        
        // parse_mode
        ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
        ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""parse_mode""");
        ЗаписьДанных.ЗаписатьСтроку("");
        ЗаписьДанных.ЗаписатьСтроку("HTML");
    КонецЕсли;
    
    // document    
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1.pdf""", ?(ПустаяСтрока(ИмяФайла), "document_" + Строка(Новый УникальныйИдентификатор()), ИмяФайла)));
    ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");
    ЗаписьДанных.ЗаписатьСтроку("");   
    ЗаписьДанных.Закрыть();    
    
    // Добавим файл
    ТабличныйДокумент.Записать(Тело, ТипФайлаТабличногоДокумента.PDF);
    
    // Завершение записи
    ЗаписьДанных    = Новый ЗаписьДанных(Тело, КодировкаТекста.UTF8, ПорядокБайтов.LittleEndian, Символы.ВК + Символы.ПС, Символы.ПС, Ложь);
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
    ЗаписьДанных.Закрыть();
    
    ДанныеТела          = Тело.ЗакрытьИПолучитьДвоичныеДанные();   

    // Сформировать соединение и запрос
    Соединение  = ПолучитьСоединение();
    Заголовки   = Новый Соответствие;
    Заголовки.Вставить("Content-Type",      "multipart/form-data; boundary=" + Разделитель);
    Заголовки.Вставить("Accept",            "*/*");
    Заголовки.Вставить("Cache-Control",     "no-cache");
    Заголовки.Вставить("Host",              "api.telegram.org");
    Заголовки.Вставить("Accept-Encoding",   "gzip, deflate");
    Заголовки.Вставить("Content-Length",    Формат(ДанныеТела.Размер(), "ЧДЦ=0; ЧН=0; ЧГ=0"));
    Заголовки.Вставить("Connection",        "close");
    Адрес       = СтрШаблон("/bot%1/sendDocument", Токен);
    Запрос      = Новый HTTPЗапрос(Адрес, Заголовки);
    Запрос.УстановитьТелоИзДвоичныхДанных(ДанныеТела);

    // POST
    Ответ       = Соединение.ОтправитьДляОбработки(Запрос);

    // Разбор ответа
    Если Ответ.КодСостояния <> 200 Тогда
        ОтветСтрокой    = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        ВызватьИсключение СтрШаблон("Ошибка отправки вложения в телеграм.
            |Код состояния: %1
            |Тело: %2"
            , Ответ.КодСостояния
            , ОтветСтрокой
        ); 
    КонецЕсли;
КонецПроцедуры // ОтправитьТабличныйДокументВТелеграм()
//************************************************************
Функция ПолучитьСоединение()    
    // Глобальные переменные в процедуре:
    // + ПроксиПротокол
    // + ПроксиСервер
    // + ПроксиПорт
    // + ПроксиПользователь
    // + ПроксиПароль
    
    Прокси      = Новый ИнтернетПрокси(Истина);
    Если ТипЗнч(ПроксиПротокол) = Тип("Строка") И Не ПустаяСтрока(ПроксиПротокол) Тогда
        Прокси.Установить(ПроксиПротокол, ПроксиСервер, ПроксиПорт, ПроксиПользователь, ПроксиПароль, Ложь);
    КонецЕсли;
    SSL         = Новый ЗащищенноеСоединениеOpenSSL();
    Соединение  = Новый HTTPСоединение("api.telegram.org", 443,,, Прокси, 30, SSL, Ложь); 
    Возврат Соединение;
КонецФункции // ПолучитьСоединение()

// ТЕЛЕГРАМ +
Токен                   = ""; // 000000000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ИдентификаторПолучателя = ""; // -000000000
// ТЕЛЕГРАМ -

// ПРОКСИ +
ПроксиПротокол          = "https"; // для socks5 - https
ПроксиСервер            = "socks5://0.0.0.0"; // socks5://domain.tld
ПроксиПорт              = 1080; // 1080
ПроксиПользователь      = ""; // user
ПроксиПароль            = ""; // password              
// ПРОКСИ -

Получить данные физического лица

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