Cursor IDE для 1С. Кодревью и рефакторинг с помощью AI

21.04.25

Разработка - Рефакторинг и качество кода

Цель статьи: кратко показать инструмент и возможности Cursor IDE.

Основные возможности Cursor IDE

  • Главное - это AI чат-помощник с поддержкой русского языка (с помощью него можно задавать вопросы и вносить правки в код)
  • Автодополнение и подсказки 1С
  • Автоматический рефакторинг (может внести изменения в код и обосновать, почему так сделал, переименование переменных и т.п.)
  • Проверка качества кода 1С (поиск узких мест, ошибки и т.п.).

 

Подготовка 1С

  1. Выгружаем код конфигурации 1С в файлы в папку (Конфигурация - Выгрузить конфигурацию в файлы)

 

Подготовка Cursor IDE

  1. Скачиваем и устанавливаем Cursor IDE с сайта (без VPN и регистрации 🙃)
  2. Для удобства навигации по метаданным 1С ставим плагин
  3. Для подсветки синтаксиса 1С как вариант ставим плагин
  4. Опционально можно поставить плагин для выбора темы оформления

 

Работа в Cursor IDE

Запускаем и выбираем папку с файлами конфигурации

 

 

Работа с AI чат - помощником

  1. Открываем нужный файл с кодом
  2. Пишем текстом в AI чате, что хотим сделать с кодом/проверить 

 

Пример 1. Рефакторинг к стандартам 1С

Псевдо-код расчета вознаграждения менеджерам

 

Промт-запросы в AI чате:

  1. Добавь комментарии к коду
  2. Сделай рефакторинг, учти стандарты от 1С и алгоритмическую сложность

 

Код до рефакторинга

Перем ТаблицаПродаж;  // Глобальная переменная (риск утечки памяти)

// Рассчитывает вознаграждение менеджеров (плохой пример)
Функция РассчитатьВознаграждения_Плохо(Месяц, Год)
    // Каждый раз загружает все продажи (медленно)
    ТаблицаПродаж = ПолучитьПродажиЗаПериод(Месяц, Год);  // Нет кеширования
    
    // Создаём таблицу для результатов (лишний расход памяти)
    ТаблицаРезультатов = Новый ТаблицаЗначений;
    ТаблицаРезультатов.Колонки.Добавить("Менеджер");
    ТаблицаРезультатов.Колонки.Добавить("Вознаграждение");
    
    // Проходим по всем менеджерам (O(n))
    Для каждого Менеджер Из Справочники.Менеджеры.Выбрать() Цикл
        СуммаПродаж = 0;
        
        // Вложенный цикл по продажам (O(n²)) – медленно!
        Для каждого СтрокаПродажи Из ТаблицаПродаж Цикл
            Если СтрокаПродажи.Менеджер = Менеджер.Ссылка Тогда
                СуммаПродаж = СуммаПродаж + СтрокаПродажи.Сумма;
            КонецЕсли;
        КонецЦикла;
        
        // Жёстко закодированные проценты (негибко)
        Если СуммаПродаж > 1000000 Тогда
            Процент = 0.1;
        ИначеЕсли СуммаПродаж > 500000 Тогда
            Процент = 0.07;
        Иначе
            Процент = 0.05;
        КонецЕсли;
        
        Вознаграждение = СуммаПродаж * Процент;
        
        // Добавляем результат
        НоваяСтрока = ТаблицаРезультатов.Добавить();
        НоваяСтрока.Менеджер = Менеджер.Наименование;
        НоваяСтрока.Вознаграждение = Вознаграждение;
    КонецЦикла;
    
    Возврат ТаблицаРезультатов;   
КонецФункции

 

Код после рефакторинга

// Быстрый расчёт с группировкой и кешированием
Функция РассчитатьВознаграждения_Оптимально(Месяц, Год)
    // Кешируем запрос, если данные уже загружались
    СтатическиеДанные = Неопределено;
    Если СтатическиеДанные = Неопределено Тогда
        СтатическиеДанные = ПолучитьПродажиЗаПериод(Месяц, Год);
    КонецЕсли;
    
    // Группируем продажи по менеджерам (O(n))
    ПродажиПоМенеджерам = Новый Соответствие;
    Для каждого СтрокаПродажи Из СтатическиеДанные Цикл
        Ключ = СтрокаПродажи.Менеджер;
        Если Не ПродажиПоМенеджерам.Получить(Ключ) Тогда
            ПродажиПоМенеджерам.Вставить(Ключ, 0);
        КонецЕсли;
        ПродажиПоМенеджерам[Ключ] = ПродажиПоМенеджерам[Ключ] + СтрокаПродажи.Сумма;
    КонецЦикла;
    
    // Получаем настройки процентов (гибко)
    Настройки = ПолучитьНастройкиВознаграждения();  // Например, из справочника
    
    // Формируем результаты
    ТаблицаРезультатов = Новый ТаблицаЗначений;
    ТаблицаРезультатов.Колонки.Добавить("Менеджер");
    ТаблицаРезультатов.Колонки.Добавить("Вознаграждение");
    
    Для каждого Ключ, Сумма Из ПродажиПоМенеджерам Цикл
        Менеджер = Справочники.Менеджеры.НайтиПоСсылке(Ключ);
        Процент = РассчитатьПроцент(Сумма, Настройки);  // Логика вынесена отдельно
        Вознаграждение = Сумма * Процент;
        
        НоваяСтрока = ТаблицаРезультатов.Добавить();
        НоваяСтрока.Менеджер = Менеджер.Наименование;
        НоваяСтрока.Вознаграждение = Вознаграждение;
    КонецЦикла;
    
    Возврат ТаблицаРезультатов;
КонецФункции

// Определяет процент по настройкам
Функция РассчитатьПроцент(Сумма, Настройки)
    Для каждого СтрокаНастройки Из Настройки Цикл
        Если Сумма >= СтрокаНастройки.Минимум Тогда
            Возврат СтрокаНастройки.Процент;
        КонецЕсли;
    КонецЦикла;
    Возврат 0.05;  // Значение по умолчанию
КонецФункции

 

Пример 2. Более сложный пример рефакторинга логики

Псевдо-код записи нового пользователя ИБ

 

Промт-запросы в AI чате:

  1. Добавь комментарии к коду
  2. Сделай рефакторинг

 

Код до рефакторинга 

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

    // Для нового пользователя
    Если ЭтоНовый() Тогда
        // Проверяем, не существует ли уже пользователь с таким именем
        ТекущийПользователь = ПользователиИнформационнойБазы.НайтиПоИмени(СокрЛП(Наименование));  
        Если ТекущийПользователь <> Неопределено Тогда
            Отказ = Истина;     
            УстановитьПривилегированныйРежим(Ложь);
            Возврат;  
        КонецЕсли;
        
        // Создаем нового пользователя ИБ
        ТекущийИдентификатор = ЗаписатьПользователяИБ(); 
        Если ТекущийИдентификатор = Неопределено Тогда
            Отказ = Истина;      
            УстановитьПривилегированныйРежим(Ложь);
            Возврат;  
        КонецЕсли; 
        
        // Сохраняем идентификатор созданного пользователя
        ИдентификаторПользователяИБ = ТекущийИдентификатор;                                       
    // Для существующего пользователя    
    Иначе    
        // Проверяем, существует ли пользователь ИБ
        ТекущийПользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ);  
        Если ТекущийПользователь <> Неопределено Тогда
            Отказ = Истина;     
            УстановитьПривилегированныйРежим(Ложь);
            Возврат;  
        КонецЕсли;
        
        // Обновляем данные пользователя ИБ
        ТекущийИдентификатор = ЗаписатьПользователяИБ(); 
        Если ТекущийИдентификатор = Неопределено Тогда
            Отказ = Истина;      
            УстановитьПривилегированныйРежим(Ложь);
            Возврат;  
        КонецЕсли; 
        
        // Обновляем идентификатор пользователя
        ИдентификаторПользователяИБ = ТекущийИдентификатор; 
                
    КонецЕсли;   
    
    // Очищаем табличную часть с ролями
    Роли.Очистить();
    
    // Отключаем привилегированный режим
    УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

// Создает или обновляет пользователя информационной базы
//
// Возвращает:
//   УникальныйИдентификатор - идентификатор созданного пользователя
//   Неопределено - в случае ошибки
//
Функция ЗаписатьПользователяИБ()  
    Попытка
        // Создаем нового пользователя ИБ
        ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
        
        // Заполняем основные свойства
        ПользовательИБ.Имя = СокрЛП(Наименование);
        ПользовательИБ.ПолноеИмя = СокрЛП(Наименование);
        ПользовательИБ.АутентификацияОС = Ложь;
        ПользовательИБ.АутентификацияOpenID = Ложь;
        ПользовательИБ.АутентификацияСтандартная = Истина;
        ПользовательИБ.ЗапрещеноИзменятьПароль = Ложь;
        ПользовательИБ.ПоказыватьВСпискеВыбора = Истина;
        ПользовательИБ.Пароль = "";

        // Добавляем выбранные роли
        Для Каждого Роль Из Роли Цикл 
            // Пропускаем невыбранные роли
            Если Роль.Выбрано = Ложь Тогда
                Продолжить;
            КонецЕсли;   
            
            // Ищем метаданные роли
            РезультатПоиска = Метаданные.Роли.Найти(Роль.Имя);  
            Если РезультатПоиска = Неопределено Тогда
                Продолжить;
            КонецЕсли; 
            
            // Добавляем роль пользователю
            ПользовательИБ.Роли.Добавить(РезультатПоиска);
        КонецЦикла;     
        
        // Сохраняем пользователя
        ПользовательИБ.Записать(); 
        
        // Возвращаем идентификатор созданного пользователя
        Возврат ПользовательИБ.УникальныйИдентификатор;    
    Исключение   
        // В случае ошибки возвращаем Неопределено
        Возврат Неопределено;    
    КонецПопытки;        
КонецФункции;

 

Код после рефакторинга

Процедура ПередЗаписью(Отказ)
    // Включаем привилегированный режим для выполнения административных операций
    УстановитьПривилегированныйРежим(Истина);  
    
    // 1. Проверка наличия выбранных ролей
    Если НЕ ПроверитьРоли(Отказ) Тогда
        Возврат;
    КонецЕсли;

    // 2. Проверка и создание/обновление пользователя ИБ
    Если НЕ ПроверитьИСоздатьПользователя(Отказ) Тогда
        Возврат;
    КонецЕсли;   
    
    // Очищаем табличную часть с ролями
    Роли.Очистить();
    
    // Отключаем привилегированный режим
    УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

// Проверяет, что для пользователя выбрана хотя бы одна роль
//
// Параметры:
//   Отказ - Флаг отказа в записи (выходной параметр)
//
// Возвращает:
//   Булево - Истина, если проверка пройдена успешно
//
Функция ПроверитьРоли(Отказ) Экспорт
    РезультатПоиска = Роли.НайтиСтроки(Новый Структура("Выбрано", Истина));    
    Если РезультатПоиска.Количество() = 0 Тогда 
        Отказ = Истина;
        Возврат Ложь;
    КонецЕсли;
    
    Возврат Истина;
КонецФункции

// Проверяет и создает/обновляет пользователя информационной базы
//
// Параметры:
//   Отказ - Флаг отказа в записи (выходной параметр)
//
// Возвращает:
//   Булево - Истина, если операция выполнена успешно
//
Функция ПроверитьИСоздатьПользователя(Отказ) Экспорт
    // Получаем текущего пользователя (если существует)
    ТекущийПользователь = ПолучитьТекущегоПользователя();
    Если ТекущийПользователь <> Неопределено Тогда
        Отказ = Истина;     
        УстановитьПривилегированныйРежим(Ложь);
        Возврат Ложь;  
    КонецЕсли;
    
    // Создаем/обновляем пользователя ИБ
    ТекущийИдентификатор = ЗаписатьПользователяИБ(); 
    Если ТекущийИдентификатор = Неопределено Тогда
        Отказ = Истина;      
        УстановитьПривилегированныйРежим(Ложь);
        Возврат Ложь;  
    КонецЕсли; 
    
    // Сохраняем идентификатор пользователя ИБ
    ИдентификаторПользователяИБ = ТекущийИдентификатор;
    Возврат Истина;
КонецФункции

// Получает пользователя информационной базы по данным справочника
//
// Возвращает:
//   СправочникСсылка - Найденный пользователь или Неопределено
//
Функция ПолучитьТекущегоПользователя() Экспорт
    Если ЭтоНовый() Тогда
        // Для нового пользователя - поиск по имени
        Возврат ПользователиИнформационнойБазы.НайтиПоИмени(СокрЛП(Наименование));
    Иначе
        // Для существующего - поиск по уникальному идентификатору
        Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ);
    КонецЕсли;
КонецФункции

// Создает или обновляет пользователя информационной базы
//
// Возвращает:
//   УникальныйИдентификатор - Идентификатор созданного пользователя
//   Неопределено - В случае ошибки
//
Функция ЗаписатьПользователяИБ() Экспорт
    Попытка
        // 1. Создание базового объекта пользователя
        ПользовательИБ = СоздатьПользователяИБ();
        
        // 2. Назначение ролей пользователю
        НазначитьРолиПользователю(ПользовательИБ);
        
        // 3. Сохранение пользователя
        ПользовательИБ.Записать(); 
        
        Возврат ПользовательИБ.УникальныйИдентификатор;    
    Исключение   
        // В случае ошибки возвращаем Неопределено
        Возврат Неопределено;    
    КонецПопытки;        
КонецФункции

// Создает объект пользователя информационной базы с базовыми настройками
//
// Возвращает:
//   ПользовательИнформационнойБазы - Созданный объект пользователя
//
Функция СоздатьПользователяИБ() Экспорт
    ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
    
    // Настройка основных параметров пользователя
    ПользовательИБ.Имя = СокрЛП(Наименование);
    ПользовательИБ.ПолноеИмя = СокрЛП(Наименование);
    ПользовательИБ.АутентификацияОС = Ложь;
    ПользовательИБ.АутентификацияOpenID = Ложь;
    ПользовательИБ.АутентификацияСтандартная = Истина;
    ПользовательИБ.ЗапрещеноИзменятьПароль = Ложь;
    ПользовательИБ.ПоказыватьВСпискеВыбора = Истина;
    ПользовательИБ.Пароль = "";
    
    Возврат ПользовательИБ;
КонецФункции

// Назначает роли пользователю информационной базы
//
// Параметры:
//   ПользовательИБ - Объект пользователя информационной базы
//
Процедура НазначитьРолиПользователю(ПользовательИБ) Экспорт
    Для Каждого Роль Из Роли Цикл 
        // Пропускаем невыбранные роли
        Если Роль.Выбрано = Ложь Тогда
            Продолжить;
        КонецЕсли;   
        
        // Ищем метаданные роли
        РезультатПоиска = Метаданные.Роли.Найти(Роль.Имя);  
        Если РезультатПоиска = Неопределено Тогда
            Продолжить;
        КонецЕсли; 
        
        // Добавляем роль пользователю
        ПользовательИБ.Роли.Добавить(РезультатПоиска);
    КонецЦикла;
КонецПроцедуры

 

Итого по результатам

  • бегло узнали возможности Cursor IDE
  • взглянули на свой код со стороны

 

Идеи для автоматизации 

  • Использовать Cursor IDE для написания скриптов автоматизации тестирования, CI/CD
  • Использование для анализа технологического журнала и других логов
  • Поиск циклических зависимостей и т.п.

 

Выводы

  • Cursor IDE не заменит 1С:Конфигуратор
  • Поможет с ревью кода и автоматизацией рутинных операций

 

Спасибо за внимание!

Лайк, подписка, комментарий 😎

AI автоматизация кодревью оптимизация разработка скрипты

См. также

Рефакторинг и качество кода Программист Платформа 1С v8.3 Абонемент ($m)

Конфигурация для хранения стандартов и сохранения их в формате PDF.

2 стартмани

05.05.2025    1969    comptr    4    

12

Рефакторинг и качество кода Программист Стажер Бесплатно (free)

Разбираем принципы SOLID в контексте 1С: как укротить хаос в коде, сделать его гибким, расширяемым и предсказуемым. Практические примеры, механизмы платформы помогающие в этом и шаги к чистой разработке для новичков и профи.

21.04.2025    5764    RPGrigorev    30    

48

Рефакторинг и качество кода Обновление 1С Программист Платформа 1С v8.3 Бесплатно (free)

Методика, описанная в статье, выработана при переезде с 1С:ДО 2.1 на 1С:ДО 3.0. Может также применяться при переходе с 1С:УПП на 1C:ERP, 1C:ERP на 1C:ERP УХ и т. п. Учтены все необходимые доработки при переезде на новую конфигурацию и предупреждены возможные ошибки.

21.04.2025    1210    PROSTO-1C    4    

4

Рефакторинг и качество кода Программист Платформа 1С v8.3 Россия Бесплатно (free)

Диалог "Вопрос" использовался очень интенсивно в старых версиях кода и также его используют в УФ довольно часто. Иногда очень неудобно использовать рефакторинг через асинхронные вызовы ПоказатьВопрос и ВопросАсинх по разным причинам. Есть ещё одно решение, как избежать больших переделок кода, когда Вы не планируете его использовать где-то на других платформах и Веб-клиентах.

26.03.2025    924    ksuman    7    

3

HighLoad оптимизация Рефакторинг и качество кода Технологический журнал Программист Платформа 1С v8.3 Россия Бесплатно (free)

Технологии бегут вперёд, но боль производительности 1С остаётся вечной: инфраструктура, код или настройки? Пока ИИ не научился чинить всё «на лету», мы автоматизировали ключевое — диагностику. Читайте статью — показываем, как превратить хаос диагностики в понятные графики и цифры. Спойлер: это работает даже если ваша 1С — «чёрный ящик» на старом железе.

19.03.2025    3621    EFSOL_oblako    9    

9

Рефакторинг и качество кода Программист Стажер Платформа 1С v8.3 Бесплатно (free)

В процессе обучения студенты бывает, что по невнимательности или торопливости допускают кучу ошибок. Далеко не у всех  преподавателей есть на это время, но новички допускают поначалу прилично  много ошибок и как всегда идет "крик души" в общем чате обучения. Поэтому я решила  немного рассказать и показать в надежде, что данная статья кому-нибудь  "облегчит страдания" студента.

17.03.2025    3024    Bukaska    5    

8

Нейросети Рефакторинг и качество кода Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

Искусственный интеллект в код-ревью – это не фантастика, а реальность, которая уже сегодня помогает разработчикам улучшать свои проекты. Расскажем о том, как ИИ может автоматически находить баги и предлагать улучшения, экономя ваше время и ресурсы.

11.03.2025    6474    mrXoxot    52    

55

Рефакторинг и качество кода Тестирование QA Программист Платформа 1С v8.3 Бесплатно (free)

В последней статье по докладу Александра Кириллова, с которым он выступил на конференции INFOSTART TECH EVENT 2024, обсудим особенности тестирования после завершения рефакторинга платформеннозависимого кода

11.03.2025    1049    it-expertise    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. amiralnar 9 22.04.25 08:36 Сейчас в теме
Можно свести статью к одному предложению: "Установим Cursor и чат AI будет нам что-то делать с нашим кодом."
Ни реальных сценариев, ни сравнения с разными моделями, ни капли совести у автора.
paybaseme; Itilive.ru; amoarok; itmind; KroVladS; bayselonarrend; kirillkr; +7 7 Ответить
2. dimzfresh 78 22.04.25 08:59 Сейчас в теме
(1) По поводу глубины обзора - нет и не планировалось.
Первым же предложением в статье написано, что это краткий обзор ⚠

Cursor IDE - может анализировать исходники в директории.
Другие AI чаты про другое.

В примерах «до» и «после» изменения происходили по текстовому запросу в чате.
В рамках псевдо кода результат с комментариями явно дает понять, что изменилось.

Мне нравится ваша цитата про то, что «AI будет что-то нам делать..»!
Подход верный, доверяй, но проверяй результат👍
3. wonderboy 513 22.04.25 09:43 Сейчас в теме
Результаты могут сильно отличаться в зависимости от выбранной модельки.

Если кому-то интересно подробнее о Cursor для 1С, с кейсами, можете посмотреть мои обзоры:
https://vk.com/video-219359576_456239021

https://vk.com/video-219359576_456239022

Вот еще на aider:

https://vk.com/video-219359576_456239019
Prepod2003; AlexanderEkb; Krotov_Valery; Legin; klaus38; friskdb; +6 Ответить
4. dimzfresh 78 22.04.25 10:01 Сейчас в теме
5. NikitaIvanchenko 284 22.04.25 10:06 Сейчас в теме
Я просто оставлю это на всякий случай =)
https://github.com/yeongpin/cursor-free-vip
artbear; user1811009; wonderboy; dimzfresh; +4 Ответить
6. o.nikolaev 217 22.04.25 10:20 Сейчас в теме
Выглядит интересно.

Но для таких "рефакторингов" нужно обвешивать функциональность тестами, как минимум юнитами.

Т.е., чтобы "рефакторинг" не повлиял на результат.

Ха-ха, в этом случае задача разработчика станет - разработка тестов, а не программирование :) Что-то в котелке кипит, что-то АИ шебуршит - правильно? - катим в прод. Будущее уже наступило. Устаревших программистов (это я про себя, прежде всего) - на удобрения!
frkbvfnjh; zqzq; dimzfresh; +3 Ответить
13. zqzq 25 22.04.25 14:13 Сейчас в теме
(6) Сейчас уже и тесты тоже ИИ пишет. Разработчик превращается в тимлида Искуственных Интеллектов :)

Т.е. начальные программисты становятся менее востребованными, а опытные -- наоборот, так что всё нормально, кому-то нужно будет code review делать.

P.S. Навайбкодил сегодня алгоритм 1С с помощью о3-mini из https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1
7. Serg O. 306 22.04.25 11:02 Сейчас в теме
повсеместное использование ИИ
уже превращается в ИТ-юмор про ИИ

ручками надо уметь писать, а не на ИИ расчитывать
и так уже IDE (даже Конфигуратор) помогают
и помнят все функции/типы/переменные за нас
8. o.nikolaev 217 22.04.25 11:10 Сейчас в теме
(7) Мое мнение другое. ИИ сейчас только в самом начале. Идея изначально сильная - потому что она основана на языке, на работе с языком, по обнаружение таких свойств и особенностей языка - которые раньше невозможно было увидеть, "потрогать", понять. Мир разработки не будет прежним, он изменится. Пока не знаю как. Но уверен в том что не исчезнет человек, а у него появится еще более мощный инструмент, еще более мощный помощник. Это надо осваивать, этому надо учиться, надо привыкать.
klaus38; wonderboy; Serg O.; +3 Ответить
31. Ndochp 104 25.04.25 16:38 Сейчас в теме
(8) В 1998 я так думал про рациональную розу, Together и прочие визуальные фишки разработки. А теперь если только ER диаграмма ERP из СППР в кошмарном сне приснится.
32. o.nikolaev 217 27.04.25 08:45 Сейчас в теме
(31) В 1998-то и я так думал про Розу. Да и у всех, кратковременно, было такое воодушевление. Сейчас, конечно, смешно. С учетом печального опыта Розы ИИ-ху, полагаю, не считаю прям "заменой", написал "Помощник".
19. dreamadv 158 22.04.25 19:32 Сейчас в теме
(7) У вас есть машина ? А зачем ? Можно же на лошади ездить, топить дровами использовать масленые лампы для света ). Это все сопротивление прогрессу...
29. Serg O. 306 24.04.25 13:33 Сейчас в теме
(19) объясните это тем, кто на до сих пор на 7.7 сидит

я про то, что не всё и не всегда можно на ИИ переложить.
Как помощника использовать - возможно да,
но под жёстким контролем Человека.

Тут уже написали, что варианты, которые предлагает ИИ не совсем
или совсем не соответствуют тому, что ты хотел получить.

ИИ ещё в зачаточном состоянии, давно уже есть и были шаблоны кода
можно свои шаблоны делать и так же легко их использовать

Crtl + Q и Ctrl + Пробел очень помогают в работе, что-то подобное и надо от ИИ
но только по "нажатию" а не постоянно
30. dreamadv 158 25.04.25 02:30 Сейчас в теме
(29) У нас есть 7.7. у одного из клиентов и вы не поверите но claude 3.7 с ней прекрасно справляется если еще пихнуть примеров своих же исходников.
Вы как в той фразе "Не пробовал но осуждаю" курсор который тут в статье прежде чем вы нажмете ОК делает сравнение было стало и вы визуально видите что какие строки удалены какие добавлены. Можете частично принять изменение. Что-то типо сравнение конфигурации при обновленении.
27. s22 23 24.04.25 13:03 Сейчас в теме
(7) а чтосто последние годы вы пишете ручками?
я например ручку держать разучился
28. Serg O. 306 24.04.25 13:28 Сейчас в теме
(27) ручками - я имел ввиду - своими руками

писать ручкой на бумаге - это прошлый век
9. quazare 3925 22.04.25 11:15 Сейчас в теме
Мне нравится, когда в статье много кода, а не белиберды «по улучшению личностного уровня»… поэтому, оцениваю эту статью положительно!
ardn; dimzfresh; +2 Ответить
10. ixijixi 2013 22.04.25 12:21 Сейчас в теме
(9) Вот только код после рефакторинга ИИ придётся переписать по новой. Пока очень сыро. Может, для комментирования кода и сгодится.
Прикрепленные файлы:
sats2003; maksa2005; MrFlanker; Serg O.; quazare; dimzfresh; +6 Ответить
11. Turgor 22.04.25 12:57 Сейчас в теме
Кэширование тоже вызывает вопросики :)

Функция РассчитатьВознаграждения_Оптимально(Месяц, Год)
    // Кешируем запрос, если данные уже загружались
    СтатическиеДанные = Неопределено;
    Если СтатическиеДанные = Неопределено Тогда
        СтатическиеДанные = ПолучитьПродажиЗаПериод(Месяц, Год);
    КонецЕсли;
fancy; zqzq; MrFlanker; stopa85; +4 Ответить
14. ixijixi 2013 22.04.25 14:21 Сейчас в теме
(11) Даааа, кэширование огонь!
dimzfresh; +1 Ответить
15. dimzfresh 78 22.04.25 14:28 Сейчас в теме
(11) специально оставил «как есть» то, что нагенерил AI :)

AI идеи предложил годные, но не без косяков в синтаксисе
18. dreamadv 158 22.04.25 19:30 Сейчас в теме
(15) Claude 3.7 был выбран как Agent, Ask? Еще не плохо 1С переваривает Gemini 2.5 и DeepSeek (в режиме агента не работает) Gemini с его контекстным окном может в себя принять оооочень много правил :) например документацию по программированию в 1С
dimzfresh; +1 Ответить
12. quazare 3925 22.04.25 13:21 Сейчас в теме
К ии отношусь с иронией, но это только пока… никакого дельного результата на данный момент не видел, чтобы оценить это все
tsmult; DmitryKSL; +2 Ответить
16. Diversus 2335 22.04.25 16:35 Сейчас в теме
(12) Язык 1С AI-модели знают плохо, т.к. обучались на этом мало, а вот с другими языками ситуация иная. Использовал Cursor AI для backend приложения и API на golang, вполне годно пишет код. Поэтому я тут иронии не вижу, вижу, что обучалось это все по весьма слабой кодовой базе :)
В остальном соглашусь, это самое начало пути, дальше будет гораздо лучше.

Отдельно отмечу, что общение с моделями - это целое искусство.
zqzq; dimzfresh; +2 Ответить
17. quazare 3925 22.04.25 17:16 Сейчас в теме
(16) ну так все правильно - настоящий 1с-ник должен быть тупой и жадный, соответсвенно ии модели, обучаясь по канонам, должны становиться такими же.
KroVladS; +1 Ответить
20. dimzfresh 78 22.04.25 19:54 Сейчас в теме
(17) ребят, вы правы!

Но повторюсь, цель была - заинтересовать и бегло показать инструмент)

Не все коллеги еще так прокачались и в теме AI инструментов.

Меня обрадовало, что несколько бывших коллег заинтересовались темой AI, хотя до этого ничего не использовали 😎

П.С. Как составлять эффективно промт запросы и обучать модели, это достойно отдельного внимания.

П.С. В одном из комментариев выше есть видео разборы моделей и сценариев
22. dreamadv 158 22.04.25 23:18 Сейчас в теме
(20) Попробуйте ) писать рыбу документации по 1С коду и скриншотам. Очень не плохо справляется.
dimzfresh; +1 Ответить
21. Peltik2 22.04.25 23:00 Сейчас в теме
Да, всё же в 1С он ещё пока слаб, видимо действительно датасет был маленький для обучения, потому что на Python вполне сносно кодит.
Пробовал небольшой эксперимент провести. Засунул в Cursor пустой проект и небольшую документацию с примерами на VBA, попросил его изучить и написать аналог. Если он начинал прям с чистого листа, то полная фигня получалась, у него проблемы с созданием объектов типа справочников и доков. Тогда использовал другой подход, попросил для начала создать план со структурой, руками создал объекты и пустые формы по его плану и дал ему возможность кодить. Ну, у него даже что-то получилось, даже элементы на форму смог допилить (правда всё в столбик, хотя на PyQt вполне сносно дизайн и формы, а там сложнее чем в 1С), качество кода конечно такое себе, но сам факт, что может хоть что-то приятно удивил. Пробовал на Claude 3.7, надо на 3.5 попробовать, говорят он пока лучше чем 3.7 в кодинге, типа новый ещё недоученый :)
23. wonderboy 513 23.04.25 11:36 Сейчас в теме
(21)
Пробовал на Claude 3.7, надо на 3.5 попробовать, говорят он пока лучше чем 3.7 в кодинге, типа новый ещё недоученый


Да я бы не сказал. 3.5 уже не включаю, только на 3.7 сижу в thinking режиме. Все у него нормально, не хуже 3.5 точно работает.
24. Peltik2 23.04.25 12:28 Сейчас в теме
(23) ну, я пробовал когда только 3.7 появилась, тогда 3.7 мне показалась хуже, да и во всяких сравнительных тестах она была хуже. Теперь да, 3.7 норм, по крайней мере в Python, а на 1С надо пробовать, надо ещё для разврата на других моделях попробовать, сравнить результат :)
wonderboy; +1 Ответить
25. wonderboy 513 23.04.25 12:59 Сейчас в теме
(24) на других хуже гораздо. Если кода в контексте много - ещё могут ничего так результат выдать, просто по аналогии с существующим кодом. Но без кода в контексте сочиняют..
Хотя вот у OpenAI новые модели 4.1 вышли, говорят заточены на код. Вот их не пробовал ещё, может лучше..
26. dreamadv 158 23.04.25 17:27 Сейчас в теме
(25) попробуйте Gemini 2.5 flash в Google AI Studio да и в курсоре она есть.
wonderboy; +1 Ответить
33. user700522_lerner584 06.05.25 09:11 Сейчас в теме
А это что?
Для каждого Ключ, Сумма Из ПродажиПоМенеджерам Цикл

Получается, я использую инструмент, который из рабочего кода, пускай и менее качественного, делает нерабочий? (сколько она ещё подобных и, возможно, менее очевидных косяков в него заложит). Т.е. бизнес-процесс, если я правильно понял, получается такой:
1. Пишем код;
2. Рефакторим его с помощью данного инструмента;
3. Теперь сами рефакторим то, что нарефакторил ИИ;
Далее вдруг мы что-то в п.3 опять не по "фен-шуй" написали, переходим к п.2 и так пока не надоест -).
Тут, скорее основной сценарий использования - это просто посмотреть на замечания ИИ, отдельно принять решение о необходимости внесения правки по каждому из них и уже самостоятельно внести в исходный код.
Оставьте свое сообщение