Имя: Пароль:
1C
1С v8
Ссылка на первичный документ
0 Dominique
 
01.01.17
18:29
Всех с наступившим!
Помогите разобраться:
У меня задача: есть Документ1, на его основании я создаю Документ2. Уже после создания, из Документа2 мне нужно обратиться к реквизиту документа1.  Пишу запрос:

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |      Документ1.Товары.(
    |        НаименованиеТовара,
    |        Цена
    |    )
    |ИЗ
    |    Документ.Документ1.Товары КАК Товары
    |ГДЕ
    |    Товары.Ссылка=&ДокументОснование";

    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();

Выдает ошибку:

     {Документ.Документ2.МодульМенеджера(46)}: Ошибка при вызове   метода контекста (Выполнить)
     Выборка = Запрос.Выполнить().Выбрать();
по причине:
{(13, 28)}: Не задано значение параметра "ДокументОснование"
Документ1.Ссылка=<<?>>&ДокументОснование


Если док-т создан на основании другого, в нем по умолчанию храниться ссылка на док.основание? или мне создать реквизит и вручную прописать? или у меня в другом ошибка?
1 Amra
 
01.01.17
18:32
Что непонятно в ошибке? Запрос не знает про Товары.Ссылка=&ДокументОснование
2 Dominique
 
01.01.17
18:37
(1) т.е. по умолчанию этой ссылки на документ основание в документе нет?
мне не понятно как тогда мне обратиться к документу основанию из текущего документа,
подскажите?
3 Злопчинский
 
01.01.17
18:59
(2) почему обращение к докоснованию идёт из товары, а не из документ2
4 Cool_Profi
 
01.01.17
19:15
|ГДЕ
    |    Товары.Ссылка=&ДокументОснование";

Запрос.Параметры.Вставить("Ссылка", Ссылка);


Ничего не смущает?
5 Amra
 
01.01.17
19:24
(2) Еще раз. ЗАПРОС не знает про твои связи, с кем ты там, кого ты там...
6 youalex
 
01.01.17
19:33
(2) Да, его нужно будет заполнять (как правило в событии ОбработкаЗаполнения). Называться этот рек. может как угодно (как правило называют ДокументОснование, потому что так исторически сложилось)
7 Amra
 
01.01.17
19:34
(6) И что, его запрос сразу все узнает?
8 Dominique
 
01.01.17
19:35
(5) я сам про них не знаю :)) пытаюсь разобраться в 1с с нуля вторую неделю, так что сорри, буду тупить.
Так, я создал реквизит в док2, куда при создании помещается ссылка на док1, назвал это поле ДокументОснование.
(тип ДокументСсылка.Документ1, в конструкторе ввода на основании сделал связь)

(3) Т.е. к документу основанию мне обращаться Документ2.Товары?? но реквизита товары у Док2 нет. Он есть у Док1 и к нему мне надо как-то добраться
9 Amra
 
01.01.17
19:36
(8) Какие у тебя беспорядочные связи, ты поаккуратнее
10 Dominique
 
01.01.17
19:37
(9) не завидуй :Р
11 Dominique
 
01.01.17
19:53
(4) что меня должно смущать?? "ссылка"?

мне нужно каким-то образом перейти по имеющийся ссылке в документ основание и выбрать оттуда в табличной части Наименование и Цену.
Пробовал метод Ссылка.ПолучитьОбъект(); но тоже не помогло
12 Amra
 
01.01.17
20:15
(11) Нее, все таки завидовать нечему. Намекаю. Параметр называется "ДокументОснование". Где ты со своими беспорядочными связями его устанавливаешь? Системе пофиг на тви текущие связи, ей нужно документ основание
13 Dominique
 
01.01.17
20:23
(12) что значит "установить параметр"?
Запрос.УстановитьПараметр("ДокументОснование", Объект.ДокументОснование); Так? Или...?
14 Dominique
 
01.01.17
20:39
(12) изменил так:

    ДокументОснование =  Документы.Документ1.ДокументОснование;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |      Документ1.Товары.(
    |        НаименованиеТовара,
    |        Цена
    |    )
    |ИЗ
    |    Документ.Документ1.Товары КАК Товары
    |ГДЕ
    |    Товары.Ссылка=&ДокументОснование";

    Запрос.Параметры.Вставить("ДокументОснование", ДокументОснование);
    Выборка = Запрос.Выполнить().Выбрать();

Выдает ошибку
15 dachnik
 
01.01.17
21:09
(14) Так у тебя пустой параметр ДокументОснование. Смотри в Отладчике где косяк. Собственно, если ты выполняешь запрос из модуля "второго" документа, то реквизит ДокументОснование должен быть уже заполнен и конструкцией
ДокументОснование =  Документы.Документ1.ДокументОснование;
ты его обнуляешь. Ну как-то так.
16 Serg_1960
 
01.01.17
22:47
(0) На твой вопрос правильный ответ - "или у меня в другом ошибка".

(14) В тексте "ВЫБРАТЬ Документ1.Товары..." слово "Документ1." - лишнее.

PS: вернитесь в школу, за парту. Вот Вам учебники:
http://v8.1c.ru/metod/books/?complexity_level1-1=on&partitionid=1#lt1
Рекомендую начать с "1C:Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы"
17 Turku
 
02.01.17
00:37
А почему так нельзя?

ДокументОснование = Документ1;
ТЗ = ДокументОснование.Товары.Выгрузить(,"НаименованиеТовара,Цена");

На выходе таблица значений товаров с ценами из Документа1.
Закон Брукера: Даже маленькая практика стоит большой теории.