В этой статье я расскажу, как использовать бесплатный Gemini от Google, чтобы он стал вашим личным Senior-наставником, который всегда на связи и знает решение любой проблемы.
Как получить доступ к магии за 1 минуту
Никаких сложных регистраций. Всё максимально просто:
- Заходите на сайт Gemini.
- Авторизуетесь через свою Google-почту.
Всё! У вас в руках мощнейший инструмент. Но чтобы он работал не как глупый бот, а как профи, ему нужно задать правильный контекст.
Настройка промпта: Создаем себе идеального друга-эксперта
Перед тем как начать задавать вопросы, скормите нейросети вот этот текст (можете сохранить его в заметках):
«Представь, что ты 1С-разработчик с 20-летним стажем. Ты знаешь наизусть все стандарты и методики разработки 1С, перелопатил весь ИТС, блестяще разбираешься в архитектуре, оптимизации и чистом коде. При этом ты мой лучший друг: общайся со мной неформально, поддерживай, объясняй всё подробно, интересно, профессионально, но человеческим языком. Помогай мне писать идеальный код и решать любые проблемы».
А теперь давайте посмотрим на реальных примерах, как это работает.
Кейс 1: Поиск неочевидных ошибок (Postman vs 1C)
Проблема: Вы интегрируетесь со сторонним сервисом. В Postman ваш POST-запрос улетает со свистом и возвращает 200 OK. Вы копируете всё то же самое в 1С, запускаете — падает с ошибкой 400 Bad Request или вообще отваливается по таймауту.
Вместо того чтобы рвать волосы на голове, пишем нашему ИИ-другу: «Слушай, отправляю HTTP POST запрос через Postman — всё ок. Делаю то же самое через HTTPСоединение в 1С — падает с ошибкой. В чём может быть дело, куда копать?»
Ответ ИИ (краткая выжимка):
- Заголовки: В 1С нужно явно указывать Content-Type: application/json. Postman часто делает это скрыто.
- BOM-маркер: При сериализации JSON в 1С часто добавляется невидимый символ BOM, который ломает парсинг на стороне сервера. Используй КодировкаТекста.UTF8БезBOM.
- SSL-сертификаты: Postman по умолчанию игнорирует проблемы с сертификатами, а 1С — нет. Используй Новый ЗащищенноеСоединениеOpenSSL().
- Кодировка URL: Проверь, не передаешь ли ты кириллицу в параметрах строки запроса без URLEncode.
Одна минута - и у вас готовый чек-лист для дебага, который бьет точно в цель.
Кейс 2: Рефакторинг и чистый код (Спасаем базу от зависания)
Нам часто достается код в наследство. Иногда этот код хочется распечатать, сжечь, а пепел развеять. Давайте скормим нашему ИИ страшную «процедуру от джуна» и попросим её причесать по стандартам 1С.
// ВНИМАНИЕ: СЛАБОНЕРВНЫМ НЕ СМОТРЕТЬ!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗапасыОстатки.Номенклатура КАК Номенклатура,
| ЗапасыОстатки.Характеристика КАК Характеристика,
| ЗапасыОстатки.СуммаОстаток КАК СуммаОстаток,
| ЗапасыОстатки.Организация КАК Организация
|ПОМЕСТИТЬ ВТ_Данные
|ИЗ
| РегистрНакопления.Запасы.Остатки КАК ЗапасыОстатки
|ГДЕ
| (ЗапасыОстатки.Организация = &Организация
| ИЛИ ЗапасыОстатки.Номенклатура В (&СписокНоменклатур))
|;
|ВЫБРАТЬ
| ВТ_Данные.Номенклатура КАК Номенклатура,
| ВТ_Данные.Характеристика КАК Характеристика,
| ВТ_Данные.СуммаОстаток КАК СуммаОстаток,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
|ИЗ
| ВТ_Данные КАК ВТ_Данные
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
| ПО ВТ_Данные.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И ВТ_Данные.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("СписокНоменклатур", СписокНоменклатур);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
НовыйДок = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Для каждого Стр Из РезультатЗапроса Цикл
ЗапросЧеков = Новый Запрос;
ЗапросЧеков.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ЧекККМЗапасы.Ссылка КАК Ссылка
|ИЗ
| Документ.ЧекККМ.Запасы КАК ЧекККМЗапасы
|ГДЕ
| ЧекККМЗапасы.Номенклатура = &Номенклатура";
ЗапросЧеков.УстановитьПараметр("Номенклатура", Стр.Номенклатура);
РезЧеков = ЗапросЧеков.Выполнить().Выбрать();
ЧекСсылка = Неопределено;
Если РезЧеков.Следующий() Тогда
ЧекСсылка = РезЧеков.Ссылка;
КонецЕсли;
НоваяСтрока = НовыйДок.Товары.Добавить();
НоваяСтрока.Номенклатура = Стр.Номенклатура;
НоваяСтрока.Характеристика = Стр.Характеристика;
НоваяСтрока.СуммаОстаток = Стр.СуммаОстаток;
НоваяСтрока.Цена = Стр.Цена;
НоваяСтрока.ДокументПартии = ЧекСсылка;
Сообщить("Добавили товар: " + Стр.Номенклатура);
КонецЦикла;
НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
Наш запрос: «Оцени этот код. Найди все ошибки производительности, добавь индексы, перепиши по стандартам разработки 1С (ИТС) и объясни, почему старый вариант был ужасен».
Ответ ИИ (Полный разнос):
Нейросеть не просто исправит код, она выдаст ревью, за которое Senior-разработчику платят зарплату:
- Запрос в цикле. Это увольнение одним днем. Вместо того чтобы вытягивать чеки по одной номенклатуре за каждую итерацию (а если у нас 10 000 строк — это 10 000 дополнительных запросов!), нужно соединить табличную часть чеков с нашими данными в главном запросе.
- Отборы в секции ГДЕ для виртуальных таблиц. Это смертный грех №1. База сначала поднимет ВСЕ остатки по всем организациям и номенклатурам в системе, и только потом будет их фильтровать. Отборы должны быть внутри параметров виртуальной таблицы.
- Использование ИЛИ. Смертный грех №2. Условие ИЛИ (особенно в виртуальных таблицах) ломает оптимизатор СУБД. Индексы игнорируются, начинается полное сканирование таблицы (table scan). База ложится спать. Нужно менять на ОБЪЕДИНИТЬ ВСЕ.
- Отсутствие индексов во временной таблице. Мы соединяем ВТ_Данные с регистром сведений и документами. Без индексации по полям соединения это будет медленно.
- Срез последних без отборов. Соединение со СрезПоследних идет без передачи списка номенклатуры в параметры регистра. База сначала соберет срез по всей номенклатуре справочника, а потом уже соединит.
- Обращение через точку в цикле. Стр.Номенклатура.ВидНоменклатуры.Наименование — это два неявных запроса к базе данных на каждую итерацию цикла. Вид номенклатуры нужно получать в самом запросе.
- Использование Сообщить(). Это устаревший подход. На сервере оно уйдет в пустоту, нужно использовать процедуры БСП. И спамить сообщениями в цикле при создании документа — плохая практика.
Код от ИИ:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗапасыОстатки.Номенклатура КАК Номенклатура,
| ЗапасыОстатки.Характеристика КАК Характеристика,
| ЗапасыОстатки.СуммаОстаток КАК СуммаОстаток,
| ЗапасыОстатки.Организация КАК Организация
|ПОМЕСТИТЬ ВТ_Данные
|ИЗ
| РегистрНакопления.Запасы.Остатки(, Организация = &Организация) КАК ЗапасыОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗапасыОстатки.Номенклатура КАК Номенклатура,
| ЗапасыОстатки.Характеристика КАК Характеристика,
| ЗапасыОстатки.СуммаОстаток КАК СуммаОстаток,
| ЗапасыОстатки.Организация КАК Организация
|ИЗ
| РегистрНакопления.Запасы.Остатки(, Номенклатура В (&СписокНоменклатур)) КАК ЗапасыОстатки
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЧекККМЗапасы.Номенклатура КАК Номенклатура,
| МАКСИМУМ(ЧекККМЗапасы.Ссылка) КАК Ссылка
|ПОМЕСТИТЬ ВТ_Чеки
|ИЗ
| Документ.ЧекККМ.Запасы КАК ЧекККМЗапасы
|ГДЕ
| ЧекККМЗапасы.Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ВТ_Данные)
|СГРУППИРОВАТЬ ПО
| ЧекККМЗапасы.Номенклатура
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Данные.Номенклатура КАК Номенклатура,
| ВТ_Данные.Характеристика КАК Характеристика,
| ВТ_Данные.СуммаОстаток КАК СуммаОстаток,
| ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
| ВТ_Чеки.Ссылка КАК ДокументПартии
|ИЗ
| ВТ_Данные КАК ВТ_Данные
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| ,
| Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ВТ_Данные)) КАК ЦеныНоменклатурыСрезПоследних
| ПО ВТ_Данные.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
| И ВТ_Данные.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Чеки КАК ВТ_Чеки
| ПО ВТ_Данные.Номенклатура = ВТ_Чеки.Номенклатура";
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("СписокНоменклатур", СписокНоменклатур);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
НовыйДок = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
НовыйДок.Товары.Загрузить(РезультатЗапроса.Выгрузить());
НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
ОбщегоНазначения.СообщитьПользователю("Создан документ " + НовыйДок.Ссылка);
КонецЕсли;
Кейс 3: «У меня есть задача, с чего начать?» (Генерация каркаса)
Иногда нужно просто оттолкнуться от какой-то базы, чтобы не писать рутину с нуля. Допустим, у вас есть проблема: нужно создать и записать 10 000 документов. Писать всё в обычном цикле — долго, опасно, база повиснет, а при одной ошибке всё упадет.
Вместо того чтобы гуглить лучшие практики, просто просим ИИ: «Мне нужно создать и записать 10 000 документов в 1С. Дай каркас кода для максимально быстрой и безопасной записи».
Нейросеть не просто выдаст вам стандартный цикл Пока... Цикл. Настроенная как Senior-разработчик, она сама поймет узкие места и предложит два крутых варианта:
Вариант 1: Пакетная запись в транзакциях ИИ сам подскажет, что запись по одному документу дергает СУБД 10 000 раз, и предложит разбить данные на порции (например, по 100 штук), оборачивая в транзакцию только саму порцию. Он напишет готовый код с НачатьТранзакцию() и ЗафиксироватьТранзакцию(), добавив обработку исключений, чтобы при ошибке в одном блоке остальные 9 900 документов всё равно записались.
РазмерПорции = 100;
Счетчик = 0;
НачатьТранзакцию();
Попытка
Для Каждого СтрокаДанных Из МассивДанных Цикл
// Здесь код создания и заполнения документа
Счетчик = Счетчик + 1;
// Как только накопили порцию - фиксируем и начинаем новую
Если Счетчик % РазмерПорции = 0 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию(); // Фиксируем остаток
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации("ОшибкаЗаписи", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
Вариант 2: Фоновые задания ИИ скажет: «А если сервер позволяет, давай распараллелим!». И выдаст готовый каркас, который разобьет массив на части и запустит их через ФоновыеЗадания.Выполнить(). Вы получаете готовое архитектурное решение просто по одному запросу.
// Каркас запуска фоновых заданий
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(МассивДанныхПорция1); // Передаем часть данных
ФоновыеЗадания.Выполнить(
"МойОбщийМодуль.СоздатьДокументыВФоне", // Имя экспортной процедуры
ПараметрыЗадания,
УникальныйИдентификатор,
"Загрузка порции документов"
);
// Повторяем для других порций и ждем завершения
Кейс 4: Изучение новых технологий (Например, RabbitMQ)
Мир не ограничивается одной 1С. Завтра вам скажут настроить брокер сообщений. Вместо чтения сухих мануалов пишем ИИ: «Я 1С-ник, ничего не знаю про очереди сообщений. Объясни мне на пальцах, как для ребенка, что такое RabbitMQ, зачем он нужен в связке с 1С и дай простейший пример кода подключения через HTTP-запросы».
ИИ выдаст вам понятную аналогию (например, с почтовым отделением), объяснит разницу между Publisher и Subscriber и напишет готовый код отправки сообщения в очередь.
Способы использовать ИИ в работе каждый день
Чтобы не растягивать статью, вот еще несколько задач, с которыми ИИ справляется блестяще:
- Генерация тестовых данных. Нужно проверить обмен? ИИ за секунду сгенерирует вам валидные JSON, XML или CSV файлы с нужной структурой и фейковыми контрагентами/суммами.
- Конвертация JSON-ответов от API. Скармливаете нейросети кусок JSON от стороннего сервиса и просите: «Напиши код, который распарсит это в готовые структуры и массивы 1С».
- Генерация идей для оптимизации. Скидываете алгоритм, который выполняется 40 минут, и спрашиваете: «Где здесь узкие места? Как это ускорить?».
- Подбор правильных индексов. Показываете текст сложного запроса и структуру таблиц, а ИИ подсказывает, каких индексов не хватает базе для его быстрого выполнения.
- Написание подробных комментариев. Идеально для работы с легаси. Кидаете «портянку» чужого кода, а ИИ расписывает по блокам, что именно здесь происходит.
- Написание инструкций для пользователей. ИИ может перевести язык кода на язык бухгалтера. Он сам поймет логику алгоритма и напишет пошаговый мануал, как этим пользоваться в интерфейсе.
- Расшифровка логов Технологического журнала (ТЖ). ТЖ - это боль для глаз. Просто скопируйте непонятный кусок лога с ошибкой или блокировкой и спросите: «Что здесь упало и почему?». ИИ переведет это на человеческий.
- Написание сложных выражений для СКД. Вычисляемые поля, хитрые итоги, функции работы с датами - ИИ отлично пишет формулы для компоновки данных, экономя время на поиск синтаксиса.
- Перевод кода с других языков на 1С. Нашли на StackOverflow крутой алгоритм шифрования или генерации хэша на Python или C#? Попросите ИИ переписать его на язык 1С.
- Разработка архитектуры webhook-ов и ботов. Поможет спроектировать HTTP-сервис в 1С для приема сообщений из Telegram или других систем, включая логику авторизации и правильных ответов (200 OK).
Итоги: Ложка дегтя, или Почему ИИ пока не заменит программиста
Искусственный интеллект - это невероятно мощный инструмент, но использовать его слепо категорически нельзя.
Нейросети подвержены галлюцинациям. ИИ может с умным видом:
- Выдумать несуществующую процедуру в БСП.
- Перепутать общие модули (предложить ОбщегоНазначения вместо СтроковыеФункцииКлиентСервер).
- Написать метод, который работал в платформе 8.2, но давно устарел.
- Допустить синтаксическую ошибку в сложном запросе.
Код от ИИ - это не готовый продукт, это черновик разработчика, который можно получить за 1 минуту времени. Вам всегда нужно пропустить этот код через конфигуратор, проверить синтаксис и логику.
Но согласитесь: поправить пару выдуманных процедур в готовом красивом запросе на 100 строк - это в разы быстрее, чем писать его с нуля, спотыкаясь о циклы и забытые индексы. ИИ не заберет нашу работу, но программисты, которые используют ИИ, точно заберут работу у тех, кто по старинке теряет половину рабочего дня на форумах.
Вступайте в нашу телеграмм-группу Инфостарт