arefaste/1C_Forums huggingface dataset:
Текущие данные таблицы формы
Теги: 1С,Интерфейс,ДанныеФормыКоллекция,Форма,Желтый Чайник 1С,Таблица

Текущие данные таблицы (клиент-сервеный метод для упрощения получания текущих данных табицы формы).

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

```1c
// Текущие данные таблицы (клиент-сервеный метод для упрощения получания текущих данных табицы формы).
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/88
//
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
//  ИмяТаблицы - Строка
//
// Возвращаемое значение:
//  ДанныеФормыЭлементКоллекции
Функция ТекущиеДанныеТаблицы(Знач Форма, Знач ИмяТаблицы) Экспорт

	Результат = Неопределено; // ДанныеФормыЭлементКоллекции

	ЭлементФормы = Форма.Элементы[ИмяТаблицы];

	#Если Клиент Тогда

		Результат = ЭлементФормы.ТекущиеДанные;

	#Иначе

		ТекущаяСтрока = ЭлементФормы.ТекущаяСтрока;
		Если ТипЗнч(ТекущаяСтрока) = Тип("Число") Тогда

			ТаблицаФормы = Форма; // ДанныеФормыДерево
			ЧастиПути = СтрРазделить(ЭлементФормы.ПутьКДанным, ".");
			Для Каждого ЧастьПути Из ЧастиПути Цикл
				ТаблицаФормы = ТаблицаФормы[ЧастьПути];
			КонецЦикла;

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

		КонецЕсли;

	#КонецЕсли

	Возврат Результат;

КонецФункции
```
Обновить признак предупреждения при редактировании элемента
Теги: 1С,Интерфейс,Свойства,Форма,Данные,Желтый Чайник 1С

Обновить признак предупреждения при редактировании элемента в зависимости от заполненности указанных данных.

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

```1c
// Обновить признак предупреждения при редактировании элемента в зависимости от заполненности указанных данных.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/100
//
// Параметры:
//  Форма - ФормаКлиентскогоПриложения
//  ИменаЭлементов - Строка, Массив из Строка - Имена элементов предупреждения
//  ПроверяемыеДанные - Строка, Массив из Строка - Проверяемые данные
Процедура ОбновитьПризнакПредупрежденияПриРедактированииЭлемента(Знач Форма, Знач ИменаЭлементов, Знач ПроверяемыеДанные) Экспорт

	Если ТипЗнч(ИменаЭлементов) = Тип("Строка") Тогда
		ИменаЭлементов = СтрРазделить(ИменаЭлементов, "," + Символы.ПС, Ложь);
	КонецЕсли;

	Если ТипЗнч(ПроверяемыеДанные) = Тип("Строка") Тогда
		ПроверяемыеДанные = СтрРазделить(ПроверяемыеДанные, "," + Символы.ПС, Ложь);
	КонецЕсли;

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

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

		Элемент = Форма.Элементы.Найти(ИмяЭлемента);
		Если Элемент.ОтображениеПредупрежденияПриРедактировании <> ПризнакПредупреждения Тогда
			Элемент.ОтображениеПредупрежденияПриРедактировании = ПризнакПредупреждения;
		КонецЕсли;

	КонецЦикла;

КонецПроцедуры
```
Новый элемент условного оформления
Теги: 1С,СхемаКомпоновкиДанных,Управляемая форма,Условное оформление,Форма,Желтый Чайник 1С,СКД

Добавляет элемент условного оформления по параметрам

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

```1c
// Добавляет элемент условного оформления по параметрам
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/83
//
// Параметры:
//  УсловноеОформление	 - УсловноеОформлениеКомпоновкиДанных - Коллекция условного оформления
//  ОформляемыеПоля		 - Строка, Массив из Строка - Имена полей, на которых распространяется условное оформление
//  УсловияОтбора		 - Структура, Массив из Структура - Условия отбора оформления.
//  ПараметрыОформления	 - Структура - Параметры оформления
//
// Возвращаемое значение:
//  ЭлементУсловногоОформленияКомпоновкиДанных  - добавленный элемент
//
Функция НовыйЭлементУсловногоОформления(Знач УсловноеОформление,
	Знач ОформляемыеПоля, Знач УсловияОтбора, Знач ПараметрыОформления) Экспорт

	НовыйЭлемент = УсловноеОформление.Элементы.Добавить();
	НовыйЭлемент.Использование = Истина;

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

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

	Для Каждого ДобавляемоеПоле Из КоллекцияДобавляемыхПолей Цикл
		ОформляемоеПолеКомпоновкиДанных = НовыйЭлемент.Поля.Элементы.Добавить();
		ОформляемоеПолеКомпоновкиДанных.Использование = Истина;
		ОформляемоеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(ДобавляемоеПоле);
	КонецЦикла;

	Если ТипЗнч(УсловияОтбора) = Тип("Массив") Тогда
		КоллекцияУсловий = УсловияОтбора;
	Иначе
		КоллекцияУсловий = Новый Массив(1);
		КоллекцияУсловий[0] = УсловияОтбора;
	КонецЕсли;

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

	Возврат НовыйЭлемент;

КонецФункции
```
Структура из параметров формы
Теги: 1С,ДанныеФормыСтруктура,Параметры,Структура,Форма,Желтый Чайник 1С

Возвращает структуру из параметров формы.

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

```1c
// Возвращает структуру из параметров формы.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/133
//
// Параметры:
//  ПараметрыФормы - ДанныеФормыСтруктура
//
// Возвращаемое значение:
//  Структура
Функция СтруктураИзПараметровФормы(Знач ПараметрыФормы) Экспорт

	Результат = Новый Структура;

	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ПараметрыФормы, НазначениеТипаXML.Явное);
	СтрокаXML = ЗаписьXML.Закрыть();
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаXML);

	Пока ЧтениеXML.Прочитать() Цикл

		Если ЧтениеXML.Имя = "structure"
			И ЧтениеXML.ПолучитьАтрибут("name") = "parameters"
			И ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда

			Прервать;

		ИначеЕсли ЧтениеXML.Имя = "field" Тогда

			ТекущийКлюч	= ЧтениеXML.ПолучитьАтрибут("nameRu");
			ТекущийКлюч	= ?(ЗначениеЗаполнено(ТекущийКлюч), ТекущийКлюч, ЧтениеXML.ПолучитьАтрибут("name"));
			Если ЗначениеЗаполнено(ТекущийКлюч) Тогда
				Результат.Вставить(ТекущийКлюч);
			КонецЕсли;

		КонецЕсли;

	КонецЦикла;

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

	ЗаполнитьЗначенияСвойств(Результат, ПараметрыФормы);

	Возврат Результат;

КонецФункции
```
Метод существует
Теги: 1С,Объект,Рефлексия,Желтый Чайник 1С,Метод

Функция определяет существование метода объекта

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

```1c
// Функция определяет существование метода объекта
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/56
//
// Параметры:
//  Объект - Произвольный
//  ИмяМетода - Строка
//
// Возвращаемое значение:
//  Булево - Существует ли метод объекта
Функция МетодСуществует(Знач Объект, Знач ИмяМетода) Экспорт

	ШаблонКода = "Объект.%1(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)";
	Алгоритм = СтрШаблон(ШаблонКода, ИмяМетода);

	Попытка
		//@skip-check server-execution-safe-mode, module-unused-local-variable
		НеобработанныйРезультат = Вычислить(Алгоритм);
	Исключение
		ИнформацияОбОшибке = ИнформацияОбОшибке();
		Если СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Значение не является значением объектного типа") Тогда
			Возврат Ложь;
		ИначеЕсли ИнформацияОбОшибке.Описание = "Слишком много фактических параметров" Тогда
			Возврат Истина;
		ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Обращение к процедуре объекта как к функции") Тогда
			Возврат Истина;
		ИначеЕсли СтрНачинаетсяС(ИнформацияОбОшибке.Описание, "Метод объекта не обнаружен") Тогда
			Возврат Ложь;
		Иначе
			НеобработанныйРезультат = ИнформацияОбОшибке.Описание;
		КонецЕсли;
	КонецПопытки;

	//На всякий случай
	ТекстИсключения = "Проверяемый метод ""%1"" объекта ""%2"" типа ""%3"" содержит неопределенное число параметров и не может быть проверен!
		|Результат выполнения: %4";
	ТекстИсключения = СтрШаблон(ТекстИсключения, ИмяМетода, Объект, ТипЗнч(Объект), НеобработанныйРезультат);
	ВызватьИсключение ТекстИсключения;

КонецФункции
```
Заменить ссылки на навигационные
Теги: 1С,Сериализация,Структура,Формат,Данные,Желтый Чайник 1С

Заменяет в объекте все ссылки на элементы на их навигационные ссылки

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

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

	Если ТипЗнч(Объект) = Тип("Массив") Тогда

		Для Индекс = 0 По Объект.Количество() - 1 Цикл
			Значение = Объект[Индекс];
			ЗаменитьСсылкиНаНавигационные(Значение);
			Объект[Индекс] = Значение;
		КонецЦикла;

	ИначеЕсли ТипЗнч(Объект) = Тип("Структура")
		ИЛИ ТипЗнч(Объект) = Тип("Соответствие") Тогда

		Для Каждого КлючИЗначение Из Объект Цикл
			Значение = КлючИЗначение.Значение;
			ЗаменитьСсылкиНаНавигационные(Значение);
			Объект[КлючИЗначение.Ключ] = Значение;
		КонецЦикла;

	Иначе

		ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
		Если ОбъектМетаданных <> Неопределено Тогда
			Объект = ПолучитьНавигационнуюСсылку(Объект);
		КонецЕсли;

	КонецЕсли;

КонецПроцедуры
```
Отформатированный текст запроса
Теги: 1С,Форматирование,Текст запроса,Запрос,Желтый Чайник 1С

Возвращает отформатированный текст запроса

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

```1c
// Возвращает отформатированный текст запроса.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/62
//
// Параметры:
//  ТекстЗапроса - Строка
//  РежимКомпоновкиДанных - Булево
//
// Возвращаемое значение:
//  Строка
//
// Пример:
//  ТекстЗапроса = "ВЫБРАТЬ " + ВыбираемыеПоля + " ИЗ " + Таблица + " ГДЕ " + Условия;
//  ТекстЗапроса = ОтформатированныйТекстЗапроса(ТекстЗапроса); //Читабельный текст запроса
//
Функция ОтформатированныйТекстЗапроса(Знач ТекстЗапроса, Знач РежимКомпоновкиДанных = Ложь) Экспорт

	СхемаЗапроса = Новый СхемаЗапроса();
	СхемаЗапроса.РежимКомпоновкиДанных = РежимКомпоновкиДанных;
	СхемаЗапроса.УстановитьТекстЗапроса(ТекстЗапроса);

	Возврат СхемаЗапроса.ПолучитьТекстЗапроса();

КонецФункции
```
Заполнить параметры запроса
Теги: 1С,Запрос,Параметры,Данные,Желтый Чайник 1С

Заполняет в запросе параметры из структуры (берет только те, что есть в запросе, игнорируя лишние свойства)

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

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

	Для Каждого ПараметрЗапроса Из Запрос.НайтиПараметры() Цикл

		ИмяПараметра = ПараметрЗапроса.Имя;
		ЗначениеПараметра = Неопределено;
		Если ИсточникПараметров.Свойство(ИмяПараметра, ЗначениеПараметра) Тогда
			Запрос.УстановитьПараметр(ИмяПараметра, ЗначениеПараметра);
		КонецЕсли;

	КонецЦикла;

КонецПроцедуры
```
Данные таблицы базы данных
Теги: 1С,Запрос,Метаданные,Данные,Желтый Чайник 1С,БД,База,Таблица

Возвращает данные таблицы базы данных по отбору

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

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

	Построитель  = Новый ПостроительЗапроса;
	Построитель.Текст = СтрШаблон("ВЫБРАТЬ %1 ИЗ %2", "*", Таблица);
	Построитель.ЗаполнитьНастройки();

	Если НЕ Колонки = Неопределено Тогда

		Если ТипЗнч(Колонки) = Тип("Строка") Тогда
			//@skip-check statement-type-change
			Колонки = СтрРазделить(Колонки, ",");
		КонецЕсли;

		Построитель.ВыбранныеПоля.Очистить();
		Для Каждого ИмяКолонки Из Колонки Цикл
			Построитель.ВыбранныеПоля.Добавить(ИмяКолонки);
		КонецЦикла;

	КонецЕсли;

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

	Построитель.Выполнить();

	Возврат Построитель.Результат;

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

Проведение документа с проверкой заполнения, если есть ошибки то просто запись.

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

```1c
Функция ПровестиДокумент(ДокументОбъект) Экспорт

	Результат = Новый Структура("УспешноПроведен, ОписаниеОшибки");

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

		Результат.УспешноПроведен = Ложь;
		Результат.ОписаниеОшибки = ПредставлениеОшибки;
	КонецЕсли;

	Возврат Результат;

КонецФункции
```
Пример подключение к базе MS SQL через внешние источники данных 1С
Теги: 1С,ВнешняяОбработка,SQL

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

```1c
Функция ПолучитьПараметрыСервера() Экспорт

	Для каждого строкаПодключения из Объект.ПараметрыПодключения Цикл
		Если строкаПодключения.Выбор  Тогда
			ИмяСервераSQL = строкаПодключения.Server;
			ПользовательSQL = строкаПодключения.User;
			ПарольSQL = строкаПодключения.Password;
			БазаДанныхSQL = строкаПодключения.Base;
		КонецЕсли;
	КонецЦикла;

	Строка =
	"driver={SQL Server};" +
	"server="+ИмяСервераSQL+";"+
	"database="+БазаДанныхSQL+";";

	ПСБ_СтрокаСоединения = Строка;
	ПСБ_АутентификацияСтандартная = Истина;
	ПСБ_ИмяПользователя = ПользовательSQL;
	ПСБ_Пароль = ПарольSQL;
	ПСБ_СУБД = "MS SQL Server";
	ПСБ_БД = БазаДанныхSQL;

	СтрокаСоедененияССервером = "driver={SQL Server};" +
	"server="+ИмяСервераSQL+";"+
	"uid="+ПользовательSQL+";"+
	"pwd="+ПарольSQL+";"+
	"database="+БазаДанныхSQL+";";



	ПараметрыСервера = Новый Структура;

	ПараметрыСервера.Вставить("ПСБ_СтрокаСоединения", ПСБ_СтрокаСоединения);
	ПараметрыСервера.Вставить("ПСБ_АутентификацияСтандартная", ПСБ_АутентификацияСтандартная);
	ПараметрыСервера.Вставить("ПСБ_ИмяПользователя", ПСБ_ИмяПользователя);
	ПараметрыСервера.Вставить("ПСБ_Пароль", ПСБ_Пароль);
	ПараметрыСервера.Вставить("ПСБ_СУБД", ПСБ_СУБД);
	ПараметрыСервера.Вставить("ПСБ_БД", ПСБ_БД);
	ПараметрыСервера.Вставить("СтрокаСоедененияССервером", СтрокаСоедененияССервером);

	Возврат ПараметрыСервера;


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

&НаСервере
Процедура ПроверитьПодключениеНаСервере()

	ПараметрыСервера = ПолучитьПараметрыСервера();
	ПараметрыСоединенияСБазой = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
	ПараметрыСоединенияСБазой.СтрокаСоединения = ПараметрыСервера.ПСБ_СтрокаСоединения;
	ПараметрыСоединенияСБазой.АутентификацияСтандартная = ПараметрыСервера.ПСБ_АутентификацияСтандартная;
	ПараметрыСоединенияСБазой.ИмяПользователя = ПараметрыСервера.ПСБ_ИмяПользователя;
	ПараметрыСоединенияСБазой.Пароль = ПараметрыСервера.ПСБ_Пароль;
	ПараметрыСоединенияСБазой.СУБД = ПараметрыСервера.ПСБ_СУБД;

	ВнешниеИсточникиДанных.ForRestPOS.УстановитьПараметрыСоединенияСеанса(ПараметрыСоединенияСБазой);
	Попытка
		ВнешниеИсточникиДанных.ForRestPOS.УстановитьСоединение();
		Сообщить("Подключение успешно!");
	Исключение
		Сообщить("Подключение не установлено!");
	КонецПопытки;

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

Преобразовать количество остатков в строки запроса
В данном примере количество остатков не больше 16

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

```1c
ВЫБРАТЬ
	0 КАК Х
ПОМЕСТИТЬ Регистр1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	1
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Младшие.Х + 2 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр2
ИЗ
	Регистр1 КАК Младшие,
	Регистр1 КАК Старшие
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Младшие.Х + 4 * Старшие.Х КАК Х
ПОМЕСТИТЬ Регистр3
ИЗ
	Регистр2 КАК Младшие,
	Регистр2 КАК Старшие
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВводОстатковТМЦВЭксплуатацииТМЦВЭксплуатации.Номенклатура КАК Номенклатура,
	ВводОстатковТМЦВЭксплуатацииТМЦВЭксплуатации.Номенклатура.Код КАК НоменклатураКод,
	ВводОстатковТМЦВЭксплуатацииТМЦВЭксплуатации.Количество КАК Количество
ПОМЕСТИТЬ Вт_Ном
ИЗ
	Документ.ВводОстатковТМЦВЭксплуатации.ТМЦВЭксплуатации КАК ВводОстатковТМЦВЭксплуатацииТМЦВЭксплуатации
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВводОстатковТМЦВЭксплуатации КАК ВводОстатковТМЦВЭксплуатации
		ПО ВводОстатковТМЦВЭксплуатацииТМЦВЭксплуатации.Ссылка = ВводОстатковТМЦВЭксплуатации.Ссылка
ГДЕ
	ВводОстатковТМЦВЭксплуатацииТМЦВЭксплуатации.Номенклатура.ВидНоменклатуры = &ВидНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	Вт_Ном.Номенклатура КАК Номенклатура,
	Вт_Ном.НоменклатураКод КАК НоменклатураКод,
	1 КАК КолВо
ИЗ
	Вт_Ном КАК Вт_Ном
		ЛЕВОЕ СОЕДИНЕНИЕ Регистр3 КАК Регистр3
		ПО (Регистр3.Х < Вт_Ном.Количество)
```
Поиск http ссылок в тексте, без RegEx.
Теги: 1С,http,открыть,текста,поиск,текст,ссылку,из

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

```1c
Функция НайтиСсылки(Текст)

	Ссылки = Новый Массив;

	НачальнаяПозицияПоиска = 1;
	НомерПоследнейПозиции = СтрДлина(Текст);
	Пока Истина Цикл

		Если НачальнаяПозицияПоиска > НомерПоследнейПозиции Тогда
			Прервать;
		КонецЕсли;

		НачальнаяПозиция = СтрНайти(Текст, "http", НаправлениеПоиска.СНачала, НачальнаяПозицияПоиска);
		Если НачальнаяПозиция > 0 Тогда
			ЧислоСимволов = 4;
			Пока Истина Цикл
				ЧислоСимволов = ЧислоСимволов + 1;
				Если (НачальнаяПозицияПоиска + ЧислоСимволов - 1 > НомерПоследнейПозиции) Или ПустаяСтрока(Прав(Сред(Текст, НачальнаяПозиция, ЧислоСимволов), 1)) Тогда
					Прервать;
				КонецЕсли;
			КонецЦикла;

			Ссылки.Добавить(Сред(Текст, НачальнаяПозиция, ЧислоСимволов - 1));
			НачальнаяПозицияПоиска = НачальнаяПозиция + ЧислоСимволов - 1;
		Иначе
			Прервать;
		КонецЕсли;

	КонецЦикла;

	Возврат Ссылки;

КонецФункции
```
КомпоновщикНастроек для выполнения отбора на форме
Теги: 1С,Отбор,КомпоновщикНастроек,СхемаКомпоновки

Использование компоновки данных для выполнения отбора на произвольной форме Документа, Справочника или Обработки (там где есть Макет). В Макет "ИмяМакета" добавляем схему компоновки с нужным Отбором. В реквизиты формы добавляем элемент "КомпоновщикНастроек" Тип "КомпоновщикНастроекКомпоновкиДанных". Реквизит "КомпоновщикНастроек" размещаем на форме. В ПриСозданииНаСервере он заполнится элементами для отбора из схемы макета.

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

```1c
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	// Инициализация реквизита формы КомпоновщикНастроекОтбор

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

	// если требуется восстановить НастройкиКомпоновщика
	НастройкиКомпоновщика = МояФункцияВосстановленияНастроекКомпоновщика();
	Если НастройкиКомпоновщика <> Неопределено Тогда
		КомпоновщикНастроекОтбор.ЗагрузитьНастройки(НастройкиКомпоновщика);
	КонецЕсли;

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

&НаСервере
Процедура ВыполнитьОтбор()

	// Произвольная процедура с заполнением таблицы отбора

	ТаблицаОтбора = Новый ТаблицаЗначений;

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

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиОтбор,
					  НастройкиКомпоновщика, , ,
					  Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ПроцессорВывода.УстановитьОбъект(ТаблицаОтбора);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);

	// в ТаблицаОтбора содержится результат выполнения схемы компоновки

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

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

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

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

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

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

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

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

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