|
Хранение данных динамически добавляемых реквизитов | ☑ | ||
---|---|---|---|---|
0
K1RSAN
15.10.20
✎
09:34
|
Добрый день.
Появился новый документ (таблица заказов), в нем табличная часть с заранее неопределенным количеством колонок. Колонки - количество, заказанное по продукции контрагентом (продукция хранится в регистре сведений, может быть изменено). Так как количество реквизитов не определено на уровне конфигуратора - решил добавлять их при формировании формы. Так же на основании этого документа будут формироваться реализации. Теперь надо организовать хранение этих данных. Как лучше организовать? |
|||
1
ДенисЧ
15.10.20
✎
09:35
|
Разверни таблицу вертикально. Типа контрагент-количество.
При выводе разворачивай обратно |
|||
2
K1RSAN
15.10.20
✎
09:39
|
(1) Не понял.
Да еще возможно я сделал принципиальную ошибку - добавляю реквизиты в табличную часть - объект.товары Может надо делать реквизит формы типа "Таблица значений" и ее с нуля заполнять? Код грубый пока Пока Выборка.Следующий() Цикл нРеквизиты = Новый Массив; нРеквизиты.Добавить(Новый РеквизитФормы("Номенклатура"+Выборка.Номенклатура.Код, Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "Объект.Товары", Выборка.Номенклатура, Истина)); ИзменитьРеквизиты(нРеквизиты); нРеквизиты = Выборка.Номенклатура; нГруппа = Элементы.Вставить("Номенклатура"+Выборка.Номенклатура.Код, Тип("ГруппаФормы"), Элементы.Товары,Элементы.ТоварыГруппаИтог); нГруппа.Вид = ВидГруппыФормы.ГруппаКолонок; нГруппа.Заголовок = Выборка.Номенклатура; нГруппа.ОтображатьВШапке = Истина; нГруппа.Группировка=ГруппировкаКолонок.Горизонтальная; нРеквизиты = Новый Массив; нРеквизиты.Добавить(Новый РеквизитФормы("КоличествоЯщиков"+Выборка.Номенклатура.Код, Новый ОписаниеТипов("Число"), "Объект.Товары", "Ящики", Истина)); ИзменитьРеквизиты(нРеквизиты); нЭлемент = Элементы.Добавить("КоличествоЯщиков"+Выборка.Номенклатура.Код, Тип("ПолеФормы"), нГруппа); нЭлемент.Вид = ВидПоляФормы.ПолеВвода; нЭлемент.ПутьКДанным = "Объект.Товары.КоличествоЯщиков"+Выборка.Номенклатура.Код; нРеквизиты = Новый Массив; нРеквизиты.Добавить(Новый РеквизитФормы("Количество"+Выборка.Номенклатура.Код, Новый ОписаниеТипов("Число"), "Объект.Товары", "Количество", Истина)); ИзменитьРеквизиты(нРеквизиты); нЭлемент = Элементы.Добавить("Количество"+Выборка.Номенклатура.Код, Тип("ПолеФормы"), нГруппа); нЭлемент.Вид = ВидПоляФормы.ПолеВвода; нЭлемент.ПутьКДанным = "Объект.Товары.Количество"+Выборка.Номенклатура.Код; КонецЦикла; |
|||
3
K1RSAN
15.10.20
✎
09:40
|
(2)+ добавление реквизитов подсмотрел где-то, возможно не оптимальный вариант
|
|||
4
K1RSAN
15.10.20
✎
09:42
|
И получается при открытии уже созданного документа - надо подхватывать эти уже записанные данные.
|
|||
5
youalex
15.10.20
✎
09:51
|
В колонках - Контрагенты, в строках - Номенклатура?
>> добавляю реквизиты в табличную часть - объект.товары можно и так, но учти, что после записи документа данные сумм в добавленных колонках нужно будет обновлять (т.к. Объект обновляется) Стандартно, получается три ТЧ: 1) Товары - исходная 2) Контрагенты - с одной колонкой Контрагент (если нужно состав Контрагентов хранить) 3) СуммыКонтрагентов - здесь ключ из ТЧ.Товары + ключ из ТЧ.Контрагенты + Сумма. В качестве ключа в ТЧ товары - лучше добавить УИД (тип уникальный идентификатор), для ТЧ.Контрагенты - сгодится просто ссылка на Контрагента. |
|||
6
K1RSAN
15.10.20
✎
09:53
|
(5) структура табличной части
Колонки: контрагент (в каждой строке свой) - добавляемые колонки с количеством по каждой номенклатуре - итоги |
|||
7
K1RSAN
15.10.20
✎
09:54
|
(5) Да, обратил внимание, что при записи очищаются поля. В принципе то же самое при открытии происходить будет.
|
|||
8
K1RSAN
15.10.20
✎
10:00
|
(5) Спасибо, теперь надо прописать, как перед записью перезаполнять эти 3 ТЧ и при открытии заполнять видимую пользователем ТЧ данными
|
|||
9
youalex
15.10.20
✎
10:21
|
(8) ну я не знаю доподлинно, какая у тебя логика документа.
Но вообще, перезаполнять нужно только одну ТЧ - составную. Т.к. ТЧ.Товары у тебя и так будет на форме в Объект.Товары, ТЧ.Контрагенты - тоже будет незримо в Объект.Товары) сделай две функции - одну для изменения реквизитов формы (элементы можно там же создавать) вторую - для заполнения добавленных колонок. Для удобства инфу о добавленных реквизитах можно хранить в реквизите формы, например, в списке значений (в Значении - ключ ТЧ.Контрагенты, в Представлении - имя добавленного реквизита. Тогда будет что-то вроде: Для Каждого СтрокаТовары Из Объект.Товары Цикл Для Каждого ЭлСписка Из ДобавленныеРеквизиты Цикл СтрокаТЧ = РеальныйОбъектДокумента.СуммыКонтрагентов.Добавить(); СтрокаТЧ.УИДТовары = СтрокаТовары.УидСтроки; СтрокаТЧ.контрагент= ЭлСписка.Значение; СтрокаТЧ.Сумма = СтрокаТовары[ЭлСписка.Представление]; // ЭлСписка.Представление - имя добавленной колонки. Конец Цикла КонецЦикла; |
|||
10
K1RSAN
15.10.20
✎
11:16
|
(9) Хотя вообще сейчас подумал - а что мешает сделать одну ТЧ - контрагент товар количество, и только для видимости в видимом реквизите формы их превращать в подобие кросс-таблицы?
|
|||
11
ДенисЧ
15.10.20
✎
11:17
|
(10) Прошло почти два часа. И ты наконец понял, что я написал в (1) )))))
|
|||
12
K1RSAN
15.10.20
✎
11:17
|
(11) Я ходил на обед)
|
|||
13
Вафель
15.10.20
✎
11:17
|
проще добавить десяток реквизитов
Реквизит1...Реквизит2 в ТЧ. имена рисовать нужные |
|||
14
K1RSAN
15.10.20
✎
11:18
|
(12) + но начало доходить только там, после прочтения (5)
|
|||
15
K1RSAN
15.10.20
✎
11:19
|
(13) Необходимо дать возможность пользователям сами добавлять номенклатуру. В среднем позиций больше десятка, но может стать больше или меньше. так что не вариант
|
|||
16
K1RSAN
15.10.20
✎
11:19
|
(15)+ железно прибивать реквизиты - менее всего хочу. Тем более, что там для каждой позиции 2 числа - количество ящиков и количество штук
|
|||
17
youalex
15.10.20
✎
11:23
|
(10) А если у тебя, например, не будет контрагентов, как ты через одну таблицу сохранишь данные Номенклатуры. С пустым Контрагентом? Ну, такое.
Плюс, если у тебя в ТЧ.Номенклатура куча доп. данных, их, получается, придется дублировать для каждого Контрагента |
|||
18
K1RSAN
15.10.20
✎
11:25
|
(17)
1) контрагент будет всегда. Это же заявка на заказ. 2) да, в реальных реквизитах будет заполнено для каждой пары контрагент-продукция |
|||
19
youalex
15.10.20
✎
11:27
|
Плюс, в развернутом виде тебе придется хранить всю матрицу, а в варианте с тремя таблицами - нулевые значения можно не записывать.
|
|||
20
K1RSAN
15.10.20
✎
11:33
|
(19) НУ в чем-то плюс, в чем-то минус. Оба варианта хороши, спасибо)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |