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

Запрос на получение данных из РН

Автор Алексей_1985_06, 18 мая 2024, 13:21

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

Алексей_1985_06

Всем привет! Уважаемые программисты подскажите как правильно получить данные из РН ?
Структура РН обороты:
Ресурс: КоличествоНаработки
Измерение: Изделие и ЕдиницаИзмерения

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

1. реквизит ДефектноеИзделие - это основное изделие
2. реквизит ДефектнаяСоставнаяЧастьИзделия - это составная часть

Перед записью документа:

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

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

   
// Нужно еще получить данные наработки неисправной составной части этого изделия
   
   
   
КонецПроцедуры

LexaK

Алексей_1985_06, попробуйте тако код, только свои имена реквизитов проверьте/подставьте
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЕстьNull(УчетНаработкиОбороты.КоличествоНаработкиОборот,0) КАК НаработкаИзделия,
        |    ЕстьNull(УчетНаработкиОборотыДЧ.КоличествоНаработкиОборот,0) КАК НаработкаДефектнойЧасти
        |ИЗ   
| (выбрать Истина) как Таб
|левое соединение
        |    РегистрНакопления.УчетНаработки.Обороты(, &ДатаКонца, , Изделие = &ОбъектЭксплуатации) КАК УчетНаработкиОбороты
| По истина
|левое соединение
        |    РегистрНакопления.УчетНаработки.Обороты(, &ДатаКонца, , Изделие = &ДефектнаяЧастьИзделия) КАК УчетНаработкиОборотыДЧ
| По истина
|";
   
    Запрос.УстановитьПараметр("Датаокончания", ТекущийОбъект.ДатаОбнаруженияНеисправности); // Датаокончания - дата обнаружения неисправности         
    Запрос.УстановитьПараметр("ОбъектЭксплуатации", ТекущийОбъект.ДефектноеИзделие);   
    Запрос.УстановитьПараметр("ДефектнаяЧастьИзделия", ТекущийОбъект.ДефектнаяСоставнаяЧастьИзделия );   

    Выборка = Запрос.Выполнить().Выбрать(); 
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(ТекущийОбъект, Выборка);
   
// Нужно еще получить данные наработки неисправной составной части этого изделия
   
   
   
КонецПроцедуры
если помогло нажмите: Спасибо!

Sasha1C

LexaK,Можете пожалуйста объяснить, как работает этот Ваш кусочек кода, а то я такого еще не встречал. И зачем эта конструкция вообще применяется. Или это для составного типа данных? Заранее спасибо
(выбрать Истина) как Таб
 

LexaK

Sasha1C, так я же не проверял этот код!
идея была такая, ВСЕГДА получать результат запроса даже если показателей нет, вернутся значения 0 (нули)
и у вас всегда обновятся реквизиты документа, или в ноль (например объект ремонта перевыбрали)
 или в значения из регистра

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

Алексей_1985_06

LexaK, Огромное Вам спасибо! Не перестаю восхищаться Вашим профессионализмом! :befhbt:

Теги:

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

Рейтинг@Mail.ru

Поиск