Пн – Вс: 8–21 по НСК

📞+7 383 380-81-89
Telegram Макс
Записаться на демо
ГлавнаяВайбкодинг в 1С и Битрикс24: руководство для разработчиковВайбкодинг в 1С: встроенный язык и запросы

Вайбкодинг в 1С: встроенный язык и запросы

Глава 5 руководства «Вайбкодинг в 1С и Битрикс24». Общие главы — про постановку задачи и проверку кода — там же.

Коротко

Помощник на 1С ошибается заметно чаще, чем на популярных языках. Не потому что 1С сложнее, а потому что кода на 1С в открытом доступе мало. Модели учились в основном на английском коде из открытых репозиториев, а разработка на 1С почти вся закрытая и русскоязычная.

Практический вывод простой: на 1С вайбкодинг работает, но доля кода, который надо переделывать, выше. Проверять надо строже, а задачи давать мельче.

Почему на 1С труднее

  • Два разных языка в одной задаче. Встроенный язык и язык запросов устроены по-разному. Помощник их путает: пишет в запросе то, что работает только в коде модуля.
  • Язык запросов похож на SQL, но это не SQL. Сходство обманывает. Помощник тянет привычные конструкции из SQL, которых в 1С нет.
  • Клиент и сервер разделены. Директивы компиляции определяют, где выполняется процедура. Обращение к базе из клиентского контекста — классическая ошибка, и помощник допускает её постоянно, потому что в других языках такого разделения нет.
  • Русские имена. Встроенный язык русскоязычный. Помощник иногда сползает на английские синонимы или смешивает их в одном модуле.
  • Версии платформы. То, что появилось в свежих версиях, помощник может не знать. Обратное тоже бывает: предлагает давно устаревшее.

Главная беда: выдуманные методы

Это самая частая и самая опасная ошибка на 1С. Помощник вызывает метод, которого в платформе не существует. Имя выглядит правдоподобно, стиль совпадает с настоящими методами, документация к нему «как будто есть».

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

Что делать: держать рядом синтакс-помощник платформы и проверять по нему каждое незнакомое имя. Это быстрее, чем спорить с помощником.

Язык запросов 1С — это не SQL: шесть конструкций, которые помощник путает чаще всего
Язык запросов 1С — это не SQL: шесть конструкций, которые помощник путает чаще всего

Пять ошибок, которые помощник делает на 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. Назовите версию платформы и конфигурацию. «1С:Предприятие 8.3, Управление торговлей» — иначе получите усреднённый ответ.
  2. Скажите, где должен выполняться код. Модуль объекта, общий модуль, модуль формы, клиент или сервер. Без этого помощник выберет наугад.
  3. Опишите метаданные, которые участвуют. Имена справочников, документов, регистров и их реквизитов. Помощник не видит вашу конфигурацию и будет выдумывать имена, если их не дать.

Проверка на 1С: что смотреть отдельно

Помимо общего порядка из главы про проверку.

  • Запросы в цикле. Самая частая проблема с производительностью. Работает на десяти записях, кладёт базу на десяти тысячах.
  • Обращение к базе из клиента. Проверьте директивы компиляции.
  • Работа с датами. Границы периода, конец дня, часовые пояса.
  • Пустые ссылки. Помощник обычно пишет код так, будто реквизит всегда заполнен.
  • Права доступа. Код, который работает у администратора и падает у кладовщика.

Всё руководство одним файлом

25 страниц, PDF. Девять глав: от постановки задачи до проверки кода. Оставьте почту — пришлём ссылку и продублируем её здесь.

    ← Все девять глав руководства