Табличная часть из нескольких документов вправо

1. XelOla 17 16.10.18 22:57 Сейчас в теме
Здравствуйте.
Допустим, стоит такая задача.
пользователь выделил мышкой несколько документов Поступление товаров, по кнопке на форме списка, открылась обработка, которая в свою табличную часть вывела ТЧ документа, но вправо.
Так, как на картинке.
можно ли такое сделать?
и нужно позволить редактировать колонку "Цена", удалять строки, смещать их - нельзя.
Подскажите пожалуйста.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. SlavaKron 19.10.18 08:59 Сейчас в теме
Приведу пример для задачи, поставленной в (1)
Для примера взял документ Поступление товаров и услуг. Подключаемая внешняя обработка во вложении. Код модуля формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Параметры.Свойство("ОбъектыНазначения") Тогда
		КоличествоДокументов = Параметры.ОбъектыНазначения.Количество();
		
		Для Индекс = 0 По КоличествоДокументов - 1 Цикл
			СсылкаНаДокумент = Параметры.ОбъектыНазначения[Индекс];
			ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
			
			// добавляем реквизит для ДокументОбъект
			ДобавляемыеРеквизиты = Новый Массив;
			ИмяРеквизита = "ДокОбъект" + Формат(Индекс, "ЧГ=");
			РеквизитДокументОбъект = Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("ДокументОбъект.ПоступлениеТоваровУслуг"), , , Истина);
			ДобавляемыеРеквизиты.Добавить(РеквизитДокументОбъект);	
			ИзменитьРеквизиты(ДобавляемыеРеквизиты);
			
			ЗначениеВРеквизитФормы(ДокументОбъект, ИмяРеквизита);
			
			// добавляем таблицу ТЧ			
			ИмяТаблицы = ИмяРеквизита + "Товары";
			Таблица = Элементы.Добавить(ИмяТаблицы, Тип("ТаблицаФормы"), Элементы.Группа1);
			Таблица.ПутьКДанным = ИмяРеквизита + ".Товары";			
			Таблица.ИзменятьПорядокСтрок = Ложь;
			Таблица.ИзменятьСоставСтрок = Ложь;
			Таблица.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
			
			// добавляем колонки таблицы
			НоваяКолонка = Элементы.Добавить(ИмяТаблицы + "Номенклатура", Тип("ПолеФормы"), Таблица);
			НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
			НоваяКолонка.ПутьКДанным = Таблица.ПутьКДанным + ".Номенклатура";
			
			НоваяКолонка = Элементы.Добавить(ИмяТаблицы + "Количество", Тип("ПолеФормы"), Таблица);
			НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
			НоваяКолонка.ПутьКДанным = Таблица.ПутьКДанным + ".Количество";
			
			НоваяКолонка = Элементы.Добавить(ИмяТаблицы + "Цена", Тип("ПолеФормы"), Таблица);
			НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
			НоваяКолонка.ПутьКДанным = Таблица.ПутьКДанным + ".Цена";

		КонецЦикла;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗаписатьДокументыНаСервере()
	Для Индекс = 0 По КоличествоДокументов - 1 Цикл
		ИмяРеквизита = "ДокОбъект" + Формат(Индекс, "ЧГ=");
		ДокументОбъект = РеквизитФормыВЗначение(ИмяРеквизита);
		ДокументОбъект.Записать();
		
		// обновим данные объекта на форме (мало ли, при записи что-то меняется)
		ЗначениеВРеквизитФормы(ДокументОбъект, ИмяРеквизита);		
	КонецЦикла;
	Модифицированность = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ЗаписатьДокументы(Команда)
	ЗаписатьДокументыНаСервере();
КонецПроцедуры
Показать

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

	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();	
	НоваяКоманда.Представление = "Программное создание реквизитов";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	
	Возврат ПараметрыРегистрации;
КонецФункции
Показать
Прикрепленные файлы:
ПрограммноеСозданиеРевизитов.epf
9. XelOla 17 21.10.18 21:09 Сейчас в теме
(8) во первых спасибо.
я уж не знаю, сколько бы времени потратила на подобное.
кстати, апгрейд, т.к. колоночек много
ТЗ_рез = СсылкаНаДокумент.ВыпущеннаяПродукция.Выгрузить();
// добавляем колонки таблицы
Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
Тип("ПолеФормы"), Таблица);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = Таблица.ПутьКДанным +"." + Колонка.Имя;
КонецЦикла;


(2) не могу таблице Заголовок задать...
Таблица.Заголовок = "Выпуск с " + Формат(ДокСсылка.ДатаНачало, "ДЛФ=ДД") ;
Таблица.ВысотаЗаголовка = 2;
10. XelOla 17 21.10.18 22:55 Сейчас в теме
(9) нашла декорациянадпись, над таблицей, ок.
2. SlavaKron 16.10.18 23:21 Сейчас в теме
Программное добавление реквизитов формы, таблиц формы и элементов.
3. XelOla 17 16.10.18 23:53 Сейчас в теме
(2)
Добавление реквизита табличной части
Добавление реквизита и элемента формы для табличной части почти ничем не отличается, необходимо только указать путь «Объект.<ИмяТабличнойЧасти>». Ниже пример добавления реквизита Ячейка в ТЧ Комплектация.

#Область ДобавлениеРеквизитаТЧ

// Массив для новых реквизитов
ДобавляемыеРеквизиты = Новый Массив;

// Опишем ревизиты формы
Реквизит_Ячейка = Новый РеквизитФормы("Ячейка", Новый ОписаниеТипов("СправочникСсылка.ЯчейкиХранения"), "Объект.Комплектация", "Ячейка");

// Для наглядности заполним массив после описания реквизитов формы
ДобавляемыеРеквизиты.Добавить(Реквизит_Ячейка);

// Добавим новые реквизиты в форму
ИзменитьРеквизиты(ДобавляемыеРеквизиты);

НовыйЭлемент = Элементы.Добавить("КомплектацияЯчейка", Тип("ПолеФормы"), Элементы.Комплектация);
НовыйЭлемент.ПутьКДанным = "Объект.Комплектация.Ячейка";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;

#КонецОбласти
Показать

ну допустим, а что делать с горизонтальным выводом?
4. SlavaKron 17.10.18 04:46 Сейчас в теме
На форму кидаете группу с горизонтальным выводом элементов.
Программно создаёте реквизиты-объекты документов. Больше никаких реквизитов не надо.
Создаете элементы формы типа Таблица формы с привязкой к ТЧ объектов располагая их в горизонтальной группе. Ну и колонки к таблицам, как подчинные элементы таблиц.
5. XelOla 17 17.10.18 07:04 Сейчас в теме
(4) немного поняла. в принципе..., дельно
6. XelOla 17 18.10.18 23:03 Сейчас в теме
(4) не получается.
  Для Индекс = 0 По МассивВыделенныхДок.Количество() - 1 Цикл
    
    // Массив для новых реквизитов
    ДобавляемыеРеквизиты	= Новый Массив;
    // Опишем ревизиты формы
    Реквизит_ЯчейкаХранения = Новый РеквизитФормы("ЯчейкаХранения"+Индекс,	Новый ОписаниеТипов("ДокументСсылка.стПервичка"),	, "Ячейка");
    Реквизит_ТекущийОстаток = Новый РеквизитФормы("ТекущийОстаток"+Индекс,	Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), , "Остаток");
    // Для наглядности заполним массив после описания реквизитов формы
    ДобавляемыеРеквизиты.Добавить(Реквизит_ЯчейкаХранения);
    ДобавляемыеРеквизиты.Добавить(Реквизит_ТекущийОстаток);
    
    // Добавим новые реквизиты в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
    НовыйЭлемент = Элементы.Добавить("ЯчейкаХранения"+Индекс, Тип("ПолеФормы"), ГруппаФормы);
    НовыйЭлемент.ПутьКДанным                  = "ЯчейкаХранения"+Индекс;
    НовыйЭлемент.Вид                          = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр               = Истина;
    НовыйЭлемент = Элементы.Добавить("ТекущийОстаток"+Индекс, Тип("ПолеФормы"), ГруппаФормы);
    НовыйЭлемент.ПутьКДанным                  = "ТекущийОстаток" + Индекс;
    НовыйЭлемент.Вид                          = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр               = Истина;
    //  Имитируем заполнение данных
    ЭтаФорма.["ЯчейкаХранения"+Индекс] = МассивВыделенныхДок[Индекс];
    ЭтаФорма.ТекущийОстаток[Индекс] = 12;
Показать

не получается реквизит с переменной частью заполнить.
7. XelOla 17 18.10.18 23:59 Сейчас в теме
(4)
пока что получилось вот так
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот