Имя: Пароль:
1C
1С v8
Программное добавление реквизитов в табличную часть.
,
0 НачинающийВ1С
 
18.06.19
11:08
Доброе утро.
На форму в общем модуле добавляю реквизиты в табличную часть "Товары" программно. В самом документе в табличной части реквизиты в конфигураторе добавлены. Добавляю абсолютно одинаково, но почему-то характеристика добавляется, а номенклатура нет.
На что обратить внимание, где может быть ошибка?

         Если Форма.ИмяФормы = "Документ.НашДокумент.Форма.ФормаДокумента" тогда
            
            ДобавляемыеРеквизиты    = Новый Массив;

        //реквизиты ТЧ Товары
        Номенклатура = Новый РеквизитФормы("Номенклатура",    Новый ОписаниеТипов("СправочникСсылка.Номенклатура"),    "Объект.Товары", "Номенклатура");
            Характеристика      = Новый РеквизитФормы("Характеристика",        Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"), "Объект.Товары", "Характеристика");
                
        //Заполним массив после описания реквизитов формы
        ДобавляемыеРеквизиты.Добавить(Номенклатура);
        ДобавляемыеРеквизиты.Добавить(Характеристика);
        
        //Добавим новые реквизиты в форму
        Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
                
        //добавление на форму элементов ТЧ
        Номенклатура                = Форма.Элементы.Добавить("Номенклатура", Тип("ПолеФормы"), Форма.Элементы.Товары);
                Номенклатура.ПутьКДанным    = "Объект.Товары.Номенклатура";
                Номенклатура.Вид            = ВидПоляФормы.ПолеВвода;
        
        Характеристика                = Форма.Элементы.Добавить("Характеристика", Тип("ПолеФормы"), Форма.Элементы.Товары);
        Характеристика.ПутьКДанным    = "Объект.Товары.Характеристика";
        Характеристика.Вид            =ВидПоляФормы.ПолеВвода;
         КонецЕсли;
1 НачинающийВ1С
 
18.06.19
11:10
Замечу, что в отладчике в "Форма.Объект.Товары" оба реквизита присутствуют после обхода этих строк.
А вот уже в предприятии номенклатуры нет, а характеристика есть.
2 НачинающийВ1С
 
18.06.19
11:12
(1) Да собственно и перед выводом самим в самом конце события "при открытии формы" в отладчике оба реквизита присутствуют.
3 aleks_default
 
18.06.19
11:24
Почисти кэш
4 НачинающийВ1С
 
18.06.19
11:33
(3) Чистил, не помогло. На всякий случай еще раз почистил, снова не помогло.
5 RomanYS
 
18.06.19
11:40
>> В самом документе в табличной части реквизиты в конфигураторе добавлены
Зачем добавлять реквизиты формы, если они уже есть в метаданных. По идее ты вообще ошибку должен получить
6 НачинающийВ1С
 
18.06.19
11:41
(5) А как правильно добавить на форму реквизиты?
Ошибок никаких не получаю.
7 RomanYS
 
18.06.19
11:46
(6) Зачем это делать программно? Просто добавьте их в редакторе формы.

Код подобный вашему может быть использован для упрощения поддержки, когда непосредственное редактирование форм не рекомендуется. Но "НашДокумент" явно не тот случай.
8 НачинающийВ1С
 
18.06.19
11:47
(7) "НашДокумент" это абстрактное название документа. Документ типовой. Как и Номенклатура и Характеристика это абстрактные названия реквизитов.

А сама задача вполне реальна. И требование заключается в том, что все реквизиты на форму добавляются в расширении программно.
9 catena
 
18.06.19
11:48
+(5)ТОже не поняла. Достаточно же элементы добавить.
10 catena
 
18.06.19
11:48
Вот этого должно хватить, если реквизиты в ТЧ есть:

//добавление на форму элементов ТЧ
        Номенклатура                = Форма.Элементы.Добавить("Номенклатура", Тип("ПолеФормы"), Форма.Элементы.Товары);
                Номенклатура.ПутьКДанным    = "Объект.Товары.Номенклатура";
                Номенклатура.Вид            = ВидПоляФормы.ПолеВвода;
        
        Характеристика                = Форма.Элементы.Добавить("Характеристика", Тип("ПолеФормы"), Форма.Элементы.Товары);
        Характеристика.ПутьКДанным    = "Объект.Товары.Характеристика";
        Характеристика.Вид            =ВидПоляФормы.ПолеВвода;
11 НачинающийВ1С
 
18.06.19
11:53
(10) Убрал добавление самих реквизитов. Оставил только добавление элементов.
Все осталось как прежде - один реквизит добавляется, второй нет.
12 НачинающийВ1С
 
18.06.19
11:54
(7) (10) Вы были правы, добавление реквизитов само по себе излишне. Уберу это в коде.


Но проблема с выводом на форму так и не решена.
13 RomanYS
 
18.06.19
11:55
(8) Прикольно. Каков уровень абстракции: реквизит Номенклатура в ТЧ Товары !!!
(10) +1
(8) Проверь права, возможно на абстрактный добавленный тип их забыли установить. Вряд ли у тебя там добавлены абстрактные функциональные опции, но тоже проверь.
14 НачинающийВ1С
 
18.06.19
11:56
(13) Запускаю с полными правами.
15 RomanYS
 
18.06.19
11:58
(14) проверь ещё раз ПутьКДанным. Хотя при ошибке по идее исключение должно выдаваться
16 RomanYS
 
18.06.19
12:00
Ещё имена переменных поменяй, вместо
Номенклатура                = Форма.Элементы.Добавить("Номенклатура", Тип("ПолеФормы"), Форма.Элементы.Товары);
делай
НовыйЭлементФормы = Форма.Элементы.Добавить("Номенклатура", Тип("ПолеФормы"), Форма.Элементы.Товары);
17 НачинающийВ1С
 
18.06.19
12:02
(16) Имена переменных в базе итак другие (Элемент_ИмяЭлемента)
Путь к данным правильный.

В последней строке события "При открытии" по прежнему в "Объект.Товары" есть оба нужных реквизита. А в итоге почему-то только один.
18 НачинающийВ1С
 
18.06.19
12:03
(17) Не в базе, а в моем коде.
19 RomanYS
 
18.06.19
12:05
(17) В Объект.Товары они независимо от твоего кода - из метаданных расширения.
Смотри Форма.Элементы.ИмяТвоегоАбстактногоРеквизита: видимость, доступность...
20 singlych
 
18.06.19
12:12
ставлю на функциональную опцию
21 НачинающийВ1С
 
18.06.19
12:20
(19) Сверил.

Все строчки у обоих реквизитов идентичны.
22 mikecool
 
18.06.19
12:25
добавить в конфигураторе, рулить видимостью - не вариант?
23 НачинающийВ1С
 
18.06.19
12:26
(22) Вы имеете ввиду добавить в конфигураторе на форме не кодом? Не вариант так.
24 mikecool
 
18.06.19
12:29
(23) как пожелаешь
25 aleks_default
 
18.06.19
12:31
Вообще-то непонятно. Если реквизиты изначально есть, то почему изначально нет элементов формы для этих реквизитов? Они тоже тогда наверное должны быть. Может они тоже на самом деле уже есть, а их потом где-то дальше в коде скрывают(убирают видимость)?
26 НачинающийВ1С
 
18.06.19
12:31
(24) Ну это не мое желание. Задание такое.
27 НачинающийВ1С
 
18.06.19
12:32
(25) Потому что реквизиты добавлены мной вручную. А формы типовые.
28 Вафель
 
18.06.19
12:32
(10) должно работать
29 aleks_default
 
18.06.19
12:32
Может просмотреть код на наличие действий с элементами формы?
30 aleks_default
 
18.06.19
12:34
(27) А тоесть ты реквизиты в расширении добавил?
31 НачинающийВ1С
 
18.06.19
13:20
(30) Нет, сами реквизиты добавлены в конфигурации основной. А общий модуль, в котором приведенный код написан, находится в расширении. (29) Что имеется ввиду?
32 RomanYS
 
18.06.19
13:24
(31) Озвучь уже тип проблемного реквизита, конфигурацию и вид типового документа. В твоей абстракции возможно совершено другие проблемы и ошибки чем в реальности.
33 НачинающийВ1С
 
18.06.19
13:26
(32) Комплексная автоматизация 2 (2.4.7.109)

Документ "Коммерческое предложение клиенту".
В табличную часть не добавляется реквизит "Направление" (СправочникСсылка.НаправленияДеятельности)
34 RomanYS
 
18.06.19
13:31
(33) Возможно Справочник.НаправленияДеятельности выключен фукнциональными опциями
35 НачинающийВ1С
 
18.06.19
13:32
(34) Если добавлять просто на форму руками, все добавляется.
Как можно проверить выключен или нет?
36 Avalone2010
 
18.06.19
14:49
(0) КА - типовая.Пустая.Включена ФО по КП. В модуле формы расширения.В процедуре при создании на сервере.
    НовыйЭлементФормы = Элементы.Добавить("Товары_НаправлениеДеятельности", Тип("ПолеФормы"), Элементы.Товары);
    НовыйЭлементФормы.ПутьКДанным    = "Объект.Товары._НаправлениеДеятельности";
    НовыйЭлементФормы.Вид            = ВидПоляФормы.ПолеВвода;

В КП добавлен в ТЧ товары новый реквизит "_НаправлениеДеятельности".
37 Avalone2010
 
18.06.19
15:03
(35) Настройки фин реза и контролинг. раздел финансовый результат. галочка финансовый результат по направлениям деятельности. константа ФормироватьФинансовыйРезультат
38 НачинающийВ1С
 
18.06.19
15:21
(37) Спасибо! Это решило вопрос.