Имя: Пароль:
1C
 
Тип значения ячейки поля табличного документа, ссылочные типы данных не определя
0 Mr_Best
 
20.08.15
16:06
Всем привет!

Параметры вопроса:
1С:Предприятие 8.3 (8.3.5.1486)
Бухгалтерия предприятия КОРП, редакция 2.0 (2.0.64.19)

Есть форма внешней обработки, на форме размещено поле табличного документа. Если в режиме конфигуратора зайти в свойства ячейки, установить флаг "СодержитЗначение" и выбрать из списка состав типов которые могут быть в данной ячейки то все прекрасно работает!

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

МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));        МассивТипов.Добавить(Тип("СправочникСсылка.Банки"));        МассивТипов.Добавить(Тип("СправочникСсылка.Организации"));
        
Область.ТипЗначения = Новый ОписаниеТипов(МассивТипов);

то типы не добавляются, а в панели свойств (в режиме предприятия), в свойстве тип значения написано: Undefine, Строка, Undefine

Что я делаю не правильно?

И еще одно наблюдение, если в режиме конфигуратора хотя бы одной ячейке добавить данные типы значений, то программный код начинает работать правильно для любой ячейки!!!!

Почему так, может кто нибудь сталкивался?
1 Ёпрст
 
гуру
20.08.15
16:22
(0) а СодержитЗначение в истину заточил перед этим ?
2 Ёпрст
 
гуру
20.08.15
16:23
+ Так работает ?

Область.СодержитЗначение  = Истина;
Область.ТипЗначения = Новый ОписаниеТипов(МассивТипов);
3 Mr_Best
 
20.08.15
16:49
(1) да перед этим, из панели свойств.
(2) действительно работает!

У меня стоит условие:

Если Область.СодержитЗначение Тогда
        
    МассивТипов = Новый Массив;
    МассивТипов.Добавить(Тип("Строка"));
    МассивТипов.Добавить(Тип("СправочникСсылка.Банки"));
    МассивТипов.Добавить(Тип("СправочникСсылка.Организации"));
        
    Область.ТипЗначения = Новый ОписаниеТипов(МассивТипов);
        
КонецЕсли;

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

Получается, что так НЕ работает:

Если Область.СодержитЗначение Тогда
        
    МассивТипов = Новый Массив;
    МассивТипов.Добавить(Тип("Строка"));
    МассивТипов.Добавить(Тип("СправочникСсылка.Банки"));
    МассивТипов.Добавить(Тип("СправочникСсылка.Организации"));
        
    Область.ТипЗначения = Новый ОписаниеТипов(МассивТипов);
        
КонецЕсли;

так, всегда будет устанавливатся флаг СодержитЗначение:

Область.СодержитЗначение  = Истина;

МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));
МассивТипов.Добавить(Тип("СправочникСсылка.Банки"));
МассивТипов.Добавить(Тип("СправочникСсылка.Организации"));
        
Область.ТипЗначения = Новый ОписаниеТипов(МассивТипов);

и так тоже не работет:

Если Область.СодержитЗначение Тогда
        
    Область.СодержитЗначение  = Истина;

    МассивТипов = Новый Массив;
    МассивТипов.Добавить(Тип("Строка"));
    МассивТипов.Добавить(Тип("СправочникСсылка.Банки"));
    МассивТипов.Добавить(Тип("СправочникСсылка.Организации"));
        
    Область.ТипЗначения = Новый ОписаниеТипов(МассивТипов);
        
КонецЕсли;

как же тогда можно реализовать требуемую логику работы программы через событие при активации области?
4 Ёпрст
 
гуру
20.08.15
16:56
смотреть на другой признак, а не проверять СодержитЗначение
5 Ёпрст
 
гуру
20.08.15
16:57
в расшифровку там запихать чего, или в значение
6 Mr_Best
 
20.08.15
17:01
Спасибо, а вы не знает с какой целью в 1С сделали такое поведение системы? Это недоработка 1С, или так специально?
7 Ёпрст
 
гуру
20.08.15
17:02
Да хз :)
Я просто предлагаю пути обхода, не более того, мне проверять лень :)
8 Mr_Best
 
20.08.15
17:07
(7) спасибо, я начинаю понимать, почему тут один местный, выбрал себе ник "Ненавижу 1С", жаль занят уже ....
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший