Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Замена интерфейса выбора ПланаСчетов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
SV71
Всем привет!

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

Для возможности использования "Субконто" при создании отчетов ведение счетов осуществляется с помощью объекта "ПланыСчетов.НИС_Учт_Сч_Счета".
Атрибут "ПланыСчетов.НИС_Учт_Сч_Счета" включен в табличную часть "Документы.Фин_Док_Платеж".

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

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

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


//////////////////////////////////////////////////////////////////////////////
//
// Функция ОСНВ_ФормаВыбора
//
// Назначение: Возвращает форму выбора "Справочники.НИС_Учт_Сч_Счета"
//
// Вызов: Процедура ОперацииСчетДТНачалоВыбора
//
&НаСервереБезКонтекста
Функция ОСНВ_ФормаВыбора()
    Возврат Справочники.НИС_Учт_Сч_Счета.ПолучитьФормуВыбора("ФормаВыбора");
КонецФункции // ОСНВ_ФормаВыбора


При попытке исполнения возникает ошибка:
Цитата
{Документ.Фин_Док_Платеж.Форма.ФормаДокумента.Форма(770)}: Ошибка при вызове метода контекста (ПолучитьФормуВыбора)
Возврат Справочники.НИС_Учт_Сч_Счета.ПолучитьФормуВыбора("ФормаВыбора");
по причине:
Интерактивные операции недоступны


Подскажите пожалуйста: в чем проблема?
alex040269
Цитата(SV71 @ 09.09.14, 11:46) необходимо зарегистрироваться для просмотра ссылки
Подскажите пожалуйста: в чем проблема?

Цитата(SV71 @ 09.09.14, 11:46) необходимо зарегистрироваться для просмотра ссылки
&НаСервереБезКонтекста

SV71
Насколько я Вас понял: неверная директива компиляции.

Попробовал совсем убрать, пробовал заменить "НаСервере" - результат та же ошибка.
Petre
ОткрытьФорму()
logist
Цитата(SV71 @ 09.09.14, 12:09) необходимо зарегистрироваться для просмотра ссылки
Попробовал совсем убрать, пробовал заменить "НаСервере" - результат та же ошибка.

Замените
ОСНВ_ФормаВыбора();
на
ОткрытьФорму("ПутьКФормеВыбора")

не надо создавать лишних процедур.
SV71
Цитата(logist @ 09.09.14, 14:25) необходимо зарегистрироваться для просмотра ссылки
Замените
ОСНВ_ФормаВыбора();
на
ОткрытьФорму("ПутьКФормеВыбора")


Огромное спасибо!
Все получилось.
Тема закрыта.
SV71
Здравствуйте!

Разрешите адресовать Вам еще один вопрос по доработке данной задачи.

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

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


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



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


Когда в отладчике останавливаюсь в "Процедура ОбработкаВыбора", то значение переменной "мВыборСчета" неопределено, хотя при пошаговой отладке "Процедура ОперацииСчетДТНачалоВыбора" видно, что оно заполняется значением тип "ПолеФормы".

Наверное я неверно указываю глобальную переменную?
Подскажите как правильно?
DartRomanius
С управляемыми формами, забудьте о глобальных переменных модуля. Навсегда забудьте.
alex040269
Пропишите &НаКлиенте над Перем мВыборСчета; и должно заработать.
SV71
Цитата(alex040269 @ 10.09.14, 15:02) необходимо зарегистрироваться для просмотра ссылки
Пропишите &НаКлиенте над Перем мВыборСчета; и должно заработать.


Спасибо, помогло по передаче параметра.

Только теперь не получается занести информацию.

Прямое обращение работает нормально:
     Элементы.Операции.ТекущиеДанные.СчетДТ = ОбщиеМеханизмыКлиента.ПолучитьЗначение("Справочник.НИС_Учт_Сч_Счета", ВыбранноеЗначение, "Счет");


Через переданный параметр типа "ПолеФормы" отрабатывает без ошибок, но значение на форму не попадает. Непонятно куда оно вообще уходит.
       // ================================
        // = ТУТ тип  мВыборСчета "ПолеФормы" =
        // ================================
        мВыборСчета = ОбщиеМеханизмыКлиента.ПолучитьЗначение("Справочник.НИС_Учт_Сч_Счета", ВыбранноеЗначение, "Счет");


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