arefaste/1C_Forums huggingface dataset:
Дополнительная расшифровка отчета БСП
Теги: 1С,Расшифровка,БСП,отчет

Добавление своих вариантов расшифровки в ОбщиеФормы.ФормаОтчета

# Код реализации

```1c
// Общий модуль ОтчетыКлиентПереопределяемый

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

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

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

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

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

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

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

	Если ФормаОтчета.НастройкиОтчета.ПолноеИмя = "Отчет.ИмяРасшифровываемогоОтчета" Тогда

		ДоговорДляРасшифровки = ОтчетыВызовСервера.ЗначениеДанныхВПолеРасшифровки(ФормаОтчета.ОтчетДанныеРасшифровки, Расшифровка);

		Если ТипЗнч(ДоговорДляРасшифровки) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда

			СтандартнаяОбработка = Ложь;

			ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(
								   ФормаОтчета.ОтчетДанныеРасшифровки,
								   Новый ИсточникДоступныхНастроекКомпоновкиДанных(ФормаОтчета.Отчет));

			ДополнительныеПараметры = Новый Структура;
			ДополнительныеПараметры.Вставить("Договор", ДоговорДляРасшифровки);
			ДополнительныеПараметры.Вставить("ФормаОтчета", ФормаОтчета);

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

			ДополнительныеПунктыМеню = Новый СписокЗначений;
			ДополнительныеПунктыМеню.Добавить("ЗаявкиПоДоговору", НСтр("ru = 'Расшифровать...'"));

			ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещения, Расшифровка, ДоступныеДействия, ДополнительныеПунктыМеню);

		КонецЕсли;

	КонецЕсли;

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

Процедура ПоказатьВыборДействияЗавершение(ВыполненноеДействие, ПараметрВыполненногоДействия, ДополнительныеПараметры) Экспорт

	Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда

		ПоказатьЗначение(Неопределено, ПараметрВыполненногоДействия);

	ИначеЕсли ВыполненноеДействие = "ЗаявкиПоДоговору" Тогда

		ОтборХ          = Новый Структура("Договор", ДополнительныеПараметры.Договор);

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

		ОткрытьФорму("Отчет.ЗаявкиНаПлатежПоДоговоруКонтрагента.Форма.ФормаОтчета", ПараметрыФормыХ, ДополнительныеПараметры.ФормаОтчета, ДополнительныеПараметры.Договор);

	КонецЕсли;

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

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

Функция ЗначениеДанныхВПолеРасшифровки(ОтчетДанныеРасшифровки, Расшифровка) Экспорт

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

КонецФункции
```
Поместить таблицу в запрос
Теги: 1С,ТаблицаЗначений,Временная таблица,Запрос

Процедура помещает Таблицу значений  во временную таблицу Запроса

# Код реализации

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

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

# Код реализации

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

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

# Код реализации

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

# Примечания

- Отвратительный код. У вас буквы ограничены? Переменная "ё"? Это типа юмор?

- Пробежался по публикациям. Понял - это не юмор, а профдеформация.Ок

- (1) Bezeus, я не автор публикации. Если хотите написать автору, то в публикации есть ссылка на источник.
Также Вы можете сформировать свою библиотеку публикаций и ограничить поиск только по избранному, если какие-то публикации Вам не подходят по оформлению или по содержанию 😃

- (3) FastCode, спасибо за совет. Но тут не хватает чёрных списков по авторам. Приведённых код на инфостарте писан примерно в 2014-ом году. И за 6 лет манера написания у этого человека не изменилась. Я не хочу видеть только свои публикации или только избранное. Тут скорее желание сберечь глаза и мозг от авторов разнообразного говнокода.

- Ахах, олдскул!))
Колонка сжато
Теги: 1С,Минимализмы,Задачи

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

# Код реализации

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

# Примечания

- А есть какоето практическое применение? какойто готовый кейс? больше похоже на задачку какуюто.

- (1) Константин Аванесов, это код из серии Минимализмы (кратчайшее решение некоторых задач). Но если вдруг понадобится в практике, то уже есть готовое решение 😃
Уничтожение временной таблицы
Теги: 1С,Временная таблица,ЗУП 3,ЗарплатаКадры

# Код реализации

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

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

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

//2.

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

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

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

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

ЗарплатаКадры.УничтожитьВТ(МенеджерВТ, УдалитьВТ);
```
Установка видимости реквизита по умолчанию
Теги: 1С,ЗУП 3,ЗарплатаКадры

# Код реализации

```1c
	РеквизитыПозиции = ДанныеДолжности();

	Если РеквизитыПозиции <> Неопределено Тогда

		Объект.Учащийся = ?(РеквизитыПозиции.Учащийся = Неопределено, Ложь, РеквизитыПозиции.Учащийся);

		ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(

		Элементы,

		"ОбразованиеКвалификация",

		"Видимость",

		Объект.Учащийся);

	КонецЕсли;
```
Просмотр временной таблицы
Теги: 1С,Временная таблица,Запрос

# Код реализации

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

# Примечания

- МенеджерВременныхТаблиц.Таблицы[2].ПолучитьДанные().Выгрузить() ---  в отладке --2 номер одной из временных таблиц

- Часто бывает так, что в менеджере нужная таблица меняет свой индекс потому, что в него добавляются таблицы
удобнее искать по имени (в отладчике)
Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВтКэшПартииПрочихРасходов").ПолучитьДанные().Выгрузить()
Перенести коллекцию КлючИЗначение
Теги: 1С,Структура,Соответствие,Коллекции

Дополняет коллекцию КлючИЗначение Приемник (Структура, Соответствие)  из коллекции Источник.  Можно использовать при копировании Структура или Соответствие.

# Код реализации

```1c
// Процедура - перенести коллекцию КлючИЗначение
//
// Параметры:
//  Приемник - Структура, Соответствие
//  Источник - Структура, Соответствие
//  Заменять - Булево - Заменять [Значение] при наличии [Ключ] в [Приемник], иначе пропустить
Процедура ПеренестиКлючиИЗначения(Приемник, Источник, Заменять = Истина) Экспорт

	ТипПриемника = ТипЗнч(Приемник);

	Для каждого Элемент из Источник Цикл

		ЕстьКлюч = Ложь;

		Если ТипПриемника = Тип("Соответствие") Тогда
			ЕстьКлюч = Приемник.Получить(Элемент.Ключ) <> Неопределено;
		ИначеЕсли ТипПриемника = Тип("Структура") Тогда
			ЕстьКлюч = Приемник.Свойство(Элемент.Ключ);
		КонецЕсли;

		Если ЕстьКлюч И Заменять тогда
			Приемник[Элемент.Ключ] = Элемент.Значение
		Иначе
			Приемник.Вставить(Элемент.Ключ, Элемент.Значение);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
```

# Примечания

- Предлагаю переименовать параметри в соответствии со стилем 1С, а именно "Цель" переименовать в "Приемник".
Если цель - соответствие эта функция работать не будет, т.к. у соответствия нет метода "Свойство".
Заменять надо вынести вперед в условии

Общее предложение к FastCode - обязательно к функциям прикладывать модульные тесты

- (1) Дмитрий Титов, вы можете в комментарии добавить свою версию шаблона и пользователи смогут выбрать какой им больше подходит.
// Процедура - перенести коллекцию КлючИЗначение
//
// Параметры:
//  Приемник - Структура, Соответствие
//  Источник - Структура, Соответствие
//  Заменять - Булево - При наличии переносимого свойства в Приемнике, заменить значение. По умолчанию Истина

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

- (1) Дмитрий Титов, спасибо за конструктивную критику. Справедливые замечания.
ТаблицаЗначений из DBF
Теги: 1С,ТаблицаЗначений,XBase,DBF

Функция загружает данные из dbf файла в таблицу значений.
За основу взято https://infostart.ru/public/103060/
Зависит от: ПутьКФайлу() https://fastcode.im/Templates/6672

# Код реализации

```1c
// Функция загружает данные из dbf файла в таблицу значений.
// Зависит от ПутьКФайлу() https://fastcode.im/Templates/6672
// Параметры:
//  ИмяФайла - Строка - полный путь к файлу. Если не указан, то откроется диалог выбора пути к файлу.
//  Кодировка - КодировкаXBase - Если не указан, то КодировкаXBase.OEM
//
Функция ТаблицаЗначенийИзDBF(Кодировка = Неопределено, ПутьКФайлу = Неопределено) Экспорт

	Если Кодировка = Неопределено Тогда
		Кодировка = КодировкаXBase.OEM;
	КонецЕсли;

	Если ПутьКФайлу = Неопределено Тогда
		ПутьКФайлу = ПутьКФайлу("Выберите dbf-файл","(*.dbf)|*.dbf",РежимДиалогаВыбораФайла.Открытие);
	КонецЕсли;

	// Открытие файла данных
	ФайлДанных = Новый XBase(ПутьКФайлу);
	ФайлДанных.Кодировка = Кодировка;
	Если Не ФайлДанных.Открыта() Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось открыть файл " + ПутьКФайлу;
		Сообщение.Сообщить();
		Возврат Неопределено;
	КонецЕсли;

	// Переменные и объекты, что бы не создавать постоянно в цикле
	ОписаниеБулево = Новый ОписаниеТипов("Булево");
	ОписаниеДаты = Новый ОписаниеТипов("Дата",,, Новый КвалификаторыДаты(ЧастиДаты.Дата));

	// Создание таблицы значений
	ТаблицаЗначений = Новый ТаблицаЗначений;
	Для Каждого Поле из ФайлДанных.Поля Цикл
		Если Поле.Тип = "L" Тогда
			Тип = ОписаниеБулево;
		ИначеЕсли Поле.Тип = "D" Тогда
			Тип = ОписаниеДаты;
		ИначеЕсли (Поле.Тип = "N") ИЛИ (Поле.Тип = "F") Тогда
			Тип = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(Поле.Длина, Поле.Точность));
		Иначе
			Тип = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(Поле.Длина));
		КонецЕсли;
		ТаблицаЗначений.Колонки.Добавить(Поле.Имя, Тип);
	КонецЦикла;

	// Заполнение строк таблицы
	Работаем = ФайлДанных.Первая();
	Пока Работаем Цикл
		СтрокаТаблицы = ТаблицаЗначений.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ФайлДанных);
		Работаем = ФайлДанных.Следующая();
	КонецЦикла;

	ФайлДанных.ЗакрытьФайл();
	Возврат ТаблицаЗначений;
КонецФункции
```

# Примечания

- Зависит от: ПутьКФайлу() https://fastcode.im/Templates/6672
Типизированная таблица значений
Теги: 1С,ТаблицаЗначений,Колонки,Тип

Создаёт и возвращает копию ТаблицыЗначений с заполненным Типом Колонок

# Код реализации

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

# Примечания

- Зависимость: Загрузить колонку (создавать строки Таблицы при необходимости)
https://fastcode.im/Templates/6670
Отправить двоичные данные в телеграм (zip/pdf/gif)
Теги: 1С,Телеграм,Файл,двоичныеданные,Отправка,потоквпамяти,Telegram

# Примечания

- https://gist.github.com/PlugFox/4499132c45b73ae5bc8dda52a1218dff

- Спасибо за статью!
использовал для отправки картинки
Заменил строку
ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""photo""; filename=""%1.png""", ?(ПустаяСтрока(ИмяФайла), "image_" + Строка(Новый УникальныйИдентификатор()) + ".png", ИмяФайла)));
и метод
Адрес       = СтрШаблон("/bot%1/sendphoto", Токен);
Преобразовать массив структур в ТаблицуЗначений
Теги: 1С,ТаблицаЗначений

# Код реализации

```1c
Функция ПреобразоватьМассивВТаблицуЗначений(мсДанные) Экспорт

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

    Возврат тзДанные;

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

# Примечания

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

КонецФункции
Записать текстовый файл без BOM
Теги: 1С,Обмен,ЗаписьТекста,BOM

Для тех кому нужно записать текстовый файл без BOM-раздела. Основная суть в записи через файловый поток

# Код реализации

```1c
ПутьФайла = ПолучитьИмяВременногоФайла();

СтрокаТекста = "текст";

ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(СтрокаТекста);
ТекстовыйФайл.Записать(ПутьФайла, КодировкаТекста.UTF8, Символы.ПС);

ФайловыйПоток = Новый ФайловыйПоток(ПутьФайла,РежимОткрытияФайла.Создать);
ТекстовыйФайл.Записать(ФайловыйПоток,КодировкаТекста.UTF8, Символы.ПС, Ложь);

ФайловыйПоток.Закрыть();
```

# Примечания

- Файл = Новый ТекстовыйДокумент;
Файл.ВставитьСтроку("Текст");
Файл.Записать(Путь, "CESU-8", Символы.ПС);
UTF8 без BOM - это CESU-8
Почерпнуто из комментариев на инфорстарте.

- (1) Андрей Л., вроде на мисте и инфостарте так же были комментарии, что cesu не всегда прокатывает. Мой коллега предложил этот вариант как замену использования более надежного чем cesu метода через ADODB.Stream, потому я выложил этот вариант.

- (2) Эльдар Мингалиев, нисколько не умаляю предложенный Вами вариант.
И  CESU-8 не требует ADODB.Stream...

- (3) Андрей Л., я и не сказал что требует) я сказал что метод через ado более надежен чем cesu)
Формат изображения (уменьшить,обрезать,масштабировать,сжать)
Теги: 1С,Формат изображения,фото

Формат изображения (уменьшить,обрезать,масштабировать,сжать)

# Код реализации

```1c
&НаКлиенте
Процедура сжатьФото(Фото)
	МаксимальнаяШирина	= 700;
	МаксимальнаяВысота	= 400;

	ОбрезкаЛ	=  200;
	ОбрезкаВ	=  0;
	ОбрезкаП	=  200;
	ОбрезкаН	=  0;

    // Создаем объект
    ФайлКартинка = Новый COMОбъект("WIA.ImageFile");
    ФайлКартинка.LoadFile(Фото);

    //Сообщить("Картинка: " + Картинка.Имя);
    //Сообщить("    Расширение файла: " + ФайлКартинка.FileExtension);
    //Сообщить("    Ширина: " + ФайлКартинка.Width);
    //Сообщить("    Высота: " + ФайлКартинка.Height);
    //Сообщить("    Размер: " + Окр(ФайлКартинка.FileData.Count / 1024, 2) + " Кб");

    ФайлПрогресс = Новый COMОбъект("WIA.ImageProcess"); ///ФайлПрогресс.Filters - список Фильтров, всего 8

    ФайлПрогресс.Filters.Add(ФайлПрогресс.FilterInfos("Scale").FilterID);    ///масштабирование
    ФайлПрогресс.Filters.Add(ФайлПрогресс.FilterInfos("Crop").FilterID);     ///Обрезка
	ФайлПрогресс.Filters.Add(ФайлПрогресс.FilterInfos("Convert").FilterID);  ///Конвертация (Сжатия)

	ФайлПрогресс.Filters(1).Properties("MaximumWidth").Value  = МаксимальнаяШирина;
	ФайлПрогресс.Filters(1).Properties("MaximumHeight").Value = МаксимальнаяВысота;
	ФайлПрогресс.Filters(1).Properties("PreserveAspectRatio").Value = Ложь;  ///Сохранять пропорции (По умолчанию было истина - сбивает разрешения высоту и ширину)

	//Форматы преобразований имееют следующий формат:
	///wiaFormatBMP    = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}";      ///  .BMP
	wiaFormatJPEG   = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";         ///  .JPEG

	ФайлПрогресс.Filters(3).Properties("FormatID").Value = wiaFormatJPEG;
	ФайлПрогресс.Filters(3).Properties("Quality").Value = 50;          ///Качество фотографии  (от 1 - 100); 100 =60КБ  50 = 8КБ

	///Обрезка
	ФайлПрогресс.Filters(2).Properties("Left").Value   =  ОбрезкаЛ;       /// лево;
	ФайлПрогресс.Filters(2).Properties("Top").Value    =  ОбрезкаВ;       /// верх;
	ФайлПрогресс.Filters(2).Properties("Right").Value  =  ОбрезкаП;       /// право;
	ФайлПрогресс.Filters(2).Properties("Bottom").Value =  ОбрезкаН;	      /// низ;

	///Применить фильтры к фотографии
    ФайлКартинка = ФайлПрогресс.Apply(ФайлКартинка);

	///Удалить старое фото и создать новое
	УдалитьФайлы(фото);
    ФайлКартинка.SaveFile(фото);


	//Сообщить("    Расширение файла: " + ФайлКартинка.FileExtension);
	//Сообщить("    Ширина: " + ФайлКартинка.Width);
	//Сообщить("    Высота: " + ФайлКартинка.Height);
	//Сообщить("    Размер: " + Окр(ФайлКартинка.FileData.Count / 1024, 2) + " Кб");
КонецПроцедуры
```
Убрать итоги из готового текста запроса
Теги: 1С,Запрос,СхемаЗапроса,Итоги,СКД

Позволяет убрать итоги из текста запроса, на пример, перед передачей его в СКД

# Код реализации

```1c
СхемаЗапроса = новый СхемаЗапроса;
СхемаЗапроса.УстановитьТекстЗапроса(Запрос.Текст);
СхемаЗапроса.ПакетЗапросов.Получить(СхемаЗапроса.ПакетЗапросов.Количество()-1).ВыраженияИтогов.Очистить();
СхемаЗапроса.ПакетЗапросов.Получить(СхемаЗапроса.ПакетЗапросов.Количество()-1).КонтрольныеТочкиИтогов.Очистить();
Запрос.Текст = СхемаЗапроса.ПолучитьТекстЗапроса();
```
Выгрузка в Excel документ
Теги: 1С,Excel

# Примечания

- Как вариант: Простой и быстрый способ выгрузки из 1C в Excel без использования COMОбъект Excel.Application

- (1) ChOP, такой способ я знаю, а надо через COMОбъект желательно
что бы ячейки можно было манипулировать ячейками
ексель = Новый COMОбъект(Excel.application);
Книга = ексель.Workbooks.Open(ИмяФайла); // Через выбор диалогВыборфайла на клиенте
Лист = Книга.WorkSheets(1);
а как к ячейкам потом обращаться?
лист.Cells(1,1).text = типо того

- (2) Hex, https://pro1c8.ru/obmen-excel-1c/

- (3) ChOP, как раз искал что-то подобное)