Вызов процедуры модуля формы

1. Roman004 19.01.12 12:55 Сейчас в теме
Здравствуйте. Заранее спасибо. Программно создается новый документ
НовДок = Документы.......СоздатьДокумент();
.................................
НовДок.Записать(РежимЗаписиДокументов.Проведение);

И вот здесь необходимо вызвать процедуру модуля формы этого документа. Можно ли это сделать вообще?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 19.01.12 12:56 Сейчас в теме
(1) нельзя, если форма не создается, то какой же модуль формы может быть?
Если появляется такая необходимость, это говорит о том, что в идеологии что-то не так.
9. Alex_E 2353 19.01.12 13:37 Сейчас в теме
(1) Roman004, После проведения документа пишем:
Форма = НовДок.ПолучитьФорму("ФормаДокумента"); Дальше - отладчик в помощь - смотрим, что там есть и что можно с этим делать.
mrChOP93; Gadzhalik; Merkalov; +3 Ответить
23. ketonija 07.02.14 17:06 Сейчас в теме
Если стоит формекс, то можно поступить вот так:

оСистема = СоздатьОбъект("Система");
Д = СоздатьОбъект("Документ.ГТД");
Пока Запрос.Группировка(1) = 1 Цикл
Д.НайтиДокумент(Запрос.ГТД);
ОткрытьФорму(Д.ТекущийДокумент(), Конт,0);
Конт.СуммаПеревозка = 0;
Сп = СоздатьОбъект("СписокЗначений");
Сп.ДобавитьЗначение(2);
Сервис.ВыполнитьПроцедуру(Конт, "ИзмСуммаУслуг", Сп);
оСистема.StartBatch(Конт);
Конт.Провести();
оСистема.EndBatch(Конт);
оСистема.ЗакрытьФорму(Конт);
КонецЦикла;
24. a_alenkin 10.02.14 15:08 Сейчас в теме

Если стоит формекс, то можно поступить вот так:

оСистема = СоздатьОбъект("Система");
Д = СоздатьОбъект("Документ.ГТД");
Пока Запрос.Группировка(1) = 1 Цикл
Д.НайтиДокумент(Запрос.ГТД);
ОткрытьФорму(Д.ТекущийДокумент(), Конт,0);
Конт.СуммаПеревозка = 0;
Сп = СоздатьОбъект("СписокЗначений");
Сп.ДобавитьЗначение(2);
Сервис.ВыполнитьПроцедуру(Конт, "ИзмСуммаУслуг", Сп);
оСистема.StartBatch(Конт);
Конт.Провести();
оСистема.EndBatch(Конт);
оСистема.ЗакрытьФорму(Конт);
КонецЦикла;
Показать


это что?
3. Arox 4 19.01.12 12:57 Сейчас в теме
помоему нет, т к формы у тебя вообще нету. и обратиться к коду форме нет возможности. только к процедурам объекта, которые с экспортом.
Рамзес; +1 Ответить
4. Roman004 19.01.12 12:59 Сейчас в теме
Почему не создается. Создается и сохраняется, и проводится. НовДок.Записать(РежимЗаписиДокументов.Проведение). А у документа вновь созданного есть и форма, и модуль, много процедур в модуле. Процедуру со словом "Экспорт". Можно ее со стороны вызвать или нет?
6. tusv 211 19.01.12 13:17 Сейчас в теме
(4) Roman004, Влегкую.
Объект=Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
Объект.ВыполнитьДействияДокумента();
8. starjevschik 19.01.12 13:28 Сейчас в теме
(4) создается объект "документ". А объект "форма документа" не создается. Это разные объекты. Документ вообще-то объект информационной базы - он информацию хранит, а форма всего лишь объект интерфейса, чтобы смотреть на данные удобнее было. У документа может быть произвольное количество форм, в том числе и ни одной...
Рамзес; +1 Ответить
5. alljoke 19.01.12 13:17 Сейчас в теме
Со слово Экспорт можно.
7. Arox 4 19.01.12 13:27 Сейчас в теме
В таком виде, у документа нет формы. она появляется когда вы ее открываете.
а до это есть только объект.
Объект.ВыполнитьДействияДокумента();
может быть вызвана процедура
ВыполнитьДействияДокумента() - если она находится в модуле объекта с флагом Экспорт.
Рамзес; +1 Ответить
10. Uncore 1273 19.01.12 14:58 Сейчас в теме
попробуйте после записи документа:

Форма = НовДок.Ссылка.ПолучитьФорму("ИмяФормы");
Форма.ИмяЭкспортнойПроцедурыИлиФункцииФормы();
Slypower; hasp_x; romulanin; smtkachev_1cbit; Vida; kazakkk; Арчибальд; +7 Ответить
11. Roman004 19.01.12 15:19 Сейчас в теме
Всем спасибо. Не знаю, может у кого и получится, но из модуля формы процедуру достать не получилось(чего только не перепробовал). Из модуля объекта отлично достается. Еще раз всем спасибо
Рамзес; mgorun; +2 Ответить
15. MustDieff 20.01.12 14:08 Сейчас в теме
(11)
Напрямую из другого объекта нельзя обратится к процедурам модуля формы - этот вопрос был еще лет 6-7 назад в профессионале по платформе.

Однако, можно поступить как описано в (10) и (14), главное чтобы в самой процедуре не было обращения к элементам формы и т.п.
native-api; +1 Ответить
16. Uncore 1273 20.01.12 14:33 Сейчас в теме
(15) главное чтобы в самой процедуре не было обращения к элементам формы и т.п.

интерес продолжился :), и я засунул код по созданию документа в обработку:
Процедура КнопкаВыполнитьНажатие(Кнопка)
	Док = Документы.Документ2.СоздатьДокумент();
	Док.Дата = ТекущаяДата();
	Док.Записать();
	
	Форма = Док.Ссылка.ПолучитьФорму("ФормаДокумента");
	Форма.Получить();
	
	Сообщить("Дата из обработки: " + Форма.ЭлементыФормы.Дата.Значение);
КонецПроцедуры
Показать

В документе в модуле формы пишу:

Процедура Получить() Экспорт
	Сообщить("Номер из документа:" + Номер);
	Сообщить("Дата из документа: " + ЭлементыФормы.Дата.Значение);
КонецПроцедуры	

В итоге, выполняя обработку, получаю сообщения:

Номер из документа:000000007
Дата из документа: 20.01.2012 20:27:16
Дата из обработки: 20.01.2012 20:27:16
Slypower; user975424; native-api; mrChOP93; Михаська; request4t; Vedich; MikStyle; dour-dead; link_l; MustDieff; +11 Ответить
17. MustDieff 20.01.12 14:37 Сейчас в теме
12. Uncore 1273 19.01.12 15:29 Сейчас в теме
Ради интереса создал новый документ, в форме списка добавил кнопку, в ней прописал:
Док = Документы.Документ2.СоздатьДокумент();
	Док.Дата = ТекущаяДата();
	Док.Записать();
	
	Форма = Док.Ссылка.ПолучитьФорму("ФормаДокумента");
	Форма.ПолучитьНомер();


в форме документа написал:

Процедура ПолучитьНомер() Экспорт
	сообщить(Номер);
КонецПроцедуры


Нажимая на кнопку в форме списка, получаю сообщение с номером только что созданного документа: 000000001, 000000002 и т.д.
13. alexz55 19.01.12 16:10 Сейчас в теме
14. Ягг 495 20.01.12 11:25 Сейчас в теме
А разве нельзя в форме сделать процедуру экспортной.
Потом

Форма = НовДок.ПолучитьФорму();
Форма.<Процедура>
Арчибальд; +1 Ответить
18. andpal 27.04.12 12:57 Сейчас в теме
да, познавательно!
можно не только к элементам объекта обратиться, но и к элементам формы!
Важно чтобы в самой процедуре не было обращения к "ЭтотОбъект" и "ЭтаФорма".
19. Арчибальд 2707 28.04.12 08:03 Сейчас в теме
(18)
Важно чтобы в самой процедуре не было обращения к "ЭтотОбъект" и "ЭтаФорма".
И это не важно. ЭтотОбъект и ЭтаФорма обращаются не к контексту вызова, а к контексту определения, вернее, конструктора (ПолучитьФорму())
20. andpal 28.04.12 13:55 Сейчас в теме
И это не важно
Проверил, убедился, действительно так!
Заодно научился устанавливать ТекущиеДанные (через ТекущаяСтрока) на той форме, т.к. в процедуре модуля формы они иногда (по крайней мере в моем случае) задействованы.
ФормаДок = Объект.Ссылка.ПолучитьФорму("ФормаДокумента");
КоличествоСтрок = ФормаДок.Услуги.Количество();
ФормаДок.ЭлементыФормы.Услуги.ТекущаяСтрока = ФормаДок.Услуги[КоличествоСтрок-1];

ФормаДок.УслугиНоменклатураПриИзменении(СтрокаТЧ);
21. kmar 08.06.12 04:07 Сейчас в теме
хм.. вот в семерке такую фишку можно провести?
22. edzz 23.07.12 14:10 Сейчас в теме
Спасибо, позновательно
25. Serge_ASB 31.10.14 13:09 Сейчас в теме
К документу прикреплена внешняя печатная форма.
Можно ли вызвать ее (печать) из формы списка документа (т.е. не заходя в документ, вызваьб печать его в нужной внешней форме)?
26. Uncore 1273 31.10.14 13:26 Сейчас в теме
(25) Serge_ASB, Если на обычных формах, то код будет таким:
Расшифровка = Новый Структура;
Расшифровка.Вставить("ВидПечатнойФормы", Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма);
Расшифровка.Вставить("ДополнительныеПараметрыОбработки", Неопределено);
Расшифровка.Вставить("ЗаменяемаяПечатнаяФорма", Неопределено);
Расшифровка.Вставить("НомерСтроки", 1);
Расшифровка.Вставить("СсылкаНаВнешнююОбработку", СсылкаНаВнешнююОбработку);
				
УниверсальныеМеханизмы.НапечататьДокумент(УниверсальныеМеханизмы.НапечататьВнешнююФорму(СсылкаНаОбъект, Расшифровка), КолСтраниц, НаПринтер, СсылкаНаВнешнююОбработку.Наименование);	


СсылкаНаОбъект - можно получить, например, как
ТекДанные = ЭлементыФормы.ДокументСписок.ТекущиеДанные;
Если ТекДанные = Неопределено Тогда
    Возврат;
КонецЕсли;

СсылкаНаОбъект = ТекДанные.Ссылка;
Serge_ASB; +1 Ответить
27. Alex_E 2353 31.10.14 13:33 Сейчас в теме
(25) Serge_ASB, При подключении ВПФ задается где будет использоваться:
Прикрепленные файлы:
28. Serge_ASB 31.10.14 14:49 Сейчас в теме
(27) Alex_E, то есть, если при подключении обработки я указываю к какому документу она будет присоединена, то смогу вызвать ее через документ?
Типа
Форма = Документы.ДокументПечати.ПолучитьФорму("ФормаДокумента");
           Форма.ПолучитьвнешнююпечатнуюФорму("Внешняяформа");
             ..................
 
     

(26) Uncore, а ссылку на внешнюю обработку как получить?
29. Alex_E 2353 31.10.14 15:22 Сейчас в теме
(28) Serge_ASB, Если вы говорите про типовой вызов из формы документа или из формы списка - то читайте справку в справочнике Дополнительные отчеты и обработки - там всё написано. Я никак вопрос не пойму - если мы подключили ВПФ к документу, и поставили обе галки как на рисунке, то ВПФ доступна и там и там. Если нужно программно распечатать документ из списка, то тут надо получить ссылку на документ, а печать ВПФ сделать через менеджер этого документа.
Ответ на вопрос:
Можно ли вызвать ее (печать) из формы списка документа (т.е. не заходя в документ, вызваьб печать его в нужной внешней форме)?
- да.
30. Serge_ASB 31.10.14 15:47 Сейчас в теме
(29) Alex_E,
Обязательно посмотрю. как доберусь до программы :)
32. Uncore 1273 31.10.14 18:46 Сейчас в теме
(28) Serge_ASB, для печати из списка Вам нужно 2 вещи:
1. Ссылка на текущий документ из строки, пример показан мною выше, как получить ссылку.
2. Ссылка на внешнюю печатную форму. Это обычная ссылка на справочник ВнешниеОбработки. Можете выбрать эту ссылку в какой-нибудь константе. Либо просто найти по коду, например так:
СсылкаНаВнешнююОбработку = Справочники.ВнешниеОбработки.НайтиПоКоду(<КодИзСправочника>);
КодИзСправочника посмотрите открыв список внешних печатных форм.
33. Serge_ASB 01.11.14 08:07 Сейчас в теме
(32) Uncore,
Именно так я и решил задачу.
Док = ЭлементыФормы.Список.ТекущаяСтрока.Ссылка;
	
	СсылкаНаВнешнююОбработку = Справочники.ВнешниеОбработки.НайтиПоНаименованию("РКО (ТМ)");
	
	Расшифровка = Новый Структура;
	Расшифровка.Вставить("ВидПечатнойФормы", Перечисления.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма);
	Расшифровка.Вставить("ДополнительныеПараметрыОбработки", Неопределено);
	Расшифровка.Вставить("ЗаменяемаяПечатнаяФорма", Неопределено);
	Расшифровка.Вставить("НомерСтроки", 1);
	Расшифровка.Вставить("СсылкаНаВнешнююОбработку", СсылкаНаВнешнююОбработку);
	
        ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(Док,Расшифровка);
	ТабДокумент.Показать();
Показать
JohnConnor; +1 Ответить
36. Uncore 1273 01.11.14 09:01 Сейчас в теме
(33) Serge_ASB, только есть пара замечаний:
1. Нужно добавить проверку на выбранность строки, иначе будете получать ошибку.
ТекСтрока = ЭлементыФормы.Список.ТекущаяСтрока;
Если ТекСтрока = Неопределено Тогда
Предупреждение("Документ не выбран", 30);
Возврат;
КонецЕсли;
Док = ТекСтрока.Ссылка;
2. Лучше использовать поиск печатной формы по коду, обычно он защищен от изменения. А название печ. формы пользователь может в любой момент изменить.
(34) Alex_E, похоже автор использует обычные формы, если у него работает код "ЭлементыФормы", а в типовых конфигурациях такого развитого функционала как на управляемых похоже нет.
37. Alex_E 2353 01.11.14 09:11 Сейчас в теме
(36) Uncore, В обычных формах кнопка печати из списка так же присутствует, но есть одно НО, там выводится печать по умолчанию, если выбрать ВПФ, она и будет напечатана, городить огород со своим кодом то зачем?
38. Uncore 1273 01.11.14 09:28 Сейчас в теме
(37) Alex_E, Если есть такая возможность, то конечно код засовывать не надо. Тут согласен полностью. Проще выбрать тогда по умолчанию печ. форму. Либо еще вариант - использовать для этого групповую обработку справочников и документов, там тоже такая возможность есть.
31. Serge_ASB 31.10.14 16:36 Сейчас в теме
(27) Alex_E,
У меня обработка "Печать РКО" добавлена не как дополнительная, а как внешняя печатная форма.
не совсем понимаю, как обратиться за вызовом к ней:
Процедура РКОТМ(Кнопка)
	// Вставить содержимое обработчика.
	Док = ЭлементыФормы.Список.ТекущаяСтрока.Ссылка;
	Форма = Документы.РасходныйКассовыйОрдер.ПолучитьФорму("ФормаДокумента");
	
КонецПроцедуры
34. Alex_E 2353 01.11.14 08:42 Сейчас в теме
(31) Serge_ASB,
"Печать РКО" добавлена не как дополнительная, а как внешняя печатная форма.
не понял, то такое "дополнительная", написал:
если мы подключили ВПФ к документу, и поставили обе галки как на рисунке, то ВПФ доступна и там и там
,
ВПФ = Внешняя Печатная Форма.
Про какую кнопку Вы толкуете, Вы хотите в форме списка добавить кнопку для печати ВПФ? Зачем чего то писать, если всё уже написано?
В продолжении рисунка в (27) вызов ВПФ из формы списка и из формы документа:
Прикрепленные файлы:
35. Alex_E 2353 01.11.14 08:47 Сейчас в теме
Если же ВПФ в форме списка надо вывести отдельной кнопкой (не в подменю печать), можно воспользоваться командой Изменить форму подменю Ещё формы списка, и вытащить нужную кнопку на командную панель:
Прикрепленные файлы:
39. stupid01 22 28.07.16 13:30 Сейчас в теме
Получил форму документа, вызвал экспортную процедуру модуля формы, как теперь сохранить изменения в документе?
40. Uncore 1273 28.07.16 14:36 Сейчас в теме
(39) stupid01, форма - это не объект, она данные не хранит. Надо получать ссылку, из нее объект и в него записывать данные.
41. stupid01 22 28.07.16 16:30 Сейчас в теме
(40) Uncore, т.е. вызов экспортной процедуры модуля формы для изменения данных - бессмысленная вещь? т.к. их нельзя потом сохранить?
42. Uncore 1273 28.07.16 17:27 Сейчас в теме
(41) stupid01, да, тут подход немного неверный у Вас - из формы какую процедуру можно вызвать, передав в нее сам объект для заполнения, а записать данные объекта уже извне.
Например, перед записью документа можно вызвать процедуру из формы по заполнению счета или еще чего-нибудь
43. stupid01 22 28.07.16 21:14 Сейчас в теме
(42) Uncore,
Получается, что для решения задачи - создать программно документ и сделать рассчет, чтобы заполнить доп реквизиты(ЗУП 3 на УФ),
нужно выцепить все процедуры задействованные в этом расчете, т.к. они сделаны только для интерактивной работы и адаптировать код под свою обработку.
Либо - получить форму, выполнить процедуру расчета формы модуля и потом уже выскрести нужные данные из объекта формы и впихнуть в свой документ.
Так или еще есть варианты?
44. user1739720 19.04.22 09:10 Сейчас в теме
Всем добрый день. Хочу опять вернуться к вопросу выполнения процедуры формы документа из внешней обработки.
На сервере получаю нужный мне документ, на клиент передаю ссылку документа, тут же на клиенте получаю форму документа:

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

//вот процедура которая находится в модуле формы, я к ней обращаюсь (она не экспортная).
ФормаП.ЗаполнитьТаблицуНаСервере();//Но при выполнении выдает ошибку,что метод объекта не обнаружен.
45. Uncore 1273 19.04.22 10:44 Сейчас в теме
(44) Попробуйте сделать процедуру экспортной
46. user1739720 19.04.22 11:21 Сейчас в теме
Вот как раз не могу, база закрыта
47. user1739720 19.04.22 11:23 Сейчас в теме
Перенесла получение формы на &Насервере, начало отрабатывать, но выходит ошибка "интерактивные операции недоступны"
48. Uncore 1273 20.04.22 02:54 Сейчас в теме
(47) я обычно экспортные процедуры делаю в модуле менеджера документа, и обращаться к ним можно без формы, передавая ссылку, например
Документы.НачалоМесяца.ЗаполнитьТаблицуНаСервере(СсылкаНаДокумент);

Если нужно именно из формы вызвать то вызываем клиентскую процедуру, которая вызовет уже нужную серверную.
49. user1739720 20.04.22 09:08 Сейчас в теме
Во внешней обработке НаКлиенте получаю форму документа НачалоМесяца, потом обращаюсь к экспортной процедуре и все выполняется, до момента выполнения процедуры "ПолеКалендаряПриВыводеПериода(Элемент, ОформлениеПериода)", т.к. там идет цветовое оформление:
Строка_ОформленияДаты.ЦветТекста = ЦветРабочий;// вот этот ЦветРабочий объявлена как глобальная переменная, заполнение ее в процедуре "ПриОткрытии", а так как мы к ней не обращаемся, то естественно цвета нет.
Короче какой то замкнутый круг!
так как база закрыта не могу вносить изменения в модули документа.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот