Версия для печати темы (https://pro1c.org.ua/index.php?s=a91827c897ac0e2f04d4042bbd97a66c&showtopic=19957)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Не удается записать значение в поле формы

Автор: SV71 25.09.14, 14:57

Всем здравия!

1С 8.2, режим "Управляемое приложение", самописная конфигурация.

На "Форму документа" добавлен реквизит "ПереводИсточник", тип "ПланСчетовСсылка.НИС_Учт_Сч_Счета".

Производится подмена "Формы выбора".
Выбор производится из более удобного интерфейса "Справочник.НИС_Учт_Сч_Счета", в котором есть атрибут "Счет", того же типа "ПланСчетовСсылка.НИС_Учт_Сч_Счета".

Через функцию "ОбщиеМеханизмыКлиента.ПолучитьЗначение" получаю "ПланСчетовСсылка.НИС_Учт_Сч_Счета.Ссылка".

При попытке записи в поле формы "ПереводИсточник" возникает ошибка:

Цитата
Поле объекта недоступно для записи (ПереводИсточник)



Код "Формы документа"
// *********************
// * Переменные модуля *
// *********************

///////////////////////////////////////////////////
//
// Назначение: Поле для занесения выбранного счета
//
// Использование:
// - устанавливается: Процедура ПереводИсточникНачалоВыбора
// - считывается для адресации значения: Процедура ОбработкаВыбора
//
&НаКлиенте
Перем мВыборСчета;


// ****************
// * Подпрограммы *
// ****************
//////////////////////////////////////////////////////////////////////////////
//
// Процедура ПереводИсточникНачалоВыбора
//
// Назначение: Вызывает интерфейс выбора "ПереводИсточник"
//
// Вызов: При нажатии кнопки выбора или нажатии клавиши F4 на атрибуте "ПереводИсточник"
//
&НаКлиенте
Процедура ПереводИсточникНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    // ====================================================================
    // = Зафиксировать заненсение результата в "Элементы.ПереводИсточник" =
    // ====================================================================
    мВыборСчета = Новый Массив;
    мВыборСчета.Добавить("ПереводИсточник");
    
    // ==========================================================
    // = Создадим форму выбора из "Справочник.НИС_Учт_Сч_Счета" =
    // ==========================================================
    фВыборСчета = ОткрытьФорму("Справочник.НИС_Учт_Сч_Счета.Форма.ФормаВыбора");
    фВыборСчета.ВладелецФормы = ЭтаФорма;
    фВыборСчета.Открыть();
    
    // ===================================
    // = Запретить стандартную обработку =
    // ===================================
    СтандартнаяОбработка = Ложь;
    
    
    // =========================================================================
    // = Результат выбора обрабатывается в процедуре события "ОбработкаВыбора" =
    // =========================================================================
КонецПроцедуры // ПереводИсточникНачалоВыбора


//////////////////////////////////////////////////////////////////////////////
//
// Процедура ОбработкаВыбора
//
// Назначение: Заполняет выбранный "СчетДТ"
//
// Вызов: При выборе значения в подчиненной форме
//
&НаКлиенте
Процедура ОбработкаВыбора(пВыбранноеЗначение, пИсточникВыбора)
    // =============================
    // = Проверить источник выбора =
    // =============================
    Если пИсточникВыбора.ИмяФормы = "Справочник.НИС_Учт_Сч_Счета.Форма.ФормаВыбора" Тогда
        // = Произведен выбор из "Справочник.НИС_Учт_Сч_Счета"
        // ===================================================
        
        // ============================
        // = Занести выбранный "Счет" =
        // ============================
        Если мВыборСчета[0] = "ПереводИсточник" Тогда
            Элементы.ПереводИсточник =
            ОбщиеМеханизмыКлиента.ПолучитьЗначение(
                    "Справочник.НИС_Учт_Сч_Счета",
                    пВыбранноеЗначение,
                    "Счет"
                    );
            
        КонецЕсли;
        

    КонецЕсли; // пИсточникВыбора.ИмяФормы = "Справочник.НИС_Учт_Сч_Счета.Форма.ФормаВыбора"
    
КонецПроцедуры // ОбработкаВыбора



Код общего модуля "ОбщиеМеханизмыКлиента"
Установлены свойства модуля: Сервер, Вызов сервера
////////////////////////////////////////////////////////////////////////////////
//
// Функция ПолучитьЗначение
//
// Описание: Формирует запрос к объекту на сервере
//
// Возвращаемое значение: Значение поля, название которого в "пПолеЗначения" в первой записи запроса
//
Функция ПолучитьЗначение(
    пОбъект                        ,        // Объект из которого производится отбор
    пЗапись                        ,        // Запись для отбора
    Знач пПолеЗначения = Неопределено    // Название поля для возврата
    ) Экспорт
    
    // ====================================
    // = Установить значения по умолчанию =
    // ====================================
    Если пПолеЗначения = Неопределено Тогда
        пПолеЗначения = "Наименование";
    КонецЕсли;
    
    
    // =======================
    // = Сформировать запрос =
    // =======================
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |" + пПолеЗначения + "  
    |  ИЗ " + пОбъект + "
    |  ГДЕ Ссылка = &Ссылка
    |";
    
        
    // ====================
    // = Выполнить запрос =
    // ====================
    Запрос.УстановитьПараметр("Ссылка", пЗапись["Ссылка"]);
    РезультатЗапроса = Запрос.Выполнить();
        
    
    // ==============================
    // = Получить результат запроса =
    // ==============================
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    
    Возврат Выборка[пПолеЗначения];
    
КонецФункции //ПолучитьЗначение


Помогите разобраться как правильно записать значение в поле формы "ПереводИсточник".

Всех благ!!!

Автор: Vofka 25.09.14, 15:09

А так:

//...
Если мВыборСчета[0] = "ПереводИсточник" Тогда
            ПереводИсточник =
            ОбщиеМеханизмыКлиента.ПолучитьЗначение(
                    "Справочник.НИС_Учт_Сч_Счета",
                    пВыбранноеЗначение,
                    "Счет"
                    );
            
        КонецЕсли;
//...


?

Автор: Petre 25.09.14, 15:12

Какой путь к данным у этого поля формы?

Автор: SV71 26.09.14, 11:10

Цитата(Vofka @ 25.09.14, 17:09) *
А так:

//...
Если мВыборСчета[0] = "ПереводИсточник" Тогда
            ПереводИсточник =
            ОбщиеМеханизмыКлиента.ПолучитьЗначение(
                    "Справочник.НИС_Учт_Сч_Счета",
                    пВыбранноеЗначение,
                    "Счет"
                    );
            
        КонецЕсли;
//...


?


Заработало, огромное спасибо!

Что-то я не разобрался сразу с объектной моделью.
Надо поискать описание чем отличаются обращения: "Элементы.РеквизитФормы" от "РеквизитФормы".

Тема закрыта.

Автор: logist 26.09.14, 12:18

Цитата(SV71 @ 26.09.14, 11:10) *
чем отличаются обращения: "Элементы.РеквизитФормы" от "РеквизитФормы".

Тем, что Элементы это обращение к элементу формы, т.е. управление тем, что отображается на форме (визуализация), а реквизит формы (объекта) это уже непосредственная работа с данными.

Автор: Petre 26.09.14, 13:33

Цитата(SV71 @ 26.09.14, 12:10) *
"Элементы.РеквизитФормы"

Такого нет. Есть "Элементы.ЭлементФормы".

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua