Думаю, почти все специалисты 1С знают типовую обработку "Групповое изменение реквизитов". Она всем хороша, но уж очень много кликов. С помощью ИИ сведем весь пользовательский интерфейс к одному полю ввода.

На этом простом учебном примере я хочу показать вам что скрывается "под капотом" внедрения искусственного интеллекта в существующие бизнес-системы. Для работы нам понадобится бесплатная библиотека искусственного интеллекта для 1С

Итак, как я и обещал у нас с вами одно поле ввода, куда мы вводим в произвольной форме, на естественном языке где и что на что мы хотим поменять. На прочие поля (например, модель) не обращайте внимание, они нужны нам здесь для экспериментов. Если бы мы делали что-то подобное для реального использования, мы бы все лишнее убрали. Достаточно одного поля ввода и одной кнопки. Еще было бы прекрасно, если бы этой кнопкой был микрофончик. Ждем, когда в платформе появится аудиозапись, давно пора.

Задачу можно решить двумя способами. Первый в полной мере можно охарактеризовать словосочетанием santa simplicitas. Просто просим написать для нас код, а затем запускаем его на выполнение.

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

&НаКлиенте
Процедура Рецепт1(Команда)
	промт="Нужен код на языке 1С для групповой замены реквизита. В ответе только код без комментариев ";
	промт=промт+Вопрос;
	Ответ=БиблиотекаИскусственногоИнтеллекта.Генерация(промт,модель,0);
	Ответ=стрзаменить(Ответ,"```1C","");
	Ответ=стрзаменить(Ответ,"```1c","");
	Ответ=стрзаменить(Ответ,"```1С","");
	Ответ=стрзаменить(Ответ,"```1с","");
	Ответ=стрзаменить(Ответ,"```","");
	ВыполнитьКод(Ответ);
КонецПроцедуры

Видите, как "мало букв"? А если бы еще не бессмысленная борьба с ```! Этот пример прекрасен в своей простоте и... практически бесполезен. У идеи выполнять произвольный код на сервере нет никаких шансов добраться до прода. Кроме того, стабильно писать работоспособный код на 1С сейчас могут далеко не все модели. А только те, которые обладают почетным званием "думающих" и соответствующим этому высокому званию ценником. Вот тут недорогая рабочая лошадка что называется "не вытянула"

Если же нам надо сделать что-то более безопасное, управляемое, недорогое, тогда придется немного потрудиться.

&НаСервере
Процедура ВыполнитьЗамену(аргументы)
	ЧтениеJSON=Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(аргументы);	
	ста=ПрочитатьJSON(ЧтениеJSON);
	ЧтениеJSON.Закрыть();
	если ста.PartName="Справочники" тогда
		выб=справочники[ста.ObjectName].выбрать();
	иначе
		выб=документы[ста.ObjectName].выбрать();
	конецесли;
	пока выб.следующий() цикл
		если выб[ста.FieldName]=ста.LeftValue тогда
			об=выб.получитьобъект();
			об[ста.FieldName]=ста.RigthValue;
			об.записать();
		конецесли;	
	конеццикла;
КонецПроцедуры	


&НаСервере
Функция ПолучитьИнструменты()
	нс=справочники.БИИ_Инструменты.НайтиПоНаименованию("MassUpdate1C");
	если нс.Пустая() тогда
		нов=справочники.БИИ_Инструменты.СоздатьЭлемент();
		нов.Наименование="MassUpdate1C";
		нстр=нов.ПараметрыФункции.Добавить();
		нстр.Имя="PartName";
		нстр.Описание="Раздел метаданных";
		нстр.Тип="string";
		нстр.Перечень="Справочники,Документы";
		нстр=нов.ПараметрыФункции.Добавить();
		нстр.Имя="ObjectName";
		нстр.Описание="Имя объекта";
		нстр.Тип="string";
		нстр=нов.ПараметрыФункции.Добавить();
		нстр.Имя="FieldName";
		нстр.Описание="Наименование реквизита";
		нстр.Тип="string";
		нстр=нов.ПараметрыФункции.Добавить();
		нстр.Имя="LeftValue";
		нстр.Описание="Левое значение, начальное значение";
		нстр.Тип="string";
		нстр=нов.ПараметрыФункции.Добавить();
		нстр.Имя="RigthValue";
		нстр.Описание="Правое значение, конечное значение";
		нстр.Тип="string";
		нов.Записать();
		нс=нов.Ссылка;
	конецесли;
	рез=новый массив;
	рез.Добавить(нс);
	возврат рез;
КонецФункции	


&НаКлиенте
Процедура Рецепт2(Команда)
	инструменты=ПолучитьИнструменты();
	рез=БиблиотекаИскусственногоИнтеллекта.Генерация(Вопрос,модель,0,инструменты);
	ответ=рез[0].function.arguments;
	ВыполнитьЗамену(рез[0].function.arguments);
КонецПроцедуры

Здесь мы передаем запрос пользователя как есть. Но вместе с ним передаем также и описание функции. В ответ мы получаем не "бла-бла-бла" (хотя может случиться и такое, если пользователь вместо дела спросит, например, сколько звезд на небе), а описание вызова функции.

Советую присмотреться к функции ПолучитьИнструменты() и процедуре ВыполнитьЗамену(). Как я понимаю, это то, чем многим из нас предстоит заниматься в ближайшем будущем.

Комментарии (0)