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