Как составить тестовое задание и вопросы для собеседования 1С-программиста на стек УТ 11 + БП 3.0 + ЗУП 3.1 + PostgreSQL

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Смена штатного программиста 1С — это всегда критический момент для компании. Особенно остро этот вопрос стоит в организациях, где развернут целый «зоопарк» конфигураций, таких как Управление торговлей 11, Бухгалтерия предприятия 3.0 и Зарплата и управление персоналом 3.1, работающих в связке под управлением СУБД PostgreSQL. В такой среде специалист должен обладать не просто навыками кодинга, но и глубоким пониманием типовых бизнес-процессов, логики работы СУБД и механизмов интеграции.

Рассмотрим, как правильно составить тестовое задание и сформировать пул проверочных вопросов для соискателя уровня Middle или Senior, чтобы быстро оценить его реальный опыт и отсеять «теоретиков».

Методология составления тестового задания на основе реального опыта компании

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

Для создания качественного теста выполним три простых шага:

  1. Анализ последних доработок: Поднимите историю изменений в вашей конфигурации Управление торговлей за последние полгода. Выделите ключевую доработку (например, интеграцию с локальной CRM-системой или специфический механизм резервирования товаров) и упростите ее до рамок тестовой задачи.
  2. Анализ обращений пользователей: Соберите список частых вопросов и проблем, с которыми пользователи УТ, БП или ЗУП обращались к уходящему программисту. Реальные кейсы из практики — лучший индикатор профпригодности.
  3. Матрица оценки по направлениям: Разработайте сбалансированный тест, содержащий по три вопроса (простой, средний и сложный) для каждой из используемых систем (УТ, ЗУП, БП, Платформа 1С, СУБД Postgres). Оценивайте ответы по бальной шкале (1, 2 или 3 балла). Это позволит увидеть общую картину компетенций кандидата.

Блок ЗУП 3.1: Каверзный вопрос на знание учета дивидендов

Зарплатный учет в 1С таит в себе множество нюансов, и проверка кандидата на знание специфических механизмов ЗУП 3.1 позволяет сразу оценить уровень его практического опыта. Разберем показательный вопрос-ловушку.

Вопрос: Как отражается в программе Зарплата и управление персоналом 3.1 начисление и выплата прибыли (дивидендов) учредителям компании?

Разбор ситуации и правильный ответ:

Этот вопрос содержит классическую подставу, на которой срезаются многие программисты, не знающие реального функционала ЗУП. Начисление дивидендов регистрируется в программе специализированным документом НачислениеДивидендов. Однако с выплатой все гораздо интереснее.

В старых релизах ЗУП 3.1 (в рамках ветки 3.1.5 и ранее) функционал автоматической выплаты дивидендов отсутствовал — они проводились только для целей учета НДФЛ, а сама выплата отражалась в бухгалтерской базе. В современных релизах (начиная с ветки 3.1.7) появился специализированный документ ВедомостьНаВыплатуПрочихДоходов. Если кандидат отвечает, что выплата дивидендов оформляется стандартной ведомостью в банк или в кассу, это явный признак того, что он плохо знаком с логикой учета незарплатных доходов в ЗУП. Дивиденды относятся к прочим доходам, и их выплата должна производиться через реестр выплат прочих доходов.

Блок Управление торговлей 11: Учет взаиморасчетов и заказов

В конфигурации Управление торговлей 11 механизмы планирования и контроля оплат существенно отличаются от старых версий (например, УТ 10.3). Проверим понимание архитектуры взаиморасчетов.

Вопрос: В каком случае используются объекты расчетов по заказам и каковы их главные плюсы и минусы?

Разбор ситуации и правильный ответ:

Объекты расчетов по заказам (детализация расчетов «По заказам» в договоре или соглашении) используются тогда, когда компании важно жестко контролировать оплату и отгрузку в разрезе каждой конкретной сделки (заказа клиента или заказа поставщику).

Блок СУБД PostgreSQL: Специфика администрирования и оптимизации запросов

Поскольку базы данных в вашей компании работают на СУБД PostgreSQL, кандидат должен понимать ключевые отличия этой СУБД от коммерческой MS SQL Server. Запросы, которые быстро выполняются в файловом режиме или на MS SQL, под управлением Postgres могут вызывать серьезные проблемы с производительностью.

Вопрос: Почему один и тот же запрос к базе 1С может мгновенно выполняться на MS SQL, но приводить к критическому зависанию на PostgreSQL? Что такое проблема Nested Loop в Postgres и как ее избежать?

Разбор ситуации и правильный ответ:

Планировщик запросов (Query Planner) СУБД PostgreSQL очень чувствителен к актуальности статистических данных таблиц. При неверной или устаревшей статистике планировщик некорректно оценивает кардинальность (количество строк), которые будут получены в результате выполнения подзапросов или соединений таблиц.

В результате этого Postgres часто выбирает алгоритм соединения вложенным циклом — Nested Loop вместо более эффективного Hash Join или Merge Join. Если внешняя таблица содержит десятки тысяч строк, выполнение вложенного цикла для каждой строки приводит к лавинообразному росту нагрузки на дисковую подсистему и процессор.

Для решения этой проблемы в 1С под PostgreSQL необходимо:

  1. Обеспечить регулярное обновление статистики СУБД (выполнение регламентной команды ANALYZE для таблиц баз данных).
  2. Избегать использования виртуальных таблиц регистров (особенно остатков и оборотов) внутри соединений других запросов. Правильный подход — предварительный выбор необходимых данных из виртуальной таблицы во временную таблицу с ее обязательным индексированием, и последующее соединение этой временной таблицы в основном запросе.
  3. Минимизировать использование подзапросов в условиях соединения и конструкции ГДЕ.

Рассмотрим пример неоптимального запроса, который гарантированно вызовет проблемы производительности на PostgreSQL:


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

Проанализируем этот запрос: здесь выполняется соединение двух виртуальных таблиц напрямую. Для оптимизации под PostgreSQL мы должны переписать этот код с использованием временных таблиц:


// Шаг 1: Выбираем продажи во временную таблицу
ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество КАК Количество
ПОМЕСТИТЬ ВТ_Продажи
ИЗ
    РегистрНакопления.ВыручкаИПродажи.Обороты(&НачалоПериода, &КонецПериода) КАК Продажи
;

// Обязательно индексируем временную таблицу по полю соединения
ИНДЕКСИРОВАТЬ ПО
    Номенклатура
;

// Шаг 2: Выбираем цены во вторую временную таблицу
ВЫБРАТЬ
    Цены.Номенклатура КАК Номенклатура,
    Цены.Цена КАК Цена
ПОМЕСТИТЬ ВТ_Цены
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ВТ_Продажи)) КАК Цены
;

ИНДЕКСИРОВАТЬ ПО
    Номенклатура
;

// Шаг 3: Соединяем подготовленные временные таблицы
ВЫБРАТЬ
    Продажи.Номенклатура,
    Продажи.Количество,
    Цены.Цена
ИЗ
    ВТ_Продажи КАК Продажи
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цены КАК Цены
        ПО Продажи.Номенклатура = Цены.Номенклатура

Проверка практических навыков программирования и работы с платформой

Кандидат уровня Middle+ должен хорошо ориентироваться в стандартах разработки фирмы «1С», механизмах БСП (Библиотеки стандартных подсистем) и управлении блокировками данных.

Ниже приведены три варианта практических заданий, которые можно предложить соискателю для выполнения непосредственно на собеседовании или в качестве домашнего задания (на выполнение должно уходить не более 1–2 часов).

Вариант задания №1: Оптимизация параллельной работы системы (Управляемые блокировки)

Постановка задачи: Напишите фрагмент кода для проведения документа, который списывает остатки товаров со склада. Код должен быть защищен от ситуации «избыточного блокирования» и гарантировать корректность остатков при высокой параллельной работе пользователей. Использование механизма управляемых блокировок обязательно.

Ожидаемое решение: Кандидат должен продемонстрировать понимание работы объекта БлокировкаДанных. Блокировка должна накладываться строго перед чтением данных из регистра накопления остатков, чтобы исключить чтение грязных или изменяемых в этот момент данных другими сессиями.

Пример правильной реализации процедуры проведения документа на сервере:


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

Вариант задания №2: Разработка внешней печатной формы по стандартам БСП

В современных конфигурациях (включая УТ 11, БП 3.0, ЗУП 3.1) любые доработки печатных форм должны выполняться в виде внешних обработок, подключаемых через механизм «Дополнительные отчеты и обработки» Библиотеки стандартных подсистем (БСП). Это позволяет обновлять конфигурацию безболезненно.

Постановка задачи: Создать внешнюю печатную форму для документа РеализацияТоваровУслуг в УТ 11, которая выводит в макет значение дополнительного реквизита номенклатуры (например, «Артикул производителя»). Печатная форма должна регистрироваться в информационной базе без изменения конфигурации.

Ожидаемые действия кандидата:

  1. Создание внешней обработки с предопределенной экспортной функцией СведенияОВнешнейОбработке().
  2. Заполнение параметров регистрации (вид обработки — ПечатнаяФорма, назначение — соответствующий документ).
  3. Реализация процедуры Печать(), принимающей массив объектов и коллекцию печатных форм на входе.
  4. Написание оптимального запроса для получения данных документа и дополнительных реквизитов номенклатуры (через табличную часть дополнительных реквизитов справочника номенклатуры, исключая обращение через точку в цикле).

Вариант задания №3: Тестирование логики поиска и устранения неисправностей

Иногда важнее проверить не то, насколько быстро кандидат пишет код, а то, как он мыслит в стрессовых ситуациях, когда «все упало».

Ситуация для обсуждения: Пользователи начали массово жаловаться на то, что время проведения документов реализации в УТ 11 увеличилось примерно в 5 раз по сравнению со вчерашним днем. Ваши действия по локализации и устранению проблемы?

Ожидаемый ход рассуждений кандидата:

  1. Выяснить у администратора базы данных или проанализировать журнал изменений конфигурации: вносились ли какие-либо изменения в код модулей проведения документов или структуру метаданных накануне.
  2. Проверить состояние регламентных заданий в базе данных 1С (особенно актуально для файловых баз и баз под управлением СУБД Postgres, где фоновые процессы могут утилизировать ресурсы процессора).
  3. Воспользоваться встроенным инструментом платформы — ЗамерПроизводительности в конфигураторе (если проблему можно воспроизвести на тестовой копии базы). Это позволит точечно найти строку кода или запрос, на выполнение которого уходит больше всего времени.
  4. Если проблема плавающая и воспроизводится только на рабочей базе под нагрузкой — проанализировать технологический журнал 1С и настроить сбор событий DBPOSTGRS (или DBMSSQL в зависимости от СУБД) и TTIMEOUT / TDEADLOCK для выявления взаимных блокировок СУБД или долгих запросов.
  5. Проверить состояние дисковой активности на сервере СУБД и сервере приложений 1С, убедиться в отсутствии нехватки оперативной памяти.

Использование комплексного подхода, сочетающего проверку теоретических знаний специфики используемых конфигураций (УТ, БП, ЗУП), понимания платформенных механизмов работы с СУБД PostgreSQL и небольшого практического задания на разработку по стандартам БСП, позволит вам гарантированно подобрать квалифицированного специалиста, способного быстро и безболезненно войти в рабочий процесс компании.

← На главную