Имя: Пароль:
1C
1С v8
Получить ссылки на все элементы определенного Родителя
,
0 Marry04
 
08.06.16
06:54
Как получить ссылки на все элементы Родителя под наименованием "КО Теп" справочника "Рабочие центры". В дальнейшем хочу поместить ссылки в регистр сведений. делаю так:
Процедура ЗаполнитьНажатие(Элемент)
Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   РабочиеЦентры.Ссылка
        |ИЗ
        |   Справочник.РабочиеЦентры КАК РабочиеЦентры
        |ГДЕ
        |   РабочиеЦентры.Родитель = &Группа
        |"
    );
    
    СсылкаНаГруппу= "КО Теп";
    Запрос.УстановитьПараметр("Группа", СсылкаНаГруппу);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Сообщить(СсылкаНаГруппу.Ссылка + ":");
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить("  " + ВыборкаДетальныеЗаписи.Ссылка);
    КонецЦикла;
КонецПроцедуры

Ошибка:
{Форма.Форма.Форма(24)}: Значение не является значением объектного типа (Ссылка)
    Сообщить(СсылкаНаГруппу.Ссылка + ":");
1 birkoFFFF
 
08.06.16
06:59
//СсылкаНаГруппу= "КО Теп";

Что вы тут имели в виду?

//СсылкаНаГруппу.Ссылка

А тут вы что делаете ? Получить ссылки из строки пытаетесь? Однако...
2 Zmich
 
08.06.16
07:04
(0). Используй НайтиПоНаименованию
3 1dvd
 
08.06.16
07:09
Сообщить("" + СсылкаНаГруппу.Ссылка + ":");
4 1dvd
 
08.06.16
07:09
|ГДЕ
       |   РабочиеЦентры.Родитель В (&Группа)
5 1dvd
 
08.06.16
07:10
|ГДЕ
       |   РабочиеЦентры.ССылка = &Группа
6 1dvd
 
08.06.16
07:10
блин...

|ГДЕ
       |   РабочиеЦентры.ССылка В (&Группа)
7 Marry04
 
08.06.16
09:05
(1) Я хочу получить ссылку на родителя с данным наименованием "КО Теп",а также на элементы родителя.
8 1dvd
 
08.06.16
09:06
(7) тогда В ИЕРАРХИИ
9 Marry04
 
08.06.16
09:06
(3) все равно ошибка такая же. не помогло ни Сообщить("" + СсылкаНаГруппу.Ссылка + ":"); ни |ГДЕ
       |   РабочиеЦентры.ССылка В (&Группа)
10 Fish
 
08.06.16
09:07
(3) У него СсылкаНаГруппу - это строка.
11 1dvd
 
08.06.16
09:07
(9)

   //СсылкаНаГруппу= "КО Теп";
   СсылкаНаГруппу= Справочники.РабочиеЦентры.НайтиПоНаименованию("КО Теп");
12 Marry04
 
08.06.16
09:25
(11) получилось спасибо!именно ссылки на наименования!
теперь хочу загнать эти ссылки(наименования) в регистр сведений "Графики рабочих центров" в поле РабочийЦентр, дата и график работы из справочника "График работы".причем для всех РЦ он равен элемнту справочника=2 смена. Не совсем понимаю как вытащить именно это значение.

  Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить("  " + ВыборкаДетальныеЗаписи.Ссылка);
         НоваяЗапись=РегистрыСведений.ГрафикиРабочихЦентров.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.РабочийЦентр = ВыборкаДетальныеЗаписи.Ссылка;
          НоваяЗапись.ГрафикРаботы = Справочники.ГрафикиРаботы.???
        
    КонецЦикла;
13 Marry04
 
08.06.16
09:26
маленьким запросом может. и найти по наименованию метод тут не подойдет?
14 Fish
 
08.06.16
09:28
(13) Тем же запросом и вытаскивай. В чём проблема?
15 Marry04
 
08.06.16
09:33
(14)  Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГрафикиРаботы.Ссылка
        |ИЗ
        |   Справочник.ГрафикиРаботы КАК ГрафикиРаботы
        |ГДЕ
        |    ГрафикиРаботы.ССылка = "2 смены"    
    |"
    );
ГрафикиРаботы.ССылка = "2 смены"  ругается на данную конструкцию..пишет, что не хватает символа - ). не понимаю зачем он.
16 Marry04
 
08.06.16
09:34
Ожидается символ ')'
        |    ГрафикиРаботы.ССылка = "<<?>>2 смены"
17 Ёпрст
 
08.06.16
09:36
(15) он тебе мягко намекает, что сравнивать ссылку со строкой бессмысленно
18 Marry04
 
08.06.16
09:39
(17) исправила на  ГрафикиРаботы.Наименование = "2 смены"    

тоже самое
19 Зая Бусечка
 
08.06.16
09:41
(18) ссылку со строкой сравнивать бессмысленно
ну или тупо

Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГрафикиРаботы.Ссылка
        |ИЗ
        |   Справочник.ГрафикиРаботы КАК ГрафикиРаботы
        |ГДЕ
        |    ГрафикиРаботы.Наименование = ""2 смены""    
    |"

обрати внимание на кавычки
20 Fish
 
08.06.16
09:43
(18) "исправила" - Измени пол в личке.
21 Marry04
 
08.06.16
09:48
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить("  " + ВыборкаДетальныеЗаписи.Ссылка);
         НоваяЗапись=РегистрыСведений.ГрафикиРабочихЦентров.СоздатьМенеджерЗаписи();
         НоваяЗапись.Период = ТекущаяДата();
          НоваяЗапись.РабочийЦентр = ВыборкаДетальныеЗаписи.Ссылка;
          Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГрафикиРаботы.Ссылка
        |ИЗ
        |   Справочник.ГрафикиРаботы КАК ГрафикиРаботы
        |ГДЕ
        |    ГрафикиРаботы.Наименование = ""2 смены""    
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи1 = РезультатЗапроса.Выбрать();

    НоваяЗапись.ГрафикРаботы = ВыборкаДетальныеЗаписи1.Ссылка;
    НоваяЗапись.Записать(Истина);    
    КонецЦикла;
Вот таким образом сделала. но что-то данные в регистр не записываются
22 Ёпрст
 
08.06.16
09:55
(21) дык, перебирать надо ВыборкаДетальныеЗаписи1 , для начала.
А так, всё в топку.
23 Зая Бусечка
 
08.06.16
09:58
А где ВыборкаДетальныеЗаписи1.Следующий() ?
24 Marry04
 
08.06.16
09:59
(22)  Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГрафикиРаботы.Ссылка
        |ИЗ
        |   Справочник.ГрафикиРаботы КАК ГрафикиРаботы
        |ГДЕ
        |    ГрафикиРаботы.Наименование = ""2 смены""    
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи1 = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл

    НоваяЗапись.ГрафикРаботы = ВыборкаДетальныеЗаписи1.Ссылка;
    КонецЦикла;
    НоваяЗапись.Записать(Истина);    

про это вы?
25 Marry04
 
08.06.16
10:02
Бесполезно, все равно не хочет заполняться данными регистр. может не так как-то выборка графика все-таки идет или записывать как-то по-другому
вот вроде как полноценный код пока такой.
Процедура ЗаполнитьНажатие(Элемент)
Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   РабочиеЦентры.Ссылка
        |ИЗ
        |   Справочник.РабочиеЦентры КАК РабочиеЦентры
        |ГДЕ
        |    РабочиеЦентры.ССылка В ИЕРАРХИИ(&Группа)    
        |"
    );
    //СсылкаНаГруппу = Справочники.РабочиеЦентры.ПустаяСсылка();
    СсылкаНаГруппу= Справочники.РабочиеЦентры.НайтиПоНаименованию("КО Теп");
    Запрос.УстановитьПараметр("Группа", СсылкаНаГруппу);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    //Сообщить("" + СсылкаНаГруппу.Ссылка + ":");
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Сообщить("  " + ВыборкаДетальныеЗаписи.Ссылка);
         НоваяЗапись=РегистрыСведений.ГрафикиРабочихЦентров.СоздатьМенеджерЗаписи();
         НоваяЗапись.Период = ТекущаяДата();
          НоваяЗапись.РабочийЦентр = ВыборкаДетальныеЗаписи.Ссылка;
          Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГрафикиРаботы.Ссылка
        |ИЗ
        |   Справочник.ГрафикиРаботы КАК ГрафикиРаботы
        |ГДЕ
        |    ГрафикиРаботы.Наименование = ""2 смены""    
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи1 = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл

    НоваяЗапись.ГрафикРаботы = ВыборкаДетальныеЗаписи1.Ссылка;
    КонецЦикла;
    НоваяЗапись.Записать(Истина);    
    КонецЦикла;
КонецПроцедуры
26 Ёпрст
 
08.06.16
10:02
(24) да, но весь код - в топку
27 catena
 
08.06.16
10:04
(25)Хотите, дам рецепт чудесного борща?
28 Marry04
 
08.06.16
10:07
(26) почему? что не так?
29 Marry04
 
08.06.16
10:08
(27) извините , что задаю тупые вопросы. я- начинающий только..
30 Ёпрст
 
08.06.16
10:08
(28) ну, всё
:)

А так, занимайтесь, совершенствуйтесь
31 Marry04
 
08.06.16
10:09
(30) все???может дадите свой какой-то алгоритм. буду очень благодарна вам
32 Marry04
 
08.06.16
10:13
все получилось!спасибо всем огромное!
33 Feunoir
 
08.06.16
10:14
Вы, самое главное, не спугните девушку. Она отличный кандидат на участие в конкурсе мисс бюст. Если он, когда-нибудь ещё будет проводиться.

https://pp.vk.me/c604417/v604417607/1b2/NMohOB_Ay3g.jpg
34 Marry04
 
08.06.16
10:28
(33) что вы делаете(((
35 catena
 
08.06.16
10:37
(29)Так начинающие книжки читают. Зачем превращать форум в интерактивный СП?
36 Feunoir
 
08.06.16
10:38
(34) Фоточки показываю :) Красивая фотка. Динамический диапазон поправить и отлично вообще будет.
37 Зая Бусечка
 
08.06.16
10:44
(34) Он завидует. Я тоже.
38 Marry04
 
08.06.16
10:54
Теперь аналогичную вещь делаю для справочника ГруппыЗаменяемостиРабочихЦентров. там уже нет иерархии. просто вывести в регистр сведений ссылки на данные РЦ и график работы такой же проставить. Но тут косяк, пишет, что
{Форма.Форма.Форма(41)}: Ошибка при вызове метода контекста (Записать)
    НоваяЗапись.Записать(Истина);    
по причине:
Запись не верна! Значение поля "Рабочий центр" не может быть пустым!: ГрафикиРабочихЦентров: 08.06.2016,  (Регистр сведений: Графики рабочих центров)



Вот код
Процедура ЗаполнитьРЦНажатие(Элемент)
НоваяЗапись=РегистрыСведений.ГрафикиРабочихЦентров.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = ТекущаяДата();

Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГруппыЗаменяемостиРабочихЦентров.Ссылка
        |ИЗ
        |   Справочник.ГруппыЗаменяемостиРабочихЦентров КАК ГруппыЗаменяемостиРабочихЦентров        
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить("  " + ВыборкаДетальныеЗаписи.Ссылка);
    НоваяЗапись.РабочийЦентр = ВыборкаДетальныеЗаписи.Ссылка;
КонецЦикла;

  Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГрафикиРаботы.Ссылка
        |ИЗ
        |   Справочник.ГрафикиРаботы КАК ГрафикиРаботы
        |ГДЕ
        |    ГрафикиРаботы.Наименование = ""2 смены""    
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи1 = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
    НоваяЗапись.ГрафикРаботы = ВыборкаДетальныеЗаписи1.Ссылка;
    КонецЦикла;
    НоваяЗапись.Записать(Истина);    
    
КонецПроцедуры
39 Marry04
 
08.06.16
10:56
При этом при помощи метода Сообщить() я вижу, что ссылки все выводятся на экран.
40 Зая Бусечка
 
08.06.16
10:59
Убейте меня и развейте пепел, но не понимаю, зачем для этого использовать менеджер записи... А не набор записей..
41 Marry04
 
08.06.16
11:00
(40)  чтоб не связываться с отбором))
42 Feunoir
 
08.06.16
11:05
(38) (39) А почему запись записывается один раз? Причем после второго цикла?
43 Marry04
 
08.06.16
11:12
(42) Процедура ЗаполнитьРЦНажатие(Элемент)
НоваяЗапись=РегистрыСведений.ГрафикиРабочихЦентров.СоздатьМенеджерЗаписи();
НоваяЗапись.Период = ТекущаяДата();

Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГруппыЗаменяемостиРабочихЦентров.Ссылка
        |ИЗ
        |   Справочник.ГруппыЗаменяемостиРабочихЦентров КАК ГруппыЗаменяемостиРабочихЦентров        
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить("  " + ВыборкаДетальныеЗаписи.Ссылка);
    НоваяЗапись.РабочийЦентр = ВыборкаДетальныеЗаписи.Ссылка;
  Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГрафикиРаботы.Ссылка
        |ИЗ
        |   Справочник.ГрафикиРаботы КАК ГрафикиРаботы
        |ГДЕ
        |    ГрафикиРаботы.Наименование = ""2 смены""    
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи1 = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
    НоваяЗапись.ГрафикРаботы = ВыборкаДетальныеЗаписи1.Ссылка;    
    КонецЦикла;
    НоваяЗапись.Записать(Истина);
     КонецЦикла;
КонецПроцедуры


если так делаю - то только один РЦ по методу сообщить появляется.
44 Marry04
 
08.06.16
11:13
а потом выдает ошибку ту же
45 Feunoir
 
08.06.16
11:23
(44) Да не. Тут нужно понимать что делать. Просто так методом ненаучного тыка не решишь.

Сколько записей выдаётся в первом запросе и сколько во втором?
Не может ли быть такое, что в первом запросе последний РЦ - пустой? Хотя вряд-ли.
46 Marry04
 
08.06.16
11:24
Процедура ЗаполнитьРЦНажатие(Элемент)

Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГруппыЗаменяемостиРабочихЦентров.Ссылка
        |ИЗ
        |   Справочник.ГруппыЗаменяемостиРабочихЦентров КАК ГруппыЗаменяемостиРабочихЦентров        
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить("  " + ВыборкаДетальныеЗаписи.Ссылка);
    НоваяЗапись=РегистрыСведений.ГрафикиРабочихЦентров.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.РабочийЦентр = ВыборкаДетальныеЗаписи.Ссылка;    

  Запрос = Новый Запрос (
        "
        | ВЫБРАТЬ
        |   ГрафикиРаботы.Ссылка
        |ИЗ
        |   Справочник.ГрафикиРаботы КАК ГрафикиРаботы
        |ГДЕ
        |    ГрафикиРаботы.Наименование = ""2 смены""    
        |"
    );
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи1 = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
    НоваяЗапись.ГрафикРаботы = ВыборкаДетальныеЗаписи1.Ссылка;    
КонецЦикла;
НоваяЗапись.Записать(Истина);
КонецЦикла;
КонецПроцедуры


Изменила чуть, новую запись менеджер делал один раз. в цикл добавила метод. но все равно не работает
47 Marry04
 
08.06.16
11:29
первая запись только выходит.
48 Feunoir
 
08.06.16
11:37
(46) Открыл УПП... Смотри что получается.

Тип реквизита РабочийЦентр в регистре ГрафикиРабочихЦентров - СправочникСсылка.РабочиеЦентры.

А ты туда записываешь ссылку на справочник Справочник.ГруппыЗаменяемостиРабочихЦентров. Естественно он туда записаться не хочет и становится пустым.
Тебе нужно выбирать не просто ГруппыЗаменяемостиРабочихЦентров, а табличную часть Состав, скорее всего.
49 Marry04
 
08.06.16
11:52
(48) Таким образом мне нужно обратиться к табличной части Состав, а именно к реквизиту "Рабочий центр"справочника?
50 Feunoir
 
08.06.16
11:58
(49) Точно. Первый запрос должен выглядеть примерно так:


ВЫБРАТЬ
   ГруппыЗаменяемостиРабочихЦентровСостав.РабочийЦентр
ИЗ
   Справочник.ГруппыЗаменяемостиРабочихЦентров.Состав КАК ГруппыЗаменяемостиРабочихЦентровСостав


Ну и потом писать не

НоваяЗапись.РабочийЦентр = ВыборкаДетальныеЗаписи.Ссылка;  

а

НоваяЗапись.РабочийЦентр = ВыборкаДетальныеЗаписи.РабочийЦентр;  


Ну, а так-то по хорошему надо всю процедуру переписывать.
51 Marry04
 
08.06.16
12:18
При раскрытии элемента справочника ГруппыЗаменяемостиРабочихЦентров появляется табличная часть как раз Состав. Но в техноогич.карте прописано наименование элементов, а не один из элементов табл.части. То есть мне нужна как-то ссылка на наименование .а не на табл.часть
52 Marry04
 
08.06.16
12:21
я понимаю, что типы данных в регистре и в справочнике должны совпадать..но в техн.карте прописаны наименования именно справочника ГруппыЗаменяемостиРабочихЦентров
53 catena
 
08.06.16
12:42
(52)Начните с постановки задачи. У вас в голове каша. Напишите себе четкий текст задания (если его нет) и попробуйте сделать вручную пару записей. Запоминая, откуда и по каким критериям берете данные.
54 Marry04
 
08.06.16
12:47
Как установить графики в регистре сведений "график рабочих центров" для элементов справочника "группы заменяемости рабочих центров"?
55 catena
 
08.06.16
12:49
(54)Это не задача. Это вопрос. При чем абстрактный, не имеющий никакого практического смысла.
56 catena
 
08.06.16
12:50
И ответ к нему можно найти в СП. Даже с примерами.
57 Feunoir
 
08.06.16
12:54
(52) (54) Приводить учёт в соответствие с программой или наоборот дорабатывать программу до соответствия с учётом.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.