anti_patterns

anti_patterns is a cursor rule for Cursor from Desko77/cursor-1c-skills. It costs 0 tokens per session (3,326 once invoked), scanned A, original, MIT.

A collection of 1C coding mistakes that commonly cause slow database work or poor performance. It includes examples such as running a database query inside a loop or reading object fields one by one.

In plain words
What is it for?
Use it when reviewing or improving 1C code that reads from the database. It focuses on query structure, object field access, and other listed performance problems.
Why use it?
It helps prevent code that makes many unnecessary database requests or loads more data than needed.

Cursor rule for Cursor

Written for Cursor: a Cursor rule (.mdc).

Good fit Use it when reviewing or improving 1C code that reads from the database. It focuses on query structure, object field access, and other listed performance problems.

Compare 6 cursor rules from other repositories ↓
Install with agentmods
npx agentmods add rules/desko77/cursor-1c-skills/anti_patterns
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Clone the repo
git clone --depth 1 https://github.com/Desko77/cursor-1c-skills

Made for: Cursor.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for anti_patterns

README.md
[![agentmods](https://agentmods.dev/badge/rules/desko77/cursor-1c-skills/anti_patterns/github.svg)](https://agentmods.dev/rules/desko77/cursor-1c-skills/anti_patterns)
Your own site
<a href="https://agentmods.dev/rules/desko77/cursor-1c-skills/anti_patterns"><img src="https://agentmods.dev/badge/rules/desko77/cursor-1c-skills/anti_patterns/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for anti_patterns

Your own site · 80×15
<a href="https://agentmods.dev/rules/desko77/cursor-1c-skills/anti_patterns"><img src="https://agentmods.dev/badge/rules/desko77/cursor-1c-skills/anti_patterns.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Nothing until a file matches its globs; then the whole rule loads.
When invoked 3,326 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.03326
Opus 5.5 $0.00000 $0.01330
Sonnet 5.5 $0.00000 $0.00665
Haiku 4.5 $0.00000 $0.00333

Measured 1mo ago against content hash 27a6563b4f84, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

anti_patterns scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

rules/anti_patterns.mdc · 113 lines

How it starts

The opening of the file, as written. The whole thing — 113 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Анти-паттерны и рекомендации по производительности 1С

Таблица триггеров каталога дефектов генерируется из карточек скила 1c-code-review скриптом tools/gen_catalog_index.py и обновляется только через карточки. Подробности каждого анти-паттерна - триггер, законная форма, важность, способ чинить - в карточке каталога с тем же идентификатором. Прежняя нумерация пунктов этого файла сохранена колонкой Псевдоним: ссылки вида п.N читаются по ней.

Каталог дефектов

Секция генерируется tools/gen_catalog_index.py по карточкам каталога скила 1c-code-review; между маркерами не правится. Колонка Псевдоним сохраняет прежнюю нумерацию пунктов этого файла: ссылки вида п.N читаются по ней. Подробности - в карточке каталога с тем же идентификатором.

Идентификатор Псевдоним Важность Триггер
CLIENT-01 п.6 (anti_patterns.md) Major Из клиентской процедуры подряд вызывается несколько серверных функций для одной операции
CLIENT-02 п.7 (anti_patterns.md) Major Серверная функция модуля формы с директивой НаСервере не обращается к реквизитам формы
CLIENT-03 Major В цикле клиентской процедуры вызывается серверная функция
CLIENT-04 Major Для сообщения пользователю вызывается Сообщить() вместо ОбщегоНазначения.СообщитьПользователю
CLIENT-05 Major В клиентском коде вызван синхронный или модальный метод: Вопрос, Предупреждение, ОткрытьЗначение, семейство Ввести, синхронные методы HTTPСоединения - либо оператор Перейти в клиентском модуле
EXT-01 Major Тело заимствованной процедуры расширения изменено напрямую, без перехватчика
EXT-02 Critical Перехватчик &Вместо не вызывает ПродолжитьВызов(), и полная замена типового метода не заявлена в шапке как намеренная
EXT-03 Minor Процедура расширения названа без префикса расширения
EXT-04 Major В Rights.xml роли расширения есть блок прав вида Enum.ИмяПеречисления
FORM-01 Critical Локальная переменная объявлена с именем реквизита формы и получает значение
FORM-02 Major Правка формы оставила ссылку на удаленное: обработчик события указывает на отсутствующий в модуле метод, элемент не имеет пути к данным после удаления реквизита, код модуля обращается к удаленному элементу через Элементы
META-01 Major У двух объектов метаданных в исходниках один и тот же uuid
MODEL-01 п.11 (anti_patterns.md) Minor Более четырех уровней вложенности условий и циклов в одной процедуре
MODEL-02 Critical Набор записей с замещающей записью Записать(Истина) получает отбор не по всем ключевым измерениям регистра
MODEL-03 Major Виды характеристик создаются программно или регистры подсистемы свойств пишутся напрямую, минуя ее программный интерфейс
MODEL-04 Major Отказ операции возвращается выходным параметром-флагом или структурой результата, а вызывающий код продолжает работу без его проверки
MODEL-05 Minor Параметр-коллекция (структура, массив, таблица значений) объявлен без Знач, хотя метод ее не изменяет
MODEL-06 Minor Набор функций-помощников, каждая читает из одного и того же ответа одно поле и приводит его к нужному типу
MODEL-07 Major Ячейка табличного документа читается методом Получить(), которого у типа ТабличныйДокумент нет
MODEL-08 Major У объекта ПараметрыЗаписиJSON, созданного без аргументов, значение задается присваиванием свойству
MODEL-09 Minor Выборка запроса в цикле собирается в массив структур с теми же полями, что и список полей запроса
MODEL-10 Major Ключ соответствия строится склейкой нескольких значений в строку через разделитель
MODEL-11 Minor Обращение к реквизиту собственной конфигурации обложено проверкой его наличия через метаданные
MODEL-12 Minor Результат вызова своей функции читается через точку в нескольких местах метода вместо сохранения в переменную
MODEL-13 Minor Во всех точках вызова метод получает одно и то же значение параметра, а умолчания в сигнатуре нет
MODEL-14 Major Цепочка Если-ИначеЕсли из трех и более веток по значению или типу не имеет ветки Иначе
MODEL-15 Major Полю ссылочного типа присваивается примитив: пустая строка, ноль или булево
MODEL-16 Critical Правка удаляет метод модуля, а вызовы его из других процедур того же модуля остаются
MODEL-17 Major В сравнении или арифметике слева и справа стоит одно и то же выражение: Если А = А, Итог - Итог, Сумма / Сумма; в конкатенации два плюса подряд; переменной присваивается она сама
MODEL-18 Major Блок Исключение пуст или завершается без записи в журнал регистрации и без повторного вызова исключения
MODEL-19 Major Тело регламентного задания выполняет записи без защиты от повторного запуска: документы и движения создаются заново при каждом выполнении, нет отбора необработанных данных и проверки уже созданных записей
MODEL-20 Major Обработчик ПриЗаписи, ПередЗаписью или набора записей выполняет побочные действия - заполнение реквизитов, движения, сообщения, вызовы внешних сервисов - без выхода при ОбменДанными.Загрузка
MODEL-21 Major Серверный код датирует бизнес-операцию вызовом ТекущаяДата() без параметров
MODEL-22 Major Внутри цикла Для Каждого по коллекции вызывается удаление элемента этой же коллекции: Строки.Удалить(Строка)
PERF-01 п.1 (anti_patterns.md) Critical В цикле создается Новый Запрос или выполняется Выполнить() на каждой итерации
PERF-02 п.2 (anti_patterns.md) Critical У ссылочной переменной подряд читается несколько реквизитов через точку
PERF-03 п.9 (anti_patterns.md) Minor В цикле вызывается функция с одинаковыми аргументами, результат не сохраняется
PERF-04 п.10 (anti_patterns.md) Minor Два вложенных цикла ищут совпадение ключей между коллекциями
PERF-05 Minor Внутри цикла читается константа или разыменовывается предопределенный элемент, хотя значение не зависит от итерации
PERF-06 Minor НайтиПоНаименованию или НайтиПоКоду ищет элемент, от которого зависит работа механизма
PERF-07 Major Код получает имя временного файла или строит свой путь в каталоге временных файлов, пишет туда и завершает работу без удаления
PERF-08 Major Создается соединение с внешним ресурсом - HTTPСоединение, FTPСоединение, WSОпределения, WSПрокси, ИнтернетПочтовыйПрофиль - или вызывается ожидание завершения фонового задания без ограничения времени ожидания
PERF-09 Major Интерактивный вызов выполняет обработку, рассчитанную на большой объем данных: серверный метод формы или обработки в одном вызове обходит тысячи записей, строит большие отчеты, читает внешние сервисы - без запуска фонового задания и индикации прогресса
PROC-01 Major В отчете заявлено выполнение проверки (проверено, работает, исправлено) без команды прогона и его результата
PROC-02 Major Вывод "код компилируется" сделан по загрузке или выгрузке конфигурации, валидатору XML или анализатору, который модули не компилирует
PROC-03 Major Правка удаляет из исходного кода проверки редких и граничных случаев, а добавленные операции записи выполняются без чтения результата
QUERY-01 п.3 (anti_patterns.md) Critical В списке полей SELECT стоит вложенный ВЫБРАТЬ в скобках
QUERY-02 п.4 (anti_patterns.md) Major Условие на измерение виртуальной таблицы стоит в ГДЕ, а не в параметрах таблицы
QUERY-03 п.5 (anti_patterns.md) Major Запрос без ПЕРВЫЕ читает таблицу целиком, когда обработка использует часть строк
QUERY-04 Major Через точку читается поле составного типа без ВЫРАЗИТЬ
QUERY-05 Minor Из ссылки в списке полей читается Наименование только ради отображения
QUERY-06 Major В разделе ИЗ соединение выполняется с вложенным ВЫБРАТЬ в скобках
QUERY-07 Major В разделе ИЗ соединение выполняется напрямую с виртуальной таблицей
QUERY-08 Major Условия одной таблицы в ГДЕ соединены через ИЛИ по разным полям
QUERY-09 Minor Пакеты объединены через ОБЪЕДИНИТЬ без слова ВСЕ при отсутствии дубликатов
QUERY-10 Major Условия ГДЕ заданы по полям, пропускающим первые поля индекса таблицы
QUERY-11 Minor Ограничение выборки задано отбором настроек СКД, текст запроса набора без условия
QUERY-12 Minor Из полей правой таблицы ЛЕВОГО СОЕДИНЕНИЯ значения читаются без ЕСТЬNULL
QUERY-13 Major Таблица значений со строковой колонкой без КвалификаторыСтроки передается параметром в запрос и соединяется с таблицей базы
QUERY-14 Critical В разделе ГДЕ стоит вложенный ВЫБРАТЬ, ссылающийся на поле внешнего запроса
QUERY-15 Major Временная таблица помещена без ИНДЕКСИРОВАТЬ ПО и в том же пакете участвует в соединении по этим полям
QUERY-16 Critical Псевдоним поля или таблицы в запросе совпадает со служебным словом языка запросов
QUERY-17 Major Псевдоним источника в запросе совпадает с именем колонки или табличной части, видимыми в том же запросе
QUERY-18 Minor В запросе стоит ПЕРВЫЕ N, а секции УПОРЯДОЧИТЬ ПО нет
SEC-01 Critical Значение подставляется в текст запроса сложением строк вместо параметра
SEC-02 Critical УстановитьПривилегированныйРежим(Истина) или метод привилегированного общего модуля читает либо изменяет данные, состав которых задан параметрами от пользователя, и результат уходит пользователю или изменение делается от его имени - без явной проверки права до операции
SEC-03 Critical В коде встречается пароль, токен или ключ строковым литералом
SEC-04 Major Данные из файла, HTTP-сервиса или другой базы используются без проверки структуры и типов
SEC-05 Major Строка из внешних данных конкатенацией собирается в HTML-документ или поле HTML формы
SEC-06 Critical На сервере выполняется код или программа, не входящая в конфигурацию: Выполнить или Вычислить над строкой, собранной из внешних данных; подключение внешней компоненты; запуск внешнего приложения или команды системы - без безопасного режима и без проверки входных данных
TXN-01 п.8 (anti_patterns.md) Major НачатьТранзакцию() вызывается внутри блока Попытка
TXN-02 Major Между НачатьТранзакцию() и Попытка стоят операторы
TXN-03 Major После ЗафиксироватьТранзакцию() внутри Попытка стоят еще операторы
TXN-04 Major В блоке Исключение до ОтменитьТранзакцию() стоят другие операторы
TXN-05 Major Блок Исключение кода с транзакцией завершается без ВызватьИсключение
TXN-06 Major Внутри ПередЗаписью, ПриЗаписи или ОбработкаПроведения вызывается НачатьТранзакцию()
TXN-07 Major БлокировкаДанных устанавливается после чтения данных, по которым принимается решение
TXN-08 Minor Блокировка устанавливается без значений отбора или по всей таблице
TXN-09 Major Две операции захватывают одни и те же ресурсы в разном порядке
TXN-10 Major Между НачатьТранзакцию() и ЗафиксироватьТранзакцию() выполняются диалоги, обращения к внешним системам или запись в файлы
TXN-11 Major Запись документа и его проведение объединены в одну явную транзакцию

Read the full file on GitHub · 113 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago Changed · -244 lines 27a6563b4f84
  2. 2mo ago First seen · 357 lines · 0 tokens per session scan A 7f289eada8bc

Subscribe to this mod's changes

anti_patterns is a cursor rule published in the GitHub repository Desko77/cursor-1c-skills (73 stars, last pushed 8d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 3,326 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.