Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 05:59

Получить ссылочный реквизит из документа в документе

Автор beztrud, 21 авг 2012, 13:35

0 Пользователей и 1 гость просматривают эту тему.

beztrud

Здравствуйте! Платформа 8.2, управляемое приложение. Конфигурация самописная. Есть документ ДОГОВОР с реквизитами - Магазин-СправочникСсылка.Магазины и ТипДоговора-ПеречислениеСсылка.ТипДоговора. Есть документ РАСКРОЙ с реквизитами Договор - ДокументСсылка.Договор, Магазин-Строка, ТипДоговора-Строка. Нужно, чтобы в документе РАСКРОЙ ПриИзменении автоматически подставлялись значения реквизитов Магазин и ТипДоговора из документа ДОГОВОР. Вот если ДОГОВОР был не документом, а справочником - тут все понятно, но с документами такого не провернешь. Подскажите пожалуйста как реализовать?

sadovod

Очень просто. В обработчике события ДоговорПриИзменении() сделать вызов серверной процедуры, где с помощью несложного запроса получить значения Магазина и ТипаДоговора при заданном Договоре...

beztrud

Пишу следующее:
&НаСервере
Процедура НомерДоговораПриИзменении(Элемент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Договор.Магазин,
| Договор.ТипДоговора
|ИЗ
| Документ.Договор КАК Договор";

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

ВыборкаМагазин = Результат.Выбрать(Объект.Магазин);
ВыборкаТипДоговора = Результат.Выбрать(Объект.ТипДоговора);
             Объект.Магазин=ВыборкаМагазин;
Объект.ТипДоговора=ВыборкаТипДоговора;
КонецПроцедуры

программа не ругается, но и записи не происходит.

Klyacksa

То есть, в документе Договор ТипДоговора и Магазин - это ссылочный тип, а в документе Раскрой - это строки? А что тогда должно подставляться? Наименование Типа договора и наименование магазина?

Тогда по порядку:
1. Ваш запрос выбирает данные ИЗ ВСЕХ документов Договор. Имеет смысл отфильтровать не нужные документы, зачем нам их реквизиты... И плюс, можем явно ограничить количество выбираемых данных - нам же нужна только одно соответствие. Как-то так:
Запрос.Текст=
     "ВЫБРАТЬ ПЕРВЫЕ 1
       |    Договор.Магазин,
       |    Договор.ТипДоговора
       |ИЗ
       |    Документ.Договор КАК Договор
       |ГДЕ
       |    Договор.Ссылка=&НашДоговор";

2. Что делает загадочная конструкция:
Результат.Выбрать(Объект.Магазин);
Как следует из синтакс-помощника:
ЦитироватьРезультатЗапроса (QueryResult)
Выбрать (Choose)
Синтаксис:

Выбрать(<ТипОбхода>, <Группировки>, <ГруппировкиДляЗначенийГруппировок>)
Параметры:

<ТипОбхода> (необязательный)

Тип: ОбходРезультатаЗапроса.
Задает тип обхода записей в получаемой выборке.
Значение по умолчанию: Прямой

Ваш параметр совершенно не вписывается в эту конструкцию.

3. Неверная работа с Выборкой/Результатом запроса. Схема работы с запросом такая:

Запрос=Новый Запрос;
Запрос.Текст="<текст запроса>";

Выборка=Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() тогда
     // заполняем наши реквизиты
     // при этом, обращение к данным по имени полей запроса: Выборка.Магазин и Выборка.ТипДоговора
КонецЕсли;


4. Если не выдавало ошибки, скорее всего, в эту процедуру действие вообще не заходило. Проверьте отладчиком.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

beztrud

   Выборка = Запрос.Выполнить(<<?>>).Выбрать(); (Проверка: Тонкий клиент)
{Документ.Раскрой.Форма.ФормаДокумента.Форма(29,15)}: Обнаружено логическое завершение исходного текста модуля
    КонецЕсли;<<?>>       (Проверка: Тонкий клиент)

sadovod


beztrud

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

Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() тогда
    Объект.Магазин=Выборка.Магазин;
    Объект.ТипДоговора=Выборка.ТипДоговора;
    КонецЕсли;

Klyacksa

А кто будет устанавливать параметр &Документ?

Запрос.УстановитьПараметр...

ЗЫ. И кстати, у Вас кавычки лишние в тексте запроса.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

beztrud

Для меня пока это трудно. После Запрос.УстановитьПараметр("&Договор",.. что передавать?

Klyacksa

Вам нужно указать запросу, по какому именно документу хотите отбор.
В данном случае, конкретный договор - это Объект, но нам надо передать ссылку на него, то есть Объект.Ссылка
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск