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

Реквизит документа из другого документа

Автор slaviik3, 30 окт 2015, 14:35

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

slaviik3

Всем доброго времени суток! Опишу суть проблему: имею типовую конфигурацию УНФ и мне была поставлена задача при создании документа "Поступление на счет" проверять соответствие договора, указанного в документе "Счет на оплату" и в создаваемом поступлении.

Подскажите мне пожалуйста, как достать реквизит "договор" документа "счет на оплату" из документа "Поступление на счет"? Счет выбирается в табличной части документа "Поступление на счет".

Мои догадки: На событии "при изменении" элемента формы счет на оплату, т.е. при непосредственном выборе счета, отправлять в функцию на сервере данные выбранного счета, где запросом уже тащить реквизит документа "Счет на оплату".


Процедура РасшифровкаПлатежаСчетНаОплатуПриИзменении(Элемент)

СтрокаТЧ = "[color=red]Вот здесь как я понимаю надо получить идентификатор документа 'счет на оплату[/color]' ";
Договор = ПолучитьДоговорСчетаНаОплату(СтрокаТЧ);     

КонецПроцедуры

&НаСервере
Функция ПолучитьДоговорСчетаНаОплату(СтрокаТЧ)


Запрос= новый запрос;
Запрос.УстановитьПараметр("Ссылка", СтрокаТЧ);
Сообщить(СтрокаТЧ);
Запрос.Текст =

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

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

Сообщить(Результат);




КонецФункции





Artjomrgv


Посмотри это видео, по моему это твой пример, только там справочники.


дфтын

slaviik3, Все делать запросами это конечно похвально, но до безумств доходить то не надо

Если НЕ  ПолучитьДоговорСчетаНаОплату(СтрокаТЧ) Тогда
Сообщить("Фу на вас!");
КонецЕСлИ;

КонецПроцедуры

&НаСервере
Функция ПолучитьДоговорСчетаНаОплату(СтрокаТЧ)
Рез = Истина;
ДоговорВСчете = СтрокаТЧ.СчетНаОплату.Договор;
Возврат ДоговорВПоступлении = ДоговорВСчете
КонецФункция


vitasw

Цитата: Artjomrgv от 31 окт 2015, 12:39Посмотри это видео, по моему это твой пример, только там справочники.

Не учите людей плохому. Это пример плохого кода. Правильно - заполнять реквизиты в коде самой открываемой формы.

Цитата: дфтын от 31 окт 2015, 14:34Все делать запросами это конечно похвально, но до безумств доходить то не надо
Не вижу ничего безумного. Если ТСу не лень писать запросы - это ему точно зачтется.

slaviik3

Цитата: дфтын от 31 окт 2015, 14:34
slaviik3, Все делать запросами это конечно похвально, но до безумств доходить то не надо

Если НЕ  ПолучитьДоговорСчетаНаОплату(СтрокаТЧ) Тогда
Сообщить("Фу на вас!");
КонецЕСлИ;

КонецПроцедуры

&НаСервере
Функция ПолучитьДоговорСчетаНаОплату(СтрокаТЧ)
Рез = Истина;
ДоговорВСчете = СтрокаТЧ.СчетНаОплату.Договор;
Возврат ДоговорВПоступлении = ДоговорВСчете
КонецФункция





Спасибо за ответ.

Непонятны следующие вещи:
Что я должен передать в функцию ПолучитьДоговорСчетаНаОплату(СтрокаТЧ)?
Я передаю текущие данные
СтрокаТЧ = Элементы.РасшифровкаПлатежа.ТекущиеДанные;

Получаю вот такую ошибку

Цитировать{Документ.ПоступлениеНаСчет.Форма.ФормаДокумента.Форма(2215)}: Ошибка при вызове метода контекста (ПолучитьДоговорСчетаНаОплату)
Если НЕ  ПолучитьДоговорСчетаНаОплату(СтрокаТЧ) Тогда
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'


Вот полностью код:



Процедура РасшифровкаПлатежаСчетНаОплатуПриИзменении(Элемент)


СтрокаТЧ = Элементы.РасшифровкаПлатежа.ТекущиеДанные;

Если НЕ  ПолучитьДоговорСчетаНаОплату(СтрокаТЧ) Тогда
    Сообщить("Фу на вас!");
КонецЕСли;


КонецПроцедуры

&НаСервере
Функция ПолучитьДоговорСчетаНаОплату(СтрокаТЧ)

Рез= истина;
ДоговорВСчете = СтрокаТЧ.СчетНаОплату.Договор;
ДоговорВПоступлении = СтрокаТЧ.Договор;
Возврат ДоговорВПоступлении = ДоговорВСчете;
КонецФункции





Kironten

Если НЕ  ПолучитьДоговорСчетаНаОплату(СтрокаТЧ) Тогда
    Сообщить("Фу на вас!");
КонецЕСли;   
   
   
КонецПроцедуры

&НаСервере
Функция ПолучитьДоговорСчетаНаОплату(СтрокаТЧ)

Рез= истина;
ДоговорВСчете = СтрокаТЧ.СчетНаОплату.Договор;
ДоговорВПоступлении = СтрокаТЧ.Договор;
Возврат ДоговорВПоступлении = ДоговорВСчете;   
КонецФункции


У вас условие на булево, а возвращаете вы договор.

ДоговорПоступления = ПолучитьДоговорСчетаНаОплату(СтрокаТЧ);
Если ДоговорПоступления = Справочники.Договора.ПустаяСсылка() Тогда // ну или как там у вас справочник договора называется.
    Сообщить("Фу на вас!");
КонецЕСли;

Добавлено: 02 ноя 2015, 12:36


А не, неправильно прочитал.

Ну попробуй не текущие данные в функцию передавать, а пару параметров: Договор, и счет на оплату.
В функции запрос к договору счета на оплату, и сравнение значений договоров.

Теги:

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

Рейтинг@Mail.ru

Поиск