|
автозаполнение таб части документа из внешней обработки | ☑ | ||
---|---|---|---|---|
0
happysan
07.02.12
✎
16:49
|
Создал внешнюю обработку, подгружающую данные из экселевского файла в документ, привязал во внешних обработках конфигурации к определённому документу. Открываем документ, кнопка Заполнить над таб частью все работает, но мучает проблема: 1.Если я не прописываю метод записать в алгоритмах обработки, то никаких новых строк в доке не появляется, но если я говорю Док.Записать(), то видны изменения только полсе интерактивного обновления отображения документа, это всё понятно, но не удобно будет для юзера...как выйти из положения? в модуле обработки:
Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт ФормаОпций = ПолучитьФорму("Форма"); ФормаОпций.Документ = Объект.Ссылка; ФормаОпций.ИмяТЧ = ИмяТабличнойЧасти; ФормаОпций.ТабПоле = ТабличноеПолеОбъекта; ФормаОпций.Открыть(); КонецПроцедуры в модуле формы обработки: ..... Иначе ДокПремии = Документ.ПолучитьОбъект(); строкаДока = ДокПремии[ИмяТЧ].Добавить(); строкаДока.Сотрудник = Сотрудник; строкаДока.ФизЛицо = Сотрудник.Физлицо; ДокПремии.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; Закрыть(); wsht = ""; wbk = ""; excelApp.EnableEvents = False; excelApp.Quit(); ИмяТЧ и т.д. передаётся форме из Инициализировать, так как это реквизиты формы, как хотя бы обновить отображение открытой формы документа с которым работаем? что-то я подзабыл... |
|||
1
Scooter
07.02.12
✎
16:54
|
Документ.ПолучитьОбъект <= над этим думаем
|
|||
2
happysan
07.02.12
✎
17:02
|
(1)иначе, если работать документом ссылкой - не даёт добавлять строки в таб.часть...что думать тут?
|
|||
3
Scooter
07.02.12
✎
17:04
|
Инициализировать(ДокОбъект, ИмяТабЧасти, ТабПоле)
ТабПоле вот его и заполняй ТабЧасть = ТабПоле.Значение; |
|||
4
happysan
07.02.12
✎
17:06
|
(3)не подхватил идею, подробнее плиз...
|
|||
5
lordmb
07.02.12
✎
17:10
|
(4) строкаДока = Объект[ИмяТабличнойЧасти].Добавить()
|
|||
6
happysan
07.02.12
✎
17:10
|
понял спасибо!!!
ТабЧасть = ТабПоле.Значение; строкаДока = ТабЧасть.Добавить(); строкаДока.Сотрудник = Сотрудник; строкаДока.ФизЛицо = Сотрудник.Физлицо; |
|||
7
Serg_1960
07.02.12
✎
17:16
|
ТС путается в понятиях? Элементы формы и реквизиты объекта.
|
|||
8
happysan
07.02.12
✎
17:18
|
(7)с этим всё понятно, сбило с толку передачи двух параметров ИмяТабЧасти, ТабПоле...
|
|||
9
Serg_1960
07.02.12
✎
17:28
|
Сорри, конечно, но что вы будете делать если документ - новый? Ещё не записан и пользователь не будет его записывать?
У вас "конфликт" в алгоритме, как бы бомба замедленного действия :( Работа со ссылками, как бы, предпологает что документ уже есть в базе... А, ведь, "Объект" - это измененный (может быть), но ещё не записанный в базу... объект. |
|||
10
DrShad
07.02.12
✎
17:31
|
(9) в типовом функционале он сам предложит перед инициализацией внешней обработки записать документ
|
|||
11
Serg_1960
07.02.12
✎
17:33
|
(10) Мы говорим о внешней обработке заполнения табельной части?
|
|||
12
happysan
07.02.12
✎
17:53
|
(11)да
|
|||
13
happysan
07.02.12
✎
17:54
|
(10)хмм, но что-то не предлагает...
|
|||
14
Serg_1960
07.02.12
✎
17:59
|
Ну вот и об том же. Он говорил, вероятно, о внешней обработки для печати.
Алгоритм надо писать не используя "Ссылка" или, прежде чем писать "ФормаОпций.Документ = Объект.Ссылка;", надо "гарантировать идентичность" объекта и его ссылки: Если Объект.ЭтоНовый() Или Объект.Модифицированность Тогда Объект.Записать(); ... |
|||
15
happysan
07.02.12
✎
18:01
|
(14)спасибо огромное за мысль...упустил!
|
|||
16
Serg_1960
07.02.12
✎
18:04
|
(14) Но тут есть своя проблема: Форма, откуда вызывается внешняя обработка, не "будет знать" что объект записан. И при попытке записи объекта в форме будет ошибка типа "...объект изменен или удален...". можно, конечно, получить форму этого объекта и записать объект "через" метод формы "ЗаписатьВФорме()"... но к чему такие сложности :)
|
|||
17
Serg_1960
07.02.12
✎
18:06
|
(офф) Сорри, меня уже нет, убежал.
|
|||
18
happysan
07.02.12
✎
18:11
|
(16)нормально всё отработало!
добавил: Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт Если Объект.ЭтоНовый() Или Объект.Модифицированность() Тогда Если Вопрос("Документ предварительно надо записать. Записать?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда Объект.Записать(); Иначе Возврат; КонецЕсли; КонецЕсли; ФормаОпций = ПолучитьФорму("Форма"); ФормаОпций.Документ = Объект.Ссылка; ФормаОпций.ИмяТЧ = ИмяТабличнойЧасти; ФормаОпций.ТабПоле = ТабличноеПолеОбъекта; ФормаОпций.Открыть(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |