10 вопросов по теории для разработчика 1С Middle-уровня (1–3 года опыта)
Этот тест предназначен для разработчиков 1С с опытом от 1 до 3 лет, которые уже уверенно работают с типовыми конфигурациями и хотят проверить свое понимание архитектурных решений, механизмов безопасности, производительности и расширенных возможностей платформы. Вопросы охватывают такие темы, как фоновые задания, транзакции, расширения, RLS, кэширование и работа с распределёнными базами — все то, с чем вы сталкиваетесь при переходе от простых доработок к проектированию сложных решений. Открывайте ответы только после того, как попробуете сформулировать их сами — так вы получите максимум пользы! (смотрите также: вопросы для Junior-разработчиков 1С)
Вопрос 1. Что такое подсистема прав доступа на уровне записей (RLS) в 1С? Как она реализуется?
Посмотреть ответ
Реализуется через:
Настройку ролей с указанием условий отбора по измерениям (например, «ТекущийПользователь = Менеджер»),
Использование ограничений на данные в конфигураторе (в свойствах ролей → «Ограничения на данные»),
Автоматическую подстановку условий в запросы при работе с защищёнными объектами.
Важно: RLS работает на уровне СУБД, если используется СУБД с поддержкой (PostgreSQL, MS SQL), или эмулируется на стороне сервера 1С.
Вопрос 2. Как работает механизм фоновых заданий в 1С? Приведите пример использования.
Посмотреть ответ
Пример: отправка email-рассылки.
Задание = Новый ФоновоеЗадание("ОтправкаРассылки", Параметры);
Задание.Запустить();
Обработчик ОтправкаРассылки описывается в общем модуле с признаком «Вызов сервера».
Фоновые задания выполняются на сервере, поддерживают прогресс, ошибки и повторный запуск.
Вопрос 3. Что такое расширение конфигурации? Чем оно отличается от доработки основной конфигурации?
Посмотреть ответ
Преимущества:
Возможность обновлять типовую конфигурацию без потери доработок,
Изоляция изменений,
Поддержка нескольких расширений одновременно.
В отличие от прямой доработки, расширение не «ломает» совместимость с обновлениями от 1С.
Вопрос 4. Как реализовать транзакцию в 1С? Зачем она нужна?
Посмотреть ответ
НачатьТранзакцию();
Попытка
Документ1.Записать();
Документ2.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Используется для обеспечения целостности данных (например, при проведении сложных документов).
Вопрос 5. Что такое план обмена? Как он используется в распределённых информационных базах?
Посмотреть ответ
Каждая ИБ регистрируется как узел обмена. При изменении данных создаются сообщения обмена, которые отправляются другим узлам.
Используется для:
Репликации справочников,
Обмена документами,
Централизованного учёта.
Требует настройки правил обмена и обработчиков получения/отправки.
Вопрос 6. Как оптимизировать медленный отчёт, строящийся более 30 секунд?
Посмотреть ответ
Анализ запроса через «Журнал запросов» — найти узкие места.
Добавить индексы по полям, участвующим в
ГДЕ, СГРУППИРОВАТЬ, СОЕДИНЕНИЕ.Использовать временные таблицы вместо вложенных запросов.
Ограничить выборку (параметры периода, отбора).
Перенести вычисления на СУБД (избегать циклов в модуле).
При необходимости — использовать фоновое формирование.
Важно: избегать Выборка.Следующий() внутри других циклов — это N+1 проблема.
Вопрос 7. Что такое общие реквизиты у объектов метаданных? Приведите пример их применения.
Посмотреть ответ
Пример:
Создать общий реквизит Автор (тип — Справочник.Пользователи),
Назначить его всем документам,
В модуле менеджера документов автоматически заполнять:
Процедура ПередЗаписью(Отказ)
Если ЭтотОбъект.Автор = Неопределено Тогда
ЭтотОбъект.Автор = Пользователи.ТекущийПользователь();
КонецЕсли;
КонецПроцедуры
Это упрощает поддержку и обеспечивает единообразие.
Вопрос 8. Как работает кэширование в 1С? Как создать собственный кэш?
Посмотреть ответ
Кэш запросов (в памяти сервера),
Кэш объектов (справочники, документы),
Кэш форм.
Для создания пользовательского кэша используется глобальный контекст:
Если НЕ ГлобальныйКонтекст.СвойствоКэша("МойКэш") Тогда
ГлобальныйКонтекст.УстановитьСвойствоКэша("МойКэш", РассчитатьДанные());
КонецЕсли;
Результат = ГлобальныйКонтекст.СвойствоКэша("МойКэш");
Кэш живёт в течение сеанса или до перезагрузки сервера. Для межсеансового кэша — использовать регистр сведений.
Вопрос 9. Что такое управляемое приложение и обыкновенное приложение? Когда что использовать?
Посмотреть ответ
Обыкновенное приложение — устаревший режим, работает только в толстом клиенте, использует обычные формы.
Используйте управляемое приложение, если:
Требуется работа из браузера,
Нужна поддержка мобильных устройств,
Проект новый или активно развивается.
Обыкновенное — только для поддержки старых решений.
Вопрос 10. Как реализовать защиту от параллельной записи одного и того же документа двумя пользователями?
Посмотреть ответ
При открытии формы — вызвать
ЭтотОбъект.УстановитьБлокировку().При закрытии формы —
ЭтотОбъект.СнятьБлокировку().При попытке открыть уже заблокированный документ — показать предупреждение.
Альтернатива: использовать механизм контроля версий (реквизит ВерсияДанных) и проверять его при записи. Если версия изменилась — отказать в записи с сообщением.
Смотрите также: Практические вопросы для разработчика 1С Middle-уровня (1–3 года опыта)