Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 сен 2021, 19:09

Как заполнить поле надписи при открытии документа?

Автор bobaXe, 06 янв 2018, 23:25

0 Пользователей и 1 гость просматривают эту тему.

bobaXe

Всем привет.
В форме документа есть поле "Остаток" (поле надписи), в него выводится остаток на счете, выбранном в поле "Счет" (поле ввода). Выбираю остаток на счете из регистра накопления.
Заполнить поле "Остаток" легко при обработке события "ОбработкаВыбора" поля "Счет". И это хорошо, но хочется, чтоб при открытии уже проведенного документа в поле "Остаток" выводился остаток счета из поля "Счет".
Как это можно реализовать?
При выборе делаю следущее. У поля "Счет" в событиии "Обработка выбора" выбираю из регистра накопления остаток средств по выбранному счету. Это возможно, так как в "Обработка выбора" есть переменная "Выбранное значение". Никак не могу сделать такое же при открытии формы. Это возможно?

AIFrame


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Если ЗначениеЗаполнено(Счет) Тогда // Или Объект.Счет. Хз, что у тебя там и как.
        //
    КонецЕсли;
КонецПроцедуры

bobaXe

Напишу подробнее.
Делаю так при изменении поля "Счет" в форме.
&НаКлиенте
Процедура СчетОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СчетОбработкаВыбораНаСервере(ЭтотОбъект.Остаток, ВыбранноеЗначение);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СчетОбработкаВыбораНаСервере(Остаток, ВыбранноеЗначение)
Остаток = РаботаСДокументами.ПолучитьОстатокСчета(ВыбранноеЗначение);
КонецПроцедуры


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

AIFrame

При открытии на клиенте

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    СчетОбработкаВыбораНаСервере(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура СчетОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СчетОбработкаВыбораНаСервере(ЭтотОбъект, ВыбранноеЗначение);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СчетОбработкаВыбораНаСервере(Объект, ВыбранноеЗначение = неопределено)

    Остаток = Объект.Остаток;
    Если ВыбранноеЗначение  = неопределено Тогда
        Счет = Объект.Счет;
    Иначе
        Счет = ВыбранноеЗначение;
    КонецЕсли;

    Остаток = РаботаСДокументами.ПолучитьОстатокСчета(Счет);
КонецПроцедуры

bobaXe

Нашел нужное в "ЭтаФорма.Элементы.Счет.ТекстРедактирования".
Можно закрывать.
Добавлено: 07 янв 2018, 15:35


Цитата: AIFrame от 07 янв 2018, 12:27
При открытии на клиенте

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    СчетОбработкаВыбораНаСервере(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура СчетОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СчетОбработкаВыбораНаСервере(ЭтотОбъект, ВыбранноеЗначение);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СчетОбработкаВыбораНаСервере(Объект, ВыбранноеЗначение = неопределено)

    Остаток = Объект.Остаток;
    Если ВыбранноеЗначение  = неопределено Тогда
        Счет = Объект.Счет;
    Иначе
        Счет = ВыбранноеЗначение;
    КонецЕсли;

    Остаток = РаботаСДокументами.ПолучитьОстатокСчета(Счет);
КонецПроцедуры

Этот код не сработал, т. к. "ЭтотОбъект" это форма, а ее передавать на сервер нельзя. Зато из Вашего кода взял привычку делать проверки. Спасибо за помощь.
Сделал в общем виде так:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПриОткрытииНаСервере(ЭтаФорма.Остаток, ЭтаФорма.Элементы.Счет.ТекстРедактирования);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПриОткрытииНаСервере(Остаток, Счет)
Остаток = РаботаСДокументами.ПолучитьОстатокСчета(Счет);
КонецПроцедуры

&НаКлиенте
Процедура СчетПриИзменении(Элемент)
СчетПриИзмененииНаСервере(ЭтаФорма.Остаток, ЭтаФорма.Элементы.Счет.ТекстРедактирования);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СчетПриИзмененииНаСервере(Остаток, Счет)
Остаток = РаботаСДокументами.ПолучитьОстатокСчета(Счет);
КонецПроцедуры

А в функции "ПолучитьОстатокСчета" формирую запрос с условием "ОстаткиСредствОстаткиИОбороты.Счет.Наименование = &Счет".

AIFrame

А зачем тебе две процедуры, которые делают ровно одно и то же?
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ОбновитьОстатокНаСервере(ЭтаФорма.Остаток, ЭтаФорма.Элементы.Счет.ТекстРедактирования);
КонецПроцедуры

&НаКлиенте
Процедура СчетПриИзменении(Элемент)
    ОбновитьОстатокНаСервере(ЭтаФорма.Остаток, ЭтаФорма.Элементы.Счет.ТекстРедактирования);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ОбновитьОстатокНаСервере(Остаток, Счет)
    Остаток = РаботаСДокументами.ПолучитьОстатокСчета(Счет);
КонецПроцедуры

Но все равно неправильно делаешь. Счет же явно ссылка на справочник, а ты в запросе по "наименованию" отбираешь. Моветон моветонистый.
Еще раз, если у тебя в документе "счет" - реквизит документа, то работай с ним и голову не грей.
Смотри как это делают "как правило".

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ОбновитьДанныеФормы();
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДанныеФормы()
    Остаток = ОбновитьОстатокНаСервере(Объект.Счет);
КонецПроцедуры

&НаКлиенте
Процедура СчетПриИзменении(Элемент)
    Остаток = ОбновитьОстатокНаСервере(Объект.Счет);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьОстатокНаСервере(СчетОбъекта)
    Возврат ?(ЗначениеЗаполнено(СчетОбъекта), РаботаСДокументами.ПолучитьОстатокСчета(СчетОбъекта), 0);
КонецФункции


Tsaiger



&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

   ПолучитьОстатокПоСчету(Объект.Счет, Надпись);

КонецПроцедуры


&НаСервереБезКонтекста
Процедура ПолучитьОстатокПоСчету(Знач Счет, Надпись)
  // чет так делаешь!!! и устанавливаешь надписи остаток
КонецПроцедуры

&НаКлиенте
Процедура СчетПриИзменении(Элемент)

Если ЗначениеЗаполнено(Объект.Счет) Тогда   
      ПолучитьОстатокПоСчету(Объект.Счет, Надпись);
КонецЕсли;

КонецПроцедуры

// Не нужно использовать функции. Учите как работают управляемые формы.





Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск