Публикации

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

Срезы последних (интерполяция периодических сведений)

"Срезы последних" - одна из первых задач, на которой спотыкается начинающий программист 1С. Хорошо поняв идею виртуального регистра "Срез последних", мы ожидаем такой же простоты, если задана не одна дата, на которую нужно выбрать сведения, а несколько. Но...
FastCode 51 7

Заполняем (описываем набор данных и поля) схему компоновки данных из таблицы значений

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

     НаборДанных = НаборДанныхИзТаблицыЗначений(Схема, Таблица, Наименование);
     Возврат Схема;
КонецФункции


// Функция - Набор данных из таблицы значений
//     Добавляет НаборДанных в Схему, создаёт поля соответствующие колонкам Таблицы
//     Памятка: чтобы подсунуть Таблицу используй ПриКомпоновкеРезультата()
//     ПроцессорКомпоновкиДанных.Инициализировать(..., НаборыДанных , ..., ...);
//
// Параметры:
//  Схема           - СхемаКомпоновкиДанных
//  Таблица           - ТаблицаЗначений - Обязательно с определенными типами колонок.
//      Можно использовать ТипизированнаяТаблицаЗначений().
//  Наименование - Строка - Название будущего набора данных
//
// Возвращаемое значение:
//  НаборДанныхОбъектСхемыКомпоновкиДанных
//
Функция НаборДанныхИзТаблицыЗначений(Схема, Таблица, Наименование) Экспорт
     
     //Схема = Новый СхемаКомпоновкиДанных; //Убрать
     НаборДанных = Схема.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
     НаборДанных.Имя = Наименование;
     НаборДанных.ИмяОбъекта = Наименование;
     НаборДанных.ИсточникДанных = Схема.ИсточникиДанных[0].Имя;
     //НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
     
     Для Каждого Колонка Из Таблица.Колонки Цикл
          ДобавленноеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
          ДобавленноеПоле.Заголовок = Колонка.Имя;
          ДобавленноеПоле.ПутьКДанным = Колонка.Имя;
          ДобавленноеПоле.Поле = Колонка.Имя;
          ДобавленноеПоле.ТипЗначения = Новый ОписаниеТипов(Колонка.ТипЗначения);
     КонецЦикла;

     Возврат НаборДанных;
          
КонецФункции

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

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

Особенность (грабля) при работе с Характеристиками через СКД

Испытываю некоторые сложности с формулировкой сути проблемы поэтому опишу свою user-story: В конфигурации БГУ 1.0 есть возможность детализировать аналитику планирования (кассового расхода) с помощью доп. бюджетной классификации: к некоторым счетам привяз...
SDV 31 6

Открыть форму выбора с отбором (УФ)

Артур 40 1 4
&НаКлиенте
Процедура КнопкаВыбрать(Команда)

    НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

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

    ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДАТА");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.больше;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение=(объект.Дата);

    ПараметрыВыбора = Новый Структура;
    ПараметрыВыбора.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
    ПараметрыВыбора.Вставить("РежимВыбора",Истина);
    ПараметрыВыбора.Вставить("МножественныйВыбор",Истина);

    ОбработкаВыбора = Новый ОписаниеОповещения("ВыбратьДокументКонец", ЭтаФорма);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура помещает Таблицу значений во временную таблицу Запроса
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С
Бесплатно