arefaste/1C_Forums huggingface dataset:
МассивСтруктурВТаблицуЗначений
Теги: 1С,Преобразование,ТаблицаЗначений,Коллекции,Массив

Преобразует Массив в ТаблицуЗначений (функция обратная ТаблицаЗначенийВМассивСтруктур)

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

```1c
Функция МассивСтруктурВТаблицуЗначений(МассивСтруктур)

	ТаблицаЗначений = Новый ТаблицаЗначений;
	ДобавлятьКолонки = Истина;

	Для каждого СтруктураСтроки Из МассивСтруктур Цикл

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

		НоваяСтрока = ТаблицаЗначений.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтруктураСтроки);

	КонецЦикла;

	Возврат ТаблицаЗначений;

КонецФункции // МассивСтруктурВТаблицуЗначений()
```

# Примечания

- Надо добавить типизацию для колонок. Бывает требуется в запрос потом засунуть
СписокСтруктурВТаблицуЗначений
Теги: 1С,Преобразование,ТаблицаЗначений,СписокЗначений,Коллекции

Преобразует СписокЗначений в ТаблицуЗначений (функция обратная ТаблицаЗначенийВСписокСтруктур)

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

```1c
Функция СписокСтруктурВТаблицуЗначений(СписокСтруктур)

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

	Возврат ТаблицаЗначений;

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

Преобразует ТаблицуЗначений в СписокЗначений (функция обратная СписокСтруктурВТаблицуЗначений)

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

```1c
Функция ТаблицаЗначенийВСписокСтруктур(ТаблицаЗначений)

	КолонкиТаблицы = Новый Массив;
	Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
		КолонкиТаблицы.Добавить(Колонка.Имя);
	КонецЦикла;
	СтрокаКолонок = СтрСоединить(КолонкиТаблицы, ",");

	СписокСтруктур = Новый СписокЗначений;
	Для каждого СтрокаТаблицыЗначений Из ТаблицаЗначений Цикл
		СтруктураСтроки = Новый Структура(СтрокаКолонок);
		ЗаполнитьЗначенияСвойств(СтруктураСтроки, СтрокаТаблицыЗначений);
		СписокСтруктур.Добавить(СтруктураСтроки);
	КонецЦикла;

	Возврат СписокСтруктур;

КонецФункции // ТаблицаЗначенийВСписокСтруктур()
```
Найти ссылку по реквизиту
Теги: 1С,Запрос,Реквизит,Запросы,Данные,Желтый Чайник 1С,Поиск

Возвращает первую ссылку по значению реквизита

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

```1c
// Возвращает первую ссылку по значению реквизита
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/36
//
// Параметры:
//  ОбъектМетаданных - ОбъектМетаданныхСправочник, ОбъектМетаданныхДокумент, ОбъектМетаданныхБизнесПроцесс, ОбъектМетаданныхЗадача, ОбъектМетаданныхПланВидовХарактеристик -
//  ИмяРеквизита - Строка
//  ЗначениеРеквизита - Произвольный
//
// Возвращаемое значение:
//  ЛюбаяСсылка
//
// Пример:
//	Результат = НайтиСсылкуПоРеквизиту(Метаданные.Справочники.ЖЧТ_ТестовыйСправочник, "Номер", 999);
//	//Результат - ссылка на элемент справочника (или найденная или пустая)
//
Функция НайтиСсылкуПоРеквизиту(Знач ОбъектМетаданных, Знач ИмяРеквизита, Знач ЗначениеРеквизита) Экспорт

	ТекстЗапроса = СтрШаблон("ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 Ссылка ИЗ %1 ГДЕ %2 = &П",
		ОбъектМетаданных.ПолноеИмя(), ИмяРеквизита);

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

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

# Примечания

- Ссылка на ГХ не открывается (ошибка 404).
Элемент базы уникален
Теги: 1С,Проверка,УниверсальныйМетод,Данные,Желтый Чайник 1С,База

Функция проверяет уникальность элемента базы в разрезе реквизитов

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

```1c
// Проверяет уникальность элемента базы.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/89
//
// Параметры:
//  Элемент - ЛюбаяСсылка, СправочникОбъект, ДокументОбъект, ПланВидовРасчетаОбъект, ПланОбменаОбъект, ПланВидовХарактеристикОбъект, ЗадачаОбъект, БизнесПроцессОбъект - Ссылка или ссылочный объект
//  РеквизитУникальности - Строка - Реквизит уникальности
//  ДополнительныеОтборы - Строка - Дополнительные отборы
//
// Возвращаемое значение:
//  Булево - элемент уникален
//
// Пример:
//  Если НЕ ЭлементБазыУникален(Ссылка, "Наименование", "НЕ ПометкаУдаления") Тогда
//		ВызватьИсключение "Элемент с таким наименованием уже существует!";
//	КонецЕсли;
//
Функция ЭлементБазыУникален(Знач Элемент, Знач РеквизитУникальности = "Наименование", Знач ДополнительныеОтборы = "") Экспорт

	МетаданныеЭлемента = Элемент.Метаданные();
	ЭтоСсылка = МетаданныеЭлемента.СтандартныеРеквизиты.Ссылка.Тип.СодержитТип(ТипЗнч(Элемент));

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

	ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 1 ИЗ %1 ГДЕ %2 = &%2 И Ссылка <> &Ссылка";
	ТекстЗапроса = СтрШаблон(ТекстЗапроса, Элемент.Метаданные().ПолноеИмя(), РеквизитУникальности);
	Если ЗначениеЗаполнено(ДополнительныеОтборы) Тогда
		ТекстЗапроса = СтрШаблон("%1 И %2", ТекстЗапроса, ДополнительныеОтборы);
	КонецЕсли;

	Запрос = Новый Запрос(ТекстЗапроса);
	Для Каждого КлючИЗначение Из ЗначенияРеквизитов Цикл
		Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение);
	КонецЦикла;

	Возврат Запрос.Выполнить().Пустой();

КонецФункции
```
Сведения О Внешней Обработке
Теги: 1С

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

```1c
/////////////////////////////////////////////////////////////////////////
// РЕГИСТРАЦИЯ ВНЕШНЕЙ ОБРАБОТКИ

#Область ОсновныеНастройкиДляПодключения
//не забываем заполнять Обработка->Действия->Свойства->ХранилищеВариантовОтчетов
Функция ВернутьСтруктуруПараметров()

	Структура = Новый Структура();
	Структура.Вставить("Документ","");
	Структура.Вставить("Представление",ЭтотОбъект.Метаданные().Представление());
	Структура.Вставить("Наименование",ЭтотОбъект.Метаданные().Синоним);
	Структура.Вставить("Идентификатор",ЭтотОбъект.Метаданные().Имя);
	Структура.Вставить("Версия","1.0");
	Возврат Структура;

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

Функция СведенияОВнешнейОбработке() ЭКСПОРТ

	ПараметрыОбработки = ВернутьСтруктуруПараметров();

	Сведения = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	Сведения.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	Сведения.Наименование = ПараметрыОбработки.Наименование;
	Сведения.Версия = ПараметрыОбработки.Версия;

	стр              =Сведения.Команды.Добавить();
	стр.Представление=ПараметрыОбработки.Представление;
	стр.Идентификатор=ПараметрыОбработки.Идентификатор;
	стр.Использование=ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();

	Возврат Сведения;

КонецФункции
#КонецОбласти
```

# Примечания

- Неплохо бы отформатировать по стандартам. Пробелов не хватает возле знаков равно и запятых. Экспорт.
Выгрузить колонку таблицы значений
Теги: 1С,ТаблицаЗначений,Желтый Чайник 1С,Различные,Колонка,Таблица значений,Колонки,Таблица

Метод выгружает колонку с учетом параметров (опционально различные или отсортированные)

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

```1c
// Выгружает колонку таблицы значений
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/90
//
//  Параметры:
//  Таблица - ТаблицаЗначений
//  ИмяКолонки - Строка
//  Различные - Булево
//  Сортировать - Булево
//
// Возвращаемое значение:
//  Массив из Произвольный
//
// Пример:
// 	//ТаблицаЗначений содержит 3 строки со значениями в колонке "Колонка": 3,2,3
//  Результат = ВыгрузитьКолонку(ТаблицаЗначений, "Колонка", Истина, Истина);
//	//Результат - массив со значениями: 2,3
Функция ВыгрузитьКолонку(Знач Таблица, Знач ИмяКолонки, Знач Различные = Ложь, Знач Сортировать = Ложь) Экспорт

	Если Различные ИЛИ Сортировать Тогда

		Таблица = Таблица.Скопировать(, ИмяКолонки);

		Если Различные Тогда
			Таблица.Свернуть(ИмяКолонки);
		КонецЕсли;

		Если Сортировать Тогда
			Таблица.Сортировать(ИмяКолонки);
		КонецЕсли;

	КонецЕсли;

	Возврат Таблица.ВыгрузитьКолонку(ИмяКолонки);

КонецФункции
```
Заполнить таблицу значений из дерева (рекурсивно)
Теги: 1С,ТаблицаЗначений,ДеревоЗначений,Желтый Чайник 1С,Дерево,Таблица

Метод заполняет таблицу на основе дерева значений

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

```1c
// Заполнить таблицу значений из дерева рекурсивно.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/91
//
// Параметры:
//  ТаблицаЗначений - ТаблицаЗначений
//  ДеревоЗначений - ДеревоЗначений
//  ПостоянныеЗначения - Неопределено, Структура -
//
// Пример:
//
//  ПостоянныеЗначения = Новый Структура("Дата", ТекущаяДатаСеанса());
//  ЗаполнитьТаблицуИзДереваРекурсивно(ТаблицаЗначений, ДеревоЗначений, ПостоянныеЗначения);
//
Процедура ЗаполнитьТаблицуИзДереваРекурсивно(
	Знач ТаблицаЗначений, Знач ДеревоЗначений, Знач ПостоянныеЗначения = Неопределено) Экспорт

	КоллекцияКолонок = Новый Массив; //Массив из КоллекцияСтрокДереваЗначений
	КоллекцияКолонок.Добавить(ДеревоЗначений.Строки);

	Для Каждого ТекущаяКоллекция Из КоллекцияКолонок Цикл

		Для Каждого ТекущаяСтрока Из ТекущаяКоллекция Цикл //СтрокаДереваЗначений

			Если ЗначениеЗаполнено(ТекущаяСтрока.Строки) Тогда
				КоллекцияКолонок.Добавить(ТекущаяСтрока.Строки);
			КонецЕсли;

			НоваяСтрока = ТаблицаЗначений.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущаяСтрока);

			Если ПостоянныеЗначения <> Неопределено Тогда
				ЗаполнитьЗначенияСвойств(НоваяСтрока, ПостоянныеЗначения);
			КонецЕсли;

		КонецЦикла;

	КонецЦикла;

КонецПроцедуры
```
Алгоритм загрузки в документ "Корректировка регистров"
Теги: 1С,корректировка регистров

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

```1c
Запрос = Новый Запрос;
	Запрос.Текст ="ВЫБРАТЬ
		|	ДАТАВРЕМЯ(2020, 1, 1, 0, 0, 0) КАК Период,
		|	ВЫБОР
		|		КОГДА ПартииТоваровКомпанииОстатки.СтоимостьОстаток > 0
		|			ТОГДА ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
		|		КОГДА ПартииТоваровКомпанииОстатки.СтоимостьОстаток < 0
		|			ТОГДА ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		|	КОНЕЦ КАК ВидДвижения,
		|	ПартииТоваровКомпанииОстатки.Номенклатура КАК Номенклатура,
		|	ПартииТоваровКомпанииОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
		|	ПартииТоваровКомпанииОстатки.СтатусПартии КАК СтатусПартии,
		|	ПартииТоваровКомпанииОстатки.ДокументПоставки КАК ДокументПоставки,
		|	ПартииТоваровКомпанииОстатки.СкладКомпании КАК СкладКомпании,
		|	ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК Количество,
		|	ВЫБОР
		|		КОГДА ПартииТоваровКомпанииОстатки.СтоимостьОстаток > 0
		|			ТОГДА ПартииТоваровКомпанииОстатки.СтоимостьОстаток
		|		КОГДА ПартииТоваровКомпанииОстатки.СтоимостьОстаток < 0
		|			ТОГДА ПартииТоваровКомпанииОстатки.СтоимостьОстаток * -1
		|	КОНЕЦ КАК Стоимость,
		|	ВЫБОР
		|		КОГДА ПартииТоваровКомпанииОстатки.СтоимостьБезНДСОстаток > 0
		|			ТОГДА ПартииТоваровКомпанииОстатки.СтоимостьБезНДСОстаток
		|		КОГДА ПартииТоваровКомпанииОстатки.СтоимостьБезНДСОстаток < 0
		|			ТОГДА ПартииТоваровКомпанииОстатки.СтоимостьБезНДСОстаток * -1
		|	КОНЕЦ КАК СтоимостьБезНДСОстаток
		|ИЗ
		|	РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
		|ГДЕ
		|	ПартииТоваровКомпанииОстатки.КоличествоОстаток = 0
		|	И ПартииТоваровКомпанииОстатки.СтоимостьОстаток <> 0
		|";

	мРезультатЗапроса = Запрос.Выполнить();

	Объект.Движения.ПартииТоваровКомпании.Загрузить(мРезультатЗапроса.Выгрузить());
```
ОграничениеТипа списка выбора
Теги: 1С,список выбора,ограничение типа

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

```1c
Процедура СкладыИнвентаризацииНачалоВыбора(Элемент, СтандартнаяОбработка)

    Элемент.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.Склады");
    Элемент.Значение = Элемент.ОграничениеТипа.ПривестиЗначение(Элемент.Значение);
    Элемент.ВыбиратьТип = Ложь;

КонецПроцедуры
```
Табличный документ в таблицу значений
Теги: 1С,ТаблицаЗначений,ПостроительОтчета,ТабличныйДокумент

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

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

	ТабДанные = Построитель.Результат.Выгрузить();
```

# Примечания

- Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());  
ТабДанные = Построитель.Результат.Выгрузить();
Программное перемещение строк ДанныхФормКоллекции(Таблица значений) на Клиенте
Теги: 1С,Клиент,ТаблицаЗначений,ДанныеФормыКоллекция

Вместо ТаблицаСоСпискомСтрок подставьте свою таблицу, с колонкой ПорядковыйНомер
Получение ссылки по навигационной ссылке
Теги: 1С,навигационная ссылка

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

```1c
Функция СсылкаПоНС(НС)
	ПерваяТочка = Найти(НС, "e1cib/data/");
    ВтораяТочка = Найти(НС, "?ref=");

    ПредставлениеТипа   = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
    ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
    ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
    Ссылка = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
	Возврат НС;
КонецФункции
```
Сжатие длинной Строки
Теги: 1С,Восстановить,Сжать,Строка

Иногда бывает необходимо сжать длинную строку. А потом восстановить эту строку

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

```1c
Функция СжатьСтроку(СтрокаJSON)
	//Для СтрокаJSON длиной 1 000 000 байт
	//СтрокаBase64 имеет длину 36 000 байт

	СжатиеДанных = Новый СжатиеДанных(9);
	Значение = Новый ХранилищеЗначения(СтрокаJSON,СжатиеДанных);
	СтрокаBase64 = XMLСтрока(Значение);								//Преобразуем в Base64
	Возврат СтрокаBase64;
КонецФункции

Функция ВосстановитьСтроку(Стр)

	Результат = Стр;

	Хранилище = XMLЗначение(Тип("ХранилищеЗначения"), Стр);
	СтрокаJSONизХранилища = Хранилище.Получить();
	Если НЕ СтрокаJSONизХранилища = Неопределено Тогда		//  Исползовалось Сжатие через ХранилищеЗначения
		Результат = СтрокаJSONизХранилища;
	КонецЕсли;

	Возврат Результат;
КонецФункции
```

# Примечания

- Начиная с 8.3.10 предпочтительно использовать глобальную функцию (там разнообразие входящих данных)
Глобальный контекст (Global context)
ПолучитьBase64СтрокуИзДвоичныхДанных (GetBase64StringFromBinaryData)
Синтаксис:
ПолучитьBase64СтрокуИзДвоичныхДанных(<ДвоичныеДанные>)
Параметры:
<ДвоичныеДанные> (обязательный)
Тип: ДвоичныеДанные.
Двоичные данные.
Возвращаемое значение:
Тип: Строка.
Описание:
Преобразует двоичные данные в строку формата Base64.
Полученный текст разбивается на строки длиной 64 символа. В качестве разделителя строк используется сочетание символов CR+LF.
Если целевой декодер Base64 не поддерживает переводы строк, требуется дополнительно обработать строки, чтобы удалить из нее разделители.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.10.
И обратное преобразование
Глобальный контекст (Global context)
ПолучитьДвоичныеДанныеИзBase64Строки (GetBinaryDataFromBase64String)
Синтаксис:
ПолучитьДвоичныеДанныеИзBase64Строки(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: Строка.
Строка в формате Base64.
Возвращаемое значение:
Тип: ДвоичныеДанные.
Описание:
Преобразует строку формата Base64 в двоичные данные.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.10.

- (1) XXLBony, Мне особенно нравиться "Если целевой декодер Base64 не поддерживает переводы строк, требуется дополнительно обработать строки, чтобы удалить из нее разделители." Я уверен, что целевой декодер 1С НЕ поддерживает переводы строк.

- Степень сжатия лучше уменьшить, 9 максимально нагрузит процессор, а результат (особенно при работе с текстом) сопоставим с более низкими параметрами сжатия.
ЗначениеПеречисленияПоСинониму
Теги: 1С,Перечисления

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

```1c
Функция ЗначениеПеречисленияПоСинониму(ИмяПеречисления, ЗначениеСинонимаТекст)

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

	Возврат ЭлементПеречисления;

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

# Примечания

- а при каких обстоятельствах такое возможно использовать?

- (1) Mihuilka, я такое помню использовал при переносе движений документа "Операция" из БП 3.0 в БП 3.0 после переноса документов через обработку - "ВыгрузкаЗагрузкаXML", там по другому никак не получалось.
Функция сортировки массива или списка значений (ссылок одного типа) по реквизитам соответствующих объектов
Теги: 1С,Сортировка

Например:
СЗ = СортироватьСсылкиПоРеквизитам(СЗ, "Дата УБЫВ");

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

```1c
// СортироватьСсылкиПоРеквизитам  —  сортирует массив или список значений (ссылок одного типа) по реквизитам соответствующих объектов
//
// Параметры:
// КоллекцияСсылок — Массив, СписокЗначений — сортируемая коллекция однотипных ссылок
// РеквизитыСортировки — Строка — Список имен реквизитов, разделенных запятыми, по которым производится сортировка коллекции.
//								  После каждого имени колонки через пробел может быть указано направление сортировки.
//								  Направление определяется: "Убыв" ("Desc") - упорядочивать по убыванию; "Возр" ("Asc") - упорядочивать по возрастанию.
//								  По умолчанию сортировка производится по возрастанию. Порядок указания имен реквизитов определяет порядок сортировки.
//								  При пустом значении производится автоупорядочивание ссылок.
// Возвращаемое значение:
//      — Массив —
//      — СписокЗначений —
// Пример:
//     СЗ = СортироватьСсылкиПоРеквизитам(СЗ, "Код УБЫВ");
Функция СортироватьСсылкиПоРеквизитам(Знач КоллекцияСсылок, Знач РеквизитыСортировки = Неопределено) Экспорт
	ОбщегоНазначенияКлиентСервер.ПроверитьПараметр(
			"ОбщегоНазначения.СортироватьСсылкиПоРеквизитам"
			, "КоллекцияСсылок"
			, КоллекцияСсылок
			, Новый ОписаниеТипов("Массив, СписокЗначений"));

	Если Не ЗначениеЗаполнено(КоллекцияСсылок) Тогда
		Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
			Возврат Новый Массив;
		ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
			Возврат Новый СписокЗначений();
		КонецЕсли;
	КонецЕсли;

	Если НЕ ЗначениеЗаполнено(РеквизитыСортировки) Тогда
		РеквизитыСортировки = "Ссылка";
	КонецЕсли;

	Если ТипЗнч(КоллекцияСсылок) = Тип("Массив") Тогда
		МассивСсылок = КоллекцияСсылок;
	ИначеЕсли ТипЗнч(КоллекцияСсылок) = Тип("СписокЗначений") Тогда
		МассивСсылок = КоллекцияСсылок.ВыгрузитьЗначения();
	КонецЕсли;

	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	Ссылка КАК Ссылка
		|ИЗ
		|	" + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица
		|ГДЕ
		|	Таблица.Ссылка В (&МассивСсылок)
	    |УПОРЯДОЧИТЬ ПО
	    |	" + РеквизитыСортировки + "
	    |АВТОУПОРЯДОЧИВАНИЕ";

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

В конфигурациях в которых возможно использование обоих режимов блокировки иногда требуется определить режим текущей транзакции, например, для того чтобы начать вложенную.

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

```1c
Функция ОпределитьРежимУправленияБлокировкойДанных() Экспорт
    Если НЕ ТранзакцияАктивна() Тогда
        Возврат Неопределено;
    КонецЕсли;

    Попытка
        НачатьТранзакцию(РежимУправленияБлокировкойДанных.Автоматический);
        ЗафиксироватьТранзакцию();
    Исключение
        Возврат РежимУправленияБлокировкойДанных.Управляемый;
    КонецПопытки;
    Возврат РежимУправленияБлокировкойДанных.Автоматический;
КонецФункции
```
Реализация функции Пауза() из 1С ERP
Теги: 1С,Пауза

Оптимальное решение формирования Паузы в коде 1С. 
Другие способы имеют недостатки, не буду описывать все. Например, бесконечный цикл с проверкой истечения времени грузит процессор, а WshShell не будет работать под Linux.

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

```1c
//Процедуру следует разместить в модуле КакойтоСерверныйОбщийМодуль :)

// Делает паузу выполнения кода
//
// Параметры:
// 	КоличествоСекунд - Число - длительность паузы

Процедура Пауза(КоличествоСекунд) Экспорт
	Если ТипЗнч(КоличествоСекунд) <> Тип("Число") ИЛИ КоличествоСекунд < 1 ИЛИ КоличествоСекунд > 180 Тогда
		Возврат;
	КонецЕсли;

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

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

```1c
		Попытка
			ВесоГабариты = Новый Структура("Вес", СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ПараметрыНоменклатуры.получить("Weight")));
		Исключение
			Описание = ОписаниеОшибки();
			// {ВнешняяОбработка.ОписаниеОшибки.Форма.Форма.Форма(6)}: Недостаточно фактических параметров

			Информация = ИнформацияОбОшибке();
			// Информация.ИмяМодуля = "ВнешняяОбработка.ОписаниеОшибки.Форма.Форма.Форма"
			// Информация.ИсходнаяСтрока = "		А = ОбщегоНазначения.ЗначениеРеквизитаОбъекта();"
			// Информация.НомерСтроки = 30
			// Информация.Описание = "Недостаточно фактических параметров"
			// Информация.Причина = Неопределено

			//КраткоеПредставлениеОшибки(Информация);
			// Недостаточно фактических параметров

			Подробности = ПодробноеПредставлениеОшибки(Информация);
			// Недостаточно фактических параметров
			// {ВнешняяОбработка.ОписаниеОшибки.Форма.Форма.Форма(6)}:		А = ОбщегоНазначения.ЗначениеРеквизитаОбъекта();

			//ВызватьИсключение "Не удалось получить значение реквизита по причине: " + Описание;
			//ОбщегоНазначения.СообщитьПользователю("-" + ПараметрыНоменклатуры.получить("ExternalItemId") + ": " + ОписаниеОшибки());
			ЗаписьЖурналаРегистрации("Axapta.Обновление номенклатуры", УровеньЖурналаРегистрации.Ошибка, Номенклатура.Метаданные(), Номенклатура,
				"Не удалось получить сведения по номенклатуре: " + Подробности);
            Возврат Номенклатура
		КонецПопытки;
```

# Примечания

- для кого тогда стандарты пишут, хз.