Практические вопросы для разработчика 1С Middle-уровня (1–3 года опыта)
Эти задачи ориентированы на разработчиков 1С с практическим опытом от 1 до 3 лет, которые уже пишут обработки, работают с запросами, регистрами и документами, но хотят убедиться, что используют платформу эффективно и по «канону».
Вопросы охватывают реальные сценарии: обработка ошибок, экспорт в Excel, работа с расширениями, фоновые операции, передача параметров между формами и другие повседневные задачи. Попробуйте решить их самостоятельно — а затем сверьтесь с ответом. Это отличный способ выявить пробелы и укрепить профессиональные навыки.
Вопрос 1. Как правильно обработать ошибку при записи документа, чтобы пользователь увидел понятное сообщение?
Посмотреть ответ
Используйте конструкцию
Попытка ... Исключение и метод ОписаниеОшибки():
Попытка
Документ.Записать();
Исключение
Ошибка = ОписаниеОшибки();
Сообщить("Не удалось записать документ: " + Ошибка.Текст);
КонецПопытки;
Вопрос 2. Как программно заполнить табличную часть документа из запроса?
Посмотреть ответ
Очистите табличную часть, выполните запрос и заполните строки в цикле:
Документ.Товары.Очистить();
Запрос = Новый Запрос("ВЫБРАТЬ Номенклатура, Количество ИЗ РегистрСведений.ОстаткиНаСкладе");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Строка = Документ.Товары.Добавить();
Строка.Номенклатура = Выборка.Номенклатура;
Строка.Количество = Выборка.Количество;
КонецЦикла;
Вопрос 3. Как реализовать экспорт данных в Excel без использования внешних компонент?
Посмотреть ответ
Используйте встроенный механизм
ТаблицаЗначений и метод ЗаписатьФайл:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Наименование");
ТЗ.Колонки.Добавить("ИНН");
// Заполнение данными...
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ТЗ.ЗаписатьФайл(ИмяФайла);
ОткрытьФайл(ИмяФайла);
Вопрос 4. Как проверить, установлено ли расширение в информационной базе?
Посмотреть ответ
Используйте глобальный контекст
Метаданные.Расширения:
ИмяРасширения = "МоёРасширение";
РасширениеУстановлено = Ложь;
Для Каждого Расширение Из Метаданные.Расширения Цикл
Если Расширение.Имя = ИмяРасширения Тогда
РасширениеУстановлено = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если РасширениеУстановлено Тогда
Сообщить("Расширение установлено");
КонецЕсли;
Вопрос 5. Как получить список всех пользователей, имеющих доступ к роли «Бухгалтер»?
Посмотреть ответ
Через запрос к регистру сведений «ПользователиРоли»:
Запрос = Новый Запрос("ВЫБРАТЬ\n\tПользователиРоли.Пользователь КАК Пользователь\nИЗ\n\tРегистрСведений.ПользователиРоли КАК ПользователиРоли\nГДЕ\n\tПользователиРоли.Роль = &Роль");
Запрос.УстановитьПараметр("Роль", Роли.Бухгалтер);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Пользователь.Наименование);
КонецЦикла;
Вопрос 6. Как отменить проведение всех документов за сегодняшний день?
Посмотреть ответ
Переберите все нужные типы документов и вызовите
ОтменитьПроведение():
ТипыДокументов = Новый Массив;
ТипыДокументов.Добавить(Тип("Документ.ПриходнаяНакладная"));
ТипыДокументов.Добавить(Тип("Документ.РеализацияТоваровУслуг"));
Для Каждого ТипДок Из ТипыДокументов Цикл
Выборка = МенеджерДокумента(ТипДок).НайтиПоОтбору(
Новый Структура("Дата", НачалоДня(ТекущаяДата())));
Для Каждого Документ Из Выборка Цикл
Если Документ.Проведен Тогда
Документ.ОтменитьПроведение();
КонецЕсли;
КонецЦикла;
КонецЦикла;
Вопрос 7. Как создать обработку, которая работает как служба (без UI)?
Посмотреть ответ
Создайте обработку без формы, с процедурой
Обработка в общем модуле, и запускайте её через командную строку или планировщик:
// В общем модуле обработки (признак «Вызов сервера»)
Процедура Обработка(Параметры) Экспорт
// Логика без интерфейса
Лог.Добавить("Служба запущена");
КонецПроцедуры
Запуск из командной строки:
bash
1
Вопрос 8. Как реализовать поиск по реквизиту типа «Хранилище значений»?
Посмотреть ответ
Используйте поле
.Значение в запросе:
Запрос = Новый Запрос("ВЫБРАТЬ\n\tДокументы.Ссылка\nИЗ\n\tДокумент.МойДокумент КАК Документы\nГДЕ\n\tДокументы.МоеХранилище.Значение = &ИскомоеЗначение");
Запрос.УстановитьПараметр("ИскомоеЗначение", ИскомоеЗначение);
Результат = Запрос.Выполнить();
Вопрос 9. Как программно обновить конфигурацию базы данных?
Посмотреть ответ
Используйте метод глобального контекста (только в режиме конфигуратора!):
Если РежимЗапуска() = РежимЗапускаПриложения.Конфигуратор Тогда
ОбновитьКонфигурациюБазыДанных();
Сообщить("Конфигурация обновлена");
Иначе
Сообщить("Обновление возможно только в конфигураторе");
КонецЕсли;
Вопрос 10. Как передать параметры между формами в управляемом приложении?
Посмотреть ответ
Используйте параметр
Параметры при вызове формы:
// В вызывающей форме
ПараметрыФормы = Новый Структура("Контрагент, Сумма", Контрагент, 1000);
ОткрытьФорму("Обработка.МояОбработка.Форма.Форма", ПараметрыФормы);
// В открываемой форме (модуль формы)
Процедура ПриОткрытии(Отказ)
Если Параметры.Свойство("Контрагент") Тогда
Элементы.Контрагент.Значение = Параметры.Контрагент;
КонецЕсли;
КонецПроцедуры
Смотрите также: Вопросы по теории для разработчика 1С Middle-уровня (1–3 года опыта)
⋯
Ваша реакция?