gifts2017

Как открыть новый документ и заполнить его табличную часть?

Опубликовал Михаил Семенов (Shaman100M) в раздел Программирование - Практика программирования

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

Можно через передаваемый контекст передать объект "ТаблицаЗначений", и обработать его в модуле формы документа в процедуре ВводНового().

А если нет возможности менять модуль формы? Казалось бы, через тот же контекст:
ОткрытьФорму("Документ.<ВидДокумента>",НовДокКонтекст); 
  и далее оперировать НовДокКонтекст-ом,
типа:
 
НовДокКонтекст.ЗагрузитьТабличнуюЧасть(ТаблЧасть);


или
 
НовДокКонтекст.НоваяСтрока(); 

Но это не работает.

Идея открытия нового документа с заполненной табличной частью, - через открытие журнала документов, и эмуляции клавиши F9 (объект WSH), то есть:

1. Создаем документ,заполняем его табличную часть, сохраняем его.
2. Открываем журнал документов, позиционируемся на записанном документе.
3. Эмулируем F9 (создастся документ-копия с такой-же табличной частью).
4. Закрываем журнал документов.
5. Удаляем уже ненужный документ-оригинал.

// ВидДок - вид документа
// СоздДок - созданный и записанный документ, переменная модуля

СоздДок=СоздатьОбъект("Документ."+ВидДок);
// заполнение шапки и ТЧ
СоздДок.Записать();
// создали документ

ОткрытьФорму("Журнал."    + ВидДок,Конт);
// открыли журнал

Нач1= Мин(СоздДок.ДатаДок,Конт.НачалоИнтервала());
Кон1= Макс(СоздДок.ДатаДок,Конт.КонецИнтервала());

Конт.УстановитьИнтервал(Нач1,Кон1);
Конт.АктивизироватьОбъект(СоздДок.ТекущийДокумент());
// позиционировались на документе            

Вс= CreateObject("WScript.Shell");
Вс.SendKeys(""); // в кавычках Sendkeys:  в фигурных скобках  F9
// эмуляция F9

Конт.Форма.Закрыть();
// закрыли журнал документов

Форма.ОбработкаОжидания("УдалимДокумент",1);
// после задержки запустим процедуру УдалимДокумент()



Процедура УдалимДокумент()
    СоздДок.Удалить(1);
    Форма.ОбработкаОжидания("",0);
КонецПроцедуры    


Недостатки этого метода в том, что мы не знаем как отрабатывается признак копирования при вводе нового документа, возможно изменение реквизитов шапки значениями, принятыми по умолчанию, изменить эти реквизиты обратно тоже никак, - новый документ был открыт "интерактивно", его контекст неизвестен.
Еще один недостаток - номер нового документа идет с инкрементом +2 (последний документ был нами удален).

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сhe Burashka (CheBurator) 12.03.07 04:52
нихрена не понятно.
чтобы создать новый документ -
1. Создаем документ,заполняем его табличную часть, сохраняем его.
вопрос: как создать документ в п.1?
..вопрос: если юзеру разрешено запускать обработку - то программно можно создать документ запросто. но вот если юзеру запрещено просматривать журнал - то предложенный метод обломится на раз...
2. Доржи Цыденов (support) 12.03.07 08:33
"и далее оперировать НовДокКонтекст-ом."
Это возможно, если просто загрузить FormEx.dll
http://www.infostart.ru/projects/218/
3. Михаил Семенов (Shaman100M) 12.03.07 09:42
С формексом никто не спорит.

Если юзеру запрещено просматривать журнал, этот метод все равно работает.
Код
ОткрытьФорму("Журнал.<НазваниеЖурнала>"); // скажет "Недостаточно прав"
ОткрытьФорму("Журнал.<ВидДокумента>"); // а вот так тот же журнал (или просто журнал документа) откроется 
Показать полностью
4. Andr (andrey995) 12.03.07 10:57
хотелось бы иметь компоненту-кусок формекса с одной только этой функцией...
5. АЛьФ (АЛьФ) 12.03.07 16:07
2(andrey995) За Ваши деньги любые капризы (с)
:)
6. Аркадий Кучер (Abadonna) 21.03.07 15:17
Альф, твою компоненту хотят поиметь "хотелось бы иметь компоненту-кусок формекса ", а ты говоришь - пожалуйста :)
7. Iom Nuerto (n949eo) 13.11.11 19:09
8. Илья (i132) 03.05.12 17:33
Проще воспользоваться контекстом побдора http://infostart.ru/public/121991/
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа