8.х Заполнение реквизита документа программно изрезультата запроса к регистру накопления

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем JediAlex, 19 май 2017.

  1. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Делаю конфигурацию в 1С 8.3.Есть Документ "НазначенияСотрудникам",регистрирующий работы для сотрудников. Среди всех реквизитов документа есть реквизит "ДатаОкончанияФакт" - тип Дата. Каждыйсотрудник отчитывается о выполнении своих "Назначений" документом "ЕжедневныйОтчет", который записывает движения в регистр накопления "ОтработаноЧасов". Структура регистра во вложении. Необходимо сделать следующее: выбрать все назначения, у которых не заполнена "ДатаОкончанияФакт" и программно для каждого документа заполнить реквизит ДатаОкончанияФакт последним значением даты движения регистра, т.е. последней датой отчета по документу "НазначениеСотруднику". Назначения я выгрузил в ТЧ обработки запросом:
    Код:
    Здравствуйте. Делаю конфигурацию в 1С 8.3.Есть Документ "НазначенияСотрудникам",регистрирующий работы для сотрудников. Среди всех реквизитов документа есть реквизит "ДатаОкончанияФакт" - тип Дата. Каждыйсотрудник отчитывается о выполнении своих "Назначений" документом "ЕжедневныйОтчет", который записывает движения в регистр накопления "ОтработаноЧасов". Структура регистра во вложении. Необходимо сделать следующее: выбрать все назначения, у которых не заполнена "ДатаОкончанияФакт" и программно  для каждого документа заполнить реквизит ДатаОкончанияФакт последним значением даты движения регистра, т.е. последней датой отчета по документу "НазначениеСотруднику". Назначения я выгрузил в ТЧ обработки запросом:
    
    [CODE]ЗапросЗадач=Новый Запрос;
    
    ЗапросЗадач.Текст="ВЫБРАТЬ
    
                      |    ЕСТЬNULL(ОтработаноЧасовОстаткиИОбороты.КоличествоЧасовРасход, 0) КАК КолЧасовФакт,
    
                      |    ОтработаноЧасовОстаткиИОбороты.КоличествоЧасовКонечныйОстаток КАК КоличествоЧасовКонечныйОстаток,
    
                      |    ЕСТЬNULL(ОтработаноЧасовОстаткиИОбороты.Назначение.КолЧасовПлан * ОтработаноЧасовОстаткиИОбороты.Назначение.КолЧасовПлан / ОтработаноЧасовОстаткиИОбороты.КоличествоЧасовРасход, 0) КАК ПриведенныйПлан,
    
                      |    НазначенияСотрудникам.Ссылка,
    
                      |    НазначенияСотрудникам.Сотрудник,
    
                      |    НазначенияСотрудникам.ПроектныйДокумент.НаименованиеРаздела КАК Раздел,
    
                      |    НазначенияСотрудникам.ПроектныйДокумент.Примечание КАК Примечание,
    
                      |    НазначенияСотрудникам.ВидРаботы,
    
                      |    НазначенияСотрудникам.КвалификационныеТребования,
    
                      |    ЕСТЬNULL(НазначенияСотрудникам.КолЧасовПлан, 0) КАК КолЧасовПлан,
    
                      |    НазначенияСотрудникам.ДатаНачала,
    
                      |    НазначенияСотрудникам.ДатаОкончанияПлан,
    
                      |    НазначенияСотрудникам.ДатаОкончанияФакт,
    
                      |    НазначенияСотрудникам.ПроектныйДокумент.НазваниеДокумента КАК НаименованиеДокумента,
    
                      |    НазначенияСотрудникам.Объект.Ссылка КАК Объект
    
                      |ИЗ
    
                      |    Документ.НазначенияСотрудникам КАК НазначенияСотрудникам
    
                      |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработаноЧасов.ОстаткиИОбороты(, , , , ) КАК ОтработаноЧасовОстаткиИОбороты
    
                      |        ПО (ОтработаноЧасовОстаткиИОбороты.Назначение = НазначенияСотрудникам.Ссылка)
    
                      |ГДЕ
    
                      |    ОтработаноЧасовОстаткиИОбороты.КоличествоЧасовРасход > 0
    
                      |    И НазначенияСотрудникам.ДатаОкончанияФакт = ДАТАВРЕМЯ(1, 1, 1)
    
                      |    И НазначенияСотрудникам.Объект В(&МассивОбъектов)";
    
    ЗапросЗадач.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
    
                      Результат=ЗапросЗадач.Выполнить().Выгрузить();
    
                       Объект.НеЗакрытыеРаботыПоОбъектам.Очистить();
    
                     Для Каждого Стр из Результат Цикл
    
                    НовСтр=Объект.НеЗакрытыеРаботыПоОбъектам.Добавить();
    
                    ЗаполнитьЗначенияСвойств(НовСтр,Стр);
    
                    КонецЦикла;
    а вот дальше я пытаюсь заполнить реквизит:
    Код:
    НаСервере
    
    
    
    Процедура ЗакрытьРаботыКПремииНаСервере()
    
    
    
        // Вставить содержимое обработчика.
    
    
    
        Для Каждого Стр Из Объект.НеЗакрытыеРаботыПоОбъектам Цикл
    
    
    
        ДатаЗакрытияЗадачи=Новый Запрос;
    
    
    
        ДатаЗакрытияЗадачи.Текст="ВЫБРАТЬ
    
    
    
                                 |    МАКСИМУМ(ОтработаноЧасов.Период) КАК ДатаЗакрытия
    
    
    
                                 |ИЗ
    
    
    
                                 |    РегистрНакопления.ОтработаноЧасов КАК ОтработаноЧасов
    
    
    
                                 |ГДЕ
    
    
    
                                 |    ОтработаноЧасов.Регистратор ССЫЛКА Документ.ЕжедневныйОтчет
    
    
    
                                 |    И ОтработаноЧасов.Назначение.Ссылка = &Назначение";   
    
    
    
        ДатаЗакрытияЗадачи.УстановитьПараметр("Назначение",Стр.Ссылка);
    
    
    
        Результат=ДатаЗакрытияЗадачи.Выполнить().Выбрать();                        
    
    
    
        ДокументДляЗакрытия=Стр.Ссылка.ПолучитьОбъект();
    
    
    
        ДокументДляЗакрытия.ДатаОкончанияФакт=Результат.ДатаЗакрытия;
    
    
    
        ДокументДляЗакрытия.Записать();
    
    
    
        КонецЦикла;  
    Документы выбираются, в ТЧ все выводится, но вот заполнение не работает... ничего не происходит. Что неправильно делаю? помогите пожалуйста.[/CODE]

    Вложения:

Поделиться этой страницей