|
Как открыть форму второй дополнительной обработки с параметрами, не меняя её код | ☑ | ||
---|---|---|---|---|
0
1C_coder
27.03.20
✎
21:09
|
Как из одной дополнительной обработки открыть форму форму второй дополнительной обработки с параметрами, не меняя программный код второй обработки?
(Если бы можно было менять программный код второй обработки, тогда первая вообще бы не понадобилась.) Пользователи хотят, чтобы из одной дополнительной обработки можно было открыть форму другой дополнительной обработки на определённой странице (их там много) с указанием периода. И, главное, чтобы табличная часть на этой странице была заполнена документами только по фильтру, установленному в форме первой обработки. Форма второй обработки: https://b.radikal.ru/b16/2003/52/7373aca03653.png Пока остановился на таком коде. Форма второй обработки открывается, но на передаваемые параметры не реагирует. Форма основная.
Статью https://helpf.pro/faq/view/1398.html прочитал. |
|||
1
Сергиус
27.03.20
✎
22:04
|
(0)Если во 2-й форме нет обработчика этих параметров, то не получится. И что мешает писать код в форме доп.обработки?
|
|||
2
Сияющий в темноте
27.03.20
✎
23:24
|
метод открытия формы возвращает форму,странички в ней можно переключить,а также установить некоторые реквизиты,но вот вызвать неэкспортные методы не получится.
|
|||
3
RomanYS
27.03.20
✎
23:42
|
(0)
Ф = ОткрытьФорму("ВнешняяОбработка."+ИмяОбработки+".Форма"); Ф.НачПериода = НачалоДня(Период.ДатаНачала);//если НачПериода реквизит формы или Ф.Объект.НачПериода = НачалоДня(Период.ДатаНачала);//если реквизит обработки |
|||
4
Сергиус
28.03.20
✎
02:42
|
(3)В чем смысл после открытия формы устанавливать значения переменных?
|
|||
5
palsergeich
28.03.20
✎
03:18
|
(0) параметры формы по без кода действуют ТОЛЬКО на основной реквизит.
В твоём случае можно сделать похитрее. УпрФорма= ОткрытьФорму..... Дальше через УпрФорма.ИмяСписка ты можешь наложить отборы например так ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(УпрФорма.ИмяСписка.... |
|||
6
palsergeich
28.03.20
✎
03:19
|
То есть отличие будет в том, что списко у тебя находится не в текущей форме, а по УпрФорма.ИмяСписка
|
|||
7
НичегоНе Понятно
28.03.20
✎
06:14
|
(0) ОткрытьФорму возвращает тебе форму. Дальше ты можешь делать все, что тебе нужно, с элементами которые лежат на форме. Открывать нужные закладки, загружать нужные данные в нужные тч и тод.
|
|||
8
1C_coder
28.03.20
✎
14:28
|
Получилось открыть форму на нужной странице:
Как теперь обращаться к этой второй доп обработке как к объекту, чтобы изменять значения реквизитов? Нужно ведь изменять значения реквизитов именно этой открытой сейчас обработки.
Допустим, сейчас эта доп обработка хранится во временном файле "C:\Users\user\AppData\Local\Temp\v8_4752_14.tmp". Получать объект обработки из временного файла v8_4752_14.tmp? Не пойму, как это сделать. |
|||
9
RomanYS
28.03.20
✎
14:37
|
(8) обработка - основной реквизит формы
МеркурийО = МеркурийФ.Объект; МеркурийО.НачПериода = НачалоДня(Период.ДатаНачала); |
|||
10
1C_coder
28.03.20
✎
16:12
|
(9) Спасибо! Работает.
Только синтаксис: МеркурийО = МеркурийФ.ЭтотОбъект; |
|||
11
1C_coder
28.03.20
✎
17:57
|
Хотя МеркурийФ.ЭтотОбъект - это ещё не объект обработки, а объект самой формы. С его помощью возможно изменить только реквизиты формы.
Всё-таки, видимо, объект нужно отдельно получить в процедуре &НаСервере. Если так пишу, выдаёт ошибку "Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа": &НаКлиенте
|
|||
12
1C_coder
28.03.20
✎
18:01
|
Проблема в том, что нужно обрабатывать в отдельной процедуре &НаСервере реквизиты и формы, и объекта обработки.
|
|||
13
RomanYS
28.03.20
✎
18:15
|
(10) этотобъет это САМА форма. Тебе нужен основной реквизит формы, С вероятностью 90 % он называется объект.
(12) чужую форму на сервер не унесёшь. Возвращай нужное с сервера и присваивай на клиенте |
|||
14
1C_coder
29.03.20
✎
08:36
|
На стороне сервера нужно выполнить кучу процедур с кучей запросов, которым для параметров запросов нужна куча реквизитов чужой формы.
Пришлось запихнуть реквизиты чужой формы в структуру и передать на сервер. Данные в табличную часть загружаются. Это и в отладчике видно, и через сообщения пользователю можно посмотреть. Но почему-то в табличной части на форме не отображается ни одной строки, она как будто пустая. Из-за чего это может быть? &НаКлиенте
&НаСервере
|
|||
15
RomanYS
29.03.20
✎
08:47
|
(14) МеркурийФормаОбъект = МеркурийФ.ЭтотОбъект;//это глупость: МеркурийФ и МеркурийФормаОбъект у тебя одно и то же
у тебя точно не две формы открывается? МеркурийФ = ОткрытьФорму("ВнешняяОбработка."+ИмяОбработки+".Форма"); ... МеркурийФ.Открыть(); По ощущениям при передаче МеркурийОбработкаОбъект на сервер должна ошибка быть. Странно, что у тебя работает. |
|||
16
1C_coder
29.03.20
✎
10:46
|
Убрал "МеркурийФормаОбъект = МеркурийФ.ЭтотОбъект;" и "МеркурийФормаОбъект.Открыть();".
Конечный результат такой же (см. картинку). https://d.radikal.ru/d31/2003/81/e1b1c9cf465d.png &НаКлиенте
|
|||
17
RomanYS
29.03.20
✎
11:00
|
(16) Может отбор какой стоит на форме
выложи куда-нибудь обработки |
|||
18
1C_coder
30.03.20
✎
13:09
|
Дело не в настройках отображения на форме.
Нужна конструкция типа такой: ОбъектНаСервере = РеквизитФормыВЗначение("Объект");
Но она не работает в данном случае, потому что такая конструкция может работать только применительно к своей обработке. Нельзя её применить к чужой обработке, вызванной из своей. В общем, пустая затея была. |
|||
19
RomanYS
30.03.20
✎
17:16
|
(18) Если тебе нужно на форме что-то заполнить (почти любые данные формы или основного реквизита формы ) - то можно.
Если тебе не экспортные методы вызвать - то нельзя. В твоем примере можно обойтись без РеквизитФормыВЗначение и заполнить ТЧ на клиенте построчно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |