arefaste/1C_Forums huggingface dataset:
HTML представление виджета
Теги: 1С

html представление виджета взято из ДО и переделано

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

```1c
// Возвращает html представление виджета.
//
// Параметры:
//   Заголовок - Строка - html текст заголовка виджета.
//   Подвал - Строка - html текст подвала виджета.
//   ТелоВиджета - Строка - html текст тела виджета.
//   ФонаВиджета - Строка - цвет фона виджета в виде шестнадцатеричного значения.
//   ЦветРамкиТаблицы - Строка - цвет рамок таблиц в виджете, в виде шестнадцатеричного значения.
//
// Возвращаемое значение:
//   Строка - html представление виджета.
//
Функция HTMLПредставлениеВиджета(
		Заголовок = "", Подвал = "", ТелоВиджета, ФонаВиджета, ЦветРамкиТаблицы)

	HTMLТекст = "<html><head><meta name=""viewport"" content=""viewport-fit=cover, width=device-width"" />"
		+ СтильHTML(ЦветРамкиТаблицы)
		+ "<body bgcolor=" + ФонаВиджета + ">";

	HTMLТекст = HTMLТекст + СтрЗаменить("
	|<table class=""one"">
	|<tr><td>
	|<table class=""title"">
	|<tr>
	|<td class=""menu"">
	|</td>
	|<td class=""title"">
	|<p>
	|" + Заголовок + "
	|</td>
	|</tr>
	|</table>
	|</td></tr>
	|<tr class=""height100""><td>
	|" + ТелоВиджета + "
	|</td></tr>
	|<tr><td>
	|<table>
	|<tr>
	|<td width=""5"">
	|</td>
	|<td height=""18"">
	|" + Подвал + "
	|</td>
	|</tr>
	|</table>
	|</td></tr>
	|</table>
	|</body></html>", "|","");



	УдалитьВредоносныйКодИзТекста(HTMLТекст);

	Возврат HTMLТекст;

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

// Удаляет вредоносный код html из текста.
//
// Параметры:
//   Текст - Строка - текст
//
Процедура УдалитьВредоносныйКодИзТекста(Текст) Экспорт

	НРегТекст = НРег(Текст);

	МассивСтрокБезВредоносногоТекста = Новый Массив;

	// Удаление скриптов
	НомерСкрипта = 1;
	ПозицияНачалаОбработки = 1;

	Пока Истина Цикл

		ПозицияНачалаОткрывающегоТегаScript = СтрНайти(НРегТекст, "<script",,, НомерСкрипта);
		ПозицияНачалаЗакрывающегоТегаScript = СтрНайти(НРегТекст, "</script",,, НомерСкрипта);

		Если ПозицияНачалаОткрывающегоТегаScript = 0 Или ПозицияНачалаЗакрывающегоТегаScript = 0 Тогда
			Прервать;
		КонецЕсли;

		ПозицияОкончанияОткрывающегоТегаScript = СтрНайти(НРегТекст, ">",, ПозицияНачалаОткрывающегоТегаScript + 1);
		ПозицияОкончанияЗакрывающегоТегаScript = СтрНайти(НРегТекст, ">",, ПозицияНачалаЗакрывающегоТегаScript + 1);

		Если ПозицияОкончанияОткрывающегоТегаScript = 0 Или ПозицияОкончанияЗакрывающегоТегаScript = 0 Тогда
			Прервать;
		КонецЕсли;

		// Добавим текст до скрипта
		ТекстДоСкрипта = Сред(Текст, ПозицияНачалаОбработки, ПозицияНачалаОткрывающегоТегаScript - ПозицияНачалаОбработки);
		МассивСтрокБезВредоносногоТекста.Добавить(ТекстДоСкрипта);

		ПозицияНачалаОбработки = ПозицияОкончанияЗакрывающегоТегаScript + 1;
		НомерСкрипта = НомерСкрипта + 1;

	КонецЦикла;

	Если МассивСтрокБезВредоносногоТекста.Количество() > 0 Тогда

		// Добавим текст после последнего скрипта
		ТекстДоСкрипта = Сред(Текст, ПозицияНачалаОбработки);
		МассивСтрокБезВредоносногоТекста.Добавить(ТекстДоСкрипта);

		// Сформируем итоговую строку без скрипта
		Текст = СтрСоединить(МассивСтрокБезВредоносногоТекста);
	КонецЕсли;

КонецПроцедуры
```
Условное оформление на обычных формах (ОФ)
Теги: 1С,ОбычныеФормы,ОФ,Форма,Подсветка полей

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

```1c
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    ОформлениеСтроки.Ячейки.Отгружен.ЦветФона = ?(ДанныеСтроки.Отгружен, WebЦвета.СветлоРозовый, WebЦвета.БледноБирюзовый);
КонецПроцедуры
```
СтрШаблон (8.1, 8.2, 8.3 в режиме совместимости 8.2)
Теги: 1С

Аналог функции СтрШаблон версии 8.3 для младших версий платформы. Подставляет параметры в строку по номеру. Возвращает готовую строку с подставленными параметрами.

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

```1c
Функция _СтрШаблон_(Шаблон, Парам1 = "", Парам2 = "", Парам3 = "", Парам4 = "", Парам5 = "",
					Парам6 = "", Парам7 = "", Парам8 = "", Парам9 = "") экспорт

	Для Сч=1 По 9 Цикл

		Выполнить("Шаблон = СтрЗаменить(Шаблон, ""%""+Сч, Парам"+Сч+")");

	КонецЦикла;

	Возврат Шаблон;

КонецФункции
```
Переменные среды (windows)
Теги: 1С,Environment

Ищет переменные среды (системные, локальные, временные)

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

```1c
// Функция - Переменные среды
//
// Параметры:
//  Тип	 - Строка - "System" - переменные среды операционной системы.
//					"User" - переменные среды пользователя.
//					"Volatile" - временные переменные.
//					"Process" - переменные среды текущего командного окна.
//
// Возвращаемое значение:
//   - Соответствие, содержащая переменные среды
//
Функция ПеременныеСреды(Тип = "System") Экспорт

	Перем Оболочка;

	сПеременныеСреды = Новый Соответствие;

	Если ЭтоКлиентWindows() Тогда

		Попытка
			Оболочка = Новый COMОбъект("WScript.Shell");
			КоллекцияПеременных = Оболочка.Environment(Тип);
		Исключение
			Сообщить("Не удалось подключить компоненту 'WScript.Shell' по причине: "+ОписаниеОшибки(), СтатусСообщения.ОченьВажное);
			Возврат сПеременныеСреды;
		КонецПопытки;

		Для каждого ЭлКоллекции Из КоллекцияПеременных Цикл

			Если НЕ ЗначениеЗаполнено(ЭлКоллекции) Тогда
				Продолжить;
			КонецЕсли;

			МассивЧастей = РазложитьСтрокуВМассив(ЭлКоллекции, "=");

			Если МассивЧастей.Количество() = 2 Тогда
				сПеременныеСреды.Вставить(МассивЧастей.Получить(0), МассивЧастей.Получить(1));
			КонецЕсли;

		КонецЦикла;

		Оболочка = Неопределено;

	КонецЕсли;

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

КонецФункции
```
Чтение значения атрибута узла XML или объекта XDTO
Теги: 1С,XML,XDTO

Позволяет произвести чтение значения атрибута узла/объекта xdto по имени, с помощью Фабрики XDTO. В конце пример использования.

При чтении XML фабрикой XDTO во всех названиях узлов и свойств имеющих знак тире "-", платформа автоматически меняет тире на нижнее подчеркивание. Этот нюанс учтен в функции.

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

```1c
Функция ЗначениеСвойстваXDTO(ОбъектXDTO, Имя)

	ВариантИмени = СтрЗаменить(Имя, "-", "_");

	Значение = Неопределено;

	ИмяПоиска = Неопределено;

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

		Свойства = ОбъектXDTO.Свойства();

		Для Каждого Свойство Из Свойства Цикл

			Если Врег(Свойство.Имя) = Врег(Имя) Тогда

				ИмяПоиска = Имя;

				Прервать;

			ИначеЕсли Врег(Свойство.Имя) = Врег(ВариантИмени) Тогда

				ИмяПоиска = ВариантИмени;

				Прервать;

			КонецЕсли;

		КонецЦикла;

		Если ИмяПоиска <> Неопределено Тогда

			Если ТипЗнч(ОбъектXDTO[ИмяПоиска]) = Тип("СписокXDTO") Тогда

				Значение = ОбъектXDTO.ПолучитьСписок(ИмяПоиска);

			Иначе

				Значение = ОбъектXDTO.ПолучитьXDTO(ИмяПоиска);

			КонецЕсли;

			Если ТипЗнч(Значение) = Тип("ЗначениеXDTO") Тогда

				Значение = Значение.Значение;

			КонецЕсли;

		КонецЕсли;

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

		Значение = ОбъектXDTO.Значение;

	КонецЕсли;


	Возврат Значение;

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

// ИСПОЛЬЗОВАНИЕ
//
// На входе имеем XML. И нам нужно получить значение атрибута "message"

СтрокаXML = "
| <response>
| <payment message='Техническая ошибка'>
|  <from>
|    <amount>0.00</amount>
|  </from>
| </payment>
| </response>";

// Полный процесс получения будет выглядеть так

ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(СтрокаXML);

Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

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

Платеж = ЗначениеСвойстваXDTO(Данные, "payment");

Если Платеж <> Неопределено Тогда

	Ошибка = ЗначениеСвойстваXDTO(Платеж, "message");  // Ошибка = "Техническая ошибка"

	Сообщить(Ошибка);

КонецЕсли;
```

# Примечания

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

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

```1c
	Сообщение = Новый СообщениеПользователю();
	Сообщение.Текст = "Создан документ начисления паритетных взносов: " + Док;
	Сообщение.КлючДанных = Док.Ссылка;
	Сообщение.ПутьКДанным = "Объект";
	Сообщение.Сообщить();
```

# Примечания

- не отрабатывает (ничего не открывает). По факту - просто выводит сообщение
Менеджер ссылки по менеджеру объектов
Теги: 1С,МенеджерыОбъектов,ОФ,ОграничениеТипа,Справочники,Документы,УФ

Преобразует 
Справочники.Банки
в
СправочникСсылка.Банки

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

```1c
Функция МенеджерСсылкиПоМенеджеруМД(МенеджерМД)
    Результат = Неопределено;

    ПозицияТочки = Найти(МенеджерМД, ".");
    Результат    = Лев(МенеджерМД,   ПозицияТочки - 2) + "Ссылка" + Сред(МенеджерМД, ПозицияТочки);

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

&НаСервере
Процедура МенеджерОбъектаСтрокойПриИзмененииНаСервере()
    МенеджерСсылка = МенеджерСсылкиПоМенеджеруМД(Объект.МенеджерОбъектовСтрокой);
    Элементы.Ссылка.ОграничениеТипа = Новый ОписаниеТипов(МенеджерСсылка);
КонецПроцедуры
```
Сопоставления объектов проводок в базе-приемнике БП3 по COM-соединению
Теги: 1С,ВидыСубконто,БП3,COM,ПланСчетов

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

```1c
Функция СчетБазы(База,КодСчета,Предопределенный = Истина)
    Если Предопределенный Тогда
        Результат = База.ПланыСчетов.Хозрасчетный[КодСчета];
    Иначе
        Результат = База.ПланыСчетов.Хозрасчетный.НайтиПоКоду(КодСчета);
    КонецЕсли;

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

Функция СубконтоБазы(База,ИмяСубконто,Предопределено = Истина,ИмяПВХСубконто = "ВидыСубконтоХозрасчетные")
    Если Предопределено = Истина Тогда
        Результат = База.ПланыВидовХарактеристик[ИмяПВХСубконто][ИмяСубконто];
    Иначе
        Результат = База.ПланыВидовХарактеристик[ИмяПВХСубконто].НайтиПоНаименованию(ИмяСубконто);
    КонецЕсли;
    Возврат Результат;
КонецФункции

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

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

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

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

```1c
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    ИмяПоля = Сред(Поле.Имя,СтрДлина(Элемент.Имя) + 1);
    ПоказатьЗначение(Новый ОписаниеОповещения, Элемент.ТекущиеДанные[ИмяПоля]);
КонецПроцедуры
```

# Примечания

- работает только при жестком условии, что имя элемента строится по конкретному шаблону
про попытку создать универсальный метод статью писал: https://infostart.ru/1c/articles/1116586/

- (1) SeiOkami, верно, по правилам образования имен элементов формы 1С для УФ. Если разработчик делает нестандартные действия - пишет отдельно код для обработки "собственных" имен. Есть стандарты и их стоит придерживаться для единообразия.
Использовать или нет - личный вопрос выбора для каждого.
Изменение видимости колонок табличной части по параметру свойству таблицы "ПланыВидовРасчета"
Теги: 1С,Табличная часть,метаданные,Форма

Алгоритм позволяет управлять видимостью колон в зависимости от значения в данной колонке. 
Например, если в строке, в колонке "Вид расчета" введен объект "Прогул", то колонка "Параметр" должна изменить видимость. 
Не используются функ опции.
Создать запись в регистре сведений
Теги: 1С,Регистр сведений

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

```1c
Набор = РегистрыСведений.бит_стр_СтатусыОбъектов.СоздатьМенеджерЗаписи();
Набор.ДатаИзмененияСтатуса = ТекущаяДата();
Набор.Объект = Док.Ссылка;
Набор.Статус = Справочники.бит_стр_СтатусыОбъектов.НайтиПоКоду("000000031");
Набор.Пользователь = ПараметрыСеанса.ТекущийПользователь;
Набор.Записать();
```
Код для переноса данных
Теги: 1С

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

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

//После загрузки объекта
Если ИмяТипаОбъекта = "Документ"
    И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда

    Если Не ОбъектНайден  Тогда
        Объект.Записать();
        ОбъектМодифицирован = Ложь;
    КонецЕсли;

    НоваяСтрока =  Параметры.ТаблицаДокументов.Добавить();
    НоваяСтрока.Ссылка = Объект.Ссылка;

  Если Объект.Проведен  Тогда
      НоваяСтрока.Действие = "Проведение";
  ИначеЕсли Объект.ПометкаУдаления Тогда
      НоваяСтрока.Действие = "Удаление";
  Иначе
      НоваяСтрока.Действие = "Отмена";
  КонецЕсли;
  //Если ПараметрыОбъекта.Получить("Проведен") Тогда
  //      НоваяСтрока.Действие = "Проведение";
  //  ИначеЕсли ПараметрыОбъекта.Получить("ПометкаУдаления")  Тогда
  //      НоваяСтрока.Действие = "Удаление";
  //  Иначе
  //      НоваяСтрока.Действие = "Отмена";
  //КонецЕсли;
КонецЕсли;

После загрузки данных
ТекстСообщенияЗаписи = "";
ТекстСообщенияОшибки = "";

Для каждого СтрокаТч Из Параметры.ТаблицаДокументов Цикл

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

    Продолжить;

  КонецЕсли;

  Если СтрокаТч.Действие = "Проведение" Тогда
    РежимЗаписи = РежимЗаписиДокумента.Проведение;
  Иначе
    РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
  КонецЕсли;

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

    Если СтрокаТч.Действие = "Удаление" Тогда
      ДокОбъект.ПометкаУдаления = Истина;
      ДокОбъект.Записать();
    ИначеЕсли СтрокаТч.Ссылка.ПометкаУдаления Тогда
      ДокОбъект.ПометкаУдаления = Ложь;
      ДокОбъект.Записать();
    КонецЕсли;
  Исключение

    ТекстСообщенияОшибки = ТекстСообщенияОшибки + Строка(СтрокаТч.Ссылка)+ " : "+ОписаниеОшибки()+ Символы.ПС;

  КонецПопытки;
КонецЦикла;

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

Если Не ПустаяСтрока(ТекстСообщенияОшибки) Тогда
  Сообщить("Ошибки при отмене проведения: "+ Символы.ПС + ТекстСообщенияОшибки);
КонецЕсли;
Параметры.Удалить("ТаблицаДокументов");
```

# Примечания

- Что это? Для какого переноса? как это использовать?
Групповое изменение реквизитов, вытащить дополнительный реквизит
Теги: 1С

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

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

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

```1c
Функция Наименование1(МассивОбъектов, ПараметрыПечати)

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка", МассивОбъектов[0]);

	Запрос.Текст =
	"ВЫБРАТЬ


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

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

Функция Наименование2(МассивОбъектов, ПараметрыПечати, ОбъектыПечати)

	Макет = ПолучитьМакет("Макет");

	НастройкиПечатныхФорм = ЗарплатаКадрыПовтИсп.НастройкиПечатныхФорм();

	ДокументРезультат = Новый ТабличныйДокумент;

	ДокументРезультат.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Приказ";
	ДокументРезультат.ОриентацияСтраницы= ОриентацияСтраницы.Портрет;
	ДокументРезультат.АвтоМасштаб = Истина;

	ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();

	ОбластьМакета = Макет.ПолучитьОбласть("ОбластьМакета");

	// получаем данные для печати
	ДанныеДляПечати = Наименование1(МассивОбъектов, ПараметрыПечати).Выбрать();
	ПервыйДокумент = Истина;
	Пока ДанныеДляПечати.Следующий() Цикл

	//в теле пишем код для вывода

КонецЦикла;

	Возврат ДокументРезультат;

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

//выборка 2////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Функция Наименование3(Регистратор, ПараметрыПечати)

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Сотрудник", Регистратор.Сотрудник);


	Запрос.Текст =
	"ВЫБРАТЬ
	|	КадроваяИсторияСотрудниковСрезПервых.Регистратор.ТрудовойДоговорНомер КАК РегистраторТрудовойДоговорНомер,
	|	КадроваяИсторияСотрудниковСрезПервых.Регистратор.ТрудовойДоговорДата КАК РегистраторТрудовойДоговорДата
	|ИЗ
	|	РегистрСведений.КадроваяИсторияСотрудников.СрезПервых КАК КадроваяИсторияСотрудниковСрезПервых
	|ГДЕ
	|	КадроваяИсторияСотрудниковСрезПервых.Сотрудник = &Сотрудник";

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

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

ДанныеТД = ДанныеТрудовогоДоговора(ДанныеДляПечати.Ссылка, ПараметрыПечати).Выбрать();
		Пока ДанныеТД.Следующий() Цикл
			 ОбластьМакета.Параметры.ТрудовойДоговорДата = Формат(ДанныеТД.РегистраторТрудовойДоговорДата, "ДЛФ=DD");;
			 ОбластьМакета.Параметры.ТрудовойДоговорНомер = ДанныеТД.РегистраторТрудовойДоговорНомер;
		КонецЦикла;

		ТабНомер = ПолучитьТабельныйНомер(ДанныеДляПечати.Ссылка, ПараметрыПечати).Выбрать();
		Пока  ТабНомер.Следующий() Цикл
			  ОбластьМакета.Параметры.ТабельныйНомер = ТабНомер.Код;
		КонецЦикла;
```
Регистрация сведений о внешнем отчете
Теги: 1С,ВнешнийОтчет

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

```1c
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("1.1.1.1");


	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Платежный Календарь'");
    НоваяКоманда.Идентификатор = "ПлатежныйКалендарь";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    НоваяКоманда.ПоказыватьОповещение = Ложь;
    //НоваяКоманда.Модификатор = "ПФ_MXL";


	Возврат ПараметрыРегистрации;


КонецФункции
```
Склонение слов
Теги: 1С

С помощью онлайн-сервиса

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

```1c
Функция Просклонять(СклоняемыйТекст, Падеж)
	Запрос = HTTPЗапросКСервисуСклонения(СклоняемыйТекст);
	Соединение = HTTPСоединениеСервисаСклонений();

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

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

	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
	СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
	ЧтениеJSON.Закрыть();

	Возврат СтруктураОтвета[Падеж];
КонецФункции

Функция HTTPЗапросКСервисуСклонения(СклоняемыйТекст)

	ТекстЗапроса = "/russian/declension?s=" + СклоняемыйТекст;

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

	Если ЗначениеЗаполнено(Токен) Тогда
		ТекстЗапроса = ТекстЗапроса + "&token=" + Токен;
	КонецЕсли;

	Заголовки = Новый Соответствие;
  	Заголовки.Вставить("User-Agent", "1C Enterprise 8.3");
  	Заголовки.Вставить("Accept", "application/json");
	Заголовки.Вставить("charset", "UTF-8");

	Возврат Новый HTTPЗапрос(ТекстЗапроса, Заголовки);

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

Функция HTTPСоединениеСервисаСклонений()

	АдресСервера = "ws3.morpher.ru";

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

	Таймаут = 10;

	ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(, Новый СертификатыУдостоверяющихЦентровОС);
	Возврат Новый HTTPСоединение(АдресСервера, , , , ИнтернетПрокси, Таймаут, ЗащищенноеСоединение);

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

# Примечания

- в БСП же встроена компонента для склонения. Думаю быстрее будет чем запрос на сервис да и проще в реализации.
Открытие активизация формы
Теги: 1С

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

```1c
    ПутьКФорме = "ПланОбмена.ИмяПланаОбмена.Форма.ФормаВыгрузкиНоменклатуры";

    ОткрываемаяФорма = ПолучитьФорму(ПутьКФорме,,,ПутьКФорме);
    Если ОткрываемаяФорма.Открыта() Тогда
        ОткрываемаяФорма.Активизировать();
    Иначе
        ОткрываемаяФорма.Открыть();
    КонецЕсли;
```
ФабрикаXDTO
Теги: 1С,ФабрикаXDTO,XML

# Примечания

- Подсказали на 1С-конференции:
ТипПакет = Фабрика.Тип("urn://egisso-ru/types/package-RAF/1.0.7", "tPackage");
package = Фабрика.Создать(ТипПакет);
package.packageId  = XMLСтрока(новый УникальныйИдентификатор);
ТипЭлемент = ТипПакет.Свойства.Получить("elements").Тип;
ТипФакт = ТипЭлемент.Свойства.Получить("fact").Тип;
Вывести на печать произвольную таблицу значений (ТЗ)
Теги: 1С,печать,ТаблицаЗначений,ТЗ

Выводит на печать произвольную ТЗ

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

```1c
//вариант 1
&НаКлиенте
Процедура ВывестиНаПечать(Команда)
    ТабДок = ВывестиНаПечатьНаСервере();
    ТабДок.Показать();
КонецПроцедуры

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

    ТабДок = Новый ТабличныйДокумент;
    ПостроительОтчета.Вывести(ТабДок);
    Возврат ТабДок
КонецФункции

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

&НаСервере
Функция ВывестиНаПечатьНаСервере2()
    ТЗ = РеквизитФормыВЗначение("Реквизит1");

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

    КоличествоКолонок = ТЗ.Колонки.Количество();

    ТекущаяСтрока = 2;
    Для Каждого Стр Из ТЗ Цикл
        Для Сч = 1 По КоличествоКолонок Цикл
            ТабДок.Область(ТекущаяСтрока, Сч).Текст = Стр[Сч - 1];
        КонецЦикла;
        ТекущаяСтрока = ТекущаяСтрока + 1;
    КонецЦикла;

    Возврат ТабДок
КонецФункции
```
Документ Регистратор При Проверке Записи
Теги: 1С,v8

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