Skip to content

FAQ, советы и подводные камни ​

← Предыдущий | 🗺 Оглавление | Следующий →

Актуализировано: сентябрь 2026.

В файле три части. Первая — ответы на частые вопросы новичков и тех, кто уже работает. Вторая — советы практиков. Третья — типовые ошибки с примерами кода «Плохо → Хорошо» и ссылками на стандарты разработки. Версии, даты и законы сверены на 29.09.2026. Если данные вторичные или есть только оценка авторов, это оговорено в тексте.

Метки у подводных камней: 🔴 обязательно знать · 🟡 желательно · 🔵 по контексту (инхаус, продукт, проект).

Содержание ​


🎓 Старт и обучение ​

1. С чего начать, если я никогда не программировал? ​

  • Поставьте учебную платформу (вопрос 2) и пройдите этапы 0–1 из 02_Timeline.md.
  • Начните с книги М.Г. Радченко «1С:Программирование для начинающих…» (2-е изд.). Затем переходите к «1С:Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы» (М.Г. Радченко, Е.Ю. Хрусталева, 3-е изд., 2023). Полный список книг — в 05_Resources.md.
  • Параллельно решайте задачи на коллекциях (проект P0 в 07_Projects.md). Официальная модель компетенций 1С MC-6-001 ждёт уже от Junior умения объяснить базовые алгоритмы поиска и сортировки. Тестовые задания работодателей тоже часто начинаются с алгоритмической разминки.
  • Регулярность важнее объёма: час в день даёт больше, чем 10 часов раз в неделю.

2. Где бесплатно взять платформу для учёбы? ​

  • Учебная версия — бесплатно на online.1c.ru после анкеты. Доступны учебные 8.5.1 и 8.3.27 для Windows, Linux и macOS. Ограничения: только файловый вариант, ограничено число сеансов, только некоммерческое использование; полный перечень смотрите на странице загрузки. Описание есть и на uc1.1c.ru.
  • Community-лицензия для разработчиков — на developer.1c.ru. Лицензия срочная и привязана к компьютеру, её условия смотрите на портале.
  • 1C:EDT бесплатна, скачивается на edt.1c.ru после регистрации.
  • Полные дистрибутивы выдаёт releases.1c.ru, и только по подписке ИТС. Сайт v8.1c.ru информационный, скачать платформу там нельзя.

3. На какой версии учиться — 8.3.27 или 8.5.1? ​

  • Ветка 8.3 закончилась на 8.3.27, версии 8.3.28 не было. Все новые версии выходят как 8.5.x. Рабочие линии на сентябрь 2026 — 8.3.27 и 8.5.1.
  • 8.5.1 — это возможности 8.3.27 плюс новый интерфейс. Язык, объекты метаданных и запросы те же, поэтому учебник по 8.3 подходит.
  • Большие типовые (БП, ЗУП, УТ, КА, ERP, УХ, ДО) в 2026 году работают на 8.3.27. УНФ и «Розница» начиная с 3.0.13 перешли на 8.5.1. Держите установленными обе версии: курс проходите на той, под которую он написан, а учебную базу можно вести на 8.5.1.

4. Сколько времени займёт путь до первой работы? ​

  • Ориентир авторов: этапы 0–4 («Минимальный путь») — около 6–9 месяцев при 15–20 часах в неделю, весь путь — 12–18 месяцев. Это оценка, а не норматив.
  • Переходите к следующему этапу по критериям выхода, а не по календарю (02_Timeline.md).
  • Поиск первой работы в 2025–2026 годах может занять заметно больше времени, чем учёба (вопрос 21).

5. Нужно ли знать бухгалтерию? ​

  • Да, на уровне основ. Модель MC-6-001 ждёт от Junior понимания процессов клиента: торговли, производства, бухгалтерского и налогового учёта, кадров и зарплаты.
  • В тестовых заданиях 2024–2026 годов встречаются проводки вроде Д10–К60, Д90–К10, Д62–К90.
  • Минимум: план счетов, двойная запись, основные проводки, НДС. Остальное — в 10_Domain_and_Law.md.
  • Становиться бухгалтером не нужно. Нужно уметь задать бухгалтеру правильный вопрос и понять ответ.

6. Нужен ли английский? ​

  • Для встроенного языка и Конфигуратора — нет: язык и документация русскоязычные.
  • Техническое чтение на английском пригодится для трекера 1C:EDT и плагинов на GitHub, документации PostgreSQL, Git и Docker, англоязычной базы знаний 1С kb.1ci.com и материалов OWASP.

7. Курсы или самостоятельно? ​

  • Оба пути рабочие. Официальные курсы проводят УЦ №1 и центры сертифицированного обучения. Бесплатные ресурсы и открытые программы перечислены в 05_Resources.md. Большая часть материалов ИТС доступна только по платной подписке.
  • Главный критерий курса — практика с проверкой: мини-конфигурация, отчёт на СКД, печатная форма, обмен. Если курс только рассказывает, добирайте практику проектами P1–P9 из 07_Projects.md.
  • Работодатель смотрит на портфолио и сертификат 1С:Профессионал, а не на сертификат курса.

8. Где спросить, если застрял? ​

  • Сообщества: чат @e1c_community, «Жёлтый клуб», форум Миста, Инфостарт. Канал @esres_1c публикует вакансии, вопросы туда не пишут.
  • Ошибки 1C:EDT — трекер 1C-Company/1c-edt-issues. Каталог ошибок платформы — bugboard.v8.1c.ru, просмотр требует подписки ИТС.
  • Хороший вопрос содержит версию платформы и конфигурации, минимальный пример, текст ошибки и то, что вы уже попробовали.

🧰 Конфигуратор, EDT и Git ​

9. С чего начинать — с Конфигуратора или с 1C:EDT? ​

  • С Конфигуратора. На нём построены книги, курсы и экзамены, в нём работают сопровождение и франчайзи.
  • 1C:EDT осваивайте на этапах 4–6. Для конфигураций уровня ERP нужен ПК с 16 ГБ ОЗУ и больше и SSD (требования EDT).
  • Версии EDT нумеруются как ГГГГ.N, и год в номере не совпадает с годом выхода. Стабильная ветка — 2026.1 (патч 2026.1.3). 2026.2 пока релиз-кандидат (Eclipse 2025-12, Java 25). Ставьте стабильный патч, а релиз-кандидат — только для экспериментов. Проекты 8.5 EDT поддерживает начиная с 2025.1.
  • Учиться можно и сразу в EDT: есть официальная книга «Практическое пособие разработчика. Используем 1C:EDT» (Радченко, Хрусталева, изд. 2, 2026).

10. Правда, что без EDT командная разработка невозможна? ​

  • Нет. Конфигуратор жив и развивается, хранилище конфигурации работает. Обычные формы вообще редактируются только в Конфигураторе (FAQ EDT).
  • EDT даёт полноценный Git-процесс: ветки, слияния, код-ревью. В продуктовых, инхаус- и крупных проектных командах это обычная практика. В сопровождении и у франчайзи по-прежнему часто работают в Конфигураторе с хранилищем. В каталоге Landscape1C за контекстом «франчайзи» не отмечены такие «продвинутые» инструменты, как EDT, GitLab, Jenkins, Vanessa Automation и YAxUnit.
  • Вывод: нужны обе среды. Подробнее — в 01_Strategy.md.

11. Как подружить хранилище конфигурации и Git? ​

  • gitsync (сообщество, 3.8.0) переносит историю хранилища в Git: каждая версия хранилища становится коммитом.
  • 1С:ГитКонвертер — официальный бесплатный инструмент 1С: переносит хранилище в Git в формате EDT.
  • Оба инструмента работают в одну сторону: из хранилища в Git.
  • Для учебных проектов хватит выгрузки конфигурации в XML (из Конфигуратора или командой ibcmd infobase config export) и обычных коммитов.

12. Можно ли писать на 1С в VS Code? ​

  • Официального расширения VS Code от фирмы 1С нет. Сообщество выпускает расширение «Language 1C (BSL)» и BSL Language Server: подсветка, навигация, диагностика по стандартам.
  • VS Code удобен для чтения кода, скриптов OneScript и работы с ИИ-агентами. Основная среда всё равно Конфигуратор или EDT: там метаданные, формы и отладчик.

🧱 Платформа 8.5 и 1С:Элемент ​

13. 8.5 — это новая платформа? Всё придётся переучивать? ​

  • Нет. 8.5 — новая нумерация той же платформы: 8.5.1 = 8.3.27 + новый интерфейс. Финальная 8.5.1 вышла 25.12.2025.
  • Новое в интерфейсе «Версия 8.5»: визуальный стиль, векторные картинки, тёмная тема, стандартный и компактный масштаб, в веб-клиенте — оконная система «В диалоговых окнах». Для перехода есть режимы совместимости «Такси. Разрешить Версия 8.5» и «Версия 8.5. Разрешить Такси».
  • Многие возможности, которые приписывают 8.5, появились раньше: немодальный режим — в 8.3.3, Асинх/Ждать — в 8.3.18, выбор алгоритма хеширования паролей и уведомления клиента — в 8.3.26, WebSocket-клиент — в 8.3.27.
  • 8.5.4 с 05.05.2026 существует только как тестовая версия, её новшества называйте «заявлено в тестовой версии». 8.5.5 в плане; по оценкам, выйдет ближе к 2027 году.

14. Когда типовые перейдут на 8.5? ​

  • УНФ и «Розница» начиная с 3.0.13 уже работают на 8.5.1. БП, ЗУП, УТ, КА, ERP, УХ и ДО в 2026 году работают на 8.3.27. Официального плана их перевода нет — следите за «Информацией об обновлениях» ИТС.
  • БСП выходит в двух редакциях: 3.1.12 (для 8.3.24–8.3.27) и 3.2.1 (только для 8.5.1). Обе обновлены 23–24.09.2026, функционально они почти одинаковы.
  • Попробуйте в учебной базе интерфейс «Версия 8.5» и переходные режимы. Этот опыт пригодится при адаптации форм.

15. Что такое 1С:Элемент и стоит ли учить его сейчас? ​

  • 1С:Предприятие.Элемент — самостоятельная платформа приложений. Актуальная версия — 10.0, в ней появились расширения. У Элемента своя БД, справочники, документы, регистры, транзакции, RLS (ключи доступа), HTTP- и SOAP-сервисы, планы обмена. Работает в облаке 1cmycloud.com или на собственной установке.
  • Язык — «язык 1С:Элемент» (в сообществе его называют xBSL, файлы .xbsl) со статической типизацией. Интерфейс описывается декларативно в YAML. HTML и JS встраиваются только через элемент КонтейнерHtml.
  • Спрос пока нишевый: 1 вакансия из 452 в выборке hh.ru за август–сентябрь 2026. Учётные типовые (БП, ЗУП, ERP) работают на платформе 8.
  • Сначала освойте платформу 8 (этапы 0–4), а Элемент берите как опциональную ветку (tracks/element-and-mobile.md). На технологии Элемента построена 1С:Шина, она пригодится в интеграциях.

🤖 ИИ в разработке ​

16. Заменит ли ИИ программиста 1С? ​

  • Лучше смотреть на измерения, а не на прогнозы. Открытый бенчмарк PRISM (прогон 25.09.2026, 57 моделей, 35 задач, код исполняется в 1С 8.3.27) показывает:
    • лучшие модели решают 85–100% задач;
    • GigaChat и YandexGPT — 0–13%;
    • малые локальные модели — 0–27%.
  • ИИ ускоряет рутину: шаблонный код, черновики запросов, тесты, документацию. Постановку задачи, учёт, архитектуру, проверку и ответственность за результат он не забирает.
  • Требования к джуну меняются: нужно читать и проверять чужой, в том числе сгенерированный, код, знать стандарты и писать тесты. Подробно — в 09_AI_Development.md.

17. Что такое 1С:Напарник и как его получить? ​

  • Это ИИ-ассистент разработчика в 1C:EDT (англ. 1C:Workmate). Плагин входит в поставку EDT 2026. Умеет автодополнение, фоновый анализ кода и агентный чат, который правит код и метаданные.
  • Доступ — токен на code.1c.ai по учётной записи 1С:ИТС, нужна подписка ИТС. Условия доступа смотрите на code.1c.ai.
  • Сервис облачный: код уходит на серверы 1С. Версии для своего сервера нет. В Конфигураторе Напарника нет.

18. Какие ИИ-инструменты реально работают с 1С? ​

  • 1С:Напарник в EDT (вопрос 17).
  • Агентные IDE и CLI: Cursor, Claude Code, Codex, Copilot. Доступ к ним из России ограничен, а условия меняются, поэтому сначала проверьте правила работодателя.
  • MCP-серверы:
    • каталог MCP-серверов для 1С — Untru/1c-mcp;
    • встроенный MCP-сервер в Vanessa Automation (с 1.2.043.12);
    • экспериментальный режим MCP в BSL Language Server;
    • vrunner-mcp.
  • Правила и skills сообщества: cc-1c-skills, ai_rules_1c, 1c-ai-development-kit. Последний — набор skills для Claude Code под AGPL-3.0, а не «обученная модель».
  • Нейросети нередко выдумывают названия утилит, MCP-серверов и репозиториев. Прежде чем ставить инструмент из ответа ИИ, откройте репозиторий и проверьте дату последнего релиза, лицензию и активность разработки. Надёжный отправной пункт — каталог Untru/1c-mcp и список инструментов в 05_Resources.md.

19. Можно ли отдавать код и базу заказчика в ChatGPT, Claude или Напарник? ​

  • Это решает не разработчик, а политика работодателя и договор с клиентом. Код и данные клиента защищены NDA и режимом коммерческой тайны (98-ФЗ).
  • Персональные данные во внешнюю зарубежную LLM — это трансграничная передача по 152-ФЗ. Для ГИС и ИС госорганов с 01.03.2026 действует прямой запрет: п. 60 Приказа ФСТЭК № 117.
  • Напарник тоже облачный: код уходит на серверы 1С.
  • Безопасная схема: обезличенная копия базы, технический пользователь 1С только с правом чтения, никаких паролей и токенов в промптах и конфигурации агента. MCP — это транспорт, а не граница безопасности. Доступ ограничивают права пользователя 1С.

20. Как проверять код, который написал ИИ? ​

  • Прогоняйте его через конвейер: черновик ИИ → синтаксический контроль → BSL Language Server или плагин «1C:Code style V8» в EDT → тесты (YAxUnit, Vanessa Automation) → код-ревью человеком.
  • Сверяйте имена типов с синтакс-помощником: модели придумывают несуществующие API.
Что пишет ИИКак правильно
КомпоновщикНастроекDCSКомпоновщикНастроекКомпоновкиДанных, КомпоновщикМакетаКомпоновкиДанных, ПроцессорКомпоновкиДанных, ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент
ОбъектHTTPЗапросаHTTPСоединение + HTTPЗапрос → HTTPОтвет; в HTTP-сервисе — HTTPСервисЗапрос и HTTPСервисОтвет
«Client Notifications API»свойство УведомленияКлиента: ОтправитьУведомление и ПодключитьОбработчик (8.3.26+)
Вопрос() в управляемой формеПоказатьВопрос + ОписаниеОповещения или Ждать ВопросАсинх (8.3.18+)
MD5 среди алгоритмов паролейSHA-1, SHA-256, SHA-512, PBKDF2-HMAC-SHA256 (8.3.26+); MD5 в платформе нет
  • Типичные ошибки ИИ на BSL: запрос в цикле, отбор виртуальной таблицы в ГДЕ, обращение к базе в клиентском контексте, модальные вызовы, «проглоченное» исключение в транзакции. Все они разобраны ниже, в разделе «Подводные камни».

💼 Карьера и работа ​

21. Когда начинать искать работу? ​

  • Минимальный путь до первой работы — этапы 0–4. На стажировки и в первую линию поддержки можно откликаться раньше, после этапа 2 и сертификата 1С:Профессионал.
  • Рынок ИТ в 2025–2026 годах — рынок работодателя. В выборке hh.ru за август–сентябрь 2026 вакансий «без опыта» 5–7%, удалённый формат разрешают около половины вакансий 1С.
  • Входные позиции: стажёр-программист, «1С-разработчик (ученик)», консультант первой линии поддержки, программист у франчайзи. Чаще всего в профессию входят через франчайзи и сопровождение в своём городе.
  • Подробно — в 13_Career.md.

22. Франчайзи, инхаус, продукт или проект — куда идти новичку? ​

КонтекстЧем занимаютсяТипичный стекКому подходит
Франчайзисопровождение и обновление типовых у многих клиентов, внешние отчёты и обработки, обменыКонфигуратор, хранилище, типовые, БСПновичку: много разных задач и быстрый рост в учёте
Инхаусразвитие системы одной компаниито же + чаще EDT, Git, CIтем, кто хочет глубоко понять один бизнес
Продукттиражное решение или сервисEDT, Git, тесты, CI, код-ревьютем, кому важна инженерная культура
Проектвнедрение ERP и УХ, миграции, интеграцииERP/УХ, интеграции, шины, нагрузкапосле опыта с типовыми

Контексты взяты из каталога Landscape1C, колонка «Кому подходит» — мнение авторов. Подробнее — в 01_Strategy.md и 13_Career.md.

23. Какие типовые конфигурации изучать первыми? ​

  1. БП 3.0 — учебная база по учёту и регламентированной отчётности; у франчайзи встречается очень часто (оценка по вторичным источникам).
  2. УТ 11.5 — вход в линейку УТ 11.5 → КА 2.5 → ERP 2.5. У них одна кодовая база и синхронные номера сборок, поэтому, изучая УТ, вы изучаете архитектуру ERP.
  3. ЗУП 3.1 — для направления «зарплата и кадры».
  4. ERP 2.5 — чаще всего упоминается в вакансиях. С её архитектурой знакомьтесь уже на уровне Junior+ через УТ.
  5. УНФ 3.0 — малый бизнес; вместе с «Розницей» одна из первых типовых на 8.5.1 (с версии 3.0.13).

1С:Элемент — отдельная платформа, а не типовая конфигурация. Номера релизов смотрите на releases.1c.ru и в «Информации об обновлениях» ИТС.

24. Сколько платят и сколько лет до Middle? ​

  • Зарплаты приведены только в 13_Career.md: там таблица по выгрузке hh.ru за август–сентябрь 2026 с методикой и оговорками.
  • Официальная модель 1С MC-6-001 определяет уровни Junior, Middle и Senior через компетенции, сроков в ней нет. Шкалы вроде «Junior — 0–6 месяцев» ничем не подтверждены. В вакансиях «Middle» нередко означает 3–6 лет опыта, но встречается и 1–3 года.
  • Оценить свой уровень поможет матрица из 03_Competencies.md.

25. Нужно ли портфолио 1С-разработчику? ​

  • Да, особенно без опыта. Работодатели нередко просят сдать тестовое задание выгрузкой .dt со скриншотами или опубликовать решение на GitHub.
  • Храните исходники в XML или формате EDT, пишите README с постановкой задачи и скриншотами, .dt выкладывайте в Releases. Проекты и критерии приёмки — в 07_Projects.md.
  • Добавьте в резюме ссылку на «Паспорт квалификации 1С» из личного кабинета УЦ №1 (13_Career.md).

🏆 Экзамены ​

26. Нужен ли 1С:Профессионал и когда его сдавать? ​

  • Сдавайте после этапа 2. Формат по данным пяти вторичных источников: 14 вопросов, 30 минут, нужно не меньше 12 верных ответов. Перед экзаменом сверьте условия на 1c.ru/prof. Экзамены бывают по платформе, по конфигурациям, по технологическим вопросам и по эксплуатации ИС.
  • В вакансиях сертификат чаще «желателен», чем обязателен. Франчайзи сертификаты сотрудников нужны ещё и потому, что они учитываются в партнёрских статусах фирмы «1С» (04_Certifications.md).
  • Для подготовки есть учебное тестирование УЦ №1 и платный мобильный тренажёр 1С:НИК. НИК — это тренажёр, а не «официальная база ответов». Зазубренные ответы без понимания на собеседовании не помогут.

27. Стоит ли сдавать 1С:Специалист и можно ли сдавать его в EDT? ​

  • По желанию, после этапа 5. Это практический экзамен примерно на 4–5 часов. Задача решается на выданной каркасной конфигурации. Темы: оперативный учёт, бухгалтерский учёт, сложные периодические расчёты, бизнес-процессы, разработка формы.
  • Возможность сдать экзамен в EDT и дистанционно не подтверждена. Готовьтесь в Конфигураторе, а условия уточняйте в центре сертификации (1c.ru/spec).
  • Есть и другие ветки сертификации:
    • производительность: 1С:Профессионал по технологическим вопросам → 1С:Эксперт по технологическим вопросам (1С:Специалист для него не нужен);
    • администрирование: 1С:Профессионал по эксплуатации ИС → 1С:Эксплуататор.

🔧 Linux и инфраструктура ​

28. Нужно ли 1С-разработчику знать Linux и PostgreSQL? ​

  • На базовом уровне — да. Серверы 1С работают на Linux: Astra Linux, РЕД ОС, Альт, Debian, Ubuntu.
  • PostgreSQL для 1С используют только в специальных сборках: от 1С, Postgres Pro, ALT, managed-сервисы с суффиксом «-1c». Ванильный PostgreSQL не подходит. MS SQL Server тоже используется, но SQL Server 2016 снят с поддержки Microsoft 14.07.2026.
  • В коде учитывайте отличия Linux: регистр имён файлов, отсутствие UNC-путей, недоступность COM и OLE (внешние компоненты — только Native API), нужные шрифты. Пример — подводный камень 11.
  • Администрирование и DevOps — в tracks/administrator-operator.md.

29. Для учёбы нужна файловая или клиент-серверная база? ​

  • На этапах 0–3 хватит файловой базы. Учебная версия работает только в файловом варианте.
  • Блокировки, технологический журнал, нагрузку и профили безопасности изучают на клиент-сервере. Для такого стенда нужна лицензия на сервер; для личных экспериментов 1С предлагает лицензию для разработчиков (community) на developer.1c.ru, её условия и срок действия проверяйте на портале.
  • После установки сервера администратор кластера не задан, и кластером может управлять любой, кто к нему подключится. Сразу создайте администраторов центрального сервера и кластера (см. SECURITY.md).

📝 Законодательство и данные ​

30. Зачем программисту следить за законами? ​

  • Изменения законов — главный источник работы в сопровождении. 1С выпускает обновления типовых, а программист обновляет доработанные базы и проверяет расширения.
  • Что меняется в 2026–2027 годах:
    • НДС 22% с 01.01.2026 (425-ФЗ);
    • НДС на УСН: порог освобождения — 20 млн ₽ по доходам за 2025–2028 годы, 15 млн ₽ — за 2029 год, 10 млн ₽ — за 2030 год (228-ФЗ от 04.07.2026);
    • электронные перевозочные документы (ЭПД) обязательны с 01.09.2026;
    • маркировка: ТС ПИоТ и разрешительный режим на кассе;
    • цифровой рубль: первый этап с 01.09.2026 для крупнейших банков и торговцев с выручкой более 120 млн ₽;
    • ФСБУ 9/2025 «Доходы» и ФСБУ 10/2026 «Расходы» обязательны с отчётности 2027 года.
  • Проверяйте актуальную редакцию на consultant.ru и nalog.gov.ru. Подробно — в 10_Domain_and_Law.md.

31. Что программисту нужно знать о 152-ФЗ? ​

  • 152-ФЗ (персональные данные) и 98-ФЗ (коммерческая тайна) входят в модель компетенций 1С уже на уровне Junior.
  • На практике это значит:
    • копии баз для разработки и тестов обезличивайте;
    • не выносите выгрузки с персональными данными на личные устройства и во внешние сервисы;
    • пароли и токены храните в безопасном хранилище БСП, а не в коде и не в реквизитах форм.
  • Штрафы по 420-ФЗ оборотные: от 20 млн ₽ за повторную утечку и от 25 млн ₽ за спецкатегории и биометрию, максимум 500 млн ₽.
  • Справочник по безопасности для разработчика — SECURITY.md.

💡 Советы практиков ​

Порядок доработки типовой конфигурации, к которому сводятся советы 1 и 2:

  1. Сначала ищите готовое, потом пишите код. Проверьте, нет ли нужного в настройках типовой, в механизмах БСП или в стандарте. БСП настраивается через общие модули *Переопределяемый (в БСП 3.2.1 их 78), в расширении к ним добавляют обработчики &После. «Подписки на события» — объект платформы, а не механизм переопределения БСП.
  2. Думайте об обновлении с первой строки доработки. Используйте префикс расширения (Расш1_) у объектов и методов, &Перед и &После вместо &Вместо. После обновления проверяйте применимость расширений. Официальные исправления 1С тоже поставляются расширениями с назначением «Исправление». Обновление большой базы может идти часами, поэтому окно планируйте заранее.
  3. Работайте на копии. Резервную копию считайте рабочей, только если из неё удалось восстановиться. Обновления и эксперименты с настройками безопасности сначала проверяйте на копии.
  4. Стандарты и статический анализ — с первого проекта. Читайте its.1c.ru/db/v8std и проверяйте код BSL Language Server или плагином 1C:Code style V8. Чек-листы код-ревью — в 11_Checklists.md.
  5. Измеряйте, а не угадывайте. Прежде чем оптимизировать, снимите замер производительности в отладчике или технологический журнал. Без замера оптимизация часто ускоряет не тот участок.
  6. Git — с первого учебного проекта. Даже в Конфигураторе выгружайте конфигурацию в XML и коммитьте. Сообщение коммита должно объяснять, что и зачем изменено.
  7. Держите границу «клиент — сервер». Серверных вызовов — минимум, на клиент — только готовый результат. Права и данные проверяйте на сервере: серверные методы формы можно вызвать в обход клиентских проверок (#678).
  8. Уточняйте задачу до кода. Выясните, что считается готовым результатом, какие данные и права нужны, как проверить работу. Короткий план решения в комментарии к задаче экономит переделки.
  9. Спрашивайте учёт у бухгалтера. Уточните, какими проводками отражается операция и в каких отчётах её увидят. Знание основ учёта прямо требуется в вакансиях.
  10. ИИ — второй пилот. Всё, что написал ассистент, проходит тот же путь, что и ваш код: анализатор, тесты, ревью (вопрос 20).
  11. Ведите свою базу знаний. Записывайте решённые проблемы, удачные запросы и причины ошибок. Это пригодится и в работе, и на собеседовании (08_Interview.md).
  12. Держите рабочее место в порядке. Нужны две платформы (8.3.27 и 8.5.1), учебная база с демо-конфигурацией БСП и, с этапа 5, клиент-серверный стенд.
  13. Тестируйте поведение, а не только прокликивайте. Модульные тесты пишут на YAxUnit (запуск в EDT), сценарии .feature — для Vanessa Automation: это UI/E2E-тесты через клиент тестирования. Аналитик может описать сценарий, а разработчик реализует шаги. Тесты хранят в Git рядом с кодом и запускают в CI, например через vanessa-runner. Изменение интерфейса всё равно может потребовать правки сценариев.

⚡ Подводные камни: «Плохо → Хорошо» ​

Примеры упрощены: имена объектов условные, служебные проверки опущены. Каждый пример соответствует стандартам its.1c.ru/db/v8std. Номер стандарта указан в метке #NNN. В строке «Проверка» названы диагностики BSL Language Server, которые ловят ошибку автоматически.

1. Запрос в цикле ​

🔴 Этап 1 · Стандарт #436 · Проверка: CreateQueryInCycle

Каждый запрос — отдельное обращение к СУБД. На 1000 строк получается 1000 запросов.

bsl
// ❌ Плохо: запрос выполняется N раз (N — число строк таблицы)
Для Каждого Строка Из ТаблицаДокументов Цикл
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Остатки.КоличествоОстаток КАК КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК Остатки";
    Запрос.УстановитьПараметр("Номенклатура", Строка.Номенклатура);
    Выборка = Запрос.Выполнить().Выбрать();
    // ...
КонецЦикла;
bsl
// ✅ Хорошо: один запрос для всех строк, условие — в параметрах виртуальной таблицы
СписокНоменклатуры = ТаблицаДокументов.ВыгрузитьКолонку("Номенклатура");

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    Остатки.Номенклатура КАК Номенклатура,
    |    Остатки.КоличествоОстаток КАК КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура В (&СписокНоменклатуры)) КАК Остатки";
Запрос.УстановитьПараметр("СписокНоменклатуры", СписокНоменклатуры);
ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
  • Скрытая форма той же ошибки — обращение через точку в цикле: Строка.Номенклатура.ЕдиницаИзмерения читает объект из базы на каждой итерации. Нужные поля получайте в том же запросе.
  • Если позиций тысячи, передайте таблицу значений параметром и поместите её во временную таблицу (#777). Типы колонок у такой таблицы значений должны быть заданы явно.
  • Поле остатка называется <Ресурс>Остаток, например КоличествоОстаток. Поля Остаток у таблицы нет.

2. Условия на виртуальную таблицу в ГДЕ ​

🔴 Этап 2 · Стандарты #657, #733 · Проверка: VirtualTableCallWithoutParameters

Условие в ГДЕ применяется уже после того, как виртуальная таблица посчитана по всем складам и товарам.

bsl
// ❌ Плохо: остатки считаются по всей базе, отбор — потом
Запрос.Текст =
    "ВЫБРАТЬ
    |    Остатки.Номенклатура КАК Номенклатура,
    |    Остатки.КоличествоОстаток КАК КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
    |ГДЕ
    |    Остатки.Склад = &Склад";

// ✅ Хорошо: условие по измерению — в параметре виртуальной таблицы
Запрос.Текст =
    "ВЫБРАТЬ
    |    Остатки.Номенклатура КАК Номенклатура,
    |    Остатки.КоличествоОстаток КАК КоличествоОстаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК Остатки";
  • В параметры виртуальной таблицы передают условия по измерениям. Условия по ресурсам, например КоличествоОстаток < 0, остаются в ГДЕ.
  • В параметрах пишите простые условия. Подзапрос допустим с ограничениями из п. 2.2 стандарта #657: одна таблица без соединений, у временной таблицы — без ГДЕ.

3. Разыменование полей составного типа ​

🟡 Этап 3 · Стандарт #654 · Проверка: QueryNestedFieldsByDot

Поле Регистратор может ссылаться на десятки видов документов. Обращение Регистратор.Дата развернётся в SQL в соединение со всеми их таблицами.

bsl
// ❌ Плохо: неявное соединение со всеми таблицами документов-регистраторов
Запрос.Текст =
    "ВЫБРАТЬ
    |    Продажи.Регистратор.Номер КАК Номер,
    |    Продажи.Количество КАК Количество
    |ИЗ
    |    РегистрНакопления.Продажи КАК Продажи";

// ✅ Хорошо: ограничиваем тип через ВЫРАЗИТЬ и отбираем только нужные регистраторы
Запрос.Текст =
    "ВЫБРАТЬ
    |    ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Номер КАК Номер,
    |    Продажи.Количество КАК Количество
    |ИЗ
    |    РегистрНакопления.Продажи КАК Продажи
    |ГДЕ
    |    Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг";

Если данные регистратора нужны часто, стандарт предлагает хранить их в самом регистре: например, реквизит ДатаРегистратора заполняется при проведении. Дату операции обычно можно взять из поля Период.

4. РАЗРЕШЕННЫЕ не там, где нужно ​

🟡 Этап 5 · Стандарты #415, #485

У этой ошибки два варианта:

  • забыли РАЗРЕШЕННЫЕ в запросе для отчёта или списка. При ограничении доступа на уровне записей (RLS) пользователь получит ошибку нарушения прав, потому что без этого слова действует режим «все»;
  • поставили РАЗРЕШЕННЫЕ в запрос, от которого зависят расчёт или проведение. Тогда недоступные записи молча выпадут, и у разных пользователей получатся разные суммы.
bsl
// ✅ Запрос для отображения пользователю: скрываем недоступные записи
Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    Контрагенты.Ссылка КАК Ссылка,
    |    Контрагенты.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты";

// ✅ Запрос для расчёта: без РАЗРЕШЕННЫЕ. Если прав не хватает — прерываем операцию
Если Не ПравоДоступа("Чтение", Метаданные.РегистрыНакопления.ПартииТоваров) Тогда
    ВызватьИсключение НСтр("ru = 'Недостаточно прав для расчета себестоимости.'");
КонецЕсли;

Привилегированный режим отключает RLS. Включайте его точечно и не отдавайте полученные в нём данные на клиент. Права в коде проверяйте функцией ПравоДоступа, а не РольДоступна (#737).

Ещё одна ошибка из той же области — пользовательская строка, склеенная с текстом запроса. Значения передавайте только параметрами, а для ПОДОБНО экранируйте спецсимволы шаблона: параметр их не экранирует (#726). Пример и безопасное хранение паролей — в SECURITY.md.

5. Обращение к базе на клиенте и лишние серверные вызовы ​

🔴 Этап 1 · Стандарты #636, #487, #630 · Проверка: ServerSideExportFormMethod, TransferringParametersBetweenClientAndServer

bsl
// ❌ Плохо: менеджеры объектов на тонком и веб-клиенте недоступны — код не выполнится
&НаКлиенте
Процедура НайтиТовар(Команда)
    Товар = Справочники.Номенклатура.НайтиПоНаименованию("Товар");
КонецПроцедуры
bsl
// ✅ Хорошо: внеконтекстный серверный вызов, параметр по значению, на клиент — только ссылка
&НаКлиенте
Процедура НайтиТовар(Команда)
    Товар = НоменклатураПоНаименованию("Товар");
    Если Не ЗначениеЗаполнено(Товар) Тогда
        ПоказатьПредупреждение(, НСтр("ru = 'Номенклатура не найдена'"));
        Возврат;
    КонецЕсли;
    // ... дальнейшая логика
КонецПроцедуры

&НаСервереБезКонтекста
Функция НоменклатураПоНаименованию(Знач Наименование)
    Возврат Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
КонецФункции
  • &НаСервере передаёт на сервер данные формы. Если контекст формы не нужен, используйте &НаСервереБезКонтекста.
  • Серверные методы в модуле формы не делайте экспортными. Общий программный интерфейс выносите в серверный общий модуль.
  • ТаблицаЗначений нельзя вернуть на тонкий или веб-клиент. Возвращайте Массив, Структура или Соответствие либо заполняйте реквизит формы.
  • Серверный вызов внутри клиентского цикла — такая же ошибка, как запрос в цикле. Соберите данные и вызовите сервер один раз.
  • Поиск по наименованию неоднозначен. В реальном коде ищите по коду или берите ссылку из выбора пользователя.

6. Модальные вызовы ​

🔴 Этап 1 · Стандарт #703 · Проверка: UsingModalWindows, UsingSynchronousCalls

Модальные окна не поддерживаются в веб-клиенте. Если у конфигурации свойство «Режим использования модальности» равно «Не использовать» (этого требует стандарт), вызов Вопрос() или Предупреждение() становится ошибкой уже при синтаксическом контроле. Это не новинка 8.5: немодальный режим есть с 8.3.3, Асинх/Ждать — с 8.3.18 (руководство по немодальному режиму).

bsl
// ❌ Плохо: модальный вызов
Ответ = Вопрос("Провести документ?", РежимДиалогаВопрос.ДаНет);
bsl
// ✅ Хорошо, вариант 1: обработчик оповещения (обязательно с Экспорт)
&НаКлиенте
Процедура Провести(Команда)
    Оповещение = Новый ОписаниеОповещения("ПровестиЗавершение", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, НСтр("ru = 'Провести документ?'"), РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ПровестиЗавершение(Результат, ДополнительныеПараметры) Экспорт
    Если Результат <> КодВозвратаДиалога.Да Тогда
        Возврат;
    КонецЕсли;
    Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение));
КонецПроцедуры

// ✅ Хорошо, вариант 2 (8.3.18+): асинхронная процедура
&НаКлиенте
Асинх Процедура ПровестиАсинх(Команда)
    Ответ = Ждать ВопросАсинх(НСтр("ru = 'Провести документ?'"), РежимДиалогаВопрос.ДаНет);
    Если Ответ = КодВозвратаДиалога.Да Тогда
        Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение));
    КонецЕсли;
КонецПроцедуры

Кроме Вопрос() и Предупреждение() модальными бывают ОткрытьФормуМодально, ОткрытьЗначение, ВвестиДату, ВвестиЗначение, ВвестиСтроку, ВвестиЧисло, а также синхронные методы работы с файлами. Найти их помогает проверка «Поиск использования синхронных вызовов» в Конфигураторе.

7. Расширения: &Вместо там, где хватит &Перед ​

🔴 Этап 4 · Проверки v8-code-style: extension-method-prefix (префикс), change-and-validate-instead-of-around (&Вместо без ПродолжитьВызов)

bsl
// ❌ Плохо: &Вместо ради «своей проверки до типовой»; вызываемый собственный метод без префикса расширения
&Вместо("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
    ПроверитьДополнительныеУсловия(Отказ);
    ПродолжитьВызов(Отказ, РежимПроведения);
КонецПроцедуры
bsl
// ✅ Хорошо: модуль объекта ЗАИМСТВОВАННОГО документа, расширение с префиксом «Расш1_»
&Перед("ОбработкаПроведения")
Процедура Расш1_ОбработкаПроведения(Отказ, РежимПроведения)
    Расш1_ПроверитьДополнительныеУсловия(Отказ); // своя логика до типовой
КонецПроцедуры
bsl
// ✅ Точечная правка внутри типового метода (8.3.16+), имя метода условное
&ИзменениеИКонтроль("СуммаСкидки")
Функция Расш1_СуммаСкидки(Сумма, ПроцентСкидки)
    Результат = Сумма * ПроцентСкидки / 100;
    #Вставка
    Результат = Мин(Результат, Сумма * 0.3); // правило заказчика: скидка не больше 30%
    #КонецВставки
    Возврат Окр(Результат, 2);
КонецФункции
  • Порядок выбора: &Перед или &После, затем &ИзменениеИКонтроль, и только если другие способы не подходят — &Вместо.
  • &ИзменениеИКонтроль сверяет текст с типовым методом. Если после обновления типовой код изменился, расширение покажет это, а не сломается молча.
  • Если &Вместо всё же нужен, вызывайте ПродолжитьВызов безусловно: иначе не выполнится типовой код, а вместе с ним и перехваты &Вместо того же метода в других расширениях. Если вызова ПродолжитьВызов в методе нет, используйте &ИзменениеИКонтроль.
  • После каждого обновления типовой проверяйте применимость расширений. Не рассчитывайте, что с расширениями типовая обновится автоматически за минуты: большая база может обновляться часами.

8. Долгая операция в клиентском вызове ​

🟡 Этап 5 · Стандарт #642

Если серверный вызов может идти дольше 8 секунд, выполняйте его в фоновом задании. Иначе браузер предложит остановить скрипт, веб-сервер вернёт ошибку 504, а пользователь не сможет отменить операцию. Настройка «Время завершения сеанса при бездействии» появилась в 8.3.26, а не в 8.5. Прерывает ли она идущий серверный вызов, не подтверждено, и причина выносить операцию в фон не в ней.

Плохо: процедура &НаСервере, которая минутами перепроводит документы, пока пользователь ждёт. Хорошо:

bsl
// ✅ Хорошо (8.3.26+): фоновое задание + уведомление клиента вместо опроса.
// Общий модуль «ПерепроведениеСервер» (Сервер = Истина, Глобальный = Ложь)
Процедура Перепровести(Знач Период, Знач АдресРезультата, Знач НомерСеансаИнициатора) Экспорт
    Результат = ВыполнитьПерепроведение(Период); // собственно работа
    ПоместитьВоВременноеХранилище(Результат, АдресРезультата); // результат — только через хранилище
    Адресаты = Новый Массив;
    Адресаты.Добавить(НомерСеансаИнициатора); // номер сеанса передан параметром из клиентского сеанса
    УведомленияКлиента.ОтправитьУведомление("ПерепроведениеЗавершено", АдресРезультата, Адресаты);
КонецПроцедуры

// Модуль формы
&НаКлиенте
Процедура Перепровести(Команда)
    // Подписываемся до запуска задания, чтобы не пропустить уведомление
    УведомленияКлиента.ПодключитьОбработчик("ПерепроведениеЗавершено",
        Новый ОписаниеОповещения("ПриЗавершенииПерепроведения", ЭтотОбъект));
    ЗапуститьПерепроведение();
КонецПроцедуры

&НаСервере
Процедура ЗапуститьПерепроведение()
    АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
    ПараметрыЗадания = Новый Массив;
    ПараметрыЗадания.Добавить(Период);
    ПараметрыЗадания.Добавить(АдресРезультата);
    ПараметрыЗадания.Добавить(ПолучитьТекущийСеансИнформационнойБазы().НомерСеанса);
    ФоновыеЗадания.Выполнить("ПерепроведениеСервер.Перепровести", ПараметрыЗадания, ,
        НСтр("ru = 'Перепроведение документов'"));
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииПерепроведения(Данные, ДополнительныеПараметры) Экспорт
    Результат = ПолучитьИзВременногоХранилища(Данные);
    // ... показать результат пользователю
КонецПроцедуры
  • ФоновыеЗадания.Выполнить запускает только экспортный метод неглобального серверного общего модуля. Результат функции фонового задания теряется, поэтому его кладут во временное хранилище.
  • В типовых конфигурациях не пишите это вручную. Используйте БСП: ДлительныеОперации.ВыполнитьФункцию на сервере и ДлительныеОперацииКлиент.ОжидатьЗавершение на клиенте. Библиотека сама решает, ждать ли уведомления или опрашивать задание. Механизм уведомлений БСП включает только на свежих сборках 8.3.27 и 8.5.1, так что на старых сборках надёжнее опрос.
  • Номер сеанса инициатора в фоновое задание передают параметром: у самого задания «родительского» сеанса нет. Обработчик уведомлений подключается на уровне клиентского приложения, поэтому отключайте его (УведомленияКлиента.ОтключитьОбработчик), когда результат получен. Точную сигнатуру и поведение при закрытии формы проверьте в «Руководстве разработчика» своей версии платформы.

9. Транзакции без блокировки и с «проглоченным» исключением ​

🔴 Этап 5 · Стандарты #783, #460 · Проверка: BeginTransactionBeforeTryCatch, PairingBrokenTransaction

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

        Набор = РегистрыСведений.СчетчикиНомеров.СоздатьНаборЗаписей();
        Набор.Отбор.ВидСчетчика.Установить(ВидСчетчика);
        Набор.Прочитать();
        Если Набор.Количество() = 0 Тогда
            Запись = Набор.Добавить();
            Запись.ВидСчетчика = ВидСчетчика;
        Иначе
            Запись = Набор[0];
        КонецЕсли;
        Запись.Значение = Запись.Значение + 1;
        Результат = Запись.Значение;
        Набор.Записать();

        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ЗаписьЖурналаРегистрации(НСтр("ru = 'Нумерация'"), УровеньЖурналаРегистрации.Ошибка, , ,
            ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        ВызватьИсключение;
    КонецПопытки;
    Возврат Результат;
КонецФункции
  • НачатьТранзакцию() ставят непосредственно перед Попытка, ЗафиксироватьТранзакцию() — последней строкой блока Попытка. Начало и фиксацию выполняют в одном методе.
  • Исключение не отменяет транзакцию, а запрещает её успешное завершение. Если его «проглотить», внешний код продолжит работу и получит ошибку «В этой транзакции уже происходили ошибки». Вложенных транзакций платформа не поддерживает.
  • В управляемом режиме блокировок конструкция ДЛЯ ИЗМЕНЕНИЯ в запросах не имеет смысла (#460). Блокировку ставят объектом БлокировкаДанных до чтения, причём только на нужные записи.

10. Контроль остатков «на глазок» ​

🔴 Этап 2 · Стандарт #661

Плохо: прочитать остаток запросом до записи движений и без блокировки. Два пользователя одновременно увидят 10 штук, спишут 8 и 6, и остаток станет −4. Хорошо:

bsl
// ✅ Хорошо: сначала регистры без контроля, в конце — регистр с контролем,
// затем запрос отрицательных остатков только по позициям документа
Процедура ОбработкаПроведения(Отказ, РежимПроведения)

    СформироватьДвиженияПродажи();
    Движения.Продажи.БлокироватьДляИзменения = Ложь;
    Движения.Продажи.Записать();

    СформироватьДвиженияТоварыНаСкладах();
    Движения.ТоварыНаСкладах.БлокироватьДляИзменения = Истина;
    Движения.ТоварыНаСкладах.Записать();

    ПроверитьОтрицательныеОстатки(Отказ);

КонецПроцедуры

Процедура ПроверитьОтрицательныеОстатки(Отказ)

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Остатки.Номенклатура КАК Номенклатура,
        |    Остатки.КоличествоОстаток КАК КоличествоОстаток
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(,
        |            Склад = &Склад
        |                И Номенклатура В (&СписокНоменклатуры)) КАК Остатки
        |ГДЕ
        |    Остатки.КоличествоОстаток < 0";
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("СписокНоменклатуры", Товары.ВыгрузитьКолонку("Номенклатура"));

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Отказ = Истина;
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = СтрШаблон(НСтр("ru = 'Не хватает %1 ед. товара «%2»'"),
            -Выборка.КоличествоОстаток, Выборка.Номенклатура);
        Сообщение.Сообщить();
    КонецЦикла;

КонецПроцедуры
  • Порядок записи регистров должен быть одинаковым во всех документах, например алфавитным. Это снижает риск взаимоблокировок.
  • Контроль не нужен там, где остаток не может уйти в минус: в приходном документе и при перепроведении, если документ списывает не больше, чем раньше.
  • Явную управляемую блокировку в этом сценарии обычно не ставят: нужные остатки уже заблокированы записью движений с БлокироватьДляИзменения = Истина. Если же остатки читаются отдельно от записи движений, это ответственное чтение (#648): сначала управляемая блокировка БлокировкаДанных на нужные остатки в транзакции, затем чтение и запись.

11. Пути к файлам и Linux ​

🟡 Этап 5 · Стандарт #723

bsl
// ❌ Плохо: путь Windows в коде, ручной разделитель, UNC-путь, маска «*.*»
ИмяФайла = "C:\Обмен\" + "Товары.XML";
Файлы = НайтиФайлы("\\srv\obmen", "*.*");
bsl
// ✅ Хорошо (серверный код): каталог — из настроек, разделитель и маска — от платформы
КаталогОбмена = Константы.КаталогОбмена.Получить(); // на Linux — смонтированный каталог, например /mnt/obmen
ИмяФайла = КаталогОбмена + ПолучитьРазделительПути() + "Товары.xml"; // регистр — как у файла на диске
Файлы = НайтиФайлы(КаталогОбмена, ПолучитьМаскуВсеФайлы());
  • В Linux Товары.xml и Товары.XML — разные файлы. Пишите путь строго в одном регистре. Совет «пишите все пути строчными» проблему не решает: имена внешних файлов вы не контролируете.
  • UNC-путей вида \\server\share нет, сетевой ресурс нужно смонтировать. Маска *.* в Linux означает «файлы с точкой в имени».
  • COM и OLE недоступны. Внешние компоненты должны быть на технологии Native API, а интеграцию через COM замените на HTTP или файловый обмен.
  • В клиентском коде, которому нужен разделитель сервера, используйте ПолучитьРазделительПутиСервера(). В конфигурациях на БСП есть функции ОбщегоНазначенияКлиентСервер, например ПолучитьПолноеИмяФайла.

12. Смена алгоритма хеширования паролей и откат платформы ​

🔵 Администратор, этап 5 · Источник: Инфостарт, OWASP

С 8.3.26 для паролей пользователей ИБ можно выбрать алгоритм хеширования.

АлгоритмСтатус
PBKDF2-HMAC-SHA256рекомендуется: медленный алгоритм с солью
SHA-256, SHA-512⚠️ быстрые хеши, OWASP не рекомендует их для паролей
SHA-1вариант по умолчанию и единственный до 8.3.26
  • Плохо: включить PBKDF2 в рабочей базе, а через неделю откатиться на платформу ниже 8.3.26. База откроется, но пользователи с новыми хешами не смогут войти по паролю. Фраза «база не запустится» неверна, но проблема реальная.
  • Хорошо: проверить смену алгоритма на копии. Перед откатом вернуть SHA-1 и переустановить пароли или оставить другой способ входа, например аутентификацию ОС. План отката записать заранее.
  • PBKDF2 заметно тяжелее SHA-1 для процессора. Учитывайте это при массовом входе, например в HTTP-сервисах с Basic-аутентификацией.
  • Похожая ловушка, по сведениям партнёров 1С (вторичный источник): если снять режим совместимости ради новых возможностей новой платформы, структура базы изменится и вернуться на старую платформу будет нельзя. Перед такой операцией делайте копию и проверяйте план отката.

✅ Что исправлено в этой версии ​

  • Удалены ссылки на несуществующие MCP-проект и утилиты (список — в SOURCES.md), связка «Cursor + kit» (kit — набор skills для Claude Code) и вымышленная цитата «тимлида».
  • Модальность, «Idle Timeout», уведомления клиента и PBKDF2 больше не называются новинками 8.5: указаны версии появления 8.3.3, 8.3.18 и 8.3.26. Исправлено описание отката после смены алгоритма хеширования.
  • Убраны неподтверждённые тезисы: «без EDT командная разработка невозможна», «только расширения», сроки грейдов, «в 2–3 раза дороже», «Элемент — фронтенд на HTML/CSS/JS».
  • Исправлены примеры кода (параметры виртуальных таблиц, &Перед и &ИзменениеИКонтроль, обработчик ПоказатьВопрос с Экспорт). Добавлены транзакции, контроль остатков по #661, РАЗРЕШЕННЫЕ, составные типы, Linux-пути.

🔗 Источники ​

Полный реестр утверждений с датами проверки — в SOURCES.md.


← Предыдущий | 🗺 Оглавление | Следующий →