Имя: Пароль:
1C
1С v8
Изменение типа колонок в Таблице Значений Табличного поля
,
0 OASU
 
30.08.12
12:48
На форме создано табличное поле с типом Таблица Значений.
Перед открытием по регистру сведений проходит отбор и этот отбор выгружается в ТЗ на форме.
   ТЗ = Результат.Выгрузить();
   ЭлементыФормы.ТЗ.СоздатьКолонки();
   ЭлементыФормы.ТЗ.Значение = ТЗ;
Пользователь в таблице может редактировать строки как угодно, добавлять и удалять и они при нажатии кнопки ОК запишутся в этот регистр сведений.

НО дело в том что при выгрузке у колонок тип значения - Null,Справочник Номенклатура. И при добавлении новой строки пользователь видит кнопку выбора типа "Т", т.е. каждый раз выбирать тип Справочник Номенклатура из единственного варианта, как то по дурацки.

По идеи можно добавить определение типов в
Процедура ТЗПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТЗ.Колонки.Удалить("Номенклатура");
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Но это сработает, только если таблица пустая, если не пустая то затираются выбранные строки.

Вопрос, с этим что-то можно сдлеать или нужно пойти другим путем?
1 Kashemir
 
30.08.12
12:54
1. Запрети выбор типа и через найтистроки заполни нулл значения пустой ссылкой на номенатуру
2. создай новою колонку с типом номенклатура (имена колонок можно менять) и перекинь туда значения
2 OASU
 
31.08.12
12:25
В общем явно задала типы колонок и значения записала в каждую. теперь с типом все хорошо
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ТекущаяСтрока = ТЗ.Добавить(); //так потому что тип при выгзузке двойной тип значения и проблемы создает
ТекущаяСтрока.Номенклатура     = Выборка.Номенклатура;
ТекущаяСтрока.СвойстваОбъектов = Выборка.СвойстваОбъектов;
ТекущаяСтрока.Порядок          = Выборка.Порядок;
ТекущаяСтрока.ПризнакСверткиДляПриказНакладной = Выборка.ПризнакСверткиДляПриказНакладной;
КонецЦикла;
3 OASU
 
31.08.12
12:35
Т.к. это все еще табличное поле с типом Таблица значений, у меня не получается сделать вот что.
Пользователь в ТЗ должен выбирать СвойствоОбъектов, в данном случае это характеристики номенклатуры. Так вот по кнопке выбора свойств должен отрабатывать отбор. И он прекрасно себе работает.
Процедура ВыборСвойствОбъектов(Элемент)
   
   Номенклатура = Элемент.ТекущаяСтрока.Номенклатура;
   
   Если Не ЗначениеЗаполнено(Номенклатура) Тогда
       Предупреждение("Выберите номенклатуру!");
       Возврат;
   КонецЕсли;
   
   СтандартнаяОбработка = Ложь;
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    НазначенияСвойствОбъектов.Объект,
   |    НазначенияСвойствОбъектов.Свойство
   |ИЗ
   |    РегистрСведений.НазначенияСвойствОбъектов КАК НазначенияСвойствОбъектов
   |ГДЕ
   |    НазначенияСвойствОбъектов.Объект = &Объект";
   
   Запрос.УстановитьПараметр("Объект",Номенклатура);
   
   РезультатаЗапроса = Запрос.Выполнить().Выгрузить();
   
   Список = Новый СписокЗначений;
   Список.ЗагрузитьЗначения(РезультатаЗапроса.ВыгрузитьКолонку("Свойство"));
   
   Форма = ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьФормуВыбора(,Элемент);
   Форма.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
   Форма.Отбор.Ссылка.Значение = Список;
   Форма.Отбор.Ссылка.Использование = Истина;
   
   Форма.ОткрытьМодально();
   
КонецПроцедуры

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

Процедура ТЗПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
   
   Если Элемент.ТекущаяКолонка.Имя = "СвойстваОбъектов" Тогда
       
       ВыборСвойствОбъектов(Элемент);
       
   КонецЕсли;
   
КонецПроцедуры
4 OASU
 
31.08.12
13:34
I need help
5 OASU
 
02.09.12
09:02
up
6 GenV
 
02.09.12
10:06
(3) Добавить для формы с ТЗ событие "ОбработкаВыбора" - в нем будет проверять и присваивать значение для текущей строки. И форму выбора получай для владельца ЭтаФорма.
ЗЫ Выбор таких свойств сделать лучше не так как у тебя, а назначить для колонки выбор из списка и ПриОткрытии или ПриНачалеВыбораИзСписка назначать СписокВыбора с доступными значениями.
7 Фокусник
 
02.09.12
10:31
(0)
>На форме создано табличное поле с типом Таблица Значений.

А может ну ее эту ТаблицуЗначений, воспользоваться ТабличнойЧастью: задать в ней нужные колонки, они ведь статические? :)
8 mikecool
 
02.09.12
11:25
(7) да и в ТЗ можно прописать типы, создав колонки в дезигн режиме
9 Фокусник
 
02.09.12
12:30
(8) Можно, но ТЗ (ИМХО) для других целей. Если набор колонок статический, то проще ТЧ воспользоваться. В таком случае вопросов как в этой ветке вообще не возникло бы :)
10 эцп
 
02.09.12
16:54
(0) Попробовать воспользоваться ОграничениеТипа для поля ввода
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший