Имя: Пароль:
1C
 
ЗУП 3.1 Программно пересчитать документ Простой
0 егаис
 
23.01.24
15:41
Подскажите, как реализовать пересчет документа "Простой" программно?
Делаю подмену оплачиваемых часов в уже созданном и записанном документе, при записи документа всплывает предупреждение "перед записью документа необходимо провести перерасчет". Почему так?
Вот код

&НаСервере
Процедура Команда1НаСервере()	
	
	ДокОбъект = ДокПростой.ПолучитьОбъект();
	ДокОбъект.Начисления[0].ОплаченоЧасов = 8;
	ДокОбъект.Записать(РежимЗаписиДокумента.Запись);

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

&НаСервере
Функция ПолучитьСотрудниковНаСервере()	
	
	Возврат ОбщегоНазначения.ВыгрузитьКолонку(ДокПростой.Начисления, "Сотрудник")

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


&НаКлиенте
Процедура Команда1(Команда)	   
	
	Команда1НаСервере();

	ПараметрыОтбора = Новый Структура("Ключ", ДокПростой);
	Форма = ПолучитьФорму("Документ.Отпуск.ФормаОбъекта", ПараметрыОтбора); 
	Форма.ПерезаполнитьНачисленияСотрудника(ПолучитьСотрудниковНаСервере());
	
	ПараметрыЗаписи = Новый Структура;
	ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);

	Форма.Записать(ПараметрыЗаписи);  

КонецПроцедуры
1 Волшебник
 
23.01.24
15:42
Посмотрите условие перед предупреждением "перед записью документа необходимо провести перерасчет" и Вам всё станет ясно.
2 SleepyHead
 
23.01.24
15:50
(0) Перезаписанный объект не соответствует форме.
3 егаис
 
23.01.24
15:52
(2) если все то же самое делать на форме, ничего не просит.
Ну заремил я "Команда1НаСервере();", ничего не меняется, также просит пересчет.

(1) не все так просто с записью из формы в ЗУП
4 SleepyHead
 
23.01.24
15:55
(3) В форме есть РеквизитвДанные(), ДанныеВРеквизиты(), РассчитатьВсеНаСервере()

Ну и глубоко я не копал, но колонка ОплаченоЧасов заполняется при расчете. Если вы ее перезаписываете вручную, надо бы еще поле ФиксРасчетВремени=Истина
5 егаис
 
23.01.24
16:16
блин, невнимательность
Форма = ПолучитьФорму("Документ.ПростойСотрудников.ФормаОбъекта", ПараметрыОтбора);
Вроде работает