|   |   | 
| 
 | Родитель элемента справочника | ☑ | ||
|---|---|---|---|---|
| 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 | 
        После первого условия     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |