Тип не определен диалог выбора файла

Обновлено: 06.07.2024

p.s. Просьба задавать вопросы только по программированию. На вопросы по типовым конфигурациям обычно не отвечаю по двум причинам
1. В последнее время редко с ними работаю.
2. Чтобы ответить на вопрос требуется: установить соответствующую базу нужного релиза, смоделировать ситуацию, и только после этого возможно залезть в конфигуратор и разобраться что не так (к сожалению, у меня нет столько времени).

Диалог выбора файла

cobra77777 » 06 июн 2014, 05:59

Что неправильно делаю ? Спасибо.

cobra77777 » 06 июн 2014, 06:20

cobra77777 » 06 июн 2014, 07:26

Возник вопрос. Есть код. Пытаюсь вывести в Список Значений, но он не показывает мне прочитанные строки в СЗ. Что не так делаю ?

&НаСервере
Процедура ЗагрузитьXML(Файлик)
ПутьКФайлу = Файлик [0];

//XML
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);

СЗ = Новый СписокЗначений;

Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЧтениеXML.ПрочитатьАтрибут();
Атрибут = ЧтениеXML.Значение;
КонецЕсли;


Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Если Атрибут = "СтраховойНомер" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;
КонецЕсли;

Если Атрибут = "Фамилия" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;


Если Атрибут = "Имя" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;


Если Атрибут = "Отчество" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;

&НаКлиенте
Процедура ПрочитатьФайлXML(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
Фильтр = "Файл(*.xml)|*.xml";
ДиалогОткрытияФайла.Фильтр = Фильтр;
Если ДиалогОткрытияФайла.Выбрать() Тогда
Файлик = ДиалогОткрытияФайла.ВыбранныеФайлы;
ЗагрузитьXML(Файлик);

admin » 09 июн 2014, 16:30

Что такое СЗ? Реквизит формы? И как смотрите, что список пустой?

Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда

Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Атрибут = ЧтениеXML.Имя;

Если Атрибут = "СтраховойНомер" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;

Если Атрибут = "Фамилия" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;

Если Атрибут = "Имя" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;

Если Атрибут = "Отчество" Тогда
СЗ.Добавить(ЧтениеXML.Значение);
КонецЕсли;

cobra77777 » 12 июн 2014, 20:11

Сергей а ещё вопрос никак не могу записать в Таблицу Значений (ТЗ) СтраховойНомер :

&НаКлиенте
Процедура ТаблицаЗначений(Команда)
ТЗ ()
КонецПроцедуры

Чтение = Новый ЧтениеXML;

ТЗНаФорме = Новый ТаблицаЗначений;

Чтение.ОткрытьФайл("c:\1.xml");
Спр="";
// чтение осуществляется по одному тегу
Пока Чтение.Прочитать() Цикл
// анализируем тип элемента и его имя
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ИмяУзла = Чтение.Имя;
КонецЕсли;


Если ИмяУзла = "СтраховойНомер" и Чтение.ТипУзла = ТипУзлаXML.Текст Тогда

Для Каждого СтрокаТЗ из ТЗНаФорме Цикл

НоваяСтрока.СтраховойНомер = СтраховойНомер; ----------------------------------- Вот здесь загвоздка

admin » 14 июн 2014, 20:08

Ваш программный код показывает, что вы вообще не понимаете что делаете. Так что здесь загвоздка не только в этом месте. Код полная чушь.

cobra77777 » 15 июн 2014, 06:06

а можете показать в качестве примера как правильно прочитать 1-ую ветку Страх .номер в таблицу Значений?

admin » 16 июн 2014, 08:25

Если задачу уточните, то покажу. Нужна структура вашего xml файла, а также что хотите сделать. Я так понял, что хотите в таблицу на экран загрузить стах.номера.

cobra77777 » 18 июн 2014, 09:43

admin писал(а): Если задачу уточните, то покажу. Нужна структура вашего xml файла, а также что хотите сделать. Я так понял, что хотите в таблицу на экран загрузить стах.номера.
Ну для начала да. Я подготовлю пример затем выложу. Спасибо.

cobra77777 » 18 июн 2014, 11:27

1. Необх-мо прочитать xml файлы;
2. Сформировать Xls файл след.структуры по колонкам (1 файл xls):
1.СтраховойНомер, фамилия, имя, отчество
2. СтраховойНомер, фамилия, имя, отчество
и т.д.

Здравствуйте, переделываю конфигурацию на упф, столкнулся с проблемой.

Был следующий рабочий код. Сейчас его нужно реализовать на упф, как это сделать? Знаю, что ДиалогВыбораФайла должны вызыватся на клиенте, подскажите как реализовать эту функцию. Код из общего модуля.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Перевод Обычного приложения Толстого Клиента в Управляемое
Подскажите пожалуйста возможно ли это? Пытались перевести- ни одна форма не открывается.

Из обычного приложеиня перенести код в управляемое приложение
Добрый день. Возникла такая проблемка. Есть обычное приложение и в нем код в общем модуле.

Ошибка при создании scripting.filesystemobject: Тип не определен (СОМОбъект). Учебная версия платформы.
Почему когда хочу создать обект scripting.filesystemobject выдает ошибку: Тип не определен.

egor_22rus, разнесите: код для работы с файлами - на клиенте, код для работы с набором записей регистра - на сервере. GreenkA, Спасибо, я это понимаю, но никак не могу реализовать. egor_22rus, где у вас будет располагаться эта функция и откуда вы ее вызываете?

GreenkA, эта функция лежит в общем модуле, я ее вызываю в модуле справочника.

Решение

вы ее видимо вызываете в модуле формы элемента справочника по команде ПТС1().
Тогда в модуле формы элемента справочника меняем указанные выше процедуры на:

Вместо одного общего модуля ОбщегоНазначения - создаем два других(или доп. два других):
- ОбщегоНазначенияКлиент(в свойствах галочка Клиент)
- ОбщегоНазначенияСервер(галочки Сервер, ВызовСервера)

В общем модуле ОбщегоНазначенияКлиент:

GreenkA, спасибо гренка, получилось, в теории знал, как сделать но на практике реализовать не смог. Скажи, как реализовать механизм, чтобы выбранный файл сохранялся. В данный момент повторно открывается окно диалога.

Добавлено через 7 минут
GreenkA,

Но почемуто не срабатывает

Добавлено через 44 минуты
GreenkA, в регистр вроди бы записывает, файлик в нужной папке создает. Но при повторном открытии не срабатывает код, который поверяет есть ли в регистре эта ссылка. При повторном нажатии происходит не открытие созданного файла, а повторный вызов диалогового окна.


// Свойство КнопкаВыбора элемента формы установим в значение Да
// и будем обрабатывать событие НачалоВыбора этого элемента
СтандартнаяОбработка = Ложь; // Отказываемся от стандартной обработки процедуры

// Создаем диалог выбора файла и указываем для чего он будет использоваться
Диалог = Новый ДиалогВыбораФайла ( РежимДиалогаВыбораФайла . Открытие ); // или ВыборКаталога или Сохранение
Диалог . Фильтр = "Документ PDF (*.pdf)|*.pdf" ; // Строка с файловыми фильтрами
Диалог . Заголовок = "Выберите документ PDF" ; // Текст заголовка окна выбора

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

Диалог . Показать ( ОповещениеЗавершения ); // Открываем окно выбора файла

// Эта процедура будет вызвана после закрытия окна выбора файла:
&НаКлиенте
Процедура ПриВыбореФайла ( ВыбФайлы , ДополнительныеПараметры ) Экспорт

Если ВыбФайлы <> Неопределено Тогда
ПутьКФайлу = ВыбФайлы [ 0 ];
КонецЕсли;

&НаКлиенте
Функция ПриВыбореФайла ()

Режим = РежимДиалогаВыбораФайла . Открытие ; //(ВыборКаталога, Открытие, Сохранение)

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла ( Режим );
ДиалогОткрытияФайла . ПолноеИмяФайла = "" ;

Текст = "ru = ""Текст""; en = ""Text""" ;
//Текст = "ru = ""Таблица""; en = ""Excel""";
//Текст = "ru = ""Документ PDF""; en = ""Adobe Acrobat PDF""";

Фильтр = НСтр ( Текст )+ "(*.txt)|*.txt" ; // Строка с файловыми фильтрами
//Фильтр = НСтр(Текст)+"(*.xlsx)|*.xlsx| (*.xls)|*.xls (*.xlsb)|*.xlsb|";
//Фильтр = НСтр(Текст)+"(*.pdf)|*.pdf";

ДиалогОткрытияФайла . Фильтр = Фильтр ;
ДиалогОткрытияФайла . МножественныйВыбор = Истина; // Ложь - Если нужен один фай
ДиалогОткрытияФайла . Заголовок = "Выберите файлы" ; // "Выберите файл"

Если ДиалогОткрытияФайла . Выбрать () Тогда
Текст = "ru = ""; Размер = ""; en = ""; Size = """ ;

// МножественныйВыбор = Истина:
МассивФайлов = ДиалогОткрытияФайла . ВыбранныеФайлы ;
Для Каждого ИмяФайла Из МассивФайлов Цикл
ВыбФайл = Новый Файл ( ИмяФайла );
Сообщить ( ИмяФайла + НСтр ( Текст )+ ВыбФайл . Размер ());
КонецЦикла;
// МножественныйВыбор = Ложь:
// ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
// Сообщить(ПутьКФайлу+ДиалогОткрытияФайла.Размер());
Иначе
Текст = "ru = ""Файл(ы) не выбран!""; en = ""File(s) not selected!""" ;
Предупреждение ( НСтр ( Текст ));
КонецЕсли;


Опишем обработчик события начала выбора самостоятельно, пример кода приведен ниже: В процедуре которая будет вызываться после закрытия диалога выбора, мы проверяем параметр МассивФайлов на Неопределено, т.к. пользователь может отказаться от выбора и мы должны это учитывать.
Если пользователь все же выбрал файл, то переменная МассивФайлов будет содержать массив строк, в которых будут перечислен полный путь к выбранным файлам:

Рассмотрим как асинхронно (а в управляемых формах необходимо только так) программно обработать выбор пользователем пути к файлу.

Постановка задачи

Предположим, что на форме создан реквизит ПутьКФайлу. Этот реквизит имеет тип Строка и выведен на форму. Пользователь должен указывать в этом поле путь к файлу Excel.

Решение

Для удобства свойство КнопкаВыбора элемента формы установим в значение Да и будем обрабатывать событие НачалоВыбора этого элемента.

В процедуре начала выбора элемента ПутьКФайлу необходимо написать код:

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора ( Элемент , ДанныеВыбора , СтандартнаяОбработка )

// Отказываемся от стандартной обработки процедуры
СтандартнаяОбработка = Ложь;

Диалог . Показать ( ОповещениеЗавершения );

содержит описание процедуры, которая будет вызвана после закрытия диалога выбора. В этой процедуре должно быть два параметра:

  • ВыбранныеФайлы — массив выбранных имен файлов. Если пользователь отказался от выбора файла, то в параметре будет содержаться Неопределено;
  • ДополнительныеПараметры — произвольное значение, которое указано при создании объекта ОписаниеОповещения в третьем параметре (в нашем примере не задано).

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

&НаКлиенте
Процедура ВыборФайлаЗавершение ( ВыбранныеФайлы , ДополнительныеПараметры ) Экспорт

Если ВыбранныеФайлы <> Неопределено Тогда

ПутьКФайлу = ВыбранныеФайлы [ 0 ];

Внимание!

Процедура, указанная в объекте ОписаниеОповещения должна иметь ключевое слово Экспорт.

Приведенный пример можно немного усовершенствовать: передать в третий параметр конструктора ОписаниеОповещения переменную Диалог.

ОповещениеЗавершения = Новый ОписаниеОповещения ( «ВыборФайлаЗавершение» , ЭтотОбъект , Диалог );

Тогда в процедуре ВыборФайлаЗавершение будет доступно немного больше информации: из параметра ДополнительныеПараметры можно будет узнать каталог, в котором хранится выбранный файл, и фильтр, которому соответствует файл.

В конструкторе объекта ДиалогВыбораФайла в параметре указывается для чего будет открыт диалог. Возможные значения системного перечисления РежимДиалогаВыбораФайла:

Приведу еще несколько свойств объекта ДиалогВыбораФайла:

  • Каталог — текущий каталог;
  • ПолноеИмяФайла — начальное полное имя файла. После выбора файла содержит полное имя выбранного файла (кроме множественного выбора и выбора каталога);
  • МножественныйВыбор — флаг возможности выбора нескольких файлов;
  • ПредварительныйПросмотр — флаг необходимости показа окна предварительного просмотра файлов;
  • ПроверятьСуществованиеФайла — флаг необходимости проверки существования выбираемого файла.

Решение средствами БСП

В конфигурациях со втроенной Библиотекой стандартных подсистем можно использовать процедуру

ОбработчикВыбораФайла ( Объект , Знач ИмяСвойства , СтандартнаяОбработка = Ложь, Знач ПараметрыДиалога = Неопределено, ОповещениеЗавершения = Неопределено ) Экспорт

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

&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора ( Элемент , ДанныеВыбора , СтандартнаяОбработка )

ОбменДаннымиКлиент . ОбработчикВыбораФайла ( ЭтотОбъект , «ПутьКФайлу» , СтандартнаяОбработка , НастройкиДиалога );

Остались вопросы?
Спросите в комментариях к статье.

Платформа:

Конфигурация:

Кстати, и Предупреждение на сервере тоже нет.

А с какой целью вообще была создана серверная процедура?

Constantus --> Constantus



Просмотр профиля

Это не типовой справочник, который сохраняет ссылки на сканированный документ. Вот его код:

Что могла произойти? До сегодня всё работало и ничего не выскакивало изначально

logist --> logist



Просмотр профиля Могла измениться версия платформы, основной режим запуска, вариант совместимости конфигурации. Constantus --> Constantus



Просмотр профиля

logist @ Сегодня, 15:19 ,

Ничего не менялось. Утром 2-а обмена сделал, всё прошло на ура. И где всё это проверить, а главное с чем сравнить?

logist --> logist



Просмотр профиля Сравнить текущую конфигурацию с какой-то ранее сохраненной Constantus --> Constantus



Просмотр профиля

logist @ Сегодня, 15:28 ,

Сравнил с последней моей конфигурацией "Сравнить и объединить"

Окно показало, что никаких изменений нет. Т.е. конфиг не менялся.

Petre --> Petre



Просмотр профиля

Читайте также: