База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как правильно использовать ДиалогВыбораФайла в управляемой форме на 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 день, 5 часов назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
15 апреля 2026 в 14:45 #36476
Почему на управляемой форме в моей обработке вышла ошибка при сохранении
{ВнешняяОбработка.ПолучениДолжностейАльфаАвто.Форма.Форма.Форма(5,17)}: Тип не определен (ДиалогВыбораФайла)
Диалог = Новый <<?>>ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); (Проверка: Сервер)
Мой код
&НаСервере
Процедура ЗагрузитьИзExcel(Команда)Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Фильтр = «Файлы Excel (.xlsx)|.xlsx|Все файлы (.)|.«;Если НЕ Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;ИмяФайла = Диалог.ПолноеИмяФайла;
Попытка
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла);
Исключение
Сообщить(«Ошибка при открытии файла: » + ОписаниеОшибки());
Возврат;
КонецПопытки;ТаблицаЗначений.Очистить();
СтрокаЗаголовка = 1;
КолДолжность = Неопределено;
КолКод = Неопределено;
НомерКолонки = 1;
СтДолжность = 1;
СтКодДолжности = 2;Для НомерКолонки = 1 По ТабДок.ВысотаТаблицы Цикл
Должность = ТабДок.Область(«R»+НомерКолонки+»C»+СтДолжность).Текст;
КодДол = ТабДок.Область(«R»+НомерКолонки+»C»+СтКодДолжности).Текст;
НомерКолонки = НомерКолонки+1;
КонецЦикла;КонецПроцедуры
-
15 апреля 2026 в 14:45 #36477
Ошибка «Тип не определен (ДиалогВыбораФайла)» возникает потому, что объект ДиалогВыбораФайла доступен только на клиенте, а у вас процедура с атрибутом &НаСервере — код выполняется на сервере, где этот тип недоступен.
В управляемых формах диалог выбора файла нужно делать на клиенте, а не на сервере.
Правильный подход:
1. Сделайте процедуру с диалогом выбора файла &НаКлиенте.
2. В ней вызовите серверную процедуру, передав путь к файлу.
Пример:
1С (Код)12345678910111213141516171819202122232425262728293031&НаКлиентеПроцедура ЗагрузитьИзExcel(Команда)Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);Диалог.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx|Все файлы (*.*)|*.*";Если НЕ Диалог.Выбрать() ТогдаВозврат;КонецЕсли;ИмяФайла = Диалог.ПолноеИмяФайла;// Вызов серверной процедуры, передаем путь к файлуЗагрузитьДанныеИзФайла(ИмяФайла);КонецПроцедуры&НаСервереПроцедура ЗагрузитьДанныеИзФайла(ИмяФайла)ПопыткаТабДок = Новый ТабличныйДокумент;ТабДок.Прочитать(ИмяФайла);ИсключениеСообщить("Ошибка при открытии файла: " + ОписаниеОшибки());Возврат;КонецПопытки;// Здесь работа с ТабДок и заполнение табличной частиКонецПроцедуры—
Почему так:
— Диалог выбора файла — это UI-элемент, он доступен только на клиенте.
— Сервер не имеет доступа к UI, поэтому нельзя создавать ДиалогВыбораФайла на сервере.
—
Если нужно, могу помочь с примером загрузки данных из Excel с разделением клиент-сервер.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.