Skip to content

Практические проекты и портфолио ​

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

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

Здесь 18 учебных проектов P0–P17. Их постановки собраны из трёх источников: открытые тестовые задания работодателей 2021–2026 годов, уровни официальной «Модели профессиональных компетенций Разработчика» фирмы «1С» (MC-6-001, 2025) и требования к дипломам курса Нетологии «1С-программист». У каждого проекта есть уровень, этап, постановка, критерии приёмки, подсказки, усложнение и связанные стандарты разработки.

Работодатели проверяют начинающих разработчиков тестовыми заданиями. В открытых репозиториях с заданиями 2021–2026 годов повторяются три типа задач:

  • алгоритмы на коллекциях без готовых функций;
  • мини-конфигурация «склад и продажи»: контроль остатков, себестоимость, отчёт на СКД, печатная форма, часто проводки;
  • внешняя обработка, в которой смотрят на клиент-серверное взаимодействие.

Проекты этого файла покрывают все три типа. Они сгруппированы по этапам из 02_Timeline.md, поэтому номера внутри разделов идут не подряд.

Содержание ​

🧭 Как пользоваться ​

  • Делайте проекты по порядку этапов. «Минимальный путь до первой работы» (этапы 0–4) — это P0–P3 и P7–P9, их хватает для первого портфолио. Полный роадмап — P0–P15, по желанию P16 и P17.
  • Метки важности: 🔴 обязательно · 🟡 желательно · 🔵 по контексту. Уровни Junior, Middle и Senior взяты из модели MC-6-001. Стаж в модели не указан, уровень определяют навыки. Подробнее — в 03_Competencies.md.
  • Сначала прочитайте постановку и критерии приёмки и попробуйте сделать сами. Подсказки открывайте, когда застряли: на собеседовании их не будет.
  • Проект готов, когда выполнены общие критерии приёмки и критерии самого проекта. «У меня работает» критерием не считается.
  • Сроков у проектов нет: они сильно зависят от опыта. Ориентиры по этапам — в 02_Timeline.md.
  • Экзамены. После P1–P2 и этапа 2 — 1С:Профессионал по платформе. После этапа 5 (P4–P6, P10–P12) по желанию — 1С:Специалист по платформе. Сложные периодические расчёты и бизнес-процессы с экзамена Специалиста проекты закрывают не полностью: мини-задача на регистр расчёта и план подготовки к экзамену есть в 02_Timeline.md. Подробно — в 04_Certifications.md.

Где делать проекты

  • Учебная версия платформы (8.5.1 и 8.3.27) бесплатна на online.1c.ru после анкеты. Ограничения: только файловый вариант и некоммерческое использование. По данным сообщества, в ней также ограничено число сеансов и нельзя задать пароль пользователю.
  • Community-лицензия для разработчиков выдаётся на developer.1c.ru. Она срочная, её нужно периодически обновлять. Берите её там, где учебная версия не подходит: проверка P2 двумя сеансами, публикация на веб-сервере для P10, клиент-серверный вариант для P14. Условия лицензии (срок, привязка к компьютеру, допустимое использование) проверяйте на портале.
  • Для P7 и P8 нужна типовая конфигурация: учебная версия «1С:Бухгалтерии 8» или демо-база, если на курсе или на работе есть доступ к ИТС.
  • Версия платформы. Большие типовые (БП, ЗУП, УТ, КА, ERP) в 2026 году работают на 8.3.27, УНФ и Розница (начиная с 3.0.13) — на 8.5. Для учебных проектов подходит любая из рабочих линий 8.3.27 и 8.5.1. Версию платформы и режим совместимости укажите в README.

📊 Все проекты на одной странице ​

IDПроектУровеньЭтапМеткаОснова
P0Разминка на коллекцияхJunior1🔴Тестовые задания 2021–2026
P1Справочники «Управление ИТ-фирмой»Junior2🔴Диплом А Нетологии
P2Склад: приход, расход, остаткиJunior2🔴Тестовые задания 2024–2026
P3Цены, скидки, продажи, печатная формаJunior3🔴Диплом Б Нетологии, задание 01.2026
P7Внешняя печатная форма и отчёт для типовойJunior3🔴Модель MC-6-001
P8Расширение типовойJunior4🔴Модель MC-6-001
P9Загрузка из Excel/CSV с поиском дублейJunior4🔴Портфолио и задания 2026
P4Взаиморасчёты и история статусов клиентаJunior–Middle5🔴Задание для стажёра 11.2024
P5Себестоимость и рентабельностьJunior–Middle5🔴Задания 2024 и 2026
P6Бухучёт на плане счетовMiddle5🔴Диплом В Нетологии, задание 02.2026
P10REST HTTP-сервис каталогаMiddle5🔴Задание 03.2025
P11Клиент внешнего API с регламентным заданиемMiddle5🔴Задание 2021
P12Обмен между двумя базамиMiddle5🔴Модель MC-6-001
P13Качество и CIMiddle6🟡Задание на BDD 07.2024
P17Решение с ИИ-ассистентом и разбор ошибок ИИJunior–Middle6🔵 опц.Бенчмарк PRISM
P14Найди и почини (производительность)Middle–Senior7🔵Вопросы собеседований, модель MC-6-001
P15RLS и ролиMiddle7🔵Модель MC-6-001
P16Мобильное приложение «Торговый агент»Middle7🔵 опц.Модель MC-6-001, демо-конфигурация 1С

Проекты продолжают друг друга. P1–P6 удобно вести в одной сквозной конфигурации: ИТ-фирма продаёт оборудование и лицензии со склада и оказывает услуги. Стрелка на схеме означает «использует результат предыдущего проекта». Зелёным выделен «Минимальный путь до первой работы», пунктиром — опциональные проекты.

💼 Как вести портфолио ​

Портфолио на GitHub показывает работодателю навыки, которые новичок ещё не может подтвердить опытом работы. В тестовых заданиях 2024–2026 годов работодатели всё чаще просят выложить решение на GitHub или прислать выгрузку .dt со скриншотами или видео.

Что положить в репозиторий ​

  • Исходники в текстовом виде. Выгрузка конфигурации в XML-файлы (Конфигуратор: «Конфигурация → Выгрузить конфигурацию в файлы», или ibcmd) либо проект 1C:EDT. Бинарные .cf, .cfe, .epf и .dt в Git не храните: в них не видно diff.
  • Сборки — в Releases. К релизу GitHub приложите .dt с тестовыми данными и собранные .cf, .cfe, .epf, .erf, чтобы проект можно было развернуть за несколько минут.
  • README по шаблону ниже, скриншоты или короткий GIF: форма документа, сообщение о нехватке остатка, отчёт, печатная форма.
  • Тесты и описание API, когда они появятся: YAxUnit, .feature-сценарии Vanessa Automation, OpenAPI для P10.
  • Честная история коммитов. Небольшие коммиты с понятными сообщениями («Контроль остатков при проведении реализации») показывают, как вы работаете. Один коммит «всё» не показывает ничего.

Структура репозитория:

text
it-firm-1c/
├── src/            # выгрузка конфигурации в XML или проект EDT
├── tests/          # YAxUnit-тесты и .feature-сценарии (с P13)
├── docs/           # скриншоты, схема метаданных, OpenAPI
├── .gitignore      # *.cf, *.cfe, *.epf, *.erf, *.dt, *.1CD, логи
└── README.md

Шаблон README:

markdown
# Управление ИТ-фирмой (учебные проекты P1–P6)

Платформа 8.3.27, режим совместимости 8.3.27. Постановки — из роадмапа 1С, проекты P1–P6.

## Что сделано
- [x] Поступление и реализация с контролем остатков и управляемыми блокировками
- [ ] Себестоимость по всей компании — в работе

## Как развернуть
1. Создайте пустую файловую базу.
2. Загрузите .dt из Releases или конфигурацию из каталога src.
3. Войдите как «Менеджер» или «Администратор» (тестовые пользователи).

## Решения
Почему контроль остатков сделан именно так, какие стандарты соблюдены, что бы улучшили.

## Скриншоты
![Нехватка товара при проведении](docs/shortage.png)

Чего не выкладывать ​

  • Код и базы клиентов и работодателя, даже «для примера»: это коммерческая тайна (98-ФЗ) и обычно NDA.
  • Персональные данные реальных людей (152-ФЗ). В тестовых данных — только вымышленные ФИО, ИНН и телефоны.
  • Пароли, токены, ключи API, файлы лицензий, логины к ИТС и releases.1c.ru (std 740).
  • Выгрузку типовой конфигурации целиком. Для P7 и P8 публикуйте только свою обработку или расширение; условия использования типовых определяет лицензионное соглашение фирмы «1С».
  • Решение тестового задания конкретного работодателя, если он против публикации. Уточните это заранее.

Как показать работу ​

  • В резюме дайте ссылки на 2–4 лучших репозитория и по одной строке о каждом: что сделано и чему вы научились. Подробнее о резюме — в 13_Career.md.
  • Закрепите эти репозитории в профиле GitHub.
  • На собеседовании будьте готовы открыть код и объяснить решения. Какие вопросы задают по каждому проекту, показано в карте ниже и в 08_Interview.md.

✅ Общие критерии приёмки ​

Эти требования действуют для всех проектов. Они опираются на стандарты разработки 1С и на технические требования к диплому В курса Нетологии.

  • [ ] Код оформлен по стандартам: тексты модулей (std 456), имена (std 647) и параметры (std 640) процедур и функций, тексты запросов (std 437).
  • [ ] Нет запросов в цикле, в том числе неявных, через точку (std 436).
  • [ ] Условия на измерения виртуальных таблиц переданы в их параметры (std 657). Поля составного типа приводятся через ВЫРАЗИТЬ (std 654). В запросах нет ВЫБРАТЬ * (std 729).
  • [ ] Серверных вызовов минимум (std 487). Где контекст формы не нужен, стоит &НаСервереБезКонтекста (std 636). В модулях форм нет экспортных методов, кроме обработчиков оповещений (std 630).
  • [ ] Нет модальных окон и синхронных вызовов (std 703): только ПоказатьВопрос с ОписаниеОповещения или Асинх/Ждать.
  • [ ] Параметры запросов передаются через УстановитьПараметр, пользовательские строки в текст запроса не попадают.
  • [ ] Транзакции и блокировки там, где они нужны, оформлены по std 783 и std 460.
  • [ ] BSL Language Server или проверки 1C:EDT не находят ошибок; предупреждения разобраны.
  • [ ] Проверены негативные сценарии: пустые поля, нулевые количества, нехватка данных, повторный запуск.
  • [ ] В репозитории есть тестовые данные, README со скриншотами и релиз с .dt.

Как проверить себя без наставника. Откройте исходники в VS Code с расширением «Language 1C (BSL)»: оно подключает BSL Language Server и показывает замечания прямо в коде. В 1C:EDT те же стандарты проверяет встроенный плагин 1C:Code style V8. Если есть доступ к «1С:Автоматизированной проверке конфигураций» (АПК), прогоните проект и через неё.

🧱 Проекты этапов 1 и 2 ​

P0. Разминка на коллекциях ​

Уровень: Junior · Этап: 1 · 🔴 · Основа: тестовые задания 2021 года (вариант 1, вариант 2), «Лаборатория ИТ», 2023, задание 2026 года

Что тренирует: массив, структуру, соответствие, список значений и таблицу значений; строки и числа; граничные случаи; оценку сложности. Официальная модель ждёт от Junior умения объяснить базовые алгоритмы поиска и сортировки и оценить сложность простого алгоритма.

Постановка. Шесть функций в общем модуле или во внешней обработке с формой для запуска:

  1. Удалить из массива отрицательные числа, не создавая нового массива и сохранив порядок остальных.
  2. Удалить строки длиннее двух символов из массива, списка значений и таблицы значений.
  3. Распределить 100 ₽ между строками пропорционально количеству так, чтобы сумма частей была ровно 100,00.
  4. Сравнить номера версий 8.1.13.41 и 8.1.009.125 без библиотек; ведущие нули не должны влиять на результат.
  5. Записать число до 100 млн прописью без ЧислоПрописью так, чтобы новый разряд добавлялся одной строкой настройки.
  6. Заполнить матрицу 12×10 числами «змейкой» и вывести её в табличный документ.

Критерии приёмки

  • [ ] Каждая задача — отдельная функция с параметрами и возвращаемым значением, без сообщений пользователю внутри.
  • [ ] Для каждой функции проверены граничные случаи: пустая коллекция, один элемент, «подходят все» и «не подходит ни один», нули, ведущие нули, числа 0, 1, 11, 21 и 100 000 000.
  • [ ] Не используются готовые функции, которые решают задачу целиком (ЧислоПрописью, функции БСП).
  • [ ] В комментарии к каждой функции указана сложность алгоритма.

Подсказки

  • Задача 1: обходите массив с конца циклом Пока. У цикла Для нет шага, а при удалении во время обхода вперёд индексы сдвигаются.
  • Задача 3: округлите доли до копеек, а разницу от округления добавьте к самой большой доле. Отдельно обработайте случай, когда все количества нулевые.
  • Задача 4: разбейте строку через СтрРазделить и сравнивайте части как числа, а не как строки. Учтите разное число частей.
  • Задача 5: разбейте число на тройки разрядов. У тысяч женский род («одна тысяча», «две тысячи»), у слов разрядов три формы («тысяча», «тысячи», «тысяч»).
  • После своего решения сравните его с ОбщегоНазначенияКлиентСервер.РаспределитьСуммуПропорциональноКоэффициентам и ОбщегоНазначенияКлиентСервер.СравнитьВерсии из БСП.

Усложнение. Ещё две задачи из тех же заданий: найти циклическую ссылку (например, элемент, который через цепочку родителей ссылается сам на себя) и посчитать гласные в каждом втором слове фразы. На этапе 6 перенесите проверки в модульные тесты YAxUnit (P13).

Стандарты: 456 тексты модулей, 647 имена, 640 параметры.

P1. Справочники «Управление ИТ-фирмой» ​

Уровень: Junior · Этап: 2 · 🔴 · Основа: диплом А курса Нетологии «1С-программист», учебное задание курса УЦ №1

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

Постановка. Начните сквозную конфигурацию. Создайте перечисление «ЮрФизЛицо»; справочники «Контрагенты» (тип, ИНН, КПП, полное наименование), «Номенклатура» (товар или услуга) и «Склады»; роли «Администратор» и «Менеджер» и двух пользователей с этими ролями.

Критерии приёмки

  • [ ] Поле КПП доступно только юрлицам: и после смены типа контрагента, и при открытии уже записанного элемента.
  • [ ] Полное наименование разворачивает сокращение организационно-правовой формы: «АО» → «Акционерное общество».
  • [ ] ИНН проверяется при вводе (подсветка без запрета) и при записи (отказ с сообщением у поля).
  • [ ] Менеджер не может менять роли и список пользователей, администратор может всё.
  • [ ] Есть тестовые контрагенты: юрлицо, ИП, физлицо и элемент с ошибочным ИНН.

Подсказки

  • Доступность КПП после смены типа меняйте на клиенте, без вызова сервера. При открытии формы её задаёт ПриСозданииНаСервере.
  • Проверку ИНН держите в общем модуле с флагами «Клиент» и «Сервер». На клиенте она подсвечивает ошибку, а решение о записи принимает сервер в ОбработкаПроверкиЗаполнения.
  • Контрольные цифры ИНН считаются по опубликованному алгоритму. После своей реализации сравните её с РегламентированныеДанныеКлиентСервер.ИННСоответствуетТребованиям из БСП.
  • Пары «сокращение — полное название» удобнее хранить в Соответствие, чем в цепочке Если.
  • В учебной версии, по данным сообщества, пароли пользователям задать нельзя. Проверять роли это не мешает.

Усложнение. Контроль дублей ИНН с учётом филиалов: у головной организации и её обособленных подразделений ИНН один, а КПП разные (по мотивам задания DexSys, 2024). Условное оформление списка: контрагенты без ИНН выделены цветом.

Стандарты: 487 серверные вызовы, 636 контекстные вызовы, 689 роли и права.

P2. Склад: приход, расход, остатки ​

Уровень: Junior · Этап: 2 · 🔴 · Основа: «СофтСервис», 02.2026, «кондитерская», 09.2026, задание для стажёра, 11.2024

Что тренирует: регистр накопления остатков, проведение, виртуальные таблицы, контроль остатков, управляемые блокировки, отчёт на СКД.

Постановка. Документы «Поступление товаров» и «Реализация товаров и услуг»: склад в шапке, товары и услуги в одной табличной части. Регистр накопления «Остатки товаров» с измерениями «Номенклатура» и «Склад» и ресурсом «Количество». Реализация не проводится, если товара не хватает. Отчёт на СКД «Остатки и обороты по складам».

Критерии приёмки

  • [ ] Движения по регистру пишут только товары, услуги в остатках не участвуют.
  • [ ] При нехватке реализация не проводится и сообщает по каждой строке, сколько не хватает.
  • [ ] Остаток не уходит в минус при одновременном проведении двух документов из двух сеансов.
  • [ ] Используется управляемый режим блокировок, запросов в цикле нет, условия на измерения переданы в параметры виртуальной таблицы.
  • [ ] Повторное проведение и отмена проведения оставляют правильные движения.
  • [ ] Отчёт показывает начальный остаток, приход, расход и конечный остаток, есть быстрые отборы по складу и номенклатуре.

Подсказки

  • Есть два рабочих способа контроля остатков, и оба стоит уметь объяснить. Первый, описанный в std 661: записать движения регистра с контролем в конце транзакции с БлокироватьДляИзменения = Истина, затем одним запросом найти позиции в минусе и при их наличии отказать в проведении. Образец этого способа есть в 02_Timeline.md. Второй: в начале транзакции заблокировать нужные остатки управляемой блокировкой БлокировкаДанных (std 460), прочитать их, сравнить со списываемым количеством и только потом записать движения.
  • Без блокировки двое прочитают остаток 10, спишут 8 и 6 и получат −4. Этот сценарий разобран в std 661.
  • Остаток на момент документа без его собственных движений даёт параметр Новый Граница(МоментВремени(), ВидГраницы.Исключая).
  • Условие на ресурс (КоличествоОстаток < 0) ставится в ГДЕ, условия на измерения — в параметры виртуальной таблицы.
  • Для проверки двумя сеансами может понадобиться community-лицензия (см. «Где делать проекты»).

Усложнение. Подбор в табличную часть только тех товаров, что есть на складе, как в задании «СофтСервис». Документ «Выпуск продукции», который списывает ингредиенты по составу в одной транзакции, как в задании «кондитерская».

Стандарты: 603 проведение, 450 порядок записи движений, 460 управляемые блокировки, 661 блокирующее чтение остатков, 733 обращение к таблице «Остатки».

🧩 Проекты этапов 3 и 4 ​

P3. Цены, скидки, продажи, печатная форма ​

Уровень: Junior · Этап: 3 · 🔴 · Основа: диплом Б Нетологии, «Бест Бизнес Софт», 01.2026

Что тренирует: периодический регистр сведений, срез последних, события формы документа, печатную форму на макете.

Постановка. Документ «Установка цен» пишет в периодический регистр сведений «Цены», подчинённый регистратору. Реализация из P2 подставляет цену на дату документа, учитывает процент скидки в строке и пересчитывает сумму и НДС. Реализация также пишет оборотный регистр накопления «Продажи»: он понадобится в P4 и P5. Печатная форма «Расходная накладная».

Критерии приёмки

  • [ ] Цена подставляется на дату документа, а не на текущую. Если цены нет, строка подсвечивается.
  • [ ] Сумма, скидка и НДС пересчитываются при изменении количества, цены, скидки или ставки. НДС считается «в том числе» по ставке строки: 22%, 10%, 0% или «Без НДС».
  • [ ] Цены для всех подобранных строк читаются одним серверным вызовом, а не вызовом на строку.
  • [ ] Печатная форма получает данные одним запросом, печатает несколько документов сразу и сортирует строки по выбору пользователя, не меняя документ.

Подсказки

  • Цены на дату — виртуальная таблица СрезПоследних(&Дата, Номенклатура В (&Товары)). Отбор передавайте в параметры, а не в ГДЕ.
  • Пересчёт суммы в строке — клиентская процедура без серверного вызова. Сервер нужен только, чтобы прочитать цены.
  • НДС «в том числе» по ставке 22% — сумма × 22 / 122. Ставки и правила 2026 года — в 10_Domain_and_Law.md.
  • Сортировку делайте в запросе печати (УПОРЯДОЧИТЬ ПО) или в таблице значений на сервере. Документ при этом не записывается.

Усложнение. Скидки по правилам: регистр сведений «Скидки по статусам» со статусом клиента из P4. Отчёт «Продажи за период» с отборами по клиенту и товару, как в задании «Бест Бизнес Софт».

Стандарты: 548 формирование печатных форм, 487 серверные вызовы, 657 виртуальные таблицы, 761 интерфейсные тексты в коде.

P7. Внешняя печатная форма и отчёт для типовой ​

Уровень: Junior · Этап: 3 (можно перенести в начало этапа 4) · 🔴 · Основа: модель MC-6-001, компетенция «Внешние отчёты, обработки, печатные формы»

Что тренирует: подсистему БСП «Дополнительные отчеты и обработки», безопасный режим, подсистему «Печать», СКД во внешнем отчёте.

Постановка. Для учебной или демо-базы «1С:Бухгалтерии 8» сделайте две вещи. Первая — внешнюю печатную форму (.epf) к документу реализации. Вторая — внешний отчёт на СКД (.erf), например «Продажи по контрагентам за период». Подключите обе через справочник «Дополнительные отчеты и обработки» в разделе администрирования.

Критерии приёмки

  • [ ] Обработка регистрируется без ошибок, печатная форма появляется в подменю «Печать» нужного документа.
  • [ ] Обе обработки работают в безопасном режиме: без COM, файлов и интернета.
  • [ ] Данные для печати нескольких документов получаются одним запросом (std 548).
  • [ ] У отчёта есть пользовательские настройки: период и отбор по контрагенту.
  • [ ] Типовая конфигурация не изменена. В README есть инструкция для пользователя: как подключить и где найти.

Подсказки

  • Регистрацию и печать берёт на себя БСП, от обработки нужны два экспортных метода в модуле объекта. Имена ниже сверены с исходниками БСП 3.2:
bsl
// Модуль объекта внешней обработки: печатная форма для документа реализации
Функция СведенияОВнешнейОбработке() Экспорт

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

    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("ru = 'Накладная с подписями'");
    Команда.Идентификатор = "НакладнаяСПодписями"; // имя печатной формы, его проверяет НужноПечататьМакет
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    Команда.Модификатор = "ПечатьMXL";

    Возврат ПараметрыРегистрации;

КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "НакладнаяСПодписями") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
            "НакладнаяСПодписями", НСтр("ru = 'Накладная с подписями'"),
            СформироватьНакладные(МассивОбъектов, ОбъектыПечати));
    КонецЕсли;

КонецПроцедуры
  • СформироватьНакладные пишете вы: один запрос по всему МассивОбъектов, вывод областей макета (ПолучитьМакет) и вызов УправлениеПечатью.ЗадатьОбластьПечатиДокумента после каждого документа. Имена документа и его реквизитов сверьте со своей версией типовой.
  • Внешний отчёт регистрируется так же, но с видом ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет().

Усложнение. Обработка вида «Заполнение объекта», которая заполняет табличную часть документа по данным другого документа. Внешний отчёт с несколькими вариантами и условным оформлением.

Стандарты: 548 печатные формы, 645 названия печатных форм, 669 ограничение на выполнение внешнего кода.

P8. Расширение типовой ​

Уровень: Junior · Этап: 4 · 🔴 · Основа: модель MC-6-001, компетенции «Доработка конфигураций и расширения» и «Обновление нетиповых конфигураций»

Что тренирует: расширения конфигурации, заимствование объектов, аннотации &Перед, &После, &Вместо и &ИзменениеИКонтроль, обновление типовой с доработками.

Постановка. В демо-базе типовой добавьте расширением реквизит в документ реализации и выведите его на форму. Сделайте его обязательным при проведении для контрагентов с определённым признаком. Затем обновите типовую на следующий релиз и убедитесь, что расширение работает.

Критерии приёмки

  • [ ] Основная конфигурация не изменена. Объекты и методы расширения названы с префиксом, например Расш1_.
  • [ ] Для логики «до типовой» используется &Перед. Если где-то нужен &Вместо, причина объяснена в README.
  • [ ] Показано обновление на новый релиз и проверка применимости расширения после него.
  • [ ] В README описано, что сломается, если в новом релизе переименуют перехваченный метод или изменят текст метода под &ИзменениеИКонтроль.

Подсказки

  • Порядок доработки типовой: настройки и функциональные опции → дополнительные отчёты и обработки → расширение → изменение основной конфигурации с сохранением поддержки.
  • Образец &Перед для проверки заполнения есть в 02_Timeline.md, разбор &Вместо и ПродолжитьВызов — в 06_FAQ_and_Tips.md.
  • &ИзменениеИКонтроль (платформа 8.3.16+) хранит текст исходного метода. Если в новом релизе метод изменился, проверка применимости покажет расхождение, и метод в расширении придётся адаптировать.
  • Назначение вашего расширения — «Адаптация». Назначение «Исправление» фирма «1С» использует для официальных исправлений, которые поставляет расширениями.
  • Если доступа к новым релизам нет, смоделируйте обновление на своей конфигурации из P2–P3: подключите к ней расширение, измените перехваченный метод в основной конфигурации и проверьте применимость.

Усложнение. Подключите свою логику к БСП обработчиком &После к процедуре общего модуля …Переопределяемый, например УправлениеПечатьюПереопределяемый.ПередДобавлениемКомандПечати. Обновите копию типовой, частично снятой с поддержки, через сравнение и объединение.

Стандарты: 690 обработчики обновления (если заполняете новый реквизит в существующих данных), 464 обработчик ПередЗаписью.

P9. Загрузка из Excel/CSV с поиском дублей ​

Уровень: Junior · Этап: 4 · 🔴 · Основа: учебное портфолио, 04.2026, «кондитерская», 09.2026, вопрос «передать файл на сервер» из interview-1c

Что тренирует: работу с файлами на клиенте и сервере, временное хранилище, табличный документ, временные таблицы в запросах, форму обработки.

Постановка. Внешняя обработка загружает номенклатуру из файла .xlsx или .csv. Пользователь выбирает файл, видит предпросмотр, загружает и получает итог: сколько создано, пропущено и сколько строк с ошибками. Отдельная команда ищет дубли в справочнике.

Критерии приёмки

  • [ ] Файл выбирается без модальных окон и передаётся на сервер через временное хранилище, поэтому код работает и в тонком, и в веб-клиенте.
  • [ ] Существующие элементы находятся одним запросом по всем строкам файла, а не поиском в цикле.
  • [ ] Повторная загрузка того же файла не создаёт дублей.
  • [ ] Ошибочные строки (пустое наименование, неверный код) не прерывают загрузку и попадают в итоговый отчёт.
  • [ ] Поиск дублей — один запрос с СГРУППИРОВАТЬ ПО … ИМЕЮЩИЕ.
  • [ ] Временные файлы на сервере удаляются, пути собираются без ручных разделителей (std 723).

Подсказки

  • На клиенте используйте ФайловаяСистемаКлиент.ЗагрузитьФайл из БСП или методы платформы НачатьПомещениеФайла и НачатьПомещениеФайлов. На сервере двоичные данные берутся через ПолучитьИзВременногоХранилища.
  • Файл .xlsx сохраните во временный файл (ПолучитьИмяВременногоФайла("xlsx")) и прочитайте в ТабличныйДокумент методом Прочитать.
  • Проверка «что уже есть в базе» — один пакетный запрос с временной таблицей:
bsl
// ТаблицаЗагрузки — ТаблицаЗначений с колонкой «Код». Тип колонки задан явно, как у кода справочника:
// Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(9))
Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    Загрузка.Код КАК Код
    |ПОМЕСТИТЬ ВТ_Загрузка
    |ИЗ
    |    &ТаблицаЗагрузки КАК Загрузка
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Код
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Номенклатура.Код КАК Код,
    |    Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    |    ВТ_Загрузка КАК Загрузка
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |        ПО Загрузка.Код = Номенклатура.Код";
Запрос.УстановитьПараметр("ТаблицаЗагрузки", ТаблицаЗагрузки);
Существующие = Запрос.Выполнить().Выгрузить();
Существующие.Индексы.Добавить("Код"); // дальше — поиск в памяти методом Найти, без запросов в цикле
  • Если строк тысячи, серверный вызов может идти дольше 8 секунд. Такую загрузку выносят в фоновое задание (std 642).

Усложнение. Загрузка в фоне через ДлительныеОперации БСП с индикатором прогресса. Задание в стиле Effective Mobile, 2025–2026: внешняя обработка читает из константы типа ХранилищеЗначения данные разного вида (строка GUID, массив ссылок или таблица значений), отбирает нужные и выводит кликабельные ссылки одной строкой. Работодатель оценивает интерфейс, клиент-серверное взаимодействие и понятность кода.

Стандарты: 436 запросы в цикле, 777 временные таблицы, 642 длительные операции, 723 Linux и macOS.

🔧 Проекты этапа 5 ​

P4. Взаиморасчёты и история статусов клиента ​

Уровень: Junior–Middle · Этап: 5 · 🔴 · Основа: задание для стажёра, 11.2024

Что тренирует: остатки и обороты по договорам, периодический регистр сведений, соединения в запросах, динамический список с произвольным запросом.

Постановка. Справочник «Договоры» (владелец — контрагент), документы «Поступление денег» и «Списание денег», регистр накопления «Взаиморасчёты» (контрагент, договор; сумма). Реализация из P3 увеличивает долг клиента. Статус клиента («Новый», «Постоянный», «Ключевой», «Потерянный») хранится с историей в периодическом регистре сведений.

Критерии приёмки

  • [ ] Долг виден в разрезе контрагента и договора на любую дату.
  • [ ] Текущий статус виден в карточке и в списке контрагентов, история — в отдельной форме.
  • [ ] Отчёт «Ведомость по взаиморасчётам» показывает начальный долг, увеличение, уменьшение и конечный долг за период.
  • [ ] Отчёт «Клиенты без покупок за период» строится одним запросом.
  • [ ] Список контрагентов со статусом открывается без запроса на каждую строку.

Подсказки

  • Ведомость — виртуальная таблица ОстаткиИОбороты с периодом в параметрах.
  • Статус в списке — левое соединение основной таблицы динамического списка со СрезПоследних регистра статусов.
  • «Клиенты без покупок» — левое соединение контрагентов с продажами за период и условие Продажи.Контрагент ЕСТЬ NULL.

Усложнение. Регламентное задание раз в сутки пересчитывает статусы (например, «Потерянный» — нет покупок 90 дней) и не пишет новую запись, если статус не изменился.

Стандарты: 657 виртуальные таблицы, 654 составные типы, 540 регламентные задания.

P5. Себестоимость и рентабельность ​

Уровень: Junior–Middle · Этап: 5 · 🔴 · Основа: задание для стажёра, 11.2024, «СофтСервис», 02.2026

Что тренирует: расчёт средней себестоимости, суммовой учёт в регистре, момент времени, последовательность проведения, отчёт с вычисляемыми полями.

Постановка. Добавьте в «Остатки товаров» ресурс «Сумма» или заведите отдельный регистр себестоимости. Поступление приходует количество и сумму, реализация списывает себестоимость по средней на момент продажи. Сделайте два варианта: средняя по складу и средняя по всей компании. Отчёт на СКД «Рентабельность»: выручка, себестоимость, прибыль и рентабельность = прибыль / выручка.

Критерии приёмки

  • [ ] Себестоимость списания = сумма остатка × списываемое количество / количество остатка. При списании всего остатка списывается вся сумма, копейки на складе не остаются.
  • [ ] Вариант «по складу» или «по компании» выбирается настройкой, например константой.
  • [ ] Рентабельность — вычисляемое поле отчёта без деления на ноль.
  • [ ] В README объяснено, что происходит с себестоимостью следующих продаж при проведении документа задним числом и как вы обеспечиваете правильный результат.

Подсказки

  • Средняя «по всей компании» — это сумма остатков всех складов: СУММА по количеству и сумме с группировкой по номенклатуре.
  • Остаток читайте на момент документа без его собственных движений (ВидГраницы.Исключая) и под блокировкой, как в P2.
  • Документ задним числом меняет среднюю для всех последующих продаж. Варианты решения: перепровести последующие документы по порядку, использовать последовательность документов (std 662) или считать себестоимость регламентной операцией в конце месяца. Выберите один и обоснуйте выбор.

Усложнение. Списание по ФИФО: ФСБУ 5/2019 допускает оценку по себестоимости каждой единицы, по средней себестоимости и ФИФО. Регламентная операция «Расчёт себестоимости за месяц» с пересчётом всех продаж месяца.

Стандарты: 661 блокирующее чтение остатков, 662 граница последовательности, 733 таблица «Остатки», 783 транзакции.

P6. Бухучёт на плане счетов ​

Уровень: Middle · Этап: 5 · 🔴 · Основа: диплом В Нетологии, «СофтСервис», 02.2026

Что тренирует: план счетов, виды субконто через ПВХ, регистр бухгалтерии, проводки, оборотно-сальдовую ведомость.

Постановка. План счетов «Управленческий» со счетами 41, 50, 51, 60, 62 и 90 (субсчета 90.1 и 90.2). Субконто «Номенклатура», «Контрагенты» и «Договоры» задаются через ПВХ «Виды субконто». Документы P2–P4 формируют проводки:

  • закупка товара — Д41 К60;
  • выручка — Д62 К90.1;
  • себестоимость проданного — Д90.2 К41;
  • оплата от покупателя — Д50 (или Д51) К62;
  • оплата поставщику — Д60 К51.

Критерии приёмки

  • [ ] Каждая операция из P2–P4 даёт правильную проводку. Сальдо счёта 41 по количеству и сумме совпадает с остатками регистра накопления из P5.
  • [ ] Решение ведётся параллельно на регистре накопления и регистре бухгалтерии и даёт одинаковый результат, как требовалось в задании «СофтСервис».
  • [ ] ОСВ на СКД: сальдо на начало, обороты, сальдо на конец, развёртка по субконто.
  • [ ] Данные регистра бухгалтерии читаются только через виртуальные таблицы с параметрами.

Подсказки

  • Какие счета активные, пассивные и активно-пассивные (62 — активно-пассивный) и что это значит для сальдо, объяснено в 10_Domain_and_Law.md.
  • ОСВ строится на виртуальной таблице ОстаткиИОбороты регистра бухгалтерии.
  • Для количественного учёта на счёте 41 заведите признак учёта «Количественный» и ресурс «Количество», который зависит от этого признака.

Усложнение. Мини-расчёт зарплаты на регистре расчёта: оклад, больничный, который вытесняет оклад, и проводка начисления (для торговой фирмы — Д44 К70). Эта тема есть на экзамене 1С:Специалист («сложные периодические расчёты»).

Стандарты: 657 виртуальные таблицы, 663 разделение итогов регистров бухгалтерии.

P10. REST HTTP-сервис каталога ​

Уровень: Middle · Этап: 5 · 🔴 · Основа: тестовое задание 03.2025 («Каталог товаров для мобильного приложения»)

Что тренирует: HTTP-сервисы, шаблоны URL, JSON, коды ответа, пагинацию, публикацию на веб-сервере, описание API.

Постановка. HTTP-сервис отдаёт каталог номенклатуры из P1–P3 с ценой на текущую дату:

  • GET /catalog/products?page=1&size=20&sort=name&order=asc — страница списка;
  • GET /catalog/products/{id} — один товар.

Критерии приёмки

  • [ ] Ответ соответствует описанию OpenAPI, описание лежит в репозитории.
  • [ ] Неверные page, size, sort или order дают код 400 с понятным текстом. Несуществующий id даёт 404, некорректный — 400, но никогда не 500.
  • [ ] Пагинация стабильна: одинаковые параметры возвращают одинаковые элементы, порядок сортировки однозначный.
  • [ ] Поле сортировки выбирается из белого списка, пользовательские строки в текст запроса не попадают.
  • [ ] Сервис опубликован на веб-сервере и работает под отдельным пользователем с минимальными правами. Коллекция запросов Postman или Bruno лежит в репозитории.

Подсказки

  • Обработчик получает HTTPСервисЗапрос и возвращает HTTPСервисОтвет. Параметры строки запроса читаются из ПараметрыЗапроса, части шаблона URL — из ПараметрыURL:
bsl
// Модуль HTTP-сервиса «Каталог» (корневой URL catalog), шаблон URL /products/{id}, метод GET
Функция ТоварGET(Запрос)

    Данные = КаталогСервер.ТоварПоИдентификатору(Запрос.ПараметрыURL["id"]); // Структура или Неопределено
    Если Данные = Неопределено Тогда
        Возврат ОтветJSON(404, Новый Структура("error", "product not found"));
    КонецЕсли;
    Возврат ОтветJSON(200, Данные);

КонецФункции

Функция ОтветJSON(КодСостояния, Данные)

    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Данные);

    Ответ = Новый HTTPСервисОтвет(КодСостояния);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    Возврат Ответ;

КонецФункции
  • ТоварПоИдентификатору сами пишете в серверном общем модуле. Строку, которая не является UUID, отсекайте проверкой и отвечайте 400, иначе конструктор УникальныйИдентификатор вызовет исключение и клиент получит 500.
  • В id отдавайте UUID ссылки (Ссылка.УникальныйИдентификатор()), а не код и не внутреннее представление ссылки.
  • В языке запросов нет OFFSET. Два варианта пагинации: выбрать ПЕРВЫЕ (страница × размер) строк и пропустить лишние на сервере или отдавать страницу «после последнего ключа» по уникальному полю. Число в ПЕРВЫЕ пишется прямо в тексте запроса, поэтому подставляйте туда только проверенное целое.

Усложнение. Аутентификация по токену JWT (ТокенДоступа, платформа 8.3.21+) или через OpenID Connect. Описание API библиотекой swagger-1c. Автотест, который вызывает сервис и проверяет коды ответа.

Стандарты: 436 запросы в цикле, 729 оптимальные запросы, 737 проверка прав доступа.

P11. Клиент внешнего API с регламентным заданием ​

Уровень: Middle · Этап: 5 · 🔴 · Основа: тестовое задание 2021, задача «продажи в рублях, курсы только на банковские дни»

Что тренирует: HTTPСоединение, HTTPЗапрос и HTTPОтвет, таймауты, JSON, регламентные задания, журнал регистрации, идемпотентность, срез последних.

Постановка. Регламентное задание раз в день загружает курсы валют из внешнего API в периодический регистр сведений «Курсы валют». Отчёт «Продажи в валюте» пересчитывает выручку из P3 по курсу на дату каждой продажи. Если на эту дату курса нет (выходной), берётся последний известный.

Критерии приёмки

  • [ ] У соединения задан таймаут, код ответа проверяется, ошибки пишутся в журнал регистрации с понятным именем события.
  • [ ] Повторный запуск за ту же дату не создаёт дублей и не портит данные.
  • [ ] Загрузку за любую дату можно запустить из формы, она идёт в фоне и не блокирует интерфейс.
  • [ ] Отчёт берёт курс на дату каждой продажи одним запросом, без запроса в цикле.
  • [ ] Ключ API не зашит в код и не лежит в репозитории, например хранится в безопасном хранилище БСП. Это хранилище не шифрует данные, а лишь отделяет их от обычных реквизитов, поэтому доступ к ним ограничивайте правами и привилегированным режимом.

Подсказки

  • Образец загрузки с таймаутом и перезаписью набора записей за дату есть в 02_Timeline.md.
  • Синхронный HTTP-вызов допустим только на сервере. На клиенте используют асинхронный ВызватьHTTPМетодАсинх, но регламентному заданию клиент не нужен.
  • СрезПоследних принимает одну дату, а у продаж даты разные. Соедините продажи с таблицей регистра по условию «период курса ≤ дата продажи», найдите максимальный период для каждой продажи и вторым соединением возьмите курс.
  • Ошибку 4xx повторять бесполезно. При таймауте или коде 5xx сделайте ограниченное число повторов или повторите загрузку при следующем запуске задания.

Усложнение. Сообщите пользователю о завершении загрузки через уведомления клиента (УведомленияКлиента.ОтправитьУведомление, платформа 8.3.26+). Для сравнения подключитесь к тестовому echo-серверу через WebSocket-клиент (объект метаданных, платформа 8.3.27+) и обработайте входящие сообщения.

Стандарты: 748 таймауты, 498 журнал регистрации, 540 регламентные задания, 740 хранение паролей.

P12. Обмен между двумя базами ​

Уровень: Middle · Этап: 5 · 🔴 · Основа: модель MC-6-001, компетенции «Интеграция ИС» и «Конвертация данных 2.x и 3.x»; тема 7 курса Нетологии

Что тренирует: план обмена, регистрацию изменений, сообщения обмена в XML, ОбменДанными.Загрузка, коллизии; основы EnterpriseData и 1С:Конвертации данных 3.

Постановка. Две копии конфигурации из P1–P3: «Центр» и «Магазин». Центр передаёт справочники и цены, магазин — реализации. Обмен идёт файлами через каталог по кнопке и регламентным заданием.

Критерии приёмки

  • [ ] Выгружаются только данные, изменённые с прошлого обмена. После подтверждения приёма регистрация снимается.
  • [ ] При загрузке устанавливается ОбменДанными.Загрузка = Истина, поэтому бизнес-логика в ПередЗаписью и ПриЗаписи не выполняется.
  • [ ] Загрузка не зависит от порядка объектов в сообщении: документ может прийти раньше справочника, на который ссылается.
  • [ ] Повторная загрузка того же сообщения ничего не ломает.
  • [ ] В README описано, что происходит, если один элемент изменили в обеих базах, и какое правило вы выбрали.

Подсказки

  • Схема на платформе: ПланыОбмена.СоздатьЗаписьСообщения и ПланыОбмена.ВыбратьИзменения при выгрузке, ПланыОбмена.СоздатьЧтениеСообщения и ПланыОбмена.УдалитьРегистрациюИзменений при загрузке. Так устроен обмен с мобильным приложением в демо-конфигурации 1С (план обмена «Мобильные»).
  • Логику «кому регистрировать изменения» пишите в коде по std 701 и std 799, а не в макете плана обмена.

Усложнение. Повторите обмен на формате EnterpriseData с правилами в 1С:Конвертации данных 3 и транспортом БСП. Или замените файлы на HTTP-сервис из P10. Брокеры сообщений в платформу 8 не встроены: RabbitMQ и Kafka подключают через внешние компоненты, HTTP-шлюз или 1С:Шину. Это темы трека tracks/integration.md.

Стандарты: 464 ПередЗаписью, 465 ПриЗаписи, 701 планы обмена с отборами, 799 правила регистрации.

🧪 Проекты этапа 6 ​

P13. Качество и CI ​

Уровень: Middle · Этап: 6 · 🟡 (в продуктовой разработке 🔴) · Основа: тестовое задание на BDD, 07.2024

Что тренирует: 1C:EDT и Git, pull request и ревью, статический анализ, модульные и сценарные тесты, CI, отчёт Allure.

Постановка. Переведите конфигурацию из P2–P5 в проект 1C:EDT и храните его в Git на GitHub или GitLab. На каждый pull request запускайте проверки и тесты.

Критерии приёмки

  • [ ] Проект открывается в EDT стабильной ветки 2026.1. Работа идёт в ветках через pull request.
  • [ ] Пайплайн на каждый pull request: синтаксический контроль, BSL Language Server или проверки EDT без ошибок, модульные тесты, сценарные тесты.
  • [ ] Модульные тесты YAxUnit покрывают расчёт себестоимости из P5 и функции из P0 (распределение суммы, сравнение версий).
  • [ ] Сценарий Vanessa Automation «Реализация при нехватке остатка» проверяет, что документ не проводится и пользователь видит сообщение.
  • [ ] Отчёт Allure сохраняется как артефакт сборки, красный пайплайн блокирует слияние.

Подсказки

  • Встроенной интеграции с CI в EDT нет. Пайплайн собирают внешними средствами: 1cedtcli, ibcmd, vanessa-runner, jenkins-lib.
  • vanessa-runner 3.0.2 работает на OneScript 2 и принимает каталог EDT-проекта напрямую. Тесты запускаются командами vrunner test yaxunit и vrunner test vanessa, покрытие включает опция --coverage-report. В 3.0 команды сгруппированы иначе, чем в 2.x, поэтому сверяйтесь с документацией.
  • Шагам с тестами нужны установленная платформа и лицензия. Поэтому нужен свой (self-hosted) агент или образы onec-docker. Облачные раннеры подходят только для задач без платформы: BSL LS, SonarScanner, скрипты OneScript.
  • YAxUnit не поддерживает веб-клиент, тесты запускайте в тонком клиенте. В EDT удобно запускать их плагином edt-test-runner.
  • BSL LS 1.0 требует JDK 21.
  • Для Jenkins есть готовая библиотека jenkins-lib 0.16.2 (нужен Jenkins 2.524+) со стадиями edtValidate, syntaxCheck, smoke, yaxunit, bdd и sonarqube.

Усложнение. Покрытие кода и SonarQube с плагином sonar-bsl-plugin-community 1.20.0 (SonarQube 25.4+, Java 21) и Quality Gate на новый код. В бесплатной редакции SonarQube нет анализа веток и pull request. Git-хуки precommit4onec. Перенос истории учебного хранилища конфигурации в Git через 1С:ГитКонвертер или gitsync.

Стандарты: многие стандарты проверяет автоматически плагин 1C:Code style V8 в EDT; 783 и 499 — транзакции и перехват исключений, которые часто всплывают на ревью.

P17. Решение с ИИ-ассистентом и разбор ошибок ИИ ​

Уровень: Junior–Middle · Этап: 6 · 🔵 опционально · Основа: бенчмарк PRISM (прогон 25.09.2026)

Что тренирует: проверку чужого кода, знание типовых ошибок генерации на BSL, работу с BSL LS и тестами, правила обращения с данными.

Постановка. Решите заново P0 и P2 (или новую задачу того же размера) с ИИ-ассистентом. Официальный вариант — 1С:Напарник в 1C:EDT: доступ даёт токен на code.1c.ai по учётной записи 1С:ИТС (нужна подписка ИТС, условия доступа смотрите на code.1c.ai), сервис облачный, код уходит на серверы 1С, в Конфигураторе Напарника нет. Другие агенты и IDE тоже подходят, но доступ к части зарубежных сервисов из России ограничен. Весь сгенерированный код проходит BSL LS, синтаксический контроль и тесты из P13.

Критерии приёмки

  • [ ] Итоговый код выполняет общие критерии приёмки и проходит тесты P13.
  • [ ] В README есть таблица ошибок ИИ: что сгенерировано, в чём ошибка и как её нашли (BSL LS, тест, ревью, синтакс-помощник). Каждая ошибка отнесена к одной из осей PRISM: синтаксис, смысл, оптимальность, платформа.
  • [ ] Посчитана доля строк, которые пришлось исправить вручную.
  • [ ] В ассистент не передавались персональные данные и чужой код. В pull request отмечено, какие фрагменты написал ИИ.

Подсказки

  • Типичные ошибки на BSL: выдуманные типы и методы, запрос в цикле, условия виртуальной таблицы в ГДЕ, путаница клиента и сервера, модальные вызовы, лишний контекстный &НаСервере. Примеры выдуманных типов: ОбъектHTTPЗапроса (правильно HTTPЗапрос) и КомпоновщикНастроекDCS (правильно КомпоновщикНастроекКомпоновкиДанных). Любое незнакомое имя сверяйте с синтакс-помощником.
  • По данным PRISM (57 моделей, 35 задач, код исполняется в 1С 8.3.27) лучшие модели решают 85–100% задач, GigaChat и YandexGPT — 0–13%, малые локальные модели — 0–27%. У многих моделей платформенные задачи получаются хуже алгоритмических.
  • MCP не является границей безопасности. Если агент получает доступ к базе, то только к обезличенной копии и под пользователем без прав записи.

Усложнение. Сравните 2–3 доступные модели на пяти своих задачах: половина алгоритмических, половина платформенных. Попросите агента написать .feature-сценарий через MCP-сервер, встроенный в Vanessa Automation с версии 1.2.043.12, потом проверьте и исправьте его вручную. Инструменты, правовые ограничения и правила — в 09_AI_Development.md.

Стандарты: все из общих критериев приёмки. Правовые требования (152-ФЗ, 98-ФЗ) разобраны в 09_AI_Development.md.

🚀 Проекты этапа 7 ​

P14. Найди и почини (производительность) ​

Уровень: Middle–Senior · Этап: 7, трек «Производительность» · 🔵 · Основа: практические задачи из interview-1c («устранить взаимоблокировку», «убрать запросы в цикле»), модель MC-6-001, компетенция «Оптимизация»

Что тренирует: замер производительности, технологический журнал (ТЖ), планы запросов, управляемые блокировки, взаимоблокировки.

Постановка. Сделайте «испорченную» копию конфигурации P2–P5. В ней должны быть: запрос в цикле при проведении, разыменование реквизита составного типа в отчёте и два документа, которые блокируют одни и те же остатки в разном порядке. Нагрузите базу параллельным проведением из нескольких сеансов, найдите проблемы по замерам и ТЖ и почините их.

Критерии приёмки

  • [ ] База в клиент-серверном варианте: PostgreSQL в сборке для 1С или MS SQL Server. ТЖ настроен в logcfg.xml.
  • [ ] Для каждой проблемы есть замер «до» и «после» (время операции, число запросов) и фрагмент ТЖ: события TLOCK, TTIMEOUT, TDEADLOCK и запросы к СУБД.
  • [ ] Взаимоблокировка устранена единым порядком записи и блокировки регистров и контролем остатков по схеме из std 661, транзакции короткие.
  • [ ] Запрос в цикле заменён одним запросом, разыменование — приведением через ВЫРАЗИТЬ.
  • [ ] В README есть отчёт о расследовании: симптом → гипотеза → доказательство → исправление → результат.

Подсказки

  • Начните с замера производительности в Конфигураторе (меню «Отладка»): он показывает строки кода, на которые уходит время.
  • На ИТС есть методики расследования проблем производительности и ошибок блокировок. В них описано, какие события ТЖ собирать.
  • Используйте только PostgreSQL в сборке для 1С (от 1С, Postgres Pro, ALT и т. п.), ванильный не подходит. Для учебного сервера обычно берут community-лицензию; условия её использования проверяйте на developer.1c.ru.
  • Параллельную нагрузку можно дать сценариями Vanessa Automation, запущенными в нескольких сеансах.

Усложнение. APDEX для трёх ключевых операций через подсистему БСП «Оценка производительности». Сравнение плана запроса в СУБД до и после исправления.

Стандарты: 436 запросы в цикле, 654 составные типы, 659 избыточные блокировки, 661 блокирующее чтение, 783 транзакции.

P15. RLS и роли ​

Уровень: Middle · Этап: 7, треки у франчайзи и в продукте · 🔵 · Основа: модель MC-6-001, компетенция «Управление доступом»

Что тренирует: роли и права, ограничение доступа на уровне записей (RLS), РАЗРЕШЕННЫЕ, привилегированный режим, подсистему БСП «Управление доступом».

Постановка. В конфигурации P1–P4 (добавьте контрагентам реквизит «Менеджер») менеджер видит только своих контрагентов и документы по ним, руководитель видит всё. Затем настройте то же в демо-базе типовой без программирования: профилями групп доступа и группами доступа БСП.

Критерии приёмки

  • [ ] Ограничение задано условием RLS в роли по полю «Менеджер» и параметру сеанса с текущим пользователем, а не отборами в формах.
  • [ ] Списки, отчёты и печатные формы под менеджером работают без ошибок доступа. РАЗРЕШЕННЫЕ стоит в запросах для вывода данных и отсутствует в запросах проведения и расчётов (std 415).
  • [ ] Проведение под менеджером не ломается из-за RLS. Привилегированный режим включается точечно, и причина описана.
  • [ ] Права проверены под пользователем: сценарием или ручным чек-листом входа под менеджером.
  • [ ] В README ваше решение сравнивается со стандартным и производительным вариантами ограничения доступа в БСП.

Подсказки

  • RLS нужен, когда права зависят от данных. Если достаточно запретить объект целиком, хватает ролей.
  • Привилегированный режим отключает RLS. Используйте его точечно и только в серверном коде (std 485).
  • Параметры сеанса заполняются в модуле сеанса, в УстановкаПараметровСеанса. Как их изменение влияет на производительность ограничения доступа, описывает std 491.

Усложнение. Сравните время открытия списка и отчёта под администратором и под менеджером. Настройте дату запрета изменения данных в типовой.

Стандарты: 415, 485, 491, 689 настройка ролей, 737 проверка прав доступа.

P16. Мобильное приложение «Торговый агент» ​

Уровень: Middle · Этап: 7, ветка «1С:Элемент и мобильная разработка» · 🔵 опционально · Основа: модель MC-6-001, компетенция «Мобильные приложения»; демо-конфигурация 1С

Что тренирует: мобильную платформу и мобильный клиент, адаптацию форм, работу без связи, синхронизацию через план обмена, отладку на устройстве.

Постановка. Торговый агент работает без стабильной связи. Он видит своих клиентов и номенклатуру с ценами, оформляет заказы и отправляет их в центральную базу из P1–P3, когда связь появляется. Выберите вариант и обоснуйте его: мобильный клиент с автономным режимом (обмен выполняет платформа) или мобильное приложение на мобильной платформе (обмен пишете вы: план обмена плюс HTTP- или веб-сервис).

Критерии приёмки

  • [ ] Заказ оформляется без связи и уходит в центр при синхронизации. Повторная синхронизация не создаёт дублей.
  • [ ] Агент получает только своих клиентов. Отбор делает план обмена на стороне центра: в мобильном приложении RLS нет.
  • [ ] Формы удобны на телефоне и проверены на эмуляторе или устройстве Android.
  • [ ] Модули проходят пакетную проверку в мобильных режимах: /CheckModules с ключами -MobileClient, -MobileClientStandalone, -MobileAppClient, -MobileAppServer.
  • [ ] В README перечислено, какие объекты не поддерживаются в выбранном варианте и как вы обошли ограничения.

Подсказки

  • Мобильное приложение — это мобильная платформа плюс конфигурация, упакованные «Сборщиком мобильных приложений» в .apk или .ipa. В нативный код оно не компилируется.
  • В мобильном приложении нет RLS, регламентных заданий, бухгалтерского учёта и периодических расчётов. РИБ не поддерживается, другие планы обмена — поддерживаются.
  • На Android отладка идёт через ADB и мобильную платформу разработчика. Для сборки и подписи под iOS нужен Mac с Xcode.
  • Образец обмена — демо-конфигурация 1С: план обмена «Мобильные» и веб-сервис MAExchange.
  • Спрос на мобильную разработку на 1С — ниша: B2B- и B2E-приложения для торговых агентов, склада и выездных сотрудников.

Усложнение. Сканирование штрихкодов камерой (ПоказатьСканированиеШтрихКодов) и геометка заказа (СредстваГеопозиционирования). Автотест мобильного клиента в Vanessa Automation по инструкции проекта (подключение через adb, у способа есть ограничения).

Стандарты: 703 модальные окна и синхронные вызовы, 701 планы обмена с отборами.

🗺 Карта проектов, компетенций и вопросов собеседования ​

Компетенции названы по модели MC-6-001. Вопросы — те, что чаще всего задают по теме проекта. Краткие ответы и другие вопросы собраны в 08_Interview.md, матрица компетенций — в 03_Competencies.md.

ПроектКомпетенцииЧто спросят на собеседовании
P0Алгоритмы на встроенном языкеКак удалить элементы массива в цикле? Чем соответствие отличается от структуры, зачем индекс в таблице значений?
P1Проектирование архитектуры, интерфейсы клиентского приложенияСправочник, перечисление или ПВХ — когда что? Чем &НаСервере отличается от &НаСервереБезКонтекста?
P2Учётные регистры, язык запросовПочему условия виртуальной таблицы задают в параметрах? Как контролировать остатки, чтобы двое не списали один товар?
P3Язык запросов, внешние отчёты и печатные формыКак получить цену на дату документа? Из чего состоит печатная форма?
P7Внешние отчёты, обработки, печатные формы; БСПКак подключить внешнюю печатную форму к типовой? Что запрещено в безопасном режиме?
P8Доработка конфигураций и расширения, обновление нетиповых конфигурацийЧто можно и чего нельзя в расширении? Когда &Перед, когда &Вместо? Как отличить изменённую типовую от типовой?
P9Интерфейсы клиентского приложения, язык запросовКак передать файл на сервер? Как найти дубли без запроса в цикле?
P4Учётные регистры, язык запросовОстатки, обороты или остатки и обороты — какую таблицу брать? Как найти клиентов без покупок одним запросом?
P5Учётные регистры, процессы клиентаКак считается средняя себестоимость? Что ломает проведение задним числом?
P6Учётные регистры, процессы клиентаКакие проводки у закупки, продажи и оплаты? Что такое субконто?
P10Интеграция ИСКак устроен HTTP-сервис? Какие коды ответа и когда возвращать?
P11Интеграция ИСЧто будет с внешним вызовом без таймаута? Как сделать загрузку идемпотентной?
P12Интеграция ИС, Конвертация данных 2.x и 3.xКак работает план обмена? Зачем проверять ОбменДанными.Загрузка? Чем КД3 отличается от КД2?
P13GIT, 1C:EDT, стандарты разработки, тестированиеКакие виды автотестов есть в 1С? На что вы смотрите на код-ревью?
P17Стандарты разработки, контекст организации (152-ФЗ, 98-ФЗ)Какие ошибки ИИ на BSL вы встречали? Какие правила работы с ИИ ввели бы в команде?
P14ОптимизацияОткуда берутся взаимоблокировки? Как найти медленное место? Что такое «В данной транзакции уже происходили ошибки»?
P15Управление доступомКак устроен RLS в типовых? Где нельзя писать РАЗРЕШЕННЫЕ?
P16Мобильные приложенияМобильный клиент или мобильное приложение — что выбрать? Чего нет в мобильном приложении?

🎓 Для наставников и работодателей ​

  • Проекты P0–P15 подходят как учебные и тестовые задания: критерии приёмки можно использовать как чек-лист проверки.
  • При проверке смотрите не только на то, что всё работает. Важнее клиент-серверное взаимодействие, запросы, блокировки, README и история коммитов.
  • Материалы репозитория распространяются по лицензии MIT. Предложить новый проект или исправить постановку можно через Issue или pull request по правилам CONTRIBUTING.md.

🔗 Источники ​

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


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