Имя: Пароль:
1C
1С v8
автозаполнение таб части документа из внешней обработки
,
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)нормально всё отработало!
добавил:
Процедура Инициализировать(Объект, ИмяТабличнойЧасти, ТабличноеПолеОбъекта) Экспорт
   
   Если Объект.ЭтоНовый() Или Объект.Модифицированность() Тогда
       Если Вопрос("Документ предварительно надо записать. Записать?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
           Объект.Записать();
       Иначе
           Возврат;
       КонецЕсли;
   КонецЕсли;
   
   ФормаОпций = ПолучитьФорму("Форма");
   ФормаОпций.Документ = Объект.Ссылка;
   ФормаОпций.ИмяТЧ = ИмяТабличнойЧасти;
   ФормаОпций.ТабПоле = ТабличноеПолеОбъекта;
   ФормаОпций.Открыть();
   
КонецПроцедуры
AdBlock убивает бесплатный контент. 1Сергей