arefaste/1C_Forums huggingface dataset:
Пауза в любой ОС
Теги: 1С,Пауза,ФоновоеЗадание

Алгоритм для имитации длительных вызовов, например, когда нужно подождать определенное количество времени, прежде чем исполнять следующий алгоритм.
На основе видео 1С:УЦ 1: https://www.youtube.com/watch?v=oI4i1PeqJ_Y

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

```1c
//Процедуру нужно расположить в общем модуле с включенными флагами "Сервер" и "Вызов сервера"
Процедура Пауза(КоличествоСекунд) Экспорт

	Если ТипЗнч(КоличествоСекунд) <> Тип("Число") ИЛИ КоличествоСекунд = 0 Тогда
		Возврат; // Чтобы не произошло бесконечной паузы (зависания)
	КонецЕсли;

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

	Если ФоновоеЗадание = Неопределено Тогда

		// Алгоритм запуска фонового задания и ожидания завершения по времени

		Параметры = Новый Массив(1);
		Параметры.Установить(0, КоличествоСекунд);
		ИмяМетода = "_ФоновоеЗадание.Пауза"; // Полное имя метода текущей процедуры, с указанием общего модуля

		// Запускаем фоновое задание без использования расширений конфигурации (снижаем нагрузку на сервер)
		ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеБезРасширений(ИмяМетода, Параметры);

	КонецЕсли;

	ФоновоеЗадание.ОжидатьЗавершенияВыполнения(КоличествоСекунд);

КонецПроцедуры
```
Инициализировать Форму Выбора
Теги: 1С,Желтый Чайник 1С

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

```1c
// Настраивает форму списка так, чтобы она стала формой выбора.
// Позволяет полноценно использовать одну форму как в качестве основной формы списка, так и формы выбора
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - управляемая форма
//  ИмяЭлемента  - Строка - Имя элемента динамического списка
//
Процедура ИнициализироватьФормуВыбора(Форма, ИмяЭлемента = "Список") Экспорт

	ЭлементФормы = Форма.Элементы.Найти(ИмяЭлемента);
	ЭлементФормы.РежимВыбора = (Форма.Параметры.РежимВыбора = Истина);
	ЭлементФормы.МножественныйВыбор = (Форма.Параметры.МножественныйВыбор = Истина);

	Если ЭлементФормы.РежимВыбора И НЕ ЗначениеЗаполнено(Форма.КлючНазначенияИспользования) Тогда
		СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(Форма, "РежимВыбора");
	КонецЕсли;

КонецПроцедуры
```
Поиск количества ссылок на объект по измерениям в регистрах
Теги: 1С

Процедура выполняет поиск по измерениям регистров накопления (сменить на любой другой не составит сложности, как и на поиск по ресурсам, реквизитам).
Подойдет для тех, у кого режим совместимости 8.3.4 и ниже, в следствие чего, в НайтиПоСсылкам() нет возможности использовать ОбластьПоиска, а платформенный поиск ссылок выдает избыточное количество информации. 
Писался для работы в толстом клиенте на ОФ, поэтому в коде присутствует функция Сообщить().

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

```1c
Процедура НайтиСсылкуНаОрганизациюВРегистрахИзмеренияхРН (ОбъектДляПоиска, ТипОбъекта)

Для Каждого Регистр Из Метаданные.РегистрыНакопления Цикл

	Для Каждого Измерение Из Регистр.Измерения Цикл

		МассивТипов = Новый Массив;
		МассивТипов.Добавить(ТипОбъекта);

		Если Измерение.Тип = Новый ОписаниеТипов(МассивТипов) Тогда

			ИмяРегистра = Регистр.Имя;
			ИмяИзмерения = Измерение.Имя;

			Запрос = Новый Запрос;
			Запрос.Текст = "ВЫБРАТЬ
			|	" + ИмяРегистра + "." + ИмяИзмерения + ",
			|	СУММА(1) КАК КоличествоЗаписей
			|ИЗ
			|	РегистрНакопления." + ИмяРегистра + " КАК " + ИмяРегистра + "
			|ГДЕ
			|  " + ИмяРегистра + "." + ИмяИзмерения + " = &ИскомыйОбъект" + "
			|СГРУППИРОВАТЬ ПО
			|	" + ИмяРегистра + "." + ИмяИзмерения + "";
			Запрос.УстановитьПараметр("ИскомыйОбъект", ТипОбъекта);
			Результат = Запрос.Выполнить().Выбрать();
			Выборка = Запрос.Выполнить().Выбрать();

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

		КонецЕсли;
	КонецЦикла;
КонецЦикла;

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

# Примечания

- Толковая обработка. Я сам планировал написать такую же для любого типа объекта. Она будет нужна для определения списка полей, для которых например нужно писать правила конвертации свойств в КД. Также можно будет исключать поля с типом "булево" и единственным значением -"ложь"
Попытка проведения и записи документа в одной процедуре
Теги: 1С

Процедура проверяет корректность заполнения полей документа, пытается его провести. Если проведение не удается, пытается его записать. В реальной работе располагается в модуле загрузки документов из внешней системы, все документы фиксируются в базе этой процедурой.

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

```1c
// Выполняет попытку проведения и записи документа
//
// Параметры:
//  ДокументОбъект	 		- ДокументОбъект 	- документ, который необходимо провести или записать
//  ПредставлениеДокумента	- ЛюбаяСсылка, Строка			- ссылка или представление ссылки на документ для вывода в сообщение
//  Отказ			 		- Булево 			- признак ошибки при попытке записи (документ не проведен и не записан)
//
Процедура ЗафиксироватьДокумент(ДокументОбъект, Знач ПредставлениеДокумента, Отказ)

	ДокументЗафиксирован = Ложь;

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

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

	Отказ = Отказ ИЛИ НЕ ДокументЗафиксирован;

КонецПроцедуры
```
Шаблон ПриКомпоновкеРезультата Программное формирование
Теги: 1С,ПриКомпоновкеРезультата,СКД

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

```1c
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

	//отказ от стандартного формирования
	СтандартнаяОбработка = Ложь;

	//1. получение схемы компановки данных
	СхемаКомпановки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

	//2. получение настроек компановки данных
	НастройкиКомпановки = КомпоновщикНастроек.ПолучитьНастройки();

	//3. Получение макета компановки данных
	КомпановщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпановки = КомпановщикМакета.Выполнить(СхемаКомпановки, НастройкиКомпановки, ДанныеРасшифровки);

	//4.Компановка данных
	ПроцессорКомпоновки = новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпановки, , ДанныеРасшифровки, Истина);

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

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

КонецПроцедуры
```
1с82. Прикрепление файла к документу. Обычное приложение
Теги: 1С,8.2,Работа с файлами

Прикрепление файла к документу. Обычное приложение.

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

```1c
Процедура ПрикрепитьФайлНажатие(Элемент)

	Режим = РежимДиалогаВыбораФайла.Открытие;

	ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
	ДиалогОткрытия.ПолноеИмяФайла = "";
	Фильтр = "Текст, *.pdf|*.pdf";
	ДиалогОткрытия.Фильтр = Фильтр;
	ДиалогОткрытия.МножественныйВыбор = Истина;
	ДиалогОткрытия.Заголовок = "Выберите файлы";
	Если ДиалогОткрытия.Выбрать() Тогда
		МассивВыбранныхФайлов = ДиалогОткрытия.ВыбранныеФайлы;
		Для Каждого ИмяВыбранногоФайла Из МассивВыбранныхФайлов Цикл


			ВыбранныйФайл = Новый Файл(ИмяВыбранногоФайла);

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

		КонецЦикла;
	Иначе
		Предупреждение("Нет выбранных файлов!");
	КонецЕсли;

КонецПроцедуры
```
Выполнение функции произвольным кодом (Выполнить)
Теги: 1С,Выполнить

В 1С нет возможности выполнить произвольный код с возвратом результата. Можно результат вычисления произвольного кода присвоить переменной Результат и реализовать экспортную функцию с методом Выполнить.

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

```1c
Функция ВычислитьФункцию(Знач ПроизвольныйКод) Экспорт

  Результат = Неопределено;

  Выполнить(ПроизвольныйКод);

  Если Результат = Неопределено Тогда
    ВызватьИсключение "Не присвоено значение результата (Результат = Неопределено).";
  КонецЕсли;

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

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

# Примечания

- Выполнить("ПеременнаяРезультата = ФункцияСВозвратомРезультата()");
Упорядочивание (сортировка) массива
Теги: 1С,упорядочить,массив,сортировать

Сортирует массив через методы объекта "СписокЗначений".
Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив.

В подавляющем большинстве случаев достаточно использовать метод как процедуру.
Метод реализован в виде функции для:
- удобства вычисления выражения (результата сортировки) в отладчике
- возможности инициализации (получения) копии результата на вызывающей стороне в той же строке, что и сам вызов
.
Поддерживаемые контексты: клиент, сервер. Метод подходит для размещения в клиент-серверном общем модуле.

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

```1c
// Сортирует массив через методы объекта "СписокЗначений".
// Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив.
//
// Метод не требует смены контекста исполнения кода (подходит для размещения в клиент-серверном общем модуле).
//
// В подавляющем большинстве случаев достаточно использовать метод как процедуру.
// Метод реализован в виде функции для:
// - удобства вычисления выражения (результата сортировки) в отладчике
// - возможности инициализации (получения) копии результата на вызывающей стороне в той же строке, что и сам вызов
// .
//
// Параметры:
//  МассивДляУпорядочивания - Массив - Массив элементов, которые необходимо упорядочить (по значению или по представлению).
//                                     Внимание: в результате сортировки меняется исходный (передаваемый в функцию) массив.
//  ПорядокСортировки - Строка - "Возр" или "Убыв" (в любом регистре, т.е. регистр не важен).
//  СортироватьПоЗначению - Булево - Если Ложь, то сортировать по представлению.
//
// Возвращаемое значение:
//  Массив - упорядоченный массив.
//
Функция УпорядочитьМассив(МассивДляУпорядочивания, Знач ПорядокСортировки = "Возр", Знач СортироватьПоЗначению = Истина) Экспорт

	лПорядокСортировки = НаправлениеСортировки.Возр;
	Если НРег(ПорядокСортировки) = НРег("Убыв") Тогда
		лПорядокСортировки = НаправлениеСортировки.Убыв;
	КонецЕсли;

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

	Возврат МассивДляУпорядочивания;

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

# Примечания

- А кто-нибудь делал замеры, скорость сортировки через СЗ и собственной реализации сортировки массива (на инфостарте полно вариантов)? По тому-что представляется, что сортировка через СЗ дороговата (за счет создания и утилизации объекта), но возможно её окупает скорость сортировки средствами платформы.
Спасибо!
ВЫБРАТЬ ПЕРВЫЕ для СКД
Теги: 1С,Отчет,Запрос,Желтый Чайник 1С,СКД

Подставляет в последний пакет набора данных запроса конструкцию ВЫБРАТЬ ПЕРВЫЕ N

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

```1c
// Подставляет в последний пакет набора данных запроса конструкцию ВЫБРАТЬ ПЕРВЫЕ N
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/16
//
// Параметры:
//  НаборДанных  - НаборДанныхЗапросСхемыКомпоновкиДанных - Набор данных СКД
//  КоличествоПолучаемыхЗаписей  - Число, Неопределено - Количество получаемых записей.
//		Соответствует ключевому слову ПЕРВЫЕ языка запросов.
//		Если Неопределено, ограничение на количество выбираемых записей отсутствует.
//
// Пример:
//  КоличествоЗаписей = НастройкиКомпоновки.ПараметрыДанных.НайтиЗначениеПараметра("ВыбратьПервые").Значение;
//  УстановитьКоличествоПолучаемыхЗаписейНабораДанных(СхемаКомпоновкиДанных.НаборыДанных.Получить(0), КоличествоЗаписей);
//
Процедура УстановитьКоличествоПолучаемыхЗаписейНабораДанных(Знач НаборДанных, Знач КоличествоПолучаемыхЗаписей) Экспорт

	СхемаЗапроса = Новый СхемаЗапроса();
	СхемаЗапроса.РежимКомпоновкиДанных = Истина;
	СхемаЗапроса.УстановитьТекстЗапроса(НаборДанных.Запрос);
	ПоследнийПакет = СхемаЗапроса.ПакетЗапросов.Получить(СхемаЗапроса.ПакетЗапросов.Количество() - 1);
	ПоследнийПакет.Операторы.Получить(0).КоличествоПолучаемыхЗаписей = КоличествоПолучаемыхЗаписей;

	НаборДанных.Запрос = СхемаЗапроса.ПолучитьТекстЗапроса();

КонецПроцедуры
```
Разные параметры ориентации для разных страниц печатной формы в БСП
Теги: 1С,БСП

Передача нескольких табличных документов в подсистему печати для вывода пакета документов с индивидуальными параметрами печати для каждой страницы печатной формы.

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

```1c
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);

	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ext_ТОРГ2_АктОРасхожденияхПослеПриемки");
	Если ПечатнаяФорма <> Неопределено Тогда
		МассивТабличныхДокументов = СформироватьПечатнуюФормуТорг2(СтруктураТипов, ОбъектыПечати, ПараметрыВывода);
        //в массив возвращаем столько частей печатной формы, сколько нужно, задав для каждой ориентацию и масштаб
		Для К = 1 По МассивТабличныхДокументов.Количество() Цикл
			НоваяСтрока = КоллекцияПечатныхФорм.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, ПечатнаяФорма);
			НоваяСтрока.ТабличныйДокумент = МассивТабличныхДокументов[К-1];
			НоваяСтрока.ИмяМакета = НоваяСтрока.ИмяМакета + К;
			НоваяСтрока.ИмяВРЕГ = НоваяСтрока.ИмяВРЕГ + К;
			НоваяСтрока.СинонимМакета = СтрШаблон(НСтр("ru = 'ТОРГ-2 [%1 из %2]'"), К, МассивТабличныхДокументов.Количество());
		КонецЦикла;
		КоллекцияПечатныхФорм.Удалить(ПечатнаяФорма);
	КонецЕсли;

	ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);

КонецПроцедуры
```
Опциональное выполнение метода в фоновом задании (БСП)
Теги: 1С,ДлительныеОперации,БСП,ФоновоеЗадание

Опциональное выполнение метода в фоне средствами БСП

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

```1c
Процедура ВыполнитьВыгрузку(ВидВыгрузки, МестоВызова, ИсточникСсылка, ВФоне = Ложь, Отказ = Ложь) Экспорт

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

	Если ВФоне Тогда

		ДлительныеОперации.ВыполнитьПроцедуру(, "БизнесПроцессыСлужебный.ПолучитьВыборкуИВыгрузить", ВидВыгрузки, МестоВызова, ИсточникСсылка);

	Иначе

		БизнесПроцессыСлужебный.ПолучитьВыборкуИВыгрузить(ВидВыгрузки, МестоВызова, ИсточникСсылка);

	КонецЕсли;

КонецПроцедуры
```
Получить каталог "Мои документы"
Теги: 1С,Файлы,Каталоги

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

```1c
	ИмяОбработки = ЭтотОбъект.Метаданные().ПолноеИмя();
	КаталогСохранения = ХранилищеНастроекДанныхФорм.Загрузить(ИмяОбработки, "КаталогСохранения");
	Если ПустаяСтрока(КаталогСохранения) Тогда
		WSS = Новый COMОбъект("WScript.Shell");
		КаталогСохранения = WSS.SpecialFolders().Item("MyDocuments");
		WSS = Неопределено;
	КонецЕсли;
```

# Примечания

- Как подсказал пользователь SeiOkami в группе Telegram, для платформы 8.3 есть функция
КаталогДокументов()


Возвращаемое значение:
Тип: Строка.
Путь к каталогу.
Для режимов запуска "Тонкий клиент" и "Толстый клиент":
в MS Windows: 

Но доступна функция только с версии 1С 8.3.1 и выше.
Записать() на форме объекта
Теги: 1С,Баг,Желтый Чайник 1С,Записать,УФ

Записывает объект формы. Возвращает признак успеха. 
Нужен для обхода недокументированного поведения платформы.
  В СП описано, что метод формы Записать() возвращает признак успеха. 
  Однако, если в ПередЗаписью() произойдёт Отказ, тогда метод падает в ошибку, которая фиксируется в ЖР.

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

```1c
// Записывает объект формы. Возвращает признак успеха.
// Нужен для обхода недокументированного поведения платформы, описанного в https://infostart.ru/1c/articles/1396380/?ref=1159
//  В СП описано, что метод формы Записать() возвращает признак успеха.
//  Однако, если в ПередЗаписью() произойдёт Отказ, тогда метод падает в ошибку, которая фиксируется в ЖР.
//  Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/26
//
// Параметры:
//  Форма - ФормаКлиентскогоПриложения - Форма, объект которой нужно записать
//  ПараметрыЗаписи  - Структура - ПараметрыЗаписи метода Записать() формы
//  СообщитьПриИсключении - булево - нужно ли сообщать ОписаниеОшибки() при возникновении исключения
//
// Возвращаемое значение:
//   Булево   - Истина - успешно записан; Ложь - в противном случае.
//
Функция ЗаписатьФорму(Форма, ПараметрыЗаписи, СообщитьПриИсключении = Истина) Экспорт

	Попытка
		//@skip-check dynamic-access-method-not-found
		ЗаписанУспешно = Форма.Записать(ПараметрыЗаписи); //Булево
	Исключение
	    ЗаписанУспешно = Ложь;
		Если СообщитьПриИсключении Тогда
			СообщениеПользователю = Новый СообщениеПользователю();
			СообщениеПользователю.Текст = ОписаниеОшибки();
			СообщениеПользователю.Сообщить();
		КонецЕсли;
	КонецПопытки;

	Возврат ЗаписанУспешно;

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

# Примечания

- ОчиститьСписок.Наименование.Удалить();

Эта строка что делает? 😃

- (1) LeXXeR, я же только учусь, поэтому методом тыка написал, верхний код этот список формирует, а вот в нижний хочется чтоб этот же список удалялся

- (2) dronz21, Вам бы посмотреть какие-то начальные курсы по 1С или почитать книгу.
То, что у вас в коде не имеет смысла.

- (2) dronz21, ну тогда код очистки вообще надо переписать заново 😃
У тебя сейчас товары рандомно генерятся через ДобавлениеНовыхТоваровНаСервере() - вопросов нет. Но удаление то зачем делать рандомно? Нужно просто перебрать все элементы справочника и удалить их в цикле. Если все равно непонятно, выложи файл обработки, покажу как. Самому лень это копипастить.

- (4) LeXXeR, причем случайное удаление в цикле ))

- кстати оно не рандомное, ГенераторСлучайныхЧисел не используется

- (6) bolsun, кстати, да ))

- (4) LeXXeR, вот ЗаполнениеСправочникаНоменклатура.epf

- Нет понимающих?

- (9) dronz21, упс, прости! 😦 Мне что-то уведомления не приходили с сайта. А тут оказывается беседа!
Ладно, может кому поможет. Простейший код для удаления всех элементов справочника, не являющихся группами (если удалить группы - перестанет работать процедура генерации, которая выше):
&НаСервере
Процедура ОчиститьСписокНаСервере()
	Выборка = Справочники.Номенклатура.Выбрать();
	Пока Выборка.Следующий() Цикл
		Если НЕ Выборка.ЭтоГруппа Тогда
			Об = Выборка.ПолучитьОбъект();
			Об.Удалить();
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

- (10) LeXXeR, Спасибо , твой код помог !
Удалить недоступные отборы
Теги: 1С,Динамический список,Запрос,ДС,Баг,Желтый Чайник 1С,СКД,УФ

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

Написан для статьи "Как ограничить поля отбора в динамическом списке и ничего не сломать"
https://infostart.ru/public/1226445/?ref=1159

Пример использования для ДС:
Список.УстановитьОграниченияИспользованияВОтборе(ЗапрещенныеВОтбореПоля);
УдалитьНедоступныеОтборы(Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы);

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

```1c
// Рекурсивно удаляет недоступные элементы из коллекции отборов
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/15
//
// Написан для статьи Как ограничить поля отбора в динамическом списке и ничего не сломать:
// https://infostart.ru/public/1226445/?ref=1159
//
// Параметры:
//  Коллекция  - КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных, КоллекцияЭлементовОтбораКомпоновкиДанных - Коллекция элементов отбора.
//  ДоступныеПоляОтбора  - Неопределено, ДоступныеПоляКомпоновкиДанных - Список доступных полей отбора. При первоначальном вызове не передаётся.
//
// Пример:
//	Список.УстановитьОграниченияИспользованияВОтборе(ЗапрещенныеВОтбореПоля);
//	УдалитьНедоступныеОтборы(Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы);
//
Процедура УдалитьНедоступныеОтборы(Знач Коллекция, Знач ДоступныеПоляОтбора = Неопределено) Экспорт

	УдаляемыеЭлементы = Новый Массив; // Массив из ЭлементОтбораКомпоновкиДанных

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

		Если ТипЗнч(ТекущиеДанные) = Тип("ОтборКомпоновкиДанных") Тогда

			УдалитьНедоступныеОтборы(ТекущиеДанные.Элементы, ТекущиеДанные.ДоступныеПоляОтбора);

		ИначеЕсли ТипЗнч(ТекущиеДанные) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда

			УдалитьНедоступныеОтборы(ТекущиеДанные.Элементы, ДоступныеПоляОтбора);

		ИначеЕсли ТипЗнч(ТекущиеДанные) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда

			Если НЕ ТекущиеДанные.Использование Тогда
				Продолжить;
			КонецЕсли;

			Для Каждого ИмяСвойства Из СтрРазделить("ЛевоеЗначение,ПравоеЗначение",",") Цикл

				ТекущееПоле = ТекущиеДанные[ИмяСвойства]; // ПолеКомпоновкиДанных
				Если ТипЗнч(ТекущееПоле) = Тип("ПолеКомпоновкиДанных")
					И ДоступныеПоляОтбора.НайтиПоле(ТекущееПоле) = Неопределено Тогда

					УдаляемыеЭлементы.Добавить(ТекущиеДанные);
					Прервать;

				КонецЕсли;

			КонецЦикла;

		КонецЕсли;

	КонецЦикла;

	Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл
		Коллекция.Удалить(УдаляемыйЭлемент);
	КонецЦикла;

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

Быстрее всего удаляются строки путем копирования оставшихся строк по условию, обратному к условию удаления:

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

```1c
РабочаяТаблица = РабочаяТаблица.Скопировать(Новый Структура("КУдалению", Ложь))
```
Удаление повторяющихся символов в начале или конце текста
Теги: 1С,Минимализмы,Строка

Функции СокрЛ, СокрП, СокрЛП удаляют любое количество пробелов в начале или конце строки. Этим можно воспользоваться, чтобы удалить другие начальные или конечные повторяющиеся символы, заменив их на пробел, а затем выполнив обратную замену.

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

```1c
//Например, чтобы удалить любое количество точек в конце строки, можно воспользоваться выражением:
СтрЗаменить(СокрП(СтрЗаменить(ИсходнаяСтрока, ".", " ")), " ", ".")

//Правда, если исходная строка изначально содержит пробелы, то результат будет неправильным. В этом случае предварительно требуется заменить пробелы каким-либо редким сочетанием символов, а после преобразования выполнить обратную замену.

СтрЗаменить(СтрЗаменить(СокрП(СтрЗаменить(СтрЗаменить(ИсходнаяСтрока, " ", Символы.НПП), ".", " ")), " ", "."), Символы.НПП, " ")
```

# Примечания

- В группах возник вопрос, зачем нужна обратная замена.
Ответ:
Для того, чтобы вернуть обратно на место символы, которые мы заменили на пробелы внутри строки.
Например, если мы хотим удалить символы * в конце строки, но внутри строки тоже есть эти символы:
Исходная строка "ааа*ааа***"
заменяем * на пробелы "ааа ааа "
СокрП() "ааа ааа"
заменяем обратно пробелы на *
Получаем "ааа*ааа"