Табличная часть из нескольких документов вправо
Здравствуйте.
Допустим, стоит такая задача.
пользователь выделил мышкой несколько документов Поступление товаров, по кнопке на форме списка, открылась обработка, которая в свою табличную часть вывела ТЧ документа, но вправо.
Так, как на картинке.
можно ли такое сделать?
и нужно позволить редактировать колонку "Цена", удалять строки, смещать их - нельзя.
Подскажите пожалуйста.
Допустим, стоит такая задача.
пользователь выделил мышкой несколько документов Поступление товаров, по кнопке на форме списка, открылась обработка, которая в свою табличную часть вывела ТЧ документа, но вправо.
Так, как на картинке.
можно ли такое сделать?
и нужно позволить редактировать колонку "Цена", удалять строки, смещать их - нельзя.
Подскажите пожалуйста.
Прикрепленные файлы:
По теме из базы знаний
- Легкое создание пользователем внешних печатных форм методом Drag & Drop
- Программное управление обычными формами документов и справочников в УПП/КА
- Размещение текста в ячейке табличного документа
- Признаки и причины неуспешных внедрений 1С: ERP
- Конструктор печатных форм (PrintWizard). Часть 1: Печатные формы. А что, собственно, не так?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Приведу пример для задачи, поставленной в (1)
Для примера взял документ Поступление товаров и услуг. Подключаемая внешняя обработка во вложении. Код модуля формы:
Код модуля обработки:
Для примера взял документ Поступление товаров и услуг. Подключаемая внешняя обработка во вложении. Код модуля формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("ОбъектыНазначения") Тогда
КоличествоДокументов = Параметры.ОбъектыНазначения.Количество();
Для Индекс = 0 По КоличествоДокументов - 1 Цикл
СсылкаНаДокумент = Параметры.ОбъектыНазначения[Индекс];
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
// добавляем реквизит для ДокументОбъект
ДобавляемыеРеквизиты = Новый Массив;
ИмяРеквизита = "ДокОбъект" + Формат(Индекс, "ЧГ=");
РеквизитДокументОбъект = Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("ДокументОбъект.ПоступлениеТоваровУслуг"), , , Истина);
ДобавляемыеРеквизиты.Добавить(РеквизитДокументОбъект);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ЗначениеВРеквизитФормы(ДокументОбъект, ИмяРеквизита);
// добавляем таблицу ТЧ
ИмяТаблицы = ИмяРеквизита + "Товары";
Таблица = Элементы.Добавить(ИмяТаблицы, Тип("ТаблицаФормы"), Элементы.Группа1);
Таблица.ПутьКДанным = ИмяРеквизита + ".Товары";
Таблица.ИзменятьПорядокСтрок = Ложь;
Таблица.ИзменятьСоставСтрок = Ложь;
Таблица.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
// добавляем колонки таблицы
НоваяКолонка = Элементы.Добавить(ИмяТаблицы + "Номенклатура", Тип("ПолеФормы"), Таблица);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = Таблица.ПутьКДанным + ".Номенклатура";
НоваяКолонка = Элементы.Добавить(ИмяТаблицы + "Количество", Тип("ПолеФормы"), Таблица);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = Таблица.ПутьКДанным + ".Количество";
НоваяКолонка = Элементы.Добавить(ИмяТаблицы + "Цена", Тип("ПолеФормы"), Таблица);
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.ПутьКДанным = Таблица.ПутьКДанным + ".Цена";
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДокументыНаСервере()
Для Индекс = 0 По КоличествоДокументов - 1 Цикл
ИмяРеквизита = "ДокОбъект" + Формат(Индекс, "ЧГ=");
ДокументОбъект = РеквизитФормыВЗначение(ИмяРеквизита);
ДокументОбъект.Записать();
// обновим данные объекта на форме (мало ли, при записи что-то меняется)
ЗначениеВРеквизитФормы(ДокументОбъект, ИмяРеквизита);
КонецЦикла;
Модифицированность = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДокументы(Команда)
ЗаписатьДокументыНаСервере();
КонецПроцедуры
ПоказатьКод модуля обработки:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
ПараметрыРегистрации.Назначение.Добавить("Документ.ПоступлениеТоваровУслуг");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Программное создание реквизитов";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции
ПоказатьПрикрепленные файлы:
ПрограммноеСозданиеРевизитов.epf
(8) во первых спасибо.
я уж не знаю, сколько бы времени потратила на подобное.
кстати, апгрейд, т.к. колоночек много
ТЗ_рез = СсылкаНаДокумент.ВыпущеннаяПродукция.Выгрузить();
// добавляем колонки таблицы
Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
Тип("ПолеФормы"), Таблица);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = Таблица.ПутьКДанным +"." + Колонка.Имя;
КонецЦикла;
(2) не могу таблице Заголовок задать...
Таблица.Заголовок = "Выпуск с " + Формат(ДокСсылка.ДатаНачало, "ДЛФ=ДД") ;
Таблица.ВысотаЗаголовка = 2;
я уж не знаю, сколько бы времени потратила на подобное.
кстати, апгрейд, т.к. колоночек много
ТЗ_рез = СсылкаНаДокумент.ВыпущеннаяПродукция.Выгрузить();
// добавляем колонки таблицы
Для Каждого Колонка ИЗ ТЗ_рез.Колонки Цикл
НовыйЭлементФормы = Элементы.Добавить(ИмяТаблицы + Колонка.Имя,
Тип("ПолеФормы"), Таблица);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = Таблица.ПутьКДанным +"." + Колонка.Имя;
КонецЦикла;
(2) не могу таблице Заголовок задать...
Таблица.Заголовок = "Выпуск с " + Формат(ДокСсылка.ДатаНачало, "ДЛФ=ДД") ;
Таблица.ВысотаЗаголовка = 2;
(2)
ну допустим, а что делать с горизонтальным выводом?
Добавление реквизита табличной части
Добавление реквизита и элемента формы для табличной части почти ничем не отличается, необходимо только указать путь «Объект.<ИмяТабличнойЧасти>». Ниже пример добавления реквизита Ячейка в ТЧ Комплектация.
#Область ДобавлениеРеквизитаТЧ
// Массив для новых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
// Опишем ревизиты формы
Реквизит_Ячейка = Новый РеквизитФормы("Ячейка", Новый ОписаниеТипов("СправочникСсылка.ЯчейкиХранения"), "Объект.Комплектация", "Ячейка");
// Для наглядности заполним массив после описания реквизитов формы
ДобавляемыеРеквизиты.Добавить(Реквизит_Ячейка);
// Добавим новые реквизиты в форму
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
НовыйЭлемент = Элементы.Добавить("КомплектацияЯчейка", Тип("ПолеФормы"), Элементы.Комплектация);
НовыйЭлемент.ПутьКДанным = "Объект.Комплектация.Ячейка";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
#КонецОбласти
ПоказатьДобавление реквизита и элемента формы для табличной части почти ничем не отличается, необходимо только указать путь «Объект.<ИмяТабличнойЧасти>». Ниже пример добавления реквизита Ячейка в ТЧ Комплектация.
#Область ДобавлениеРеквизитаТЧ
// Массив для новых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
// Опишем ревизиты формы
Реквизит_Ячейка = Новый РеквизитФормы("Ячейка", Новый ОписаниеТипов("СправочникСсылка.ЯчейкиХранения"), "Объект.Комплектация", "Ячейка");
// Для наглядности заполним массив после описания реквизитов формы
ДобавляемыеРеквизиты.Добавить(Реквизит_Ячейка);
// Добавим новые реквизиты в форму
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
НовыйЭлемент = Элементы.Добавить("КомплектацияЯчейка", Тип("ПолеФормы"), Элементы.Комплектация);
НовыйЭлемент.ПутьКДанным = "Объект.Комплектация.Ячейка";
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
#КонецОбласти
ну допустим, а что делать с горизонтальным выводом?
На форму кидаете группу с горизонтальным выводом элементов.
Программно создаёте реквизиты-объекты документов. Больше никаких реквизитов не надо.
Создаете элементы формы типа Таблица формы с привязкой к ТЧ объектов располагая их в горизонтальной группе. Ну и колонки к таблицам, как подчинные элементы таблиц.
Программно создаёте реквизиты-объекты документов. Больше никаких реквизитов не надо.
Создаете элементы формы типа Таблица формы с привязкой к ТЧ объектов располагая их в горизонтальной группе. Ну и колонки к таблицам, как подчинные элементы таблиц.
(4) не получается.
не получается реквизит с переменной частью заполнить.
Для Индекс = 0 По МассивВыделенныхДок.Количество() - 1 Цикл
// Массив для новых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
// Опишем ревизиты формы
Реквизит_ЯчейкаХранения = Новый РеквизитФормы("ЯчейкаХранения"+Индекс, Новый ОписаниеТипов("ДокументСсылка.стПервичка"), , "Ячейка");
Реквизит_ТекущийОстаток = Новый РеквизитФормы("ТекущийОстаток"+Индекс, Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), , "Остаток");
// Для наглядности заполним массив после описания реквизитов формы
ДобавляемыеРеквизиты.Добавить(Реквизит_ЯчейкаХранения);
ДобавляемыеРеквизиты.Добавить(Реквизит_ТекущийОстаток);
// Добавим новые реквизиты в форму
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
НовыйЭлемент = Элементы.Добавить("ЯчейкаХранения"+Индекс, Тип("ПолеФормы"), ГруппаФормы);
НовыйЭлемент.ПутьКДанным = "ЯчейкаХранения"+Индекс;
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ТолькоПросмотр = Истина;
НовыйЭлемент = Элементы.Добавить("ТекущийОстаток"+Индекс, Тип("ПолеФормы"), ГруппаФормы);
НовыйЭлемент.ПутьКДанным = "ТекущийОстаток" + Индекс;
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ТолькоПросмотр = Истина;
// Имитируем заполнение данных
ЭтаФорма.["ЯчейкаХранения"+Индекс] = МассивВыделенныхДок[Индекс];
ЭтаФорма.ТекущийОстаток[Индекс] = 12;
Показатьне получается реквизит с переменной частью заполнить.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот