Имя: Пароль:
1C
 
Не могу добавить программно колонку в табличную часть документа
0 Гений 1С
 
гуру
22.02.06
12:50
В ТЧ документа добавил поле "п_Себестоимость" типа число.
Хочу его программно показывать. Поле показывается, но данные не вводятся.

ПолеСС=Форма.ЭлементыФормы.Товары.Колонки.Добавить("п_Себестоимость", "СС");
           ПолеСС.Доступность=истина;
           ПолеСС.Видимость=истина;
           ПолеСС.Данные="п_Себестоимость";
           ПолеСС.УстановитьЭлементУправления(Тип("ПолеВвода"));
1 Rovan
 
гуру
22.02.06
12:52
(0) данные пиши туда в ПриВыводеСтроки()
2 igork1966
 
22.02.06
12:52
В табличное поле ты добавил, а не в ТЧ.
3 igork1966
 
22.02.06
12:57
4 Гений 1С
 
гуру
22.02.06
12:58
(2) в метаданных это поле есть, ты на ник внимание обрати, я бы так не лоханулся просто.
(1) уверен? А какая разница?
(3) не угадал, тема другая. Мне нужно редактировать это поле, я хочу колонку создать программно. В метаданных колонка есть.

Поведение: захожу, ввожу текст. Выхожу - текст сбрасывается. Блин.
5 Волшебник
 
модератор
22.02.06
12:59
(4) Данные нужно где-то хранить. Табличное поле не хранит данные.
6 Гений 1С
 
гуру
22.02.06
13:00
(5) Читай внимательно - данные хранятся в реквизите табличной части документа, конкретно в ТЧ "Товары". А в табличном поле источник данных как раз эта таблица.
Опять плохо объясняю? ;-)
7 Гений 1С
 
гуру
22.02.06
13:01
(5) Я добавил реквизит в эту ТЧ. Называется "п_Себестоимость". Почему не работает, не могу понять
8 igork1966
 
22.02.06
13:01
(4) Тогда зачем это. Делаешь предварительно невидимое поле в табличном поле. Потом  делаешь его доступным и видимым.
9 Волшебник
 
модератор
22.02.06
13:01
(6) Почему бы для этой колонки ТП не установить связь с реквизитом ТЧ по данным?
10 Vozhd
 
22.02.06
13:01
(8) Это будет не гениальным решением...
11 Волшебник
 
модератор
22.02.06
13:06
Запомни, Гений 1С. Все гениальное - просто.
12 dimoff
 
22.02.06
13:08
Совершенно нормальный вопрос и естетственное желание и все тупят
13 Гений 1С
 
гуру
22.02.06
13:08
(8) мне надо програмно, без всяких предварительных.
(9) А это что по-вашему: ПолеСС.Данные="п_Себестоимость";
(10) Блин, Вождь мирового пролетариата, специально для вас - чтоб было проще обновляться, хочу изменения формы вносить кодом, а не ручками, чтобы потом сделать через объединение модулей, а не ковыряться ручками в форме.
(12) вово. Перед праздником что ли?
14 dimoff
 
22.02.06
13:09
(0) Данные не показывает или показывает но не дает вводить?
15 Волшебник
 
модератор
22.02.06
13:11
(13) ПолеСС.Данные="п_Себестоимость";
Это бред. Потому что у тебя нет реквизита ТЧ с именем п_Себестоимость.

Тебе нужно завести таблицу значений, где и хранить данные. В событии ПриОкончанииРедактирования эти данные получать из текущий строки табличного поля и запоминать в ТЗ, а в событии ПриВыводеСтроки данные извлекать из ТЗ.

Для ускорения процесса рекомендую использовать Соответствие с ключом примитивного типа (индекс строки, например).
16 igork1966
 
22.02.06
13:13
(15) Я так понял, он создал одноименный реквизит в ТЧ. Просто программно хочет добавлять его на ТП.
17 Гений 1С
 
гуру
22.02.06
13:13
(15) Это не бред, я добавил такой реквизит в табличную часть документа и хочу его выводить в ТП
(16) меня правильно понял.
(14) не показывает и не сохраняет введенное
18 Волшебник
 
модератор
22.02.06
13:14
(16) А я так понял, что он его не создал и хочет все делать программно.
(17) Но я ошибся. Он действительно его создал.
19 Vozhd
 
22.02.06
13:15
(13) За "мировой пролетариат" спасибо. Вынужден Вас растроить, только что проверил, колонки программно добавляются и с данными связываются. Но я то делал тупо и не гениально...
20 Гений 1С
 
гуру
22.02.06
13:20
(19) Код в студию
21 Гений 1С
 
гуру
22.02.06
13:20
(19) или опять бла-бла-бла
22 dimoff
 
22.02.06
13:28
НоваяКолонка = ЭлементыФормы.Товары.Колонки.Добавить("ЦенаВРознице");
НоваяКолонка.Данные = "ЦенаВРознице";
НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));

Это в типовой УПП Авансовый отчет, ТЧ Товары. Всё чудесно добавляется, сохраняется, вводится, отображается
23 Гений 1С
 
гуру
22.02.06
13:41
(22) блин, а у меня такой же код не работает. Может они еще в другом месте чего прописывают? В моей редакции УПП такого кода нет
24 igork1966
 
22.02.06
13:43
(23) Нет в типовой такого кода. Это он его сам донаписал, я так думаю. И говорит работает. ;-)
25 igork1966
 
22.02.06
13:51
Щас из принципа проверил.
1. Добавил в ТЧ документа АвансовыйОтчет реквизит "МойРеквизит" текстовый.
2. Добавил в "ПриОткрытии()" в модуле формы:

НоваяКолонка = ЭлементыФормы.Товары.Колонки.Добавить("МойРеквизит");
НоваяКолонка.Данные = "МойРеквизит";
НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));

Все работет, отображает, сохраняет. ;-)
26 Vozhd
 
22.02.06
14:16
(25) Небольшое исследование показало:
1. Если добавлять колонки в модуле формы, то это срабатывает полностью для списков, например, для ДокументСписок.
2. Если добавлять колонки для табличной части документа в модуле формы, то колонка появляется, но данных в ней не отображается. Проблема отображения данных легко решается через оформление строки, но привязать поле ввода к данным колонки пока не удалось.
3. Если добавлять колонки для табличной части документа ПриОткрытии() формы, то все работает без дополнительных извратов.
27 Гений 1С
 
гуру
22.02.06
14:16
(25) есть одна мысля, сча проверяю, потом скажу
28 Гений 1С
 
гуру
22.02.06
14:18
(26) прикол в том, что я привязываю при создании формы (еще до открытия), может из-за этого?
29 Vozhd
 
22.02.06
14:19
(28) При создании формы добавление колонки не всегда адекватно срабатывает, как я уже написал.
30 Гений 1С
 
гуру
22.02.06
14:21
(29) Ну да. я ж согласен, потому и указал (26)
31 Vozhd
 
22.02.06
14:29
(30) Не надо недооценивать пролетариат...
32 Гений 1С
 
гуру
22.02.06
14:30
(31) ну и как пролетариат сие расценивает - как баг 1С?
33 Гений 1С
 
гуру
22.02.06
14:30
(31) в смысле баг платформы
34 igork1966
 
22.02.06
14:31
(33) Скорее "особенность". ;-)
35 Гений 1С
 
гуру
22.02.06
14:33
(34) счас настучу БГ об этом, только проверю, на самом деле так или нет
36 Гений 1С
 
гуру
22.02.06
15:09
(34)(31) Реально, проблема в том, что вызывается при создании формы.


Стукнул в 1С:

Для воспроизведения создайте обработку, у нее табличную часть Товары и реквизит этой табличной части "Кол" типа "Количество(10,0)".

Создайте основную форму, удалите из нее колонку Кол в табличной части Товары и код обработки замените этим:

Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
НоваяКолонка = ЭлементыФормы.Товары.Колонки.Добавить("Кол");
НоваяКолонка.Данные = "Кол";
НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));

КонецПроцедуры

НоваяКолонка = ЭлементыФормы.Товары.Колонки.Добавить("Кол1");
НоваяКолонка.Данные = "Кол";
НоваяКолонка.УстановитьЭлементУправления(Тип("ПолеВвода"));


Разве это не бага платформы???
По моему слова о том, что форма еще не создана, прозвучат неубедительно.
Тогда надо выдавать ошибку, а так получается странный результат - данные в ячейку вводятся, сохраняются, но не привязываются к реквизиту.
Касается не только формы обработки, но и любых форм вообще.
37 Vozhd
 
22.02.06
15:13
(36) Так 1С уже неоднократно сообщал, что в модуле формы объект еще не полностью инициализирован. И именно этим они объясняют закрытие предприятия при возникновении ошибок в модулях...
38 Гений 1С
 
гуру
22.02.06
15:16
(37) в курсе, это конкретная бага... корявая библиотека по работе с формами
39 Гений 1С
 
гуру
26.02.06
17:08
(0) 1С признало свою ошибку.
(36) Отправил им вот этот пост.

Ответили (1С, Москва) 26.02.2006 16:52  :
Re: Бага или фича? Программное добавление колонок при создании объекта Форма.  
Указанная Вами ошибка подтвердилась и зарегистрирована. Спасибо.