Практические вопросы для разработчика 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 года опыта)

Ваша реакция?
Подписаться
Уведомление о
guest
0 Комментарий
Первые
Последние Популярные
Встроенные отзывы
Посмотреть все комментарии
Back to top button