Глава 5 руководства «Вайбкодинг в 1С и Битрикс24». Общие главы — про постановку задачи и проверку кода — там же.
Коротко
Помощник на 1С ошибается заметно чаще, чем на популярных языках. Не потому что 1С сложнее, а потому что кода на 1С в открытом доступе мало. Модели учились в основном на английском коде из открытых репозиториев, а разработка на 1С почти вся закрытая и русскоязычная.
Практический вывод простой: на 1С вайбкодинг работает, но доля кода, который надо переделывать, выше. Проверять надо строже, а задачи давать мельче.
Почему на 1С труднее
- Два разных языка в одной задаче. Встроенный язык и язык запросов устроены по-разному. Помощник их путает: пишет в запросе то, что работает только в коде модуля.
- Язык запросов похож на SQL, но это не SQL. Сходство обманывает. Помощник тянет привычные конструкции из SQL, которых в 1С нет.
- Клиент и сервер разделены. Директивы компиляции определяют, где выполняется процедура. Обращение к базе из клиентского контекста — классическая ошибка, и помощник допускает её постоянно, потому что в других языках такого разделения нет.
- Русские имена. Встроенный язык русскоязычный. Помощник иногда сползает на английские синонимы или смешивает их в одном модуле.
- Версии платформы. То, что появилось в свежих версиях, помощник может не знать. Обратное тоже бывает: предлагает давно устаревшее.
Главная беда: выдуманные методы
Это самая частая и самая опасная ошибка на 1С. Помощник вызывает метод, которого в платформе не существует. Имя выглядит правдоподобно, стиль совпадает с настоящими методами, документация к нему «как будто есть».
Такой код не запускается, и это хорошая новость: ошибка вылезает сразу. Плохая новость в том, что на исправление уходит время, а помощник, которого попросили починить, часто предлагает другой несуществующий метод.
Что делать: держать рядом синтакс-помощник платформы и проверять по нему каждое незнакомое имя. Это быстрее, чем спорить с помощником.
Пять ошибок, которые помощник делает на 1С регулярно
Это не список всех возможных ошибок, а те, что повторяются чаще всего. Узнав их в лицо, вы будете ловить большую часть проблем ещё при чтении кода.
1. SQL вместо языка запросов 1С
Самая частая. Помощник видит, что вы просите запрос, и пишет на SQL — потому что SQL он знает несравнимо лучше.
Как выглядит: в тексте запроса появляются SELECT, FROM, WHERE, LEFT JOIN, GROUP BY. В 1С это ВЫБРАТЬ, ИЗ, ГДЕ, ЛЕВОЕ СОЕДИНЕНИЕ, СГРУППИРОВАТЬ ПО.
Иногда получается смесь: половина конструкций правильная, половина нет. Такое читается особенно плохо, потому что глаз цепляется за знакомое и пропускает чужое.
2. Конструкции, которых в языке запросов нет
Отдельный случай предыдущей ошибки, но коварнее: помощник берёт функцию из SQL, для которой в 1С есть аналог с другим именем.
LIMITилиTOP— в 1С этоВЫБРАТЬ ПЕРВЫЕ 10.CASE WHEN ... THEN ... ELSE ... END— в 1СВЫБОР КОГДА ... ТОГДА ... ИНАЧЕ ... КОНЕЦ.ISNULLилиCOALESCE— в 1СЕСТЬNULL.SUBSTRING— в 1СПОДСТРОКА.ORDER BY— в 1СУПОРЯДОЧИТЬ ПО.
Ошибка вылезает при проверке запроса, так что до данных не доходит. Но время съедает: помощник, которого попросили исправить, нередко заменяет одну несуществующую конструкцию на другую.
3. Обращение к базе из клиентского контекста
Классика, которую помощник допускает постоянно, потому что в других языках разделения на клиент и сервер просто нет.
Как выглядит: процедура помечена &НаКлиенте, а внутри обращение к Справочники, Документы или выполнение запроса. Так нельзя: эти объекты доступны только на сервере.
Обратная ошибка тоже встречается: в процедуре &НаСервере помощник вызывает диалог или показывает предупреждение пользователю. На сервере интерфейса нет.
Как ловить: при чтении кода первым делом смотреть на директиву над процедурой и сверять с тем, что внутри.
4. Запрос внутри цикла
Помощник пишет понятный человеку код: перебрать строки таблицы, для каждой сходить в базу за данными. Работает. На десяти строках.
На десяти тысячах это десять тысяч обращений к базе вместо одного запроса. Система не падает — она просто становится очень медленной, и виноватым назначают «1С тормозит».
Как ловить: искать обращения к базе внутри Для Каждого. Правильный путь — один запрос, который сразу вернёт всё нужное.
5. Выдуманные методы
Помощник вызывает метод, которого у объекта нет. Имя правдоподобное, стиль совпадает с настоящими методами платформы, выглядит убедительно.
Такой код не запускается, и это спасает: ошибка вылезает сразу. Опасность в другом — на исправление уходит время, а помощник в ответ часто предлагает следующий несуществующий метод.
Как ловить: держать открытым синтакс-помощник платформы и проверять по нему каждое незнакомое имя. Это занимает секунды и надёжнее любого спора с помощником.
Если вы собираете такие случаи у себя — записывайте их. Разборов реальных ошибок помощника на 1С в открытом доступе почти нет, и это самое ценное, что можно опубликовать по теме.
Что отдавать помощнику на 1С
По убыванию отдачи.
- Запросы к данным. Собрать выборку по условиям, соединить таблицы, сгруппировать. Результат виден сразу, ошибка ловится проверкой на реальных данных.
- Обработки для разовых задач. Перенести данные, найти расхождения, массово поправить реквизит. Живут один раз, цена ошибки ограничена.
- Разбор чужого кода. Объяснить, что делает модуль, доставшийся от предыдущего разработчика. Здесь помощник хорош даже на 1С: понимать чужое ему проще, чем писать новое.
- Черновик печатной формы или отчёта. Структуру набросает, оформление доводите руками.
- Комментарии и описание к готовому коду. Скучная работа, которую никто не любит.
Что не отдавать
- Расчёты, где важна каждая копейка. Зарплата, налоги, себестоимость, взаиморасчёты.
- Проведение документов и движения по регистрам. Ошибка здесь портит учётные данные, и обнаруживается это при закрытии месяца.
- Всё, что меняет структуру конфигурации. Про это следующая глава.
- Код, который должен выдержать нагрузку. Помощник напишет запрос в цикле, и на тысяче строк это ляжет.
Как ставить задачу на 1С
К четырём частям из главы про постановку задачи добавляются три вещи, специфичные для платформы.
- Назовите версию платформы и конфигурацию. «1С:Предприятие 8.3, Управление торговлей» — иначе получите усреднённый ответ.
- Скажите, где должен выполняться код. Модуль объекта, общий модуль, модуль формы, клиент или сервер. Без этого помощник выберет наугад.
- Опишите метаданные, которые участвуют. Имена справочников, документов, регистров и их реквизитов. Помощник не видит вашу конфигурацию и будет выдумывать имена, если их не дать.
Проверка на 1С: что смотреть отдельно
Помимо общего порядка из главы про проверку.
- Запросы в цикле. Самая частая проблема с производительностью. Работает на десяти записях, кладёт базу на десяти тысячах.
- Обращение к базе из клиента. Проверьте директивы компиляции.
- Работа с датами. Границы периода, конец дня, часовые пояса.
- Пустые ссылки. Помощник обычно пишет код так, будто реквизит всегда заполнен.
- Права доступа. Код, который работает у администратора и падает у кладовщика.
Всё руководство одним файлом
25 страниц, PDF. Девять глав: от постановки задачи до проверки кода. Оставьте почту — пришлём ссылку и продублируем её здесь.