fixin (fixin) wrote,
fixin
fixin

Category:

Умею классическую гитьку в УТ11



В 1С на управляемых формах научился делать такую классическую гитьку с гиперссылками.


Когда сперва в поле находится гиперссылка с текстом "Создать":



А при нажатии на гиперссылке создается документ и открывается его форма, я еще добавил кнопку "Перезаполнить", для перезаполнения.



Под катом код, по которому вы можете заценить степень владения мною УФ. На самом деле они не такие уж и сложные, просто гемороя чуть больше. Зато все элементы на форме создаю в коде, программно, что облегчает обновление типовых.



Код по созданию гиперссылок и кнопок:


 ДобавляемыеРеквизиты = Новый Массив;
 МассивТипов = Новый Массив();
 МассивТипов.Добавить(Тип("ДокументСсылка.ПоступлениеТоваровУслуг"));
 МассивТипов.Добавить(Тип("Строка"));
 ПараметрыСтроки = Новый КвалификаторыСтроки(20);
 ДопустимыеТипы = Новый ОписаниеТипов(МассивТипов, , ПараметрыСтроки);


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


Код по реагированию на все эти события:


 


&НаКлиенте
Процедура _Разделы_ТранспортныеРасходыПриИзменении(Элемент)
 ТекРаздел = Элементы.Разделы.ТекущиеДанные;
 ТекРаздел.ТаможеннаяСтоимость = ТекРаздел._ТоварнаяСтоимость + ТекРаздел._ТранспортныеРасходы;
 РазделыТаможеннаяСтоимостьПриИзменении(Неопределено);


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


&НаКлиенте
Процедура _Разделы_ТоварнаяСтоимостьПриИзменении(Элемент)
 ТекРаздел = Элементы.Разделы.ТекущиеДанные;
 ТекРаздел.ТаможеннаяСтоимость = ТекРаздел._ТоварнаяСтоимость + ТекРаздел._ТранспортныеРасходы;
 РазделыТаможеннаяСтоимостьПриИзменении(Неопределено);
 
КонецПроцедуры



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


 


&НаКлиенте
Процедура _ПоступлениеТранспортныхРасходовКГТД_ПриНажатии(Элемент, СтандартнаяОбработка)
 Если ТипЗнч(ЭтаФорма._ПоступлениеТранспортныхРасходовКГТД) = Тип("Строка") Тогда
  //Создаем объект
  СтандартнаяОбработка = ложь;
  ЭтаФорма._ПоступлениеТранспортныхРасходовКГТД = _ЗаполнитьПоступлениеТранспортныхРасходовКГТД(Объект.Ссылка, Неопределено, ЭтаФорма.ПоступлениеТоваров);
  
  _ОбновитьПоле_ПоступлениеТранспортныхРасходовКГТД();
  ПоказатьЗначение(, ЭтаФорма._ПоступлениеТранспортныхРасходовКГТД);
 КонецЕсли;
КонецПроцедуры


&НаСервере
Процедура _ПоступлениеТранспортныхРасходовКГТД_ПриНажатииНаСервере(Элемент, СтандартнаяОбработка)
 _ЗаполнитьПоступлениеТранспортныхРасходовКГТД(Объект.Ссылка, Неопределено);
 _ОбновитьПоле_ПоступлениеТранспортныхРасходовКГТД();
КонецПроцедуры


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


  
 КонецЕсли;
 
 
 
 
 
 
 
 //Заполняем по товарам.
 Если ЗначениеЗаполнено(СтрокаУслуги.Номенклатура) Тогда
  
 КонецЕсли;
 
 
 //Финально записываем...
 
 Если ДокументОбъект.Проведен Тогда
  ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
 Иначе
  ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
 КонецЕсли;



 Возврат ДокументОбъект.Ссылка;
КонецФункции


&НаКлиенте
Процедура _Перезаполнить_ПоступлениеТранспортныхРасходовКГТД(Элемент)
 _ЗаполнитьПоступлениеТранспортныхРасходовКГТД(Объект.Ссылка, ЭтаФорма._ПоступлениеТранспортныхРасходовКГТД, ЭтаФорма.ПоступлениеТоваров);
 ПоказатьЗначение(, ЭтаФорма._ПоступлениеТранспортныхРасходовКГТД);
КонецПроцедуры



 


 

Tags:
Subscribe
Buy for 40 tokens
Время бить тревогу. Когда-то самое престижное место в Москве, за очень короткий срок превратилось в одно из самых токсичных и опасных. (кадр из к/ф Волк с Уолл-Стрит) Считается, что Москва-Сити - детище чуть ли не самого Сергея Юрьевича Полонского. И, что удивительно, его сомнительная…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 39 comments