8.х Справочник реквизит булево запись элемента

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем o_O, 16 дек 2010.

  1. TopicStarter Overlay
    o_O
    Offline

    o_O Опытный в 1С

    Регистрация:
    18 июн 2010
    Сообщения:
    234
    Симпатии:
    0
    Баллы:
    26
    Подскажите мне пжлста, как записать реквизит(булево) создаваемого элемента справочника.

    Есть справочник "Товары"; есть реквизит "Распродажа" тип Булево.

    Код:
    НовыйТовар = Справочники.Товары.СоздатьЭлемент();
    НовыйТовар.Код = VarКод;
    НовыйТовар.Распродажа = VarРаспродажа;
    ...
    НовыйТовар.Записать();
    
    Выдаёт ошибку: Поле объекта недоступно для записи (Распродажа).

    изначально VarРаспродажа = Строка("ложь");

    подставлял VarРаспродажа = 0
    VarРаспродажа = ложь

    ошибка не меняется.

    все-таки, как установить реквизит типа булево, не получая форму ?

    Заранее спасибо!
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А форму получать не надо. Проверяйте своства реквизита: может ошибка в названии, использование установлено только для группы и т.п.
  3. TopicStarter Overlay
    o_O
    Offline

    o_O Опытный в 1С

    Регистрация:
    18 июн 2010
    Сообщения:
    234
    Симпатии:
    0
    Баллы:
    26
    Реквизит проверен: для группы и элемента.
    Если с формой, то вроде понятно всё: ЭлементыФормы.VarРаспродажа = 0;
    Но т.к. много объектов, хотелось бы без формы.
  4. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Т.е. в форме у вас элемент VarРаспродажа, а сам реквизит Распродажа? Покажите скрин реквизитов справочника Товары. Где вы код создания нового элемента вызываете?

    P.S. И, вроде, ЭлементыФормы.VarРаспродажа.Значение = Ложь, правильнее будет.
  5. TopicStarter Overlay
    o_O
    Offline

    o_O Опытный в 1С

    Регистрация:
    18 июн 2010
    Сообщения:
    234
    Симпатии:
    0
    Баллы:
    26
    Косяк в коде был. Извиняюсь. Появился другой вопрос: как мне заполнить ТаблПоле объекта справочника не открывая формы?

    Табличное поле "ТаблТоваров" не является реквизитом.

    Код:
    Товар = Справочники.Номенклатура.СоздатьЭлемент();
    Форма = Товар.ПолучитьФорму();
    Табл = Форма.ЭлементыФормы.ТаблТоваров.Значение.Добавить();
    Табл.Товар = товар;
    Табл.Статус= статус;
    Товар.Записать();
    
    
    В результате ТаблТоваров пустая.
  6. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    С какими данными связано табличное поле формы справочника?
    И вы немного путаете назначение формы объект базы. Форма предназначена только для отображения и интерактивного редактирования данных. При создании и изменении (не интерактивном, в коде) объекта ИБ форма не нужна.
  7. TopicStarter Overlay
    o_O
    Offline

    o_O Опытный в 1С

    Регистрация:
    18 июн 2010
    Сообщения:
    234
    Симпатии:
    0
    Баллы:
    26
    Табличное поле не связано с данными и к сожалению изменить я этого не могу.

    Если я правильно понимаю, то для осуществления в том или ином виде

    Код:
    ЭлементыФормы.ТаблТоваров.Значение.Добавить();
    Табл.Товар = товар;
    Табл.Статус= статус;
    
    я должен открыть форму?
  8. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Для чего нужно табличное поле? Что в нем отображается при открытии? Как сохраняются данные внесенные в табличное поле при закрытии формы?
  9. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    [off]
    И тут так надо:
    Код:
    НоваяСтрока = ЭлементыФормы.ТаблТоваров.Значение.Добавить();
    НоваяСтрока.Товар = товар;
    НоваяСтрока.Статус = статус;
    
    
    [/off]
  10. TopicStarter Overlay
    o_O
    Offline

    o_O Опытный в 1С

    Регистрация:
    18 июн 2010
    Сообщения:
    234
    Симпатии:
    0
    Баллы:
    26
    Вобщем, через ТП идёт запись в регистрСведений при записи элемента справочника и считывание в ТП из регистраСведений при открытии формы того самого элемента. Как-то так...
  11. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Вот вам и нужно при создании элемента справочника (после его записи) еще данные и в регистр сведений "писать". Смотрите код записи данных в регистр в форме.
  12. TopicStarter Overlay
    o_O
    Offline

    o_O Опытный в 1С

    Регистрация:
    18 июн 2010
    Сообщения:
    234
    Симпатии:
    0
    Баллы:
    26
    Спасибо! Дошло-разобрался. И последний вопрос если можно:

    Код:
    VarТовар = Справочники.Товары.НайтиПоКоду("0000003");
    VarРекв1 = VarТовар.Метаданные().реквизиты.Найти("Статус");
    VarРекв1.Значение = "Распродажа";   // эта строчка естественно не работает!
    
    
    Как, определив товар и его реквизит, записать значение реквизита ?

    т.е. не перебирать все известные мне реквизиты так:
    Код:
    VarТовар = Справочники.Товары.НайтиПоКоду("0000003");
    VarТовар.Статус = "Распродажа";
    VarТовар.Количество = 20;
    VarТовар.Скидка = 10;
    ....
    
    
    а в цикле перебрать все реквизиты и установить для них значения у определенного товара.

    Заранее спасибо!
  13. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Если честно - не совсем понял.
    Вы хотите получить доступ к значению реквизита по имени реквизита формируемом в коде?
    Можно так:
    Код:
    VarТовар = Справочники.Товары.НайтиПоКоду("0000003");
    ТекТовар = VarТовар.ПолучитьОбъект(); // не забывайте - редактировать можно объекты, а НайтиПоКоду дает ссылку
    ТекТовар["Статус"] = "Распродажа";
    
    
    Перебор реквизитов в цикле:
    Код:
    VarТовар = Справочники.Товары.НайтиПоКоду("0000003");
    ТекТовар = VarТовар.ПолучитьОбъект();
    Для каждого ТекРеквизит Из ТекТовар.Метаданные().Реквизиты Цикл
    ТекТовар[ТекРеквизит.Имя] = {ЗначениеРеквизита};
    КонецЦикла;
    
    
    [off]P.S. И не мешайте в коде (особенно в переменных) латиницу с кириллицей - считается плохим тоном :angry: [/off]
  14. TopicStarter Overlay
    o_O
    Offline

    o_O Опытный в 1С

    Регистрация:
    18 июн 2010
    Сообщения:
    234
    Симпатии:
    0
    Баллы:
    26
    Отлично! Всё работает! только в конце надо VarТовар.Записать();
    Огромное Спасибо!
  15. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    В приведенном коде: ТекТовар.Записать()

Поделиться этой страницей