|
Родитель элемента справочника | ☑ | ||
---|---|---|---|---|
0
_Дайвер_
02.08.17
✎
11:11
|
КомСоединение;
База(1) и База(2); Из базы (1) передаю элемент, если у элемента есть родитель, то нужно пихнуть его в ту же папку в базе(2). Как это проще всего сделать, кто сталкивался? В качестве параметра передаю имя папки с типом строка у элемента. В отладчике Выборка пишет метод не найден, и в результате отправляет "Пусто". OLEЗапрос = Соединение.NewObject("Запрос"); OLEЗапрос.Текст = "ВЫБРАТЬ | Контрагенты.Родитель.Наименование КАК Родитель1, | Контрагенты.Родитель.Родитель.Наименование КАК Родитель2, | Контрагенты.Родитель.Родитель.Родитель.Наименование КАК Родитель3, | Контрагенты.Родитель.Родитель.Родитель.Родитель.Наименование КАК Родитель4, | Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Наименование КАК Родитель5, | Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Наименование КАК Родитель6 |ИЗ | Справочник.Контрагенты КАК Контрагенты |ГДЕ | Контрагенты.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Родитель.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Наименование = &Наименование"; OLEЗапрос.УстановитьПараметр("Наименование", НаименованиеГруппы); Выборка = OLEЗапрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка; Иначе Возврат "Пусто"; КонецЕсли; |
|||
1
Heckfy
02.08.17
✎
11:14
|
Код кривой. Ограничен уровнем иерархии. Посмотри в типовых РБД. Используй ГУИД объекта.
|
|||
2
Ненавижу 1С
гуру
02.08.17
✎
11:15
|
"В отладчике Выборка пишет метод не найден" - какой метод?
|
|||
3
Zmich
02.08.17
✎
11:15
|
(0). У всех родителей вышестоящих уровней одно и то же Наименование что ли?
|
|||
4
Ненавижу 1С
гуру
02.08.17
✎
11:15
|
а вообще эпично:
|ГДЕ | Контрагенты.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Родитель.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Наименование = &Наименование | И Контрагенты.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Наименование = &Наименование они что все у вас одинаково названы? может там ИЛИ нужно? |
|||
5
_Дайвер_
02.08.17
✎
11:15
|
(1) Базы разные, ГУИД может отличаться, решил что по наименованию найти, а по поводу ограниченности это да
|
|||
6
_Дайвер_
02.08.17
✎
11:16
|
(4) Сорянчик, исправлю
|
|||
7
Heckfy
02.08.17
✎
11:17
|
(5) То есть ты на 100% уверен, что дублей по наименованию нету?
|
|||
8
Heckfy
02.08.17
✎
11:18
|
+7 И не будет в будущем?
|
|||
9
_Дайвер_
02.08.17
✎
11:20
|
(7) Шанс не велик но есть, запар блин вот такой
|
|||
10
_Дайвер_
02.08.17
✎
11:21
|
http://screenshot.ru/upload/image/S8XQ
Это в отладчике |
|||
11
drcrasher
02.08.17
✎
11:24
|
(0) познай глубокий смысл слова "рекурсия"
|
|||
12
Ненавижу 1С
гуру
02.08.17
✎
11:26
|
(10) давай еще меньше информации
|
|||
13
catena
02.08.17
✎
11:26
|
(10)Это на какой строке такая картина?
|
|||
14
_Дайвер_
02.08.17
✎
11:26
|
(13) (12) Выборка = OLEЗапрос.Выполнить().Выбрать();
|
|||
15
Ненавижу 1С
гуру
02.08.17
✎
11:28
|
(14) ну поля еще не доступны допустим, а вот так написать в отладчике?
Выборка.Количество() |
|||
16
catena
02.08.17
✎
11:29
|
(14)Ну так на такой строке и не через оле такая картина будет.
|
|||
17
_Дайвер_
02.08.17
✎
11:30
|
(15) Значение 0
|
|||
18
_Дайвер_
02.08.17
✎
11:48
|
В консоли запросов в Базе(2) выполняю запрос
Группа уже есть, через базу(1) я ее создавал, если ее нет. Первый результат выдал NULL на 6 уровней групп После того как я в эту группу записал вручную элемент, выдал. Второй результат http://screenshot.ru/upload/image/S8Xv |
|||
19
Ненавижу 1С
гуру
02.08.17
✎
12:23
|
(18) продолжай наблюдения
|
|||
20
dezss
02.08.17
✎
12:29
|
ИМХО, в НаименованиеГруппы хранится наименование первого родителя, так что остальные будут всегда пустые.
Тебе нужно наименование и глубина, так будет немножко правильней. Глубину можешь узнать через транзитивное замыкание, например. |
|||
21
_Дайвер_
02.08.17
✎
16:45
|
После долгих мучений было решено остановиться на таком варианте, потому как запросом их вытащить я не нашел способ адекватный.
Если ЗначениеЗаполнено(ТекСтрока.Ссылка.Родитель) Тогда Ссылка = Соединение.Справочники.Контрагенты.НайтиПоНаименованию(ТекСтрока.Ссылка.Родитель.Наименование); Если НЕ Ссылка.Пустой() И НЕ Ссылка.ЭтоГруппа Тогда Контрагент.Родитель = Соединение.Справочники.Контрагенты.НайтиПоНаименованию(ТекСтрока.Ссылка.Родитель.Наименование); Иначе Группа = Соединение.Справочники.Контрагенты.СоздатьГруппу(); Группа.Наименование = ТекСтрока.Ссылка.Родитель.Наименование; Группа.Записать(); Сообщить("Записана новая группа " + Группа.Наименование); Контрагент.Родитель = Соединение.Справочники.Контрагенты.НайтиПоНаименованию(ТекСтрока.Ссылка.Родитель.Наименование); КонецЕсли; КонецЕсли; |
|||
22
_Дайвер_
02.08.17
✎
16:46
|
Контрагент.Родитель = Ссылка; Во!
|
|||
23
_Дайвер_
02.08.17
✎
16:46
|
После первого условия
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |