Ссылка в справочнике на вордовский документ

Версия для печатиPDF-версия

Добрый день. Есть чистая база, один справочник. Одно из полей должно содержать ссылку на вордовский документ, чтобы его можно было открыть и просмотреть. Создаю реквизит Прложение с типом Хранилище Значения, вставляю код (найденный мной на форуме). Пишет ошибку :

{Справочник.ДокументыПоТП.МодульОбъекта(22,29)}: Тип не определен (ДиалогВыбораФайла)
        ДиалогВыбораФайла = Новый <<?>>ДиалогВыбораФайла(РежимДиалога); (Проверка: Сервер),                              

то есть из модуля объекта нельзя использовать ДиалогВыбораФайла?  Как исправить?  Помогите пж запустить процедуру

Процедура КоманднаяПанельПриложениеНажатиеКнопки(Кнопка)
    Перем РежимДиалога, ДиалогВыбораФайла, Кнопки, дд, ИмяФайла, Папка, ПолноеИмяФайла;    
    
    Кнопки = ЭлементыФормы.ДействияФормы.Кнопки.Приложение.Кнопки;
    Если Кнопка = Кнопки.Выбрать тогда

        РежимДиалога = РежимДиалогаВыбораФайла.Открытие;
        ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
        ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина;
        ДиалогВыбораФайла.ПредварительныйПросмотр = Истина;
        ДиалогВыбораФайла.Заголовок = "Выберите файл приложения";
        ДиалогВыбораФайла.Фильтр = "*.doc|*.doc"; //"*.doc|*.doc|*.xls|*.xls|*.jpg|*.jpg|*.tif|*.tif|*.png|*.png|*.bmp|*.bmp|*.png|*.png|*.*|*.*";
        Если ДиалогВыбораФайла.Выбрать() Тогда
            Попытка
                дд = Новый ДвоичныеДанные(ДиалогВыбораФайла.ПолноеИмяФайла);
                Приложение = Новый ХранилищеЗначения(дд, Новый СжатиеДанных(6));
            Исключение
                Предупреждение(ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;

    ИначеЕсли Кнопка = Кнопки.Показать тогда
        
        Если Приложение.Получить() <> Неопределено тогда
            //ИмяФайла = "1.doc");
            //Папка = КаталогВременныхФайлов();
            //ПолноеИмяФайла = Папка + ?(Прав(Папка, 1) = "\", "", "\") + ИмяФайла;
            ПолноеИмяФайла = ПолучитьИмяВременногоФайла(".doc");
            Попытка
                дд = Приложение.Получить();
                дд.Записать(ПолноеИмяФайла);
                ЗапуститьПриложение(ПолноеИмяФайла);
            Исключение
                Предупреждение(ОписаниеОшибки());
            КонецПопытки;
        КонецЕсли;
        
    ИначеЕсли Кнопка = Кнопки.СохранитьВфайл тогда
        
        Если Приложение.Получить() <> Неопределено тогда
            РежимДиалога = РежимДиалогаВыбораФайла.Сохранение;
            ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога);
            ДиалогВыбораФайла.Фильтр = "*.doc|*.doc"; //"*.doc|*.doc|*.xls|*.xls|*.jpg|*.jpg|*.tif|*.tif|*.png|*.png|*.bmp|*.bmp|*.png|*.png|*.*|*.*";
            Если ДиалогВыбораФайла.Выбрать() Тогда
                Попытка
                    дд = Приложение.Получить();
                    дд.Записать(ДиалогВыбораФайла.ПолноеИмяФайла);
                Исключение
                    Предупреждение(ОписаниеОшибки());
                КонецПопытки;
            КонецЕсли;
        КонецЕсли;
        
    ИначеЕсли Кнопка = Кнопки.Удалить тогда
        // Диалог подтверждения
        // ...
        Приложение = Неопределено;
        
    КонецЕсли;
    
    ДоступностьКнопокОбработкиПриложения(Кнопки);
    
КонецПроцедуры

Процедура ДоступностьКнопокОбработкиПриложения(Кнопки)
    Перем д;
    
    д = Приложение.Получить() = Неопределено;
    Кнопки.Выбрать.Доступность = Не ТолькоПросмотр и д;
    Кнопки.Показать.Доступность = Не ТолькоПросмотр и Не д;
    Кнопки.СохранитьВфайл.Доступность = Не ТолькоПросмотр и Не д;
    Кнопки.Удалить.Доступность = Не ТолькоПросмотр и Не д;
    
КонецПроцедуры

Действие = Новый Действие("КоманднаяПанельПриложениеНажатиеКнопки");
нм = ЭлементыФормы.ДействияФормы.Кнопки.Добавить("Приложение", ТипКнопкиКоманднойПанели.Подменю);         //нм.Картинка = Скрепка;
нк = нм.Кнопки.Добавить("Выбрать",         ТипКнопкиКоманднойПанели.Действие, "Выбрать", Действие);         нк.Картинка = БиблиотекаКартинок.ОткрытьФайл;
нк = нм.Кнопки.Добавить("Показать",     ТипКнопкиКоманднойПанели.Действие, "Показать", Действие);        нк.Картинка = БиблиотекаКартинок.Печать;
нк = нм.Кнопки.Добавить("СохранитьВфайл",ТипКнопкиКоманднойПанели.Действие, "Сохранить в файл", Действие);нк.Картинка = БиблиотекаКартинок.СохранитьФайл;
нк = нм.Кнопки.Добавить("Удалить",         ТипКнопкиКоманднойПанели.Действие, "Удалить", Действие);        нк.Картинка = БиблиотекаКартинок.Очистить;
ДоступностьКнопокОбработкиПриложения(нм.Кнопки);

 

Все процедуры и функции интерактивной работы могут быть вызваны только на клиенте. Модуль объекта исполняется на сервере. Нужно вызов диалога выбора файла (да и вообще весь вышеприведённый код) поместить в модуль формы с директивой компиляции &НаКлиенте.

PS. Зачем создавать кнопки меню динамически? Проще их сразу в конфигураторе создать и не усложнять себе жизнь. 

Сделала. Теперь пишет ошибку {Справочник.ДокументыПоТП.МодульОбъекта(91,18)}: Тип не определен (Действие)
Действие = Новый <<?>>Действие("КоманднаяПанельПриложениеНажатиеКнопки"); (Проверка: Сервер)

 

Так сделайте кнопки сразу в конфигураторе и не надо будет с действиями заморачиваться.