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