Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 06:42

Обычное приложение. добавление колонки в форму в ТЧ не связанной с колонкой ТЧ документа

Автор andron81_81, 09 фев 2018, 13:38

0 Пользователей и 2 гостей просматривают эту тему.

AIFrame

Цитата: pavl_vs от 11 фев 2018, 20:17PS AIFrame, программное создание колонок в контексте темы - это уж излишество, автор темы вносит изменения в конфигуратор и ни слова о внешних обработках.
1. Казалось бы, при чем тут внешние обработки.
2. Автор ИМЕННО хочет добавить колонку как объект формы и сохранение этих значений ему не нужно.
3. Посмотри документ какой-нибудь с товарами, например ту же РТУ на обычных формах. На форме есть колонки Артикула, ГТД, Страны происхождения. НО как-то удивительно этих колонок в реквизитах нет. А они заполнены значениями. Вот так чудеса.
И эти чудеса не нужно хранить в раздутых таблицах СУБД. Достаточно ссылки (что и делает реквизит ТЧ со ссылкой), а уже по ссылке при выводе показать нужные значения.
Вот такие чудеса ТС хочет на обычных формах.
Асло,
Цитироватьпрограммное создание колонок
Что? Где? В каком месте? Прекрати.

andron81_81

Цитата: AIFrame от 11 фев 2018, 19:52Ячейка = ОформлениеСтроки.Ячейки.Колонка1;
Ячейка.ОтображатьТекст = Истина;
Ячейка.Текст = КакойТоТекст;

работает , но только на чтение. пользователю отредактировать ячейку в этом случае не удается

Добавлено: 11 фев 2018, 21:55


Цитата: AIFrame от 11 фев 2018, 20:56
2. Автор ИМЕННО хочет добавить колонку как объект формы и сохранение этих значений ему не нужно.

верно
Добавлено: 12 фев 2018, 08:40


Цитата: pavl_vs от 11 фев 2018, 19:27
И зачем тогда создавать колонку, заполнять ее значениями, если значения не будут сохраняться?

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

AIFrame

Модуль формы:
перем мСписок;

Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
    Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        Ячейки = ОформлениеСтроки.Ячейки;
        ЯчейкаВыбрано = Ячейки.Выбрано;
        ЯчейкаР1 = Ячейки.Реквизит1;
        ЯчейкаНомер = Ячейки.НомерСтроки;
Выбрано = мСписок.НайтиПоЗначению(ЯчейкаНомер.Значение);
ЯчейкаВыбрано.ОтображатьФлажок = Истина;
ЯчейкаВыбрано.Значение = ?(Выбрано <> неопределено, Истина, Ложь);       
КонецЦикла;
КонецПроцедуры


Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
Если Колонка.Имя = "Выбрано" Тогда
ТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные;
ЗначениеВСписке = мСписок.НайтиПоЗначению(ТекущаяСтрока.НомерСтроки);
Если ЗначениеВСписке <> неопределено Тогда
мСписок.Удалить(ЗначениеВСписке);
Иначе
мСписок.Добавить(ТекущаяСтрока.НомерСтроки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры

мСписок = Новый СписокЗначений;

Товары = табличная часть.
Реквизит1 = реквизит табличной части
Выбрано = колонка, нарисованная на форме, не реквизит ТЧ.

Из нюансов - придется также пилить обработчики на перемещение\удаление строк. Т.е. удалять из списка при удалении строки и менять значение номеров при перемещении строки.
Если в ТЧ будет уникальный реквизит (например, реквизит1 не может повторяться в ТЧ) то список можно сформировать по нему и тогда перемещение можно не обрабатывать, а только удаление строки (по желанию).

andron81_81

Цитата: AIFrame от 12 фев 2018, 10:27
Модуль формы:
перем мСписок;

Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
    Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        Ячейки = ОформлениеСтроки.Ячейки;
        ЯчейкаВыбрано = Ячейки.Выбрано;
        ЯчейкаР1 = Ячейки.Реквизит1;
        ЯчейкаНомер = Ячейки.НомерСтроки;
Выбрано = мСписок.НайтиПоЗначению(ЯчейкаНомер.Значение);
ЯчейкаВыбрано.ОтображатьФлажок = Истина;
ЯчейкаВыбрано.Значение = ?(Выбрано <> неопределено, Истина, Ложь);       
КонецЦикла;
КонецПроцедуры


Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
Если Колонка.Имя = "Выбрано" Тогда
ТекущаяСтрока = ЭлементыФормы.Товары.ТекущиеДанные;
ЗначениеВСписке = мСписок.НайтиПоЗначению(ТекущаяСтрока.НомерСтроки);
Если ЗначениеВСписке <> неопределено Тогда
мСписок.Удалить(ЗначениеВСписке);
Иначе
мСписок.Добавить(ТекущаяСтрока.НомерСтроки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры

мСписок = Новый СписокЗначений;

Товары = табличная часть.
Реквизит1 = реквизит табличной части
Выбрано = колонка, нарисованная на форме, не реквизит ТЧ.

Из нюансов - придется также пилить обработчики на перемещение\удаление строк. Т.е. удалять из списка при удалении строки и менять значение номеров при перемещении строки.
Если в ТЧ будет уникальный реквизит (например, реквизит1 не может повторяться в ТЧ) то список можно сформировать по нему и тогда перемещение можно не обрабатывать, а только удаление строки (по желанию).

раз такие костыли может действительно как советовал товарищ легче мне добавить реквизит в таб. часть на уровне документа типа булеан , ну подумаешь несколько лишних байт ? к тому же я ведь всё равно очищать буду перед сохранением всю эту таб. часть .

AIFrame

Не так. Добавлять функциональный реквизит - тоже моветон.
Если бы передо мной ставили такую задачу - я бы написал внешнюю обработку заполнения табличной части, в которой бы вызвал свою форму, наполнил ее содержимым табличной части документа (на уровне реквизитов формы или обработки) и уже там ставил галочки, и там же эти галочки обрабатывал. А сам документ в конфигурации и его форму вообще бы не трогал.

andron81_81

Цитата: AIFrame от 12 фев 2018, 10:39
Не так. Добавлять функциональный реквизит - тоже моветон.
Если бы передо мной ставили такую задачу - я бы написал внешнюю обработку заполнения табличной части, в которой бы вызвал свою форму, наполнил ее содержимым табличной части документа (на уровне реквизитов формы или обработки) и уже там ставил галочки, и там же эти галочки обрабатывал.

галочки как вы бы ставили , каким методом?  как было описано выше Вами ? (напоминаю мне необходимо, чтобы для каждой строки галочки можно было трогать пользователю )
Добавлено: 12 фев 2018, 10:52


Цитата: AIFrame от 12 фев 2018, 10:27
Из нюансов - придется также пилить обработчики на перемещение\удаление строк. Т.е. удалять из списка при удалении строки и менять значение номеров при перемещении строки.


перемещать не надо , удалять тоже. идея такая , что эта таб. часть должна формироваться из другой динамически. мы проставляем галочки нажимаем "Ок" . Должна произойти некая обработка - всё !


oleg-x

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

AIFrame

Ну это же будет документ, так?
Для него делаем внешнюю обработку заполнения таб.части и подключаем во внешних обработках.
В документе выбираем "Заполнить" - наша обработка.
И в самой обработке уже открывается форма, у нее своя тч со своими реквизитами, один из которых эта самая галочка. Она заполняется табличной частью документа и в ней мы ставим галочки. На этой же форме мы делаем кнопку, которая будет что-то по этим галочкам делать с ТЧ документа.
Короче, погугли обработки заполнения табличных частей.

andron81_81

Цитата: oleg-x от 12 фев 2018, 10:56
Создать реквизит табличной части просто, а спрашивали про другое. Как добавить колонку, без добавления реквизита и заполнять её. Не всегда требуется сохранять то что выводится (рассчитывает при открытие/изменении в зависимости от данных), без необходимости засорять лишними данными базу данных.

да , я прихожу к выводу , что в обычном приложении в отличии от УФ это делается при помощи костылей. это не есть хорошо :mellow:

AIFrame

Цитата: andron81_81 от 12 фев 2018, 11:00в обычном приложении в отличии от УФ это делается при помощи костылей
Делается по другому. Потому что механизмы работы иные. А если хочется как в УФ - то да, при помощи костылей.

Похожие темы (5)

Рейтинг@Mail.ru

Поиск