arefaste/1C_Forums huggingface dataset:
Подставляет параметры в строку
Теги: 1С,БСП

Максимально возможное число параметров - 9.
Возвращаемое значение - текстовая строка с подставленными параметрами.

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

```1c
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибкиШаблон, Выборка.СотрудникНаименование, Формат(Выборка.Дата, "ДФ='dd.MM.yyyy ""г.""'"), Выборка.ВидВремениНаименование);
```
Очищает записи наборов из коллекции Движения и проставляет флаг Записывать наборам, по которым документ уже имеет движения
Теги: 1С,БСП

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

```1c
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
```
Устанавливает текст заголовка, отображаемого, когда группа свернута
Теги: ЗУП 3,1С,ЗарплатаКадры

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

```1c
ЗарплатаКадры.НастроитьОтображениеГруппыПодписей(Элементы.ПодписиГруппа, "Объект.Руководитель", "Объект.ГлавныйБухгалтер");
```
Ищет по имени временную таблицу в менеджере
Теги: Временная таблица,ЗУП 3,1С,ЗарплатаКадры

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

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

Возвращаемое значение - обработка менеджера расчета

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

```1c
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(МесяцНачисления, Организация);
```
Проверка реквизита, элемента формы на существование
Теги: 1С

Получает значение элемента по указанному имени, а также проверяет, имеется ли указанное свойство

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

```1c
// 1.
СтруктураПараметров.Свойство("ЗначенияРазовыхПоказателей", ЗначенияРазовыхПоказателей)

// 2.
Элементы.Найти("ИсполнителиРабот")
```
Создает временную таблицу по набору записей
Теги: Временная таблица,ЗУП 3,1С

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

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

Значения реквизита, прочитанного из информационной базы для нескольких объектов.

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

```1c
ФизическиеЛицаПодобранныхСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивСотрудников, "ФизическоеЛицо");
```
Получает номер документа для вывода на печать; из номера удаляются префиксы и лидирующие нули
Теги: ЗУП 3,1С,БСП

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

```1c
ТабельныйНомер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Сотрудник.Код, Истина, Истина)
```
Проверка даты запрета изменения данных
Теги: 1С,БСП

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

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

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

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

КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(ОписательВТ, Ложь, "ТекущаяДолжность, ДатаПриема, ДатаУвольнения");
```
Открытие дополнительной формы
Теги: ЗУП 3,1С

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

```1c
СотрудникиКлиент.ОткрытьДополнительнуюФорму(

СотрудникиКлиентСервер.ОписаниеДополнительнойФормы("Справочник.МедицинскиеСтраховыеПолисы.Форма.ФормаПолисыПоСотруднику"), ЭтотОбъект);
```
Получение данных из регистра сведений не запросом
Теги: 1С,Регистр сведений

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

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

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

```1c
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(

        СтрШаблон(

               НСтр("ru = 'Код введен в неверном формате. Проведено преобразование из %1 в %2'"),

               СтрокаКод,

               НовыйКод),

        ,,,     Отказ);
```
Сообщение пользователю из модуля объекта с параметрами
Теги: 1С,БСП

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

```1c
ТекстСообщения = СтрШаблон(НСтр("ru = 'Текст сообщения'"), СокрЛП(Код), Выборка.Организация, Выборка.Состояние);

ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Код", "Объект", Отказ);
```
Получить ВТСотрудникиОрганизации - кадровые данные + дополнительные реквизиты кадровых данных
Теги: ЗУП 3,1С

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

```1c
ПараметрыПолучения = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();

ПараметрыПолучения.Организация = Объект.Организация;

ПараметрыПолучения.НачалоПериода      = Объект.ПериодСуммированногоУчетаНачало;

ПараметрыПолучения.ОкончаниеПериода   = Объект.ПериодСуммированногоУчетаОкончание;

ПараметрыПолучения.КадровыеДанные     = ПараметрыПолучения.КадровыеДанные + "Вахтовик, ВахтоваяКоманда, ГрафикРаботы";

ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(

        ПараметрыПолучения.Отборы, "Вахтовик", "=", Истина);

Если ЗначениеЗаполнено(Объект.ВахтоваяКоманда) Тогда

        ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(

ПараметрыПолучения.Отборы, "ВахтоваяКоманда", "=", Объект.ВахтоваяКоманда);

КонецЕсли;

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

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

```1c
ОписаниеФильтраПолученияГрафиков = ЗарплатаКадрыПериодическиеРегистры.ОписаниеФильтраДляСоздатьВТИмяРегистра("ВТПериодыЗапросаКадровойИстории", "ФизическоеЛицо", "ФизическоеЛицо");

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

Формирует временную таблицу периодов с заданной периодичностью, формируемой, с помощью, запроса, возвращаемого методом ЗапросВТПериоды. Создает в МенеджерВременныхТаблиц временную таблицу с именем <ИмяВТ> и периодичностью <Периодичность> за интервал с <НачалоИнтервала> по <ОкончаниеИнтервала>.

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

```1c
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, НачалоПериода, ОкончаниеПериода);

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

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

```1c
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(ВидыВремениВЗачетНормыСуммированногоУчета, ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.НеявкиПоНевыясненнымПричинам"));
```
Сформировать сумму строкой в договор
Теги: 1С,сумма строкой в договор

Сформировать сумму строкой в договор: 375 165 (триста семьдесят пять тысяч сто шестьдесят пять) рублей 07 копеек

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

```1c
ОбластьМакета.Параметры.Сумма  = ""+окр(СведенияОДокументе.Сумма) + " (" + ЧислоПрописью(СведенияОДокументе.Сумма,"Л=ru_RU",") рубль, ) рубля, ) рублей, м, копейка, копейки, копеек, ж, 2");
```
СКД внешние источники данных
Теги: 1С

СКД внешние источники данных

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

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

	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

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

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

	ДокументРезультат.Очистить();

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

# Примечания

- СтандартнаяОбработка = Ложь;
Не хватает вначале
Как получить дату и время создания элемента справочника, документа по ссылке
Теги: 1С

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

```1c
 // но по GUID можно определить время и дату
Функция ДатаСозданияСсылки(Ссылка)
    ГУИД = Ссылка.УникальныйИдентификатор();
    Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
    Разрядность = СтрДлина(Строка16);
    ЧислоСек = 0;
    Для Позиция = 1 По Разрядность Цикл
        ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
    КонецЦикла;
    ЧислоСек = ЧислоСек / 10000000;
    Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;
КонецФункции
```
Генератор случайных чисел для диапазона с дробными и отрицательными числами
Теги: 1С,Генератор случайных чисел

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

```1c
Функция Генератор(КоличествоСимволовПослеЗапятой = 0, НижняяГраница, ВерхняяГраница )

		Множитель = 1;

		Пока КоличествоСимволовПослеЗапятой <> 0 Цикл

			КоличествоСимволовПослеЗапятой = КоличествоСимволовПослеЗапятой - 1;

			Множитель = Множитель*10;

		КонецЦикла;

		Генератор = Новый ГенераторСлучайныхЧисел();

		НижняяГраница = НижняяГраница * Множитель;
		ВерхняяГраница = ВерхняяГраница * Множитель;

		Если НижняяГраница > ВерхняяГраница Тогда

			Возврат Неопределено;

		ИначеЕсли НижняяГраница < 0 Тогда

			НижняяГраница = 0;
			ВерхняяГраница = ВерхняяГраница - НижняяГраница;

			РезультатГенератора = Генератор.СлучайноеЧисло(НижняяГраница, ВерхняяГраница)/Множитель - НижняяГраница;

		ИначеЕсли НижняяГраница >= 0 Тогда

			РезультатГенератора = Генератор.СлучайноеЧисло(НижняяГраница, ВерхняяГраница)/Множитель;

		КонецЕсли;

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

КонецФункции
```
Подключение к DBF
Теги: DBF,1С

Подключение к DBF с параметрами

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

```1c
Функция НовоеПодключение2()  //Подключение к DBF
	Таблица = Новый ТаблицаЗначений();

Connection = Новый COMОбъект("ADODB.Connection"); // Создание COM-объекта
	Connection.Open("Provider=Microsoft.Jet.OLEDB.4.0;
	         |Data Source=" +КаталогФайла +";
	         |Extended Properties=DBASE III");
    Connection.BeginTrans();
   // Создание объекта выполнения команды
    Command = Новый COMОбъект("ADODB.Command");
   // Указание активного соединения
    Command.ActiveConnection = Connection;
   // Определение текста команды

	Command.CommandText = "SELECT * FROM Calls WHERE DATE between  @DataN AND @DataK";  //Calls  -название файла DBF
	Дата1 = Формат(НачПериода, "ДФ=MM.dd.yyyy");
	Дата2 = Формат(КонПериода, "ДФ=MM.dd.yyyy");

    Param1 = Command.CreateParameter("@DataN", 133, 1);
    Command.Parameters.Append(Param1);
    Param1.Value = Дата1;

	Param2 = Command.CreateParameter("@DataK", 133, 1);
    Command.Parameters.Append(Param2);
    Param2.Value = Дата2;

   // Определение типа команды
   //Command.CommandType = 4;
   // Создание объекта набора записей
    RecordSet = Новый COMОбъект("ADODB.RecordSet");
    RecordSet = Command.Execute();

	Пока RecordSet.EOF=0 Цикл //Цикл по записям файла DBF
	        м= Таблица.Добавить();
		м.Дата 			   	=  RecordSet.Fields("DATE").Value;
		м.Длительность		=  RecordSet.Fields("IDURATION").Value ;
		м.Время	           	=  RecordSet.Fields("ITIME").Value;
		м.СО              	=  RecordSet.Fields("CO").Value   ;
		м.ВнутрНомер        =  RecordSet.Fields("EXTENSION").Value ;
		м.TrunkГруппа       =  RecordSet.Fields("TRUNKGROUP").Value ;
		м.Transfer         	=  RecordSet.Fields("TRANSFER").Value   ;
		м.Цена            	=  RecordSet.Fields("PRICE").Value     ;
		м.Номер           	=  RecordSet.Fields("NUMBER").Value   ;
		м.Статус           	=  RecordSet.Fields("STATUS").Value   ;
		м.ВремяДоОтвета     =  RecordSet.Fields("RINGBEFORE").Value ;
		м.CallerID         	=  RecordSet.Fields("CALLERID").Value  ;
	    RecordSet.MoveNext(); //Переходим к следующей записи
	КонецЦикла;
	RecordSet.Close();

Возврат Таблица;
КонецФункции
```
Обмен через ВЕБ Сервисы 2 часть
Теги: веб-сервис,web-сервис,XML,1С,ws

Обмен через ВЕБ Сервисы , Подключение к созданной web ссылке с другой базы.

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

```1c
Процедура КнопкаЗаполнитьТаблицуИзПервойБазыНажатие(Кнопка)

	ВСОпределение = Новый WSОпределения("127.7.7.7/Obmen/ws/Obmen.1cws?wsdl", "admin", "pass");
//127.7.7.7 - ВашИПАдресГдеОпубликованWebСервис
//admin - пользователь информационной базы с полными правами и пароль -pass
	ВСПрокси = Новый WSПрокси(ВСОпределение, "127.7.7.7", "Obmen", "ObmenSoap");
//127.7.7.7 - URl пространство имен Веб сервиса первой базы, Obmen -наименование
// расширения ,
//ObmenSoap тоже самое Но добавляем Soap к названии ))

	Склад= Элементы.Склад.Значение; //Элемент формы, выбранное поле - склад
	Время=ТекущаяДата();

	ВСПрокси.Пользователь = "admin";
	ВСПрокси.Пароль = "pass";

	Данные = ВСПрокси.ОстаткиТоваровТНН(Строка(Склад),Дата(Время));  // подключаемся и получаем данные xml

	попытка

	ЧтениеXML               = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(данные);  //Открываем файл
	Пока ЧтениеXML.Прочитать() Цикл
		Если ЧтениеXML.ТипУзла                  = ТипУзлаXML.НачалоЭлемента Тогда
			Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
				ст = Таб.Добавить();  //Табличная часть на форме
				ст.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута("Номенклатура"));
				ст.Склад = Справочники.Склады.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута("Склад"));
				ст.КоличествоНачальныйОстаток = ЧтениеXML.ЗначениеАтрибута("КоличествоНачальныйОстаток");
				ст.КоличествоПриход = ЧтениеXML.ЗначениеАтрибута("КоличествоПриход");
				ст.КоличествоРасход = ЧтениеXML.ЗначениеАтрибута("КоличествоРасход");
				ст.КоличествоКонечныйОстаток = ЧтениеXML.ЗначениеАтрибута("КоличествоКонечныйОстаток");
				прервать;
			конеццикла;
		КонецЕсли;
	конеццикла;

	исключение
	    сообщить(Данные);
	КонецПопытки;


конецпроцедуры
```
Оправка Push уведомления
Теги: 1С,Rest API,Push

Оправка Push уведомления через онлайн сервис Pushover

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

```1c
Процедура ОтправитьPushOverУведомление(ТекстСообщения, ЗаголовокСообщения)

	Сервер = "api.pushover.net";
	Адрес = "1/messages.json";
	TokenKey = "......"; //Здесь токен канала
	UserID = "......"; //Здесь ИД пользователя

	Соединение = Новый HTTPСоединение(Сервер,,,,Новый ИнтернетПрокси(истина),10, Новый ЗащищенноеСоединениеOpenSSL);
	СтрокаПараметров = "?token=%3&user=%4&html=1&message=%1&title=%2";
	СтрокаПараметров = СтрЗаменить(СтрокаПараметров, "%1", ТекстСообщения);
	СтрокаПараметров = СтрЗаменить(СтрокаПараметров, "%2", ЗаголовокСообщения);
	СтрокаПараметров = СтрЗаменить(СтрокаПараметров, "%3", TokenKey);
	СтрокаПараметров = СтрЗаменить(СтрокаПараметров, "%4", UserID);
	Запрос = Новый HTTPЗапрос(Адрес+СтрокаПараметров);

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

	Если Ответ.КодСостояния <> 200 Тогда
	 	СообщениеПользователю = Новый СообщениеПользователю;
		СообщениеПользователю.Текст  = "Ошибка запроса к серверу: "+Ответ.КодСостояния;
		СообщениеПользователю.Сообщить();
		Возврат;
	КонецЕсли;

КонецПроцедуры // ОтправитьPushУведомление()
```
Выгрузка Запроса в XML документ, в виде дерева(В Виде иерархии)
Теги: запрос,иерархия XML,XML,дерево,1С

Выгрузка Запроса в XML документ, в виде дерева

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

```1c
Процедура ЛюбаяСЗапросом()
ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(ПутьП,  "UTF-8"); //Открываем файл для записи, указываем кодировку
	ЗаписьXML.ЗаписатьОбъявлениеXML();  // Записываем объявление XML
	ЗаписьXML.ЗаписатьНачалоЭлемента("ОстаткиТоваров"); // Начало элемента
	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	ТоварыНаСкладах.Период КАК Период,
		|	ТоварыНаСкладах.Регистратор КАК Регистратор,
		|	ТоварыНаСкладах.Номенклатура КАК Номенклатура,
		|	ТоварыНаСкладах.Количество КАК Количество
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
		|ГДЕ
		|	ТоварыНаСкладах.Период МЕЖДУ &НачПериод И &КонПериод
		|	И ТоварыНаСкладах.Номенклатура В ИЕРАРХИИ(&Номенклатура)
		|ИТОГИ ПО
		|		Регистратор";

Результат = Запрос.Выполнить();
	Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	ОбойтиУровеньДерева(Дерево.Строки, ЗаписьXML);   //вызов процедуры
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.Закрыть();

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

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

Запись документа XML,  по иерархии

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

```1c
Процедура ВыгрузитьСкладыНажатие(Элемент)		//выгрузка склады
	ЗаписьXML = Новый ЗаписьXML;
	ПутьКФайлу = 	КаталогВременныхФайлов()+ "Склады.xml";
	ЗаписьXML.ОткрытьФайл(ПутьКФайлу,  "UTF-8"); //Открываем файл для записи, указываем кодировку
	ЗаписьXML.ЗаписатьОбъявлениеXML();  // Записываем объявление XML
	ЗаписьXML.ЗаписатьНачалоЭлемента("Склады"); // Начало элемента
	Выборка   = Справочники.Склады.ВыбратьИерархически();
	Пока Выборка.Следующий() Цикл  // Начинаем выгружать
		если  Выборка.ЭтоГруппа = Истина тогда
			Если Выборка.УровеньВВыборке() = 0 Тогда
			ЗаписьXML.ЗаписатьНачалоЭлемента("Склад"); // Начало элемента Склад
		ЗаписьXML.ЗаписатьАтрибут("Код",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель", Строка(Выборка.Родитель));
			ЗаписьXML.ЗаписатьКонецЭлемента();
		    Иначеесли Выборка.УровеньВВыборке() = 1 Тогда
			ЗаписьXML.ЗаписатьНачалоЭлемента("Склад1");
		ЗаписьXML.ЗаписатьАтрибут("Код1",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование1", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель1", Строка(Выборка.Родитель));
		    ЗаписьXML.ЗаписатьКонецЭлемента();
			КонецЕсли;
		иначеесли Выборка.ЭтоГруппа = Ложь тогда
		ЗаписьXML.ЗаписатьНачалоЭлемента("Склад2");
		ЗаписьXML.ЗаписатьАтрибут("Код2",          Строка(Выборка.Код));
		ЗаписьXML.ЗаписатьАтрибут("Наименование2", Строка(Выборка.Наименование));
		ЗаписьXML.ЗаписатьАтрибут("Родитель2", Строка(Выборка.Родитель));
		ЗаписьXML.ЗаписатьАтрибут("Подразделение2", Строка(Выборка.Подразделение));
		ЗаписьXML.ЗаписатьАтрибут("ВидСклада2", Строка(Выборка.ВидСклада));
		ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента Организация
		КонецЕсли;
	КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента
	ЗаписьXML.Закрыть();

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

Отправка электронной почты

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

```1c
Профиль = Новый ИнтернетПочтовыйПрофиль;
   Профиль.АдресСервераSMTP = "";
   Профиль.ПользовательSMTP = "";
   Профиль.ПарольSMTP = "";
   Профиль.ИспользоватьSSLSMTP = false;
   Профиль.ПортSMTP = 25;
   Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации;

   Письмо = Новый ИнтернетПочтовоеСообщение;
   Текст1 = Письмо.Тексты.Добавить(Текст);
   Текст1.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
   Письмо.Тема = Тема;
   Письмо.Отправитель = "";
   Письмо.ИмяОтправителя = "Сообщение от 1с";
   Письмо.Получатели.Добавить("");

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

   Почта.Отключиться();
   Сообщить("Соединение завершено");
```
Произношение текста голосом
Теги: Голос,Звук,Сообщить,Диалог,1С

произносит заданную фразу

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

```1c
Voice = Новый COMObject("SAPI.SpVoice");
Voice.Speak("Привет!");
```

# Примечания

- Здравствуйте, Как это работает?
Как можно проверить?

- Не работает. Ничего не происходит.

- Список опций https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms720892(v=vs.85)
Например можно произнести текст из файла, или асинхронно и т.д.

- Если не работает можно попробовать установить Speech API
https://www.microsoft.com/en-us/download/details.aspx?id=27225

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

Вопрос и обработка ответа без синхронных методов (не модально)

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

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

&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
     Если Результат = КодВозвратаДиалога.Да Тогда
        Сообщить("Ответ Да!");
    КонецЕсли;
 КонецПроцедуры
```
Преобразование ЧтениеJSON в Соответствие
Теги: ЧтениеJSON,1С,JSON,Соответствие.

Преобразует ЧтениеJSON любой глубины в Соответствие.

Пример вызова:
//JSONТекст - исходный текст в формате JSON
Результат = Неопределено;
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(JSONТекст);
ОбработатьJSON(ЧтениеJSON, Результат);
//Здесь на выходе из процедуры Результат = Соответствие;

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

```1c
&НаСервере
Процедура ОбработатьJSON(ЧтениеJSON, Результат)

	ИмяСвойства = Неопределено;

	Пока ЧтениеJSON.Прочитать() Цикл
		TипJSON = ЧтениеJSON.ТипТекущегоЗначения;

		Если TипJSON = ТипЗначенияJSON.НачалоОбъекта
			ИЛИ TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
			НовыйОбъект = ?(TипJSON = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив);

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

			ОбработатьJSON(ЧтениеJSON, НовыйОбъект);

			Если Результат = Неопределено Тогда
				Результат = НовыйОбъект;
			КонецЕсли;
		ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
			ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
		ИначеЕсли TипJSON = ТипЗначенияJSON.Число
			ИЛИ TипJSON = ТипЗначенияJSON.Строка
			ИЛИ TипJSON = ТипЗначенияJSON.Булево
			ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
			Если ТипЗнч(Результат) = Тип("Массив") Тогда
				Результат.Добавить(ЧтениеJSON.ТекущееЗначение);
			ИначеЕсли ТипЗнч(Результат) = Тип("Соответствие") Тогда
				Результат.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение);
			КонецЕсли;
		Иначе
			Возврат;
		КонецЕсли;
	КонецЦикла;

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