Имя: Пароль:
1C
1С v8
Использование "НайтиПоРеквизиту"
0 vitaliklibra
 
19.05.15
09:53
Добрый день!

Хочу обратиться к регистру и получить из него данные:

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


Ругается:

{Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(11)}: Ошибка при вызове метода контекста (НайтиПоРеквизиту)
    НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("КодТовара", КодТовара).Наименование;
по причине:
Неверно указан реквизит


Делаю все по синтакс-помощнику. Реквизит этот имеем тип "Строка" и передаю в него при поиске тоже строку. А ошибку все равно прёт. Что делаю не так?
1 shuhard_серый
 
19.05.15
09:54
(0) для этого в 8.Х используются только и исключительно запросы
2 Ёпрст
 
19.05.15
09:54
оваяЗапись.Номенклатура  - явно имеет не тип СТРОКА.
3 Ёпрст
 
19.05.15
09:55
и пихать туда Наименование - тут что-то надо в консерватории подправить
4 1Сергей
 
19.05.15
09:56
Откуда уверенность, что у номенклатуры есть реквизит КодТовара?
5 Ёпрст
 
19.05.15
09:56
Ну и для метода НайтиПоРеквизиту, нужно указывать индексируемый реквизит, если че.. коим КодТовара не является, судя по ошибке.
6 vitaliklibra
 
19.05.15
09:57
(2) и (3) - не, тут я согласен. Поправил:

Справочники.Номенклатура.НайтиПоРеквизиту("КодТовара", КодТовара).ПолучитьОбъект().Ссылка;

НО! Ошибка в том, кто ругается на реквизит, а он, именно с таким названием, у моего справочника "Номенклатура" ЕСТЬ!
7 del123
 
19.05.15
09:59
(6) Плохо поправил) Оно тебе и так ссылку найдет)
а по ошибке, наверняка (5)
8 Ёпрст
 
19.05.15
09:59
(6) феерично
9 vitaliklibra
 
19.05.15
09:59
(5) - "Индексировать" для всех моих реквизитов с типом "Строка" не активен и стоит значение "Не индексировать". Получается, что обратиться через этот метод я не могу?
10 butterbean
 
19.05.15
09:59
(5) да вроде пофиг уже давно на индексацию
(6) хз че с реквизитом, но писать нужно просто НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("КодТовара", КодТовара);
, а лучше запрос самому делать
11 butterbean
 
19.05.15
10:00
(9) может это строка неограниченной длины??
12 vitaliklibra
 
19.05.15
10:01
(11) - да, так и есть.
13 Ёпрст
 
19.05.15
10:01
Ну, раз пофиг, значит КодТовара - строка неограниченной длины поди..
:)
14 Ёпрст
 
19.05.15
10:01
(12) феерично
15 butterbean
 
19.05.15
10:02
(12) делай ограниченной, это будет правильно во всех смыслах
16 vitaliklibra
 
19.05.15
10:04
Ну, блин, ребят вы БОГИ 1С)))))))))) Да, ошибка в том, что этот реквизит и был неограниченной длины, который поэтому и индексировать нельзя. Снял галку "Неограниченная длина" и оставил только:

Справочники.Номенклатура.НайтиПоРеквизиту("КодТовара", КодТовара)

Действительно ссылку возвращает!

ВСЕМ СПАСИБО!!! Хорошего дня!)
17 butterbean
 
19.05.15
10:05
(16) ты длину там смотри выстави нормальную, а то порежет коды существующие
18 tznimble
 
19.05.15
10:05
(16) :D Только писать начал а ты сам разобрался
19 vitaliklibra
 
19.05.15
10:07
(17) - спасибо, уже учёл!)
(18) - спасибо всё равно!)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn