Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
jediAlex
2 / 2 / 3
Регистрация: 12.07.2011
Сообщений: 461
1

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

19.05.2017, 11:40. Просмотров 1017. Ответов 6
Метки нет (Все метки)

Здравствуйте. Делаю конфигурацию в 1С 8.3.Есть Документ "НазначенияСотрудникам",регистрирующий работы для сотрудников. Среди всех реквизитов документа есть реквизит "ДатаОкончанияФакт" - тип Дата. Каждыйсотрудник отчитывается о выполнении своих "Назначений" документом "ЕжедневныйОтчет", который записывает движения в регистр накопления "ОтработаноЧасов". Необходимо сделать следующее: выбрать все назначения, у которых не заполнена "ДатаОкончанияФакт" и программно для каждого документа заполнить реквизит ДатаОкончанияФакт последним значением даты движения регистра, т.е. последней датой отчета по документу "НазначениеСотруднику". Назначения я выгрузил в ТЧ обработки запросом:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
ЗапросЗадач=Новый Запрос;
ЗапросЗадач.Текст="ВЫБРАТЬ
                  | ЕСТЬNULL(ОтработаноЧасовОстаткиИОбороты.КоличествоЧасовРасход, 0) КАК КолЧасовФакт,
                  | ОтработаноЧасовОстаткиИОбороты.КоличествоЧасовКонечныйОстаток КАК КоличествоЧасовКонечныйОстаток,
                  | ЕСТЬNULL(ОтработаноЧасовОстаткиИОбороты.Назначение.КолЧасовПлан * ОтработаноЧасовОстаткиИОбороты.Назначение.КолЧасовПлан / ОтработаноЧасовОстаткиИОбороты.КоличествоЧасовРасход, 0) КАК ПриведенныйПлан,
                  | НазначенияСотрудникам.Ссылка,
                  | НазначенияСотрудникам.Сотрудник,
                  | НазначенияСотрудникам.ПроектныйДокумент.НаименованиеРаздела КАК Раздел,
                  | НазначенияСотрудникам.ПроектныйДокумент.Примечание КАК Примечание,
                  | НазначенияСотрудникам.ВидРаботы,
                  | НазначенияСотрудникам.КвалификационныеТребования,
                  | ЕСТЬNULL(НазначенияСотрудникам.КолЧасовПлан, 0) КАК КолЧасовПлан,
                  | НазначенияСотрудникам.ДатаНачала,
                  | НазначенияСотрудникам.ДатаОкончанияПлан,
                  | НазначенияСотрудникам.ДатаОкончанияФакт,
                  | НазначенияСотрудникам.ПроектныйДокумент.НазваниеДокумента КАК НаименованиеДокумента,
                  | НазначенияСотрудникам.Объект.Ссылка КАК Объект
                  |ИЗ
                  | Документ.НазначенияСотрудникам КАК НазначенияСотрудникам
                  |     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработаноЧасов.ОстаткиИОбороты(, , , , ) КАК ОтработаноЧасовОстаткиИОбороты
                  |     ПО (ОтработаноЧасовОстаткиИОбороты.Назначение = НазначенияСотрудникам.Ссылка)
                  |ГДЕ
                  | ОтработаноЧасовОстаткиИОбороты.КоличествоЧасовРасход > 0
                  | И НазначенияСотрудникам.ДатаОкончанияФакт = ДАТАВРЕМЯ(1, 1, 1)
                  | И НазначенияСотрудникам.Объект В(&МассивОбъектов)";
ЗапросЗадач.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
                  Результат=ЗапросЗадач.Выполнить().Выгрузить();
                   Объект.НеЗакрытыеРаботыПоОбъектам.Очистить();
                 Для Каждого Стр из Результат Цикл
                НовСтр=Объект.НеЗакрытыеРаботыПоОбъектам.Добавить();
                ЗаполнитьЗначенияСвойств(НовСтр,Стр);
                КонецЦикла;
а вот дальше я пытаюсь заполнить реквизит:
&
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
НаСервере
Процедура ЗакрытьРаботыКПремииНаСервере()
    // Вставить содержимое обработчика.
    Для Каждого Стр Из Объект.НеЗакрытыеРаботыПоОбъектам Цикл
    ДатаЗакрытияЗадачи=Новый Запрос;
    ДатаЗакрытияЗадачи.Текст="ВЫБРАТЬ
                             |  МАКСИМУМ(ОтработаноЧасов.Период) КАК ДатаЗакрытия
                             |ИЗ
                             |  РегистрНакопления.ОтработаноЧасов КАК ОтработаноЧасов
                             |ГДЕ
                             |  ОтработаноЧасов.Регистратор ССЫЛКА Документ.ЕжедневныйОтчет
                             |  И ОтработаноЧасов.Назначение.Ссылка = &Назначение"; 
    ДатаЗакрытияЗадачи.УстановитьПараметр("Назначение",Стр.Ссылка);
    Результат=ДатаЗакрытияЗадачи.Выполнить().Выбрать();                      
    ДокументДляЗакрытия=Стр.Ссылка.ПолучитьОбъект();
    ДокументДляЗакрытия.ДатаОкончанияФакт=Результат.ДатаЗакрытия;
    ДокументДляЗакрытия.Записать();
    КонецЦикла;
Документы выбираются, в ТЧ все выводится, но вот заполнение не работает... ничего не происходит. Что неправильно делаю? помогите пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2017, 11:40
Ответы с готовыми решениями:

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

Заполнение документа данными из регистра накопления. Создание отчета по данным регистра накопления.
Изучаю 1с по методичкам не могу решить два задания Объясните что да как...

Вывод разности значения реквизита справочника и оборотов регистра накопления в результате запроса
Здравствуйте. Делаю конфигурацию в 1с 8.3. В конфигурации следующий набор...

Автоматическое заполнение табличной части документа при изменении реквизита этого документа
Здравствуйте. Делаю свою конфу на 1с 8.3.5. Добавил справочник "Сотрудники" и...

Запрос к регистру накопления при проведении документа
Подскажите, плиз, как при проведении документа "Реализация товаров и услуг"...

6
Xomych
665 / 588 / 89
Регистрация: 01.11.2012
Сообщений: 2,085
21.05.2017, 10:32 2
1C
1
ДокументДляЗакрытия.ДатаОкончанияФакт=Результат[0].ДатаЗакрытия;
0
jediAlex
2 / 2 / 3
Регистрация: 12.07.2011
Сообщений: 461
29.05.2017, 15:10  [ТС] 3
выскочила ошибка:
{Обработка.ЗакрытиеРаботПоОбъектамКПремии.Форма.Форма.Форма(93)}: Значение не является значением объектного типа (ДатаЗакрытия)
ДокументДляЗакрытия.ДатаОкончанияФакт=Результат[0].ДатаЗакрытия;
0
Xomych
665 / 588 / 89
Регистрация: 01.11.2012
Сообщений: 2,085
30.05.2017, 10:42 4
Запрос пустой значит
0
jediAlex
2 / 2 / 3
Регистрация: 12.07.2011
Сообщений: 461
30.05.2017, 12:28  [ТС] 5
запрос проверял в консоли - не пустой. Дату из регистра выбирает.

Добавлено через 7 минут
для эксперимента выбрал 5 записей НазначенияСотрудникам проверил запрос в консоли для каждой записи - каждый раз выбиралась дата из регистра. Ни одного пустого значения

Добавлено через 1 час 1 минуту
да, при выполнении цикла в обработке результат запроса пустой для каждой записи...что не так?
0
Xomych
665 / 588 / 89
Регистрация: 01.11.2012
Сообщений: 2,085
30.05.2017, 13:04 6
Я неправильно подсказал, прощу прощения, так нельзя к выборке обращаться
Вот так надо
1C
1
2
3
4
5
6
                    
    ДокументДляЗакрытия=Стр.Ссылка.ПолучитьОбъект();
    Выб=ДатаЗакрытияЗадачи.Выполнить().Выбрать();  
    Пока Выб.Следующий() Цикл
         ДокументДляЗакрытия.ДатаОкончанияФакт=Выб.ДатаЗакрытия;
    КонецЦикла;
1
jediAlex
2 / 2 / 3
Регистрация: 12.07.2011
Сообщений: 461
30.05.2017, 16:02  [ТС] 7
Большое спасибо за помощь. Все работает как надо.
0
30.05.2017, 16:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2017, 16:02

Запрос к регистру накопления и регистру сведенй
как не используя СКД в 1 запросе получить запись из Регистра сведений на...

Заполнение реквизита тч документа из справочника
Всем доброго времени суток. Прошу помощи Часто создаваемая тема, но все же....

Проведение документа программно при изменении реквизита ТЧ 1С 8.2
Здравствуйте Как сделать, чтобы при изменении реквизита (тип булево) в ТЧ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru