arefaste/1C_Forums huggingface dataset:
Выделение жирным шрифтом шаблонов слов в MS Word
Теги: 1С,Word

Текст, которые нужно сделать жирным шрифтом предварительно необходимо заключить между символом решетки.

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

```1c
Range = Document.Content;
WdReplaceAll = 2;
Range.Find.Replacement.Font.Bold = 1;
Range.Find.Execute("#??\.??\.????#", , , 1 , , , , , , "^&", wdReplaceAll);
Range.Find.Execute("#", , , , , , , , 0 , "", wdReplaceAll);
```

# Примечания

- Range.Find.Execute("#??\.??\.????#", , , 1 , , , , , , "^&", wdReplaceAll);

#??\.??\.????# - формат даты. Так будет искать и заменять только текст вида 01.02.2023
Если нужно заменить любой текст между символами #, я бы использовал например такое выражение.
#[!#]*#
Т.е. любые символы  кроме символа #

- А как это согласуется с 1С ? Имею ввиду БСП работа с Word шаблоном .. и методы поиска в шаблоне переменных отмеченные {v8 Переменная} ? Или в 1С можно получить доступ к обьектам Word  минуя com соединения?
Программный вывод отчета СКД
Теги: 1С

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

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

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

    // Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанных"));

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

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

    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

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

Поможет, например, если хотите вывести "быстрые отборы" в основную форму списка прикладного объекта.

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

Нахождение интервалов в запросе

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

```1c
Запрос.Текст =
"ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 1) КАК ДатаНачала,
|	ДАТАВРЕМЯ(2023, 1, 1) КАК ДатаОкончания
|ПОМЕСТИТЬ ВТИсходныеДанные
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 2),
|	ДАТАВРЕМЯ(2023, 1, 2)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 5),
|	ДАТАВРЕМЯ(2023, 1, 9)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 11),
|	ДАТАВРЕМЯ(2023, 1, 11)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 12),
|	ДАТАВРЕМЯ(2023, 1, 12)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|	Справа.ДатаНачала КАК ДатаНачала,
|	Справа.ДатаОкончания КАК ДатаОкончания,
|	СУММА(РАЗНОСТЬДАТ(Слева.ДатаНачала, Слева.ДатаОкончания, ДЕНЬ) + 1) КАК Интеграл
|ПОМЕСТИТЬ ВТИнтегралы
|ИЗ
|	ВТИсходныеДанные КАК Слева
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИсходныеДанные КАК Справа
|		ПО Слева.ДатаНачала <= Справа.ДатаОкончания
|
|СГРУППИРОВАТЬ ПО
|	Справа.ДатаНачала,
|	Справа.ДатаОкончания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|	МИНИМУМ(ВТИнтегралы.ДатаНачала) КАК ДатаНачала,
|	МАКСИМУМ(ВТИнтегралы.ДатаОкончания) КАК ДатаОкончания
|ИЗ
|	ВТИнтегралы КАК ВТИнтегралы
|
|СГРУППИРОВАТЬ ПО
|	ДОБАВИТЬКДАТЕ(ВТИнтегралы.ДатаОкончания, ДЕНЬ, -ВТИнтегралы.Интеграл)"
```
Перенос настроек данных формы между пользователями
Теги: 1С,ХранилищеНастроекДанныхФорм

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

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

```1c
Процедура ВыгрузитьВыборкуЗапросаВТекстовыйФайл(ВыборкаЗапроса, стрИменаКолонок, стрАдресФайла, Разделитель = Неопределено) Экспорт
  //Выгрузка результата запроса в текстовый файл с разделителями
  //ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
  //стрИменаКолонок - строка, имена колонок через запятую из которых нужно сохранить данные в файл + порядок колонок
  //стрАдресФайла - строка
  //Разделитель -  по-умолчанию: Символы.Таб; можно использовать Символы. ВК (CR),ВТаб (VTab),НПП (NBSp),ПС (LF),ПФ (FF),Таб (Tab)
  //    При загрузке строку можно будет разложить в массив для дальнейшей работы, РазложитьСтрокуВМассивПодстрок( ТекСтр, Символы.Таб).

  Если Разделитель = Неопределено Тогда
    Разделитель = Символы.Таб;
  КонецЕсли;

  Текст = Новый ЗаписьТекста(стрАдресФайла, КодировкаТекста.ANSI);

  стрИменаКолонок = РазложитьСтрокуВМассивПодстрок(стрИменаКолонок, ",");
  чКоличествоКолонок = стрИменаКолонок.Количество();
  чНомерКолонки = 1;

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

      Если ТипЗнч(Значение) = Тип("Дата") Тогда
        Значение = Формат(Значение,"ДЛФ=D");
      КонецЕсли;

      стрРазделитель = ?(чКоличествоКолонок = чНомерКолонки, "", Разделитель);
      Текст.ЗаписатьСтроку(Строка(Значение) + стрРазделитель);

      чНомерКолонки = чНомерКолонки + 1;
    КонецЦикла;
  КонецЦикла;

  Текст.Закрыть();

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

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

```1c
	// Сериализация через XDTO;

	// 1. Создаем объект ЗаписьXML;
	ЗаписьXML = Новый ЗаписьXML;

	// 2. Указываем путь к сохраненному файлу;
	ЗаписьXML.ОткрытьФайл(Объект.ПутьКФайлу + "\ВыгруженныеОбъекты.xml", "UTF-8");

	// 3. Записываем объявление типа: <?xml version="1.0" encoding="UTF-8"?>;
	ЗаписьXML.ЗаписатьОбъявлениеXML();

	// 4. Записываем название корневого элемента;
	ЗаписьXML.ЗаписатьНачалоЭлемента("РеализацияТоваров");

	//для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент
	//они будут работать на все вложеные элементы
	//пространство имен по-умолчанию
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
	//пространства имен остальные префиксы
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

	// 5. Сериализуем именно объекты (ссылки сериализуются по другому), что "ДОСТУПНО", то и сериализуется;
	Для каждого ТекСтрока Из ТаблицаДокументов Цикл
		 СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТекСтрока.Ссылка.ПолучитьОбъект());
	КонецЦикла;

	// 6. Конец корневого элемента;
	ЗаписьXML.ЗаписатьКонецЭлемента();

	// 7. Обязательно закрываем запись;
	ЗаписьXML.Закрыть();
```

# Примечания

- Спасибо!
А как этот xml обратно загрузить? Это возможно?

- (1) Baiji, да, конечно, можно десериализовать с помощью Объекта XDTO;
ФабрикаXDTO.ПрочитатьXML(<ЧтениеXML>, <Тип>), путь к файлу с данными XML уже указываем в объекте встроенного языка - ЧтениеXML;
Сохранить/Прочитать настройки СКД для обработок и прочих модулей
Теги: 1С,ВнешняяОбработка,СКД

Если не используются стандартные механизмы сохранения СКД отчетами с использованием модулей общего назначения.
А так же процедура для заполнения реквизитов формы по переданной настройке компоновки данных (например, восстановленных из хранилища).
_ничего сложного, но вспоминать или искать каждый раз, когда это иногда требуется, это сложно_
Получить число из строки
Теги: 1С

Принимает строку возвращает число которые есть в этой строке

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

```1c
Функция ПолучитьСтрокуТолькоЦифры(ВходнаяСтрока)

	Результат = ВходнаяСтрока;

	ИндексЭлемента = 1;
	ДоступныеСимволы = "0123456789";

	Пока ИндексЭлемента <= СтрДлина(Результат) Цикл
		ПроверяемыйСимвол = Сред(Результат, ИндексЭлемента, 1);


		Если СтрНайти(ДоступныеСимволы, ПроверяемыйСимвол) = 0 Тогда
			Результат = СтрЗаменить(Результат, ПроверяемыйСимвол, "");
			Продолжить;
		КонецЕсли;


		ИндексЭлемента = ИндексЭлемента + 1;
	КонецЦикла;

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

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

# Примечания

- Где обработка запятой или точки?

- (1) romankoav, Добрый день, вот ссылка на публикацию https://fastcode.im/Templates/9884
Получение данных об организации и контрагентах в типовых конфигурациях с помощью БСП
Теги: 1С,УТ,БСП,Бухгалтерия

Предлагаются небольшие шаблоны кода, которые позволят вам сразу получить информацию об организациях и контрагентах  в типовых базах
Расшифровка формы собственности организации
Теги: 1С

Параметр: 
Кратное наименование ЮрЛица (Пример: ип Картошка, ООО Лягушатник, ао Репа)
Возвращаемое значение: (Пример: Индивидуальный предприниматель "Лягушонок")

Учитываются регистры ХХ верхний хх нижний и Хх (если пользователь пьяный и вводит вместо ЧУП, Чуп, чуп, что то такое:  ЧУп, чуП - лучше доработать функцию, мне - лень);

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

```1c
&НаСервереБезКонтекста
Функция ЗаполнениеНаименованияСРасшифровкой(Знач ЮридическоеНаименование)

	// Проверка;
	Если ЮридическоеНаименование = "" Тогда
		Возврат "";
	КонецЕсли;

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

	МассивЧастей = СтрРазделить(ЮридическоеНаименование, " ", );

	РасшифровкаЮрЛица = "";
	МассивАббревиатурЮрЛица = Новый Массив;

	Для каждого Часть Из МассивЧастей Цикл
		Для каждого КлючИЗначение Из СтруктураРасшифровки Цикл
			Если  Трег(Часть) = КлючИЗначение.Ключ ИЛИ НРег(Часть) = КлючИЗначение.Ключ ИЛИ ВРег(Часть) = КлючИЗначение.Ключ Тогда
				МассивАббревиатурЮрЛица.Добавить(Трег(Часть));
				МассивАббревиатурЮрЛица.Добавить(НРег(Часть));
				МассивАббревиатурЮрЛица.Добавить(ВРег(Часть));
				РасшифровкаЮрЛица = КлючИЗначение.Значение;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;

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

	ПолноеНаименование	= РасшифровкаЮрЛица + " """ + ЮридическоеНаименование + """" ;

	Возврат ПолноеНаименование;

КонецФункции // ()
```
Использование биометрии в мобильной платформе 1С
Теги: 1С,МобильноеПриложение

Пример кода

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

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

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

&НаКлиенте
Процедура ПровестиБиометрическийВход()
	#Если МобильноеПриложениеКлиент Тогда
		Попытка
			СпособПроверки = СпособДополнительнойПроверкиПользователя.ТолькоБиометрическая;

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

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

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

FTP_Cоединение.УстановитьТекущийКаталог("."); - строковый параметр означает корневой каталог, можно указать папку "\НазваниеПапки";

FTP_Cоединение.Записать(ПутьКФайлу, "actual_products.json");  - второй параметр, название файла с расширением (.txt, .csv, .xml);

Директива компиляции - &НаСервере

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

```1c
	// Параметры соединения;
	Сервер = "00.000.000.000";

	Порт	= 21;

	ИмяПользователя 	= "u00000";

	ПарольПользователя = "86731db349";

	// Загрузка на  FTP;
	FTP_Cоединение = Новый FTPСоединение(Сервер, Порт, ИмяПользователя, ПарольПользователя,,, 20);

	Попытка
		FTP_Cоединение.УстановитьТекущийКаталог(".");
		FTP_Cоединение.Записать(ПутьКФайлу, "actual_products.json"); // представим что отсюда сайт подгружает данные;

		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ".JSON файл, находящийся в каталоге: " + ПутьКФайлу + " был успешно загружен на FTP_сервер!";
		Сообщение.Сообщить();
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось подключиться к FTP_серверу! Описание ошибки: " + ОписаниеОшибки();
		Сообщение.Сообщить();
	КонецПопытки;
```
Удалить префикс, лидирующие нули
Теги: 1С,Удаление

Удаляет префикс, по типу "ТДУТ-", чистит лидирующие нули;

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

```1c
&НаКлиенте
Функция ФорматироватьНомерДокуметаНаКлиенте(Знач НомерДокумента)

	НомерДокументаСтрокой 	= Строка(НомерДокумента);

	НомерДокументаСтрокой	= СтрЗаменить(НомерДокументаСтрокой, "-", "");

	ПозицияПервогоНуля		= СтрНайти(НомерДокументаСтрокой, "0", НаправлениеПоиска.СНачала);

	НомерДокументаСтрокой 	= Сред(НомерДокументаСтрокой, ПозицияПервогоНуля, СтрДлина(НомерДокументаСтрокой)); //символы = цифры;

	Счетчик = 1;
	Пока Лев(НомерДокументаСтрокой, 1) = "0" Цикл
		НомерДокументаСтрокой = Сред(НомерДокументаСтрокой, Счетчик + 1);
	КонецЦикла;

	Возврат НомерДокументаСтрокой;

КонецФункции // ()
```
Является ли значение табличной частью
Теги: 1С,проверка,является,табличная часть,это

Проверяет, что переданное значение имеет тип "Табличная часть", а не какой-либо другой.
Поддерживаемые контексты: сервер.

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

```1c
// Проверяет, что переданное значение имеет тип "Табличная часть", а не какой-либо другой.
Функция ЭтоТабличнаяЧасть(Знач ТЧ) Экспорт

	ЭтоТЧ = Ложь;

	ТипЗначенияСтрокой = Строка(ТипЗнч(ТЧ)); // "Справочник табличная часть: ...", "Внешняя обработка табличная часть: ...",
	                                         // "Catalog Tabular section: ...", "External data processor Tabular section: ..." и т.д.
	Фрагменты = СтрРазделить(ТипЗначенияСтрокой, ":", Ложь);
	Если Фрагменты.Количество() > 1 Тогда
		Пациент = Фрагменты[0]; // Анализируем только первый фрагмент (до первого двоеточия).
		                        // В синониме какого-либо объекта метаданных тоже может встретиться маркер "... табличная часть:",
								// но это всегда будет уже следующий фрагмент (и он нас не интересует).
		Пациент = НРег(Пациент); // Фирма 1С не выдерживает единый стиль для русскоязычного и англоязычного вариантов встроенного языка,
		                         // поэтому на всякий случай приводим всё к какому-то одному регистру букв.
		Если СтрЗаканчиваетсяНа(Пациент, НРег(" табличная часть")) ИЛИ СтрЗаканчиваетсяНа(Пациент, НРег(" Tabular section")) Тогда
			ЭтоТЧ = Истина;
		КонецЕсли;
	КонецЕсли;

	Возврат ЭтоТЧ;

КонецФункции
```
Шаблон кода Внешней обработки Заполнение Объекта
Теги: 1С,ВнешняяОбработка,Шаблон,БСП,ЗаполнениеОбъекта

Шаблон кода внешней обработки Вида Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта
ПоискПохожейСтроки (8.3 без режима совместимости с 8.2)
Теги: 1С,Строка,Похожая

Поиск похожей строки из массива объектов для проверки на основании исходной строки.

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

```1c
// Функция - Поиск похожей строки из набора строк
//
// Параметры:
//  ИсходнаяСтрока		 - Строка	 - Исходная строка
//  ОбъектыДляПроверки	 - Массив	 - Массив элементов произвольного типа, в котором будем искать похожую строку
//  пНаправлениеПоиска	 - НаправлениеПоиска	 -  Указывает направление поиска подстроки в строке
//  ЖелательныйПроцентСовпадения	 - Число	 -  Ожидаемый процент совпадения подстроки поиска в проверяемой строке. По умолчанию 50
//
// Возвращаемое значение:
// Строка  - строка с максимальным вхождением подстроки поиска
//
Функция ПоискПохожейСтроки(ИсходнаяСтрока, ОбъектыДляПроверки, пНаправлениеПоиска, ЖелательныйПроцентСовпадения)

	ПохожаяСтрока = "";

	ТаблицаСтатистики = Новый ТаблицаЗначений;
	ТаблицаСтатистики.Колонки.Добавить("Объект");
	ТаблицаСтатистики.Колонки.Добавить("ЧислоВхождений");

	ДлинаИсходнойСтроки = СтрДлина(ИсходнаяСтрока);

	Для каждого Элемент Из ОбъектыДляПроверки Цикл

		ТекОбъект = ВРЕГ(Элемент);
		ДлинаТекОбъекта = СтрДлина(ТекОбъект);

		Для Сч = 0 По ДлинаИсходнойСтроки Цикл

			Если пНаправлениеПоиска = НаправлениеПоиска.СНачала Тогда
				ИскомаяСтрока = Сред(ИсходнаяСтрока, 1, Сч + 1);
				НачПозицияПоиска = 1;
			Иначе
				ИскомаяСтрока = Сред(ИсходнаяСтрока, ДлинаИсходнойСтроки - Сч, Сч + 1);
				НачПозицияПоиска = ДлинаТекОбъекта;
			КонецЕсли;

			Если СтрНайти(ТекОбъект, ИскомаяСтрока, пНаправлениеПоиска, НачПозицияПоиска) > 0 Тогда

				СтрСтатистика = ТаблицаСтатистики.Найти(ТекОбъект, "Объект");

				Если СтрСтатистика <> Неопределено Тогда
					СтрСтатистика.ЧислоВхождений = СтрДлина(ИскомаяСтрока);
				Иначе
					Если Цел(СтрДлина(ИскомаяСтрока) / ДлинаТекОбъекта * 100) > ЖелательныйПроцентСовпадения Тогда
						СтрСтатистика = ТаблицаСтатистики.Добавить();
						СтрСтатистика.Объект = ТекОбъект;
						СтрСтатистика.ЧислоВхождений = СтрДлина(ИскомаяСтрока);
					КонецЕсли;
				КонецЕсли;

			КонецЕсли;

		КонецЦикла;

	КонецЦикла;

	Если ЗначениеЗаполнено(ТаблицаСтатистики) Тогда
		ТаблицаСтатистики.Сортировать("ЧислоВхождений УБЫВ");
		ПохожаяСтрока = ТаблицаСтатистики.Получить(0).Объект;
	КонецЕсли;

	Возврат ПохожаяСтрока

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

Установка параметра по имени на примере склада

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

```1c
ПараметрДанных					= КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Склад");
ПараметрДанных.Значение 		= Справочники.Склады.НайтиПоНаименованию("Основной");
ПараметрДанных.Использование 	= Истина;
```
Пересечение cписков
Теги: 1С,Пересечение Списков

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

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

	ТЗ.Колонки.Добавить("Флаг");
	ТЗ.ЗаполнитьЗначения(1,"Флаг");
	ТЗ.Свернуть("Элемент","Флаг");

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

	Возврат Совпадающие
КонецФункции
```
Краткое представление строки (в т.ч. многострочной) в виде первых N символов
Теги: 1С,Лев,краткое представление,многострочная,обрезать,строка

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

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

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

	Результат = "";
	Подстроки = СтрРазделить(ИсходнаяСтрока, Символы.ПС, НЕ УдалятьПустыеСтроки);
	Если Подстроки.Количество() > 0 Тогда
		Результат = Подстроки[0];
	КонецЕсли;

	Если УдалятьПробелыСлева Тогда
		Результат = СокрЛ(Результат);
	КонецЕсли;

	Если СтрЧислоСтрок(ИсходнаяСтрока) > 1 ИЛИ СтрДлина(Результат) > МаксимальнаяДлина Тогда
		Результат = Лев(Результат, МаксимальнаяДлина) + "...";
	КонецЕсли;

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

КонецФункции
```
Выгрузить различные из поля коллекции
Теги: 1С

выгружает в массив поле коллекции без дублей

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

```1c
Функция ВыгрузитьРазличные(Коллекция,ИмяПоля)

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

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

Функция возвращает истину, если текущая дата или произвольная -- переданная в параметре, является первым рабочим днем месяца. Работает в семействе УТ

# Примечания

- В ситуациях , когда 1 рабочий день месяца  - пятница, то данная функция будет последующие субботу и воскресенье определять как  "1 рабочий день месяца".
ИнициализацияТипом
Теги: 1С,ИнициализацияПеременных

Создает в переданной переменной указанный тип через конструктор Новый или вызывает метод Очистки

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

```1c
Процедура ИнициализацияТипом(Переменная,ТипДанных = "СписокЗначений",Очищать = Истина)

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

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

# Примечания

- Для чего это может использоваться?
Получает краткое имя пользователя ИБ (информационной базы) из полного (Иванов Иван Иванович --> Иванов_ИИ)
Теги: 1С,БСП,ПользователиСлужебныйКлиентСервер

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

```1c
ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ(Форма.Объект.Наименование)
```