1c7.7 Справочник.Владелец - как уснановить?

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#1
Народ, подскажите плиз как правильно задавать владельца. сделал так:

Договор = СоздатьОбъект("Справочник.Договоры");
Договор.Владелец = Контрагент;
Договор.НайтиПоКоду(Прав(Код,6));

Получаю ошибку -
Договор.Владелец = Контрагент;
{Документ.ЗагрузкаФОРТС.Модуль Документа(96)}: Не выбран элемент!

пробовал также Договор.Владелец = Контрагент.ТекущийЭлемент();
Но результат тот же. Подскажите пожалуйста что делаю неправильно

P.S. переменная Контрагент содержит значение - проверено отладчиком
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#2
Более того - следующий код выдает подобную ошибку
Код:
	Справочник = СоздатьОбъект("Справочник.ВидыДоговоров");
Справочник.НайтиПоКоду("00002");
Договор = СоздатьОбъект("Справочник.Договоры"); 
Договор.ВидДоговора = Справочник.ТекущийЭлемент();
 
G

GalFord

Гость
#3
Контрагент у тебя какого типа, ссылка?
 

SeverBap

Well-Known Member
18.09.2007
451
0
#4
Для начала надо хоть написать договор.Новый();
А если тебе не поможет: То Договор.ИспользоватьВладельца(Контрагент);
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#5
GalFord, да

Bap, мне не нужен новый договор. Мне нужно найти договор по коду. А он не ищет нифига, хотя когда в договоры захожу - вижу что такой существует.
 

SeverBap

Well-Known Member
18.09.2007
451
0
#6
Ясен пень, блин сначала надо установить владельца: ИспользоватьВладельца(), а потом все остальное если не нравится то поставь флажок что по всему справочнику .......
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#7
Bap, а как дальше осуществлять поиск?

Договор.ИспользоватьВладелеца(Контрагент);
{Документ.ЗагрузкаФОРТС.Модуль Документа(96)}: Поле агрегатного объекта не обнаружено (ИспользоватьВладелеца)
 

vbs

Well-Known Member
18.02.2007
1 708
3
#8
Мало использоватьВладельца.
Надо еще Договор.НайтиПоРеквизиту("ВидДоговора",НайденныйВидДоговора,0)


ИспользоватьВладелеца - синтаксическая ошибка
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#9
vbs, да пока достаточно только ИспользоватьВладельца. А синтаксис не проверил в очередной раз....

Ребята спасибо большое - ловите свои плюсы
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#10
Текс. появилась чуть другая задача. Есть номер договора. Можно ли по нему достать владельца т.е. определить контрагента? По идее можно. вопрос -как это сделать?
Делаю так
Код:
Брокерский = СоздатьОбъект("Справочник.ВидыДоговоров");
Брокерский.НайтиПоКоду("00002");
СпрКонтр = СоздатьОбъект("Справочник.Договоры");
СпрКонтр.НайтиПоРеквизиту("ВидДоговора",Брокерский.ТекущийЭлемент(),0);
Если СпрКонтр.НайтиПоКоду(Прав(Код,6)) = 1 Тогда 
Контрагент = СпрКонтр.ТекущийЭлемент().Владелец;
Самая сложность в том что СпрКонтр.НайтиПоРеквизиту("ВидДоговора",Брокерский.ТекущийЭлемент(),0); возвращает 0. да и СпрКонтр.НайтиПоРеквизиту("ВидДоговора",Брокерский.ТекущийЭлемент(),0); тоже возвращает 0. Хотя такие элементы в базе данных есть.
Подскажите пожалуйста как быть в моей ситуации
 

puh14

Well-Known Member
11.07.2008
1 412
0
#11
НайтиПоРеквизиту выдаст тебе только один элемент а если у тебя их несколько?
СпрКонтр.НайтиПоРеквизиту("ВидДоговора",Брокерский.ТекущийЭлемент(),1) - тогда ищет не в пределах подчинения, а с 0 так как владелец договора неопределен, то он тебе и вернет пустое значение

и вообще - проще через запрос с условием.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#12
Ну да. точно. забыл про еденичку. и действительно выдает не совсем то что мне нужно. Или наоборот совсем не то. Просто думал поиск этим сократить - чтобы искало только среди ограниченного вида договоров

puh14, а можешь помочь текст запроса правильно поставить? Мне нужно узнать владельца договора по коду. Код такой - Прав(Код, 6)... Не понимаю почему он через СозданиеОбъекта не находит по Коду((
 

SeverBap

Well-Known Member
18.09.2007
451
0
#13
Давай попробую я:
Код:
Брокерский = СоздатьОбъект("Справочник.ВидыДоговоров");
Брокерский.НайтиПоКоду("00002");
СпрКонтр = СоздатьОбъект("Справочник.Договоры");
Пока СпрКонтр.НайтиПоКоду(Прав(Код,6),0)=1 Цикл
Если СпрКонт.ВидДоговора=Брокерский.ТекущийЭлемент() Тогда
Контрагент=СпрКонт.Владелец;
КонецЕсли;
КонецЦикла;
Кажется всё! :mellow:
 

puh14

Well-Known Member
11.07.2008
1 412
0
#14
Текст = "
|Период с Выбнач По ВыбКон;
|Без Итогов;
|ВидДог = Справочник.ВидыДоговоров.ТекущийЭлемент, Справочник.Договоры.ВидДоговора;
|Договор = Справочник.Договоры.ТекущийЭлемент;
|Контрагент = Справочник.Контрагенты.ТекущийЭлемент, Справочник.Договоры.Владелец;
|КодКонтрагента = Спрвочник.Контрагенты.Код;
|Группировка Контрагент Без Групп;
|Группировка КодКонтрагента;
|Группировка Договор Без Групп;
|Условие(ВидДог в выбВидДог);
|Условие(Договор.Код в Число(Прав(Код,6)))"; // либо = вместо в

не заню как у тебя точно контрагенты справочник называется - поправь, ежлии что
ВыбВидДог можешь определить либо поиском по коду, либо выбором в форме
Рекомендую выгрузить усе в ТЗ на форме - ежли всё корректно , то убрать лишние группировки
если не влом - код можешь вытаскивать при переборе ТЗ с записью в добаленную колонку
ВыбНач и ВыбКон определи

Кстати - ежли у тебя код договора уникален в пределах подчинения, то у тебя через найтипокоду вообще фигня будет
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#15
Bap, ты меня не правильно понял. СпрКонтр.НайтиПоКоду(Прав(Код,6),0) возвращает ноль. В этом и заключается проблема. то что договор - брокерский - это необязательное условие. эт я так... додумывал авось поможет.

Задача такая - найти договор с нужним кодом (если глазками смотреть в базе он есть!) и получить его Владельца - это и будет нужный мне контрагент

puh14, ща попробую это, но непонятно какой временной период лучше ставить. Это раз. А два - переберать в таком случае несколько затруднительно.
 

puh14

Well-Known Member
11.07.2008
1 412
0
#16
Если реквизиты не периодические - тогда период пофиг, главное чтобы был. А насчет перебрать - проверь корректность работы ( только для отладки так многог надо) и оставь только группировку по Контрагенту. А у тебя нумерация кодов договора в справочнике стоит "в пределах подчинения", или "во всем справочнике"?

Кстати - если у тебя код справочника числовой, то ПРав либо не будет работать, либо сделает в конечном итоге строку, проверь и заложись через форматирование.
 

SeverBap

Well-Known Member
18.09.2007
451
0
#17
Я конечно понимаю, много чего хотите!! но то что у меня написано работает !!!!!!
Код:
Брокерский = СоздатьОбъект("Справочник.ВидДоговора");
Брокерский.НайтиПоКоду("00002");
СпрКонтр = СоздатьОбъект("Справочник.Договора");
Пока СпрКонтр.НайтиПоКоду(СокрЛП(Прав(СокрЛП(Код),6)),0)=1 Цикл
Если СпрКонтр.ВидДоговора=Брокерский.ТекущийЭлемент() Тогда
Сообщить(СпрКонтр.Владелец);
КонецЕсли;
КонецЦикла;
извени, я незнаю что за фигня у тебя там, но у меня работает!!! (тока смотри прервать напиши где надо!)
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#18
Bap, у меня существует только один договор с определенным кодом. Но он не находится. Цикл смысла не имеет ибо почему-то СпрКонтр.НайтиПоКоду(СокрЛП(Прав(СокрЛП(Код),6)),0)=0
 

puh14

Well-Known Member
11.07.2008
1 412
0
#19
у тебя код в справочнике договоры числовой или текстовый?
А поле Код которое мучаешь какое?
Прав работает только с строкой - ежли попытаешься откусить от числа - косяк, Попытаешся найти числовой код, используя строчное значение - косяк. Форматировать надо.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#20
Тип кода - текстовый. Значение, которое ищу тоже текстовое (например 500094). Визуально присутствует в спавочнике договоров определенного Контрагента.
Кстати - вот такой запрос - тоже возвращает 0
"//{{ЗАПРОС(Сформировать)
|с (НачГода(ТекущаяДата())) по (ТекущаяДата());
|Без итогов;
|Договор = Справочник.Договоры.ТекущийЭлемент;
|Контрагент = Справочник.Контрагенты.ТекущийЭлемент, Справочник.Договоры.Владелец;
|КодКонтрагента = Спрвочник.Контрагенты.Код;
//|Группировка Контрагент Без Групп;
//|Группировка КодКонтрагента;
//|Группировка Договор Без Групп;
//|Условие(ВидДог в выбВидДог);
|Условие(Договор.Код = Прав(Код,6))"//}}ЗАПРОС
;