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

Тема в разделе "1C и всё что с ней связано", создана пользователем KiR, 12 ноя 2008.

  1. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Народ, подскажите плиз как правильно задавать владельца. сделал так:

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

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

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

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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Более того - следующий код выдает подобную ошибку
    Код (Text):
        Справочник = СоздатьОбъект("Справочник.ВидыДоговоров");
    Справочник.НайтиПоКоду("00002");
    Договор = СоздатьОбъект("Справочник.Договоры");
    Договор.ВидДоговора = Справочник.ТекущийЭлемент();
     
  3. GalFord

    GalFord Гость

    Контрагент у тебя какого типа, ссылка?
     
  4. SeverBap

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Для начала надо хоть написать договор.Новый();
    А если тебе не поможет: То Договор.ИспользоватьВладельца(Контрагент);
     
  5. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    GalFord, да

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

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Ясен пень, блин сначала надо установить владельца: ИспользоватьВладельца(), а потом все остальное если не нравится то поставь флажок что по всему справочнику .......
     
  7. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Bap, а как дальше осуществлять поиск?

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Мало использоватьВладельца.
    Надо еще Договор.НайтиПоРеквизиту("ВидДоговора",НайденныйВидДоговора,0)


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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    vbs, да пока достаточно только ИспользоватьВладельца. А синтаксис не проверил в очередной раз....

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

    KiR НЕ шибка опытный програмер)
    1C Team

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

    puh14 Well-Known Member
    1C Team

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

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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Ну да. точно. забыл про еденичку. и действительно выдает не совсем то что мне нужно. Или наоборот совсем не то. Просто думал поиск этим сократить - чтобы искало только среди ограниченного вида договоров

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

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Давай попробую я:
    Код (Text):
    Брокерский = СоздатьОбъект("Справочник.ВидыДоговоров");
    Брокерский.НайтиПоКоду("00002");
    СпрКонтр = СоздатьОбъект("Справочник.Договоры");
    Пока СпрКонтр.НайтиПоКоду(Прав(Код,6),0)=1 Цикл
    Если СпрКонт.ВидДоговора=Брокерский.ТекущийЭлемент() Тогда
    Контрагент=СпрКонт.Владелец;
    КонецЕсли;
    КонецЦикла;
    Кажется всё! :mellow:
     
  14. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Текст = "
    |Период с Выбнач По ВыбКон;
    |Без Итогов;
    |ВидДог = Справочник.ВидыДоговоров.ТекущийЭлемент, Справочник.Договоры.ВидДоговора;
    |Договор = Справочник.Договоры.ТекущийЭлемент;
    |Контрагент = Справочник.Контрагенты.ТекущийЭлемент, Справочник.Договоры.Владелец;
    |КодКонтрагента = Спрвочник.Контрагенты.Код;
    |Группировка Контрагент Без Групп;
    |Группировка КодКонтрагента;
    |Группировка Договор Без Групп;
    |Условие(ВидДог в выбВидДог);
    |Условие(Договор.Код в Число(Прав(Код,6)))"; // либо = вместо в

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

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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Bap, ты меня не правильно понял. СпрКонтр.НайтиПоКоду(Прав(Код,6),0) возвращает ноль. В этом и заключается проблема. то что договор - брокерский - это необязательное условие. эт я так... додумывал авось поможет.

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

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

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Если реквизиты не периодические - тогда период пофиг, главное чтобы был. А насчет перебрать - проверь корректность работы ( только для отладки так многог надо) и оставь только группировку по Контрагенту. А у тебя нумерация кодов договора в справочнике стоит "в пределах подчинения", или "во всем справочнике"?

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

    SeverBap Well-Known Member

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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Bap, у меня существует только один договор с определенным кодом. Но он не находится. Цикл смысла не имеет ибо почему-то СпрКонтр.НайтиПоКоду(СокрЛП(Прав(СокрЛП(Код),6)),0)=0
     
  19. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    у тебя код в справочнике договоры числовой или текстовый?
    А поле Код которое мучаешь какое?
    Прав работает только с строкой - ежли попытаешься откусить от числа - косяк, Попытаешся найти числовой код, используя строчное значение - косяк. Форматировать надо.
     
  20. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

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

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