![]() |
![]() |
![]() |
|
Найти элемент по владельцу | ☑ | ||
---|---|---|---|---|
0
PiotrLoginov
02.11.12
✎
19:18
|
Здравствуйте всем. Переношу данные в восьмерку. В одном из ПКО пишу:
Объект.БанковскийСчетКонтрагента = Справочники.БанковскиеСчетаКонтрагентов.НайтиПоРеквизиту("Владелец",Объект.Контрагент,,Объект.Контрагент); То есть я хочу, чтобы во время загрузки данных в справочник базы-приемника при создании очередного элемента после заполнения нескольких реквизитов этого элемента, в том числе реквизита Контрагент (за это отвечает другой код, ранее выполняемый), программа считала значение этого реквизита, обратилась в справочник БанковскиеСчетаКонтрагентов и нашла там элемент с таким владельцем-контрагентом. Такое возможно? Допустим, она контрагента считала успешно. Как быть далее? На данный момент при попытке перенести получаю: "Ошибка при вызове метода контекста (НайтиПоРеквизиту): Неверно указан реквизит" Не нашел в СП, каким же методом воспользоваться. Нашел на мисте это: v8: как найти элемент справочника по владельцу . Насколько понял, там предложили сделать запрос на получение ссылки на искомый элемент. А попроще никак не получится? Допустим, попроще никак. Тогда значит надо составить запрос на получение ссылки на элемент справочника БанковскийСчетКонтрагента и вписать условие что-то вроде ГДЕ Владелец = "Такое-то наименование контрагента" Можно ли такое вписывать в обработчик ПКО? В общем, для моего уровня засада полная... Прошу помощи. Заранее спасибо. |
|||
1
Wobland
02.11.12
✎
19:21
|
запрос - это хорошо. это ничего, что страшный, это хорошо. и с наименованиями не работай. в твоём случае ссылка в ГДЕ. далее. я в отдельных случаях по коду ищу, пусть мои юзеры переименовывают как хотят
|
|||
2
PiotrLoginov
02.11.12
✎
19:21
|
* в одном из ПКО пишу:
после загрузки: Объект.БанковскийСчетКонтр ... *далее по тексту* |
|||
3
Wobland
02.11.12
✎
19:24
|
я так и не увидел, в каком событии ты это делаешь, кстати
|
|||
4
Ork
02.11.12
✎
19:25
|
(0)
1. У "Владельца" может быть несколько подчиненных. 2. У "владельца" может не быть подчиненных вообще. Посему нужен не поиск по реквизиту, а выборка. И если в ней есть что-либо тогда из всех нужно выбрать того, который вам больше подходит. |
|||
5
Wobland
02.11.12
✎
19:26
|
(4) а запросом достать и посмотреть? у меня так где-то делается, но из дома не покажу
|
|||
6
Ork
02.11.12
✎
19:27
|
+(4) Вот это вот : "ГДЕ Владелец = "Такое-то наименование контрагента"" - вообще феерично.
Владельцем может быть только элемент справочника. И ни в коем случае не его наименование. |
|||
7
Ork
02.11.12
✎
19:28
|
(5) Как получать выборку - не важно. Хотя сама 1С рекомендует запрос.
|
|||
8
Wobland
02.11.12
✎
19:28
|
(6) а наименование у владельца может совпадать с нужным наименованием ;)
П.С. это явный и безусловный копроподход, которым часто страдают мм... новички |
|||
9
Wobland
02.11.12
✎
19:30
|
(7) я об этом:
Если Количество=1 Тогда //нам подходит, его берём ИначеЕсли Количество=0 Тогда //создаём новый элемент Иначе //что-то иначе |
|||
10
hohol
02.11.12
✎
19:43
|
Владелец не реквизит. Реквизит должен быть проиндексирован. По коду всю жизнь искали. И ты ищи по коду. В методе НайтиПоКоду есть свойство владелец.
|
|||
11
Ork
02.11.12
✎
20:35
|
(10) "И ты ищи по коду". У ТС нет кода. У него есть Контрагент, а у контрагента есть расчетные счета. Какой код выбрать?
Есму нужно именно получить выборку элементов подчиненных Владельцу. |
|||
12
hhhh
02.11.12
✎
21:46
|
(11) вроде нет у него контрагента.
|
|||
13
PiotrLoginov
02.11.12
✎
23:07
|
К сожалению, пришлось отбежать от компа...
(3) ПКО для справочника Договоры. Каждый элемент справочника Договоры в базе-приемнике имеет реквизит Контрагент (ссылка на элемент справочника Контрагенты) и реквизит СчетКонтрагента (ссылка на элемент справочника БанковскиеСчетаКонтрагентов). Для того, чтобы у каждого из формируемых в приемнике элементов был заполнен реквизит СчетКонтрагента, в обработчике ПКО "после загрузки:" пишу: Объект.БанковскийСчетКонтрагента = Справочники.БанковскиеСчетаКонтрагентов.НайтиПоРеквизиту("Владелец",Объект.Контрагент,,Объект.Контрагент); Раньше всегда использовал НайтиПоНаименованию. Срабатывало безукоризненно. В данном случае Наименование не подходит. Но можно ориентировать программу на только что заполненный в элементе реквизит Контрагент. Я вот что думаю: у метода НайтиПоНаименованию НайтиПоРеквизиту четвертый параметр - Владелец искомого элемента. Если бы в первый параметр вписать символ, означающий "любая последовательность символов"... Не ? |
|||
14
PiotrLoginov
03.11.12
✎
00:10
|
Короче. Написал так:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДоговорыКонтрагентов.БанковскийСчетКонтрагента.Ссылка |ИЗ | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов |ГДЕ | ДоговорыКонтрагентов.БанковскийСчетКонтрагента.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Объект.Контрагент); Счет = Запрос.Выполнить().Выгрузить(); Объект.БанковскийСчетКонтрагента = Счет; Не помогло. Реквизит у выгруженных элементов незаполнен. |
|||
15
PiotrLoginov
03.11.12
✎
00:17
|
(4) В моем случае я знаю наверняка, что у каждого контрагента ровно один подчиненный элемент в справочнике БанковскиеСчетаКонтрагентов
|
|||
16
hhhh
03.11.12
✎
02:08
|
(15) как бы голову тебе совершенно снесло. В счет у тебя ведь таблица значений. И ты целую огромную таблицу значений пытаешься запихнуть в маленький элементик банковский счет.
|
|||
17
PiotrLoginov
03.11.12
✎
03:51
|
После долгих поисков добился положительного результата:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | БанковскиеСчетаКонтрагентов.Ссылка КАК БСКС |ИЗ | Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчетаКонтрагентов |ГДЕ | БанковскиеСчетаКонтрагентов.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Объект.Контрагент); Если Запрос.Выполнить().Пустой() Тогда Сообщить ("Здесь не нашелся Банковский счет"); Иначе Результат = Запрос.Выполнить().Выгрузить(); Счет = Результат[0].БСКС; КонецЕсли; Объект.БанковскийСчетКонтрагента = Счет; |
|||
18
PiotrLoginov
03.11.12
✎
04:03
|
Думаю, тема раскрыта :) Но всплыли новые проблемы. Всех неравнодушных милости прошу сюда: v8: УТ11: после переноса бывает, что в форме выбора не отображаются элементы
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |