Думаю, почти все специалисты 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);
КонецПроцедуры
Здесь мы передаем запрос пользователя как есть. Но вместе с ним передаем также и описание функции. В ответ мы получаем не "бла-бла-бла" (хотя может случиться и такое, если пользователь вместо дела спросит, например, сколько звезд на небе), а описание вызова функции.
Советую присмотреться к функции ПолучитьИнструменты() и процедуре ВыполнитьЗамену(). Как я понимаю, это то, чем многим из нас предстоит заниматься в ближайшем будущем.