Имя: Пароль:
1C
1С v8
Программное заполнение движений документа "Корректировка записей регистров"
0 VeleX
 
14.02.17
15:50
Добрый день, коллеги!

Есть две версии обработки:
1.
...
Запрос = Новый Запрос("...");
Рез = Запрос.Выполнить().Выгрузить();

Док = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
<Заполнение_шапки>
Рег = Док.ТаблицаРегистровНакопления.Добавить();
Рег.Имя = Метаданные.РегистрыНакопления.<ИмяРегистра>.Имя;
Рег.Представление = Метаданные.РегистрыНакопления.<ИмяРегистра>.Представление;
Док.Записать();

Движения = Док.Движения.<ИмяРегистра>;
Движения.Записывать = Истина;

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

2.

ТабОст = ПолучитьТабОст();
СоздатьДокКорректировки(ТабОст);

Функция ПолучитьТабОст()
Запрос = Новый Запрос("...");
Рез = Запрос.Выполнить().Выгрузить();
КонецФункции

Процедура СоздатьДокКорректировки(ТабОст)
Док = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
<Заполнение_шапки>
Рег = Док.ТаблицаРегистровНакопления.Добавить();
Рег.Имя = Метаданные.РегистрыНакопления.<ИмяРегистра>.Имя;
Рег.Представление = Метаданные.РегистрыНакопления.<ИмяРегистра>.Представление;
Док.Записать();

Движения = Док.Движения.<ИмяРегистра>;
Движения.Записывать = Истина;

Для каждого Стр ИЗ ТабОст Цикл
Движение = Движения.ДобавитьПриход();
ЗаполнитьЗначениеСвойств(Движение, Стр);
КонецЦикла;
Форма = Док.ПолучитьФорму("ФормаДокумента");
Форма.Открыть();
КонецПроцедуры

Отличия, как видите только в том что функциональность разделена.
Но в первом случае заполнение документа проходит нормально, в открывающейся форме все движения показаны.
Во втором случае в отладчике движения заполняются, но в регистр не записываются по факту, и соответственно форма документа открывается пустой.
Почему второй подход не дает результата, подскажите?
1 Amra
 
14.02.17
15:57
Во втором случае ТабОст пустая
2 VeleX
 
14.02.17
16:05
Проверял, ТабОст не пустая, в отладчике Движения заполняются, но в регистр не пишутся
3 Has
 
14.02.17
16:10
Функция ПолучитьТабОст() разве что то возвращает?
4 VeleX
 
14.02.17
16:14
(3) Да, весь код просто не цитировал, в оригинале прописан

Возврат Рез;

Описал просто схему работы обработки.
5 VeleX
 
14.02.17
17:03
Решил проблему добавив "Движения.Записать()" в конце процедуры СоздатьДокКорректировки() перед открытием формы документа.
Все же пока не понял почему именно так...
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.