Гиперссылка в табличной части управляемых форм

29.06.18

Разработка - Работа с интерфейсом

Задача: Управляемые формы. В табличной части документа добавить ссылочный реквизит с гиперссылкой. Если реквизит пустой, то отображать произвольное слово с возможностью выполнить свою процедуру, иначе открытие формы ссылки этого реквизита.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример
.dt 42,59Kb
31
31 Скачать (1 SM) Купить за 1 850 руб.

Теперь чуть поточнее задачу. В документе, в табличной части необходимо добавить дополнительный реквизит со ссылкой на другой документ. Если ссылка не заполнена, то отображать слово "Создать", с возможностью создать этот документ и автоматическим помещением в этот реквизит ссылку на этот созданный документ. Добавить ниже еще одну ссылку на выбор документа из базы.

В табличную часть документа был добавлен реквизит "aspect_Поступление", тип ДокументСссылка.ПоступлениеТоваровУслуг

В форме документа в процедуре ПриСозданииНаСервере следующий код:

	// {1c-aspect; rybakov@1c-aspect.ru; Начало 22.05.2018}
	// Маркер: создание докумнета поступление товаров без проведения текущего
	ДобавляемыеРеквизиты = Новый Массив;
	ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("aspect_Привязать", Новый ОписаниеТипов("Строка"), "Объект.Затраты", "", Истина));
	ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
	НоваяГруппа                     = Элементы.Вставить("aspect_ГруппаПоступлений", Тип("ГруппаФормы"), Элементы.ПолучаемыеУслуги);
	НоваяГруппа.Вид                 = ВидГруппыФормы.ОбычнаяГруппа;
	НоваяГруппа.ОтображатьЗаголовок = Ложь;
	НоваяГруппа.Группировка         = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
	Элементы.Переместить(НоваяГруппа, Элементы.ПолучаемыеУслуги, Элементы.ПолучаемыеУслугиСтатьяЗатрат);
	
	НовыйРеквизит                   = Элементы.Добавить("aspect_Поступление", Тип("ПолеФормы"), НоваяГруппа);
	НовыйРеквизит.Заголовок         = "Поступление";
	НовыйРеквизит.Вид               = ВидПоляФормы.ПолеНадписи;
	НовыйРеквизит.ПутьКДанным       = "Объект.Затраты.aspect_Поступление";
	НовыйРеквизит.ГиперссылкаЯчейки = Истина;
	НовыйРеквизит.Гиперссылка       = Истина;
	
	НовыйРеквизит                    = Элементы.Добавить("aspect_Привязать", Тип("ПолеФормы"), НоваяГруппа);
	НовыйРеквизит.Вид                = ВидПоляФормы.ПолеНадписи;
	НовыйРеквизит.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
	НовыйРеквизит.ГиперссылкаЯчейки  = Истина;
	НовыйРеквизит.Гиперссылка        = Истина;
	НовыйРеквизит.ПутьКДанным        = "Объект.Затраты.aspect_Привязать";
	
	ЭлементУсловногоОформления  = УсловноеОформление.Элементы.Добавить();
	ПолеЭлемента                = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле           = Новый ПолеКомпоновкиДанных("aspect_Поступление");
	ОтборЭлемента               = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Затраты.aspect_Поступление");
	ОтборЭлемента.ВидСравнения  = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст"                  , "Создать");
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста"             , Новый Цвет(28, 85, 174));
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ГоризонтальноеПоложение", ГоризонтальноеПоложение.Центр);
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ВертикальноеПоложение"  , ВертикальноеПоложение.Центр);
	
	ЭлементУсловногоОформления  = УсловноеОформление.Элементы.Добавить();
	ПолеЭлемента                = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле           = Новый ПолеКомпоновкиДанных("aspect_Привязать");
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст"                  , "Привязать");
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста"             , Новый Цвет(28, 85, 174));
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ГоризонтальноеПоложение", ГоризонтальноеПоложение.Центр);
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ВертикальноеПоложение"  , ВертикальноеПоложение.Центр);
	// {1c-aspect; rybakov@1c-aspect.ru; Конец 22.05.2018}

В процедуре Выбор нужной табличной части прописать следующее:

	ТекСтрока = Элементы.ПолучаемыеУслуги.ТекущиеДанные;
	
	// {1c-aspect; rybakov@1c-aspect.ru; Начало 22.05.2018}
	Если Поле = Элементы.aspect_Поступление Тогда
		Если ЗначениеЗаполнено(ТекСтрока.aspect_Поступление) Тогда
			ПараметрыНовойФормы = Новый Структура("Ключ", ТекСтрока.aspect_Поступление);
			ФормаДокумента = ПолучитьФорму("Документ.уатПоступлениеТоваровУслуг.Форма.ФормаДокумента", ПараметрыНовойФормы);
			ФормаДокумента.Открыть();
		Иначе
			Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
				Режим = РежимДиалогаВопрос.ДаНет;
				Ответ = Вопрос(НСтр("ru = 'Документ не записан. Записать?'"), Режим, 0);
				Если Ответ = КодВозвратаДиалога.Нет Тогда
					Возврат;
				Иначе
					Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Запись));
				КонецЕсли;
			КонецЕсли;
			aspect_СоздатьДокументПТиУНаСервере(ТекСтрока.НомерСтроки);
			Модифицированность = Истина;
		КонецЕсли;
	ИначеЕсли Поле = Элементы.aspect_Привязать Тогда
		Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда
			Режим = РежимДиалогаВопрос.ДаНет;
			Ответ = Вопрос(НСтр("ru = 'Документ не записан. Записать?'"), Режим, 0);
			Если Ответ = КодВозвратаДиалога.Нет Тогда
				Возврат;
			Иначе
				Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Запись));
			КонецЕсли;
		КонецЕсли;
		ПараметрыОтбора = Новый Структура();
		ПараметрыОтбора.Вставить("ДокументОснование", Объект.Ссылка);
		Отбор = Новый Структура();
		Отбор.Вставить("Отбор", ПараметрыОтбора);
		aspect_НомерСтрокиПоступления = ТекСтрока.НомерСтроки;
		ОткрытьФорму("Документ.уатПоступлениеТоваровУслуг.ФормаВыбора", Отбор, ЭтаФорма);
		// {1c-aspect; rybakov@1c-aspect.ru; Конец 22.05.2018}
	КонецЕсли;

Серверная процедура по созданию документа:

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

В раздел описания переменных добавить:

// {1c-aspect; rybakov@1c-aspect.ru; Начало 22.05.2018}
&НаКлиенте
Перем aspect_НомерСтрокиПоступления;
// {1c-aspect; rybakov@1c-aspect.ru; Конец 22.05.2018}

Необходимо для того, чтобы передать номер обрабатываемой строки. Т.к. у надписи нет события ОбработкаВыбора. Поэтому приходится использовать событие формы.

В процедуру ОбработкаВыбора формы добавить:

	// {1c-aspect; rybakov@1c-aspect.ru; Начало 22.05.2018}
	Если ИсточникВыбора.ИмяФормы = "Документ.уатПоступлениеТоваровУслуг.Форма.ФормаВыбора" Тогда
		Если НЕ aspect_НомерСтрокиПоступления = Неопределено Тогда
			Объект.Затраты[aspect_НомерСтрокиПоступления - 1].aspect_Поступление = ВыбранноеЗначение;
			Модифицированность = Истина;
		КонецЕсли;
		// {1c-aspect; rybakov@1c-aspect.ru; Конец 22.05.2018}
	КонецЕсли;

 

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62925    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18791    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10171    7    7    

10

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    16303    mrXoxot    43    

120

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    7039    smielka    37    

100

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    14571    896    elcoan    47    

117

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    11835    162    acces969    31    

124

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    5586    kalyaka    6    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. VmvLer 23.05.18 13:19 Сейчас в теме
в чем трудности реализации?
2. pyrkin_vanya 493 29.06.18 20:24 Сейчас в теме
3. pyrkin_vanya 493 29.06.18 20:24 Сейчас в теме
4. Leon29 14.09.23 15:39 Сейчас в теме
Может понадобится.
Долго мучался. Условным оформлением добавил текст, а он не отображается в ячейке. В итоге выяснил то, что элементы условного оформления без отбора не применяются.

Добавил условие (от балды) на проверку равенства номера строки "Истина". Всё заработало :) В ячейке появился текст из условного оформления.
Оставьте свое сообщение