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

Как из формы одного документа получить данные формы другого документа?

Автор Julimedvedeva, 02 мар 2023, 14:11

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

Julimedvedeva

Есть два документа Мероприятия и Оплата, как в форме документа Оплата получить сумму по всем проведенным мероприятиям по конкретному спикеру


&НаКлиенте
Процедура ЗаработнаяПлатаСпикерыПриИзменении(Элемент)
    ДанныеСтроки = Элементы.ЗаработнаяПлата.ТекущиеДанные;
    ДанныеСтроки.ОплатаСпикера = ЗаработнаяПлатаПреподавателя(Документы.Мероприятие.Спикер,Документы.Мероприятие.Дата);
   
КонецПроцедуры


&НаСервере
Функция ЗаработнаяПлатаПреподавателя(ОплатаСпикера,Сумма)
    Запрос = Новый Запрос;
     Запрос.Текст = "ВЫБРАТЬ
                    |    ПрибыльЗаПериодОстатки.Спикер КАК Спикер,
                    |    СУММА(ПрибыльЗаПериодОстатки.ОплатаСпикераОстаток) КАК ОплатаСпикераОстаток
                    |ИЗ
                    |    РегистрНакопления.ПрибыльЗаПериод.Остатки(&Дата, Спикер = &Спикер) КАК ПрибыльЗаПериодОстатки
                    |
                    |СГРУППИРОВАТЬ ПО
                    |    ПрибыльЗаПериодОстатки.Спикер";


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


LexaK

Julimedvedeva, если правильно понял, попробуйте такой код
&НаКлиенте
Процедура ЗаработнаяПлатаСпикерыПриИзменении(Элемент)
   ДанныеСтроки = Элементы.ЗаработнаяПлата.ТекущиеДанные;                                   
   //Объект - данные формы Документ...
   ДанныеСтроки.ОплатаСпикера = ЗаработнаяПлатаПреподавателя(ДанныеСтроки.Спикер, Объект.Дата);
   
КонецПроцедуры


&НаСервереБезКонтекста
Функция ЗаработнаяПлатаПреподавателя(Спикер, Дата)
   Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |   //ПрибыльЗаПериодОстатки.Спикер КАК Спикер,
                   |   ПрибыльЗаПериодОстатки.ОплатаСпикераОстаток КАК ОплатаСпикера
                   |ИЗ
                   |   РегистрНакопления.ПрибыльЗаПериод.Остатки(&Дата, Спикер = &Спикер) КАК ПрибыльЗаПериодОстатки
                   |
                   |//СГРУППИРОВАТЬ ПО
                   |//   ПрибыльЗаПериодОстатки.Спикер
   |";


Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Спикер", Спикер);
лаОплата = 0;
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
Если  ВыборкаДетальныеЗаписи.Следующий() Тогда
    лаОплата = ВыборкаДетальныеЗаписи.ОплатаСпикера;
КонецЕсли;
Возврат лаОплата;
 
КонецФункции
если помогло нажмите: Спасибо!

Julimedvedeva


LexaK

Цитата: Julimedvedeva от 02 мар 2023, 15:06LexaK, что за переменная лаОплата?
вообще это опечатка, задумывалось как: лкОплата
лк - локальная переменная, через нее возвращаем значение или 0 если ни чего не найдено или остаток Оплаты спикера
если помогло нажмите: Спасибо!

LexaK

Julimedvedeva, можно было и так написать
    Если  ВыборкаДетальныеЗаписи.Следующий() Тогда
        Возврат ВыборкаДетальныеЗаписи.ОплатаСпикера;
    Иначе
        Возврат 0;
    КонецЕсли;

это, кто каких правил программирования придерживается!  :befhbt:

(а вы наверно и не знали что есть правили программирования? написания кода?)  ;)
если помогло нажмите: Спасибо!

Julimedvedeva

LexaK, Да, про правила не знала), не работает, ругается на оплатуспикера, поле объекта не обнаружено

LexaK

Julimedvedeva, скопируйте, вставьте весь код процедуры, где произошла ошибка
(возможно опечатка была, куда-ж без них?)
если помогло нажмите: Спасибо!

Julimedvedeva


Ругается на то что после Возврат

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

      

LexaK

Julimedvedeva, просил же весь текст процедуры валожить!

а так, проверяйте запрос! вы наверно не все скопировали, в запросе должна быть такая строка

... Как ОплатаСпикера

в моем коде она была
если помогло нажмите: Спасибо!

Julimedvedeva

Извиняюсь, пришлю всё

&НаКлиенте
Процедура ЗаработнаяПлатаСпикерыПриИзменении(Элемент)
    ДанныеСтроки = Элементы.ЗаработнаяПлата.ТекущиеДанные;
    ДанныеСтроки.ОплатаСпикера = ЗаработнаяПлатаПреподавателя(ДанныеСтроки.Спикеры,Объект.Дата);
   
КонецПроцедуры


&НаСервере
Функция ЗаработнаяПлатаПреподавателя(Спикеры,Дата)
    Запрос = Новый Запрос;
     Запрос.Текст = "ВЫБРАТЬ
                    |    ПрибыльЗаПериодОстатки.Спикер КАК Спикер,
                    |    СУММА(ПрибыльЗаПериодОстатки.ОплатаСпикераОстаток) КАК ОплатаСпикераОстаток
                    |ИЗ
                    |    РегистрНакопления.ПрибыльЗаПериод.Остатки(&Дата, Спикер = &Спикер) КАК ПрибыльЗаПериодОстатки
                    |
                    |СГРУППИРОВАТЬ ПО
                    |    ПрибыльЗаПериодОстатки.Спикер";


Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("Спикер",Спикеры);
    ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
    Если  ВыборкаДетальныеЗаписи.Следующий() Тогда
        Возврат ВыборкаДетальныеЗаписи.ОплатаСпикера;   
    Иначе
    Возврат 0;
    КонецЕсли;
           
КонецФункции



Теги:

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

Рейтинг@Mail.ru

Поиск