|
Реквизит формы ссылочного типа | ☑ | ||
---|---|---|---|---|
0
Denis Nsk
14.05.15
✎
10:55
|
Привет Всем!
Конфа БП 3.0 Внешняя обработка для заполнения ТЧ документа. Есть Реквизит1 обработки тип ДокументСсылка, Реквизит2 формы тип ДокументСсылка, Реквизит3 формы тип Строка. В модуле формы в Процедуре1 контекст НаКлиенте присваиваются значения реквизитам (Реквизит1 и Реквизит2 ссылка на документ, для которого выполняется заполнение ТЧ, Реквизит3 строковое значение). Проверяю реквизиты все 3-и заполнены. Затем. Форма не закрывается. В том же модуле формы в Процедуре2 (НаКлиенте) Реквизит1 и Реквизит2 значения не заполнены, Реквизит3 (строковый) содержит нужное значение. Подскажите, пожалуйста, что проверить? Почему значения в Реквизитах 1 и 2 теряются? |
|||
1
asady
14.05.15
✎
11:00
|
Затем это когда?
подробнее пожалуйста |
|||
2
Denis Nsk
14.05.15
✎
11:25
|
(1) Заполняются при открытии формы.
"Затем" после того как выбрали файл из которого загружаем данные, нажимаем кнопку и выполняется команда (Процедура2). И вот в этот момент реквизиты 1 и 2 почему-то пустые. Может есть особеннсоти с ссылочными типами реквизитов? Потому что строковый не теряется. |
|||
3
asady
14.05.15
✎
11:28
|
(2) как вариант может быть ты ещё где-то устанавливаешь реквизиты 1 и 2 (типа забыл что так называются реквизиты формы)
|
|||
4
hhhh
14.05.15
✎
11:28
|
барабашка завелся. Как вариант.
|
|||
5
Denis Nsk
14.05.15
✎
11:35
|
(2) проверю с пристрастием. но на вскидку не перезаписываю.
я в УФ плаваю ... поэтому предположил что есть особенности (3) )) щас база не под рукой. проверю позже. варианты принимаются.. |
|||
6
Torquader
14.05.15
✎
13:16
|
Значения реквизитов присваиваются на сервере или на клиенте ?
Ещё очень полезно бывает ОбновитьОтображение (или как оно там называется). |
|||
7
Denis Nsk
14.05.15
✎
22:49
|
(3) проверил больше ни где не устанавливаю эти реквизиты
(6) На клиенте |
|||
8
Denis Nsk
17.05.15
✎
14:50
|
(3) Что-то ни как не получается.
Создал новые реквизиты, параллельно использую переменные (контекст НаКлиенте). В процедуре при открытии формы после заполнения реквизитов (переменных) проверяю значения есть. Сделал отдельную команду (кнопку) и сразу после открытия проверяю реквизиты (переменные). Все пусто. Что проверить? |
|||
9
Rie
17.05.15
✎
15:24
|
(6) Точно на клиенте? Внешняя обработка для заполнения табличной части?
|
|||
10
Denis Nsk
17.05.15
✎
16:18
|
Сохраняю НаСервере, первый раз проверяю НаКлиенте все Ок, Второй раз проверяю НаКлиенте не Ок.
Внешняя обработка заполнения ТЧ. Вызывается из формы документа. Может как-то по другому ее регистрировать/вызывать нужно? Сейчас постараюсь собрать код и выложить. |
|||
11
Denis Nsk
17.05.15
✎
16:27
|
&НаКлиенте
Перем мДатаДокумента, мНомерДокумента; &НаКлиенте Процедура ПокажемФормуВыбораФайлаПользователю(ТекущийДокумент) ФормаВыбора = ПолучитьФорму("ВнешняяОбработка.ПоступленияТиУЗаполнитьТЧТовары.Форма.Форма"); ФормаВыбора.ОбъектИсточника = ТекущийДокумент; Объект.ДокументИсточника = ТекущийДокумент; ФормаВыбора.Открыть(); //Для отладки начало СохранитьНомерДатуСсылкуДокументаВРеквизитахНаСервере(ТекущийДокумент); мДатаДокумента = ДатаДокумента_РеквизитФормы; мНомерДокумента = НомерДокумента_РеквизитФормы; //отладочные сообщения. Здесь значения есть. Сообщить("ДатаДокумента_РеквизитФормы = " + ДатаДокумента_РеквизитФормы); Сообщить("НомерДокумента_РеквизитФормы = " + НомерДокумента_РеквизитФормы); Сообщить("СсылкаНаДокумент_РеквизитФормы = " + СсылкаНаДокумент_РеквизитФормы); Сообщить("мДатаДокумента = " + мДатаДокумента); Сообщить("мНомерДокумента = " + мНомерДокумента); //Для отладки окончание КонецПроцедуры &НаСервере Процедура СохранитьНомерДатуСсылкуДокументаВРеквизитахНаСервере(ТекДокументСсылка); ДатаДокумента_РеквизитФормы = ТекДокументСсылка.Дата; НомерДокумента_РеквизитФормы = ТекДокументСсылка.Номер; СсылкаНаДокумент_РеквизитФормы = ТекДокументСсылка.Ссылка; КонецПроцедуры //Далее Процедура (команда) для проверки Реквизитов и переменных //Вызываю ее сразу после открытия формы //Здесь значения Реквизитов и Переменных пустые &НаКлиенте Процедура ПроверитьРеквизитыПеременные(Команда) //отладка Сообщить(" = = = = = = = = = = = = "); Сообщить("мДатаДокумента = " + мДатаДокумента); Сообщить("мНомерДокумента = " + мНомерДокумента); Сообщить(" = = = = = = = = = = = = "); Сообщить("ДатаДокумента_РеквизитФормы = " + ЭтаФорма.ДатаДокумента_РеквизитФормы); Сообщить("НомерДокумента_РеквизитФормы = " + ЭтаФорма.НомерДокумента_РеквизитФормы); Сообщить("СсылкаНаДокумент_РеквизитФормы = " + ЭтаФорма.СсылкаНаДокумент_РеквизитФормы); КонецПроцедуры |
|||
12
Denis Nsk
18.05.15
✎
07:03
|
Ап
|
|||
13
asady
18.05.15
✎
08:04
|
(12) проверь ключ уникальности формы
&НаКлиенте Процедура ПроверитьРеквизитыПеременные(Команда)//отладка Сообщить(" = = = = = = = = = = = = "); Сообщить("мДатаДокумента = " + мДатаДокумента+" КЛЮЧ = "+ЭтаФорма.КлючУникальности); Сообщить("мНомерДокумента = " + мНомерДокумента); Сообщить(" = = = = = = = = = = = = "); Сообщить("ДатаДокумента_РеквизитФормы = " + ЭтаФорма.ДатаДокумента_РеквизитФормы); Сообщить("НомерДокумента_РеквизитФормы = " + ЭтаФорма.НомерДокумента_РеквизитФормы); Сообщить("СсылкаНаДокумент_РеквизитФормы = " + ЭтаФорма.СсылкаНаДокумент_РеквизитФормы); КонецПроцедуры |
|||
14
Denis Nsk
18.05.15
✎
10:22
|
(13)
= = = = = = = = = = = = КЛЮЧ = мДатаДокумента = мНомерДокумента = = = = = = = = = = = = = Все пусто. |
|||
15
Denis Nsk
18.05.15
✎
10:44
|
В процедуре ПокажемФормуВыбораФайлаПользователю добавил присваивание ключа. В этой же процедуре позже его не видно. Но в процедуре ПроверитьРеквизитыПеременные виден правильный ключ.
Т.е. форма не меняется программно (интерактивно я ее не закрываю). Но почему в первой процедуре ПокажемФормуВыбораФайлаПользователю сразу после назначения ключа его не видно? |
|||
16
asady
18.05.15
✎
10:46
|
(15) как ключ уникальности устанавливаешь?
|
|||
17
Denis Nsk
18.05.15
✎
10:47
|
ФормаВыбора = ПолучитьФорму("ВнешняяОбработка.ПоступленияТиУЗаполнитьТЧТовары.Форма.Форма",,,"123");
|
|||
18
asady
18.05.15
✎
10:49
|
(17) ну правильно ключ назначил -
теперь где ты его не видишь? |
|||
19
asady
18.05.15
✎
10:51
|
(17) а у основной формы ключ уникальности устанавливаешь?
|
|||
20
Denis Nsk
18.05.15
✎
10:56
|
(18) не вижу в конце процедуры ("ПокажемФормуВыбораФайлаПользователю") где его назначил
|
|||
21
Denis Nsk
18.05.15
✎
10:58
|
(19) основная это форма документа, из которого вызываем обработку или форма обработки?
документ типовой (конфа БП 3.0) В обработке не устанавливаю |
|||
22
Denis Nsk
18.05.15
✎
11:01
|
но про ключ уникальности это не основной вопрос...
мне главное реквизиты или переменные увидеть... |
|||
23
asady
18.05.15
✎
11:06
|
(22) ключ уникальности нужен чтобы убедиться что ты имеешь дело с одной и той же формой.
(20) то есть ты там пишешь: Сообщить("Ключ уникальности формы выбора = "+ФормаВыбора.КлючУникальноси); и не видишь ключа? (21) нужно посмотреть ключ уникальности формы у которой ты завел реквизиты для сохранения - скорее всего это форма обработки. |
|||
24
Denis Nsk
18.05.15
✎
11:17
|
(23) для чего ищем ключ уникальности я понял
сейчас скопирую код. |
|||
25
Denis Nsk
18.05.15
✎
11:28
|
&НаКлиенте
Процедура ПокажемФормуВыбораФайлаПользователю(ТекущийДокумент) //здесь ключа не видно (значит ранее не устанавливали) Сообщить("КЛЮЧ = "+ЭтаФорма.КлючУникальности);//отладка ФормаВыбора = ПолучитьФорму("ВнешняяОбработка.ПоступленияТиУЗаполнитьТЧТовары.Форма.Форма",,,"123"); ФормаВыбора.ОбъектИсточника = ТекущийДокумент; Объект.ДокументИсточника = ТекущийДокумент; ФормаВыбора.Открыть(); СохранитьНомерДатуСсылкуДокументаВРеквизитахНаСервере(ТекущийДокумент); мДатаДокумента = ДатаДокумента_РеквизитФормы; мНомерДокумента = НомерДокумента_РеквизитФормы; Сообщить("ДатаДокумента_РеквизитФормы = " + ДатаДокумента_РеквизитФормы); Сообщить("НомерДокумента_РеквизитФормы = " + НомерДокумента_РеквизитФормы); Сообщить("СсылкаНаДокумент_РеквизитФормы = " + СсылкаНаДокумент_РеквизитФормы); Сообщить("мДатаДокумента = " + мДатаДокумента); Сообщить("мНомерДокумента = " + мНомерДокумента); //здесь ключа не видно Сообщить("КЛЮЧ = "+ЭтаФорма.КлючУникальности);//отладка КонецПроцедуры &НаКлиенте Процедура ПроверитьРеквизитыПеременные(Команда) //процедура для проверки Сообщить(" = = = = = = = = = = = = "); //здесь колюч видно = "123" Сообщить("КЛЮЧ = "+ЭтаФорма.КлючУникальности);//отладка Сообщить("мДатаДокумента = " + мДатаДокумента);//отладка Сообщить("мНомерДокумента = " + мНомерДокумента);//отладка Сообщить(" = = = = = = = = = = = = ");//отладка Сообщить("ДатаДокумента_РеквизитФормы = " + ЭтаФорма.ДатаДокумента_РеквизитФормы); Сообщить("НомерДокумента_РеквизитФормы = " + ЭтаФорма.НомерДокумента_РеквизитФормы); Сообщить("СсылкаНаДокумент_РеквизитФормы = " + ЭтаФорма.СсылкаНаДокумент_РеквизитФормы); КонецПроцедуры |
|||
26
asady
18.05.15
✎
11:32
|
(25) Где находится Процедура ПроверитьРеквизитыПеременные? в каком модуле формы? у обработки, или у формы выбора или где?
|
|||
27
Denis Nsk
18.05.15
✎
11:39
|
(26) это все в модуле формы обработки
|
|||
28
Denis Nsk
18.05.15
✎
11:42
|
может проще обработку выложить?
пальцем ткнете где ошибка |
|||
29
asady
18.05.15
✎
11:53
|
(28) конечно лучше.
странно следующее: вначале ключ формы обработки пустой но потом он вдруг у тебя становится равным 123 то есть равным ключу другой формы - формы выбора - то есть две формы имеют один ключ уникальности - и всё работает? что-то здесь не так. |
|||
30
Denis Nsk
18.05.15
✎
11:55
|
ФормаВыбора это и д.б. форма обработки. Выбор файла осуществляется в диалоге через ДиалогВыбораФайла
Сечас описание накидаю и выложу обработку |
|||
31
Denis Nsk
18.05.15
✎
12:05
|
||||
32
asady
18.05.15
✎
12:42
|
(0) получается что ты запускаешь две копии одной обработки - поэтому у тебя два ключа уникальности - реквизиты устанавливаешь у одной формы (которая 123) а ищещь у первой (ключ уникальности пустой)
так что твоя обработка работает правильно :) |
|||
33
Denis Nsk
18.05.15
✎
12:53
|
интересно...
но на экране только одно окно... А где она запускается первый раз, где второй? Второй, похоже, строка №31 в модуле формы ФормаВыбора.Открыть(); |
|||
34
Denis Nsk
18.05.15
✎
12:55
|
"обработка работает правильно :)"
я догадывался, что она работает, правильно. Что написали то и делает)) Это я что-то не допонимаю..)) |
|||
35
asady
18.05.15
✎
12:57
|
(31)
(32)+только вот не совсем догнал зачем вот это понадобилось нужно было загрузить накладную из файла проще было передать ссылку на документ во вторую форму параметром: ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("СсылкаНаДокумент", ТекущийДокумент); ФормаВыбора = ПолучитьФорму("ВнешняяОбработка.ПоступленияТиУЗаполнитьТЧТовары.Форма.Форма",ПараметрыФормы,ЭтаФорма,"123"); //вот здесь вызывается форма во второй раз - ну и пусть и так будет работать //это лишнее //ФормаВыбора.ОбъектИсточника = ТекущийДокумент; // Объект.ДокументИсточника = ТекущийДокумент; Надо добавить &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("СсылкаНаДокумент") Тогда СсылкаНаДокумент_РеквизитФормы = Параметры.СсылкаНаДокумент; КонецЕсли; КонецПроцедуры |
|||
36
Denis Nsk
18.05.15
✎
13:15
|
(35) и определять нужное окно документа по ссылке, да?
я так и хотел. Но, похоже, из-за второго открытия формы, я не получал ссылки в реквизите формы. |
|||
37
Denis Nsk
18.05.15
✎
13:16
|
Не подскажите, как правильно, определить нужное окно? Где у окна хранится ссылка на владельца (т.е. на документ)?
Наверно через Окно.Содержимое а дальше как? |
|||
38
asady
18.05.15
✎
13:17
|
(36) у тебя есть только одно окно формы обработки - и это вторая копия формы обработки
первая копия формы не открыта - из неё вызвана команда экспортная. то что я предложил достаточно - должно работать и так - пробуй |
|||
39
Denis Nsk
18.05.15
✎
13:31
|
ОГРОМНОЕ СПАСИБО!
Заработало! Не до конца понял как. Сейчас буду сидеть по шагам как с букварем разбираться )) Я ожидал, что еще условие нужно переделать. Если будут вопросы, спрошу в этой ветке. Если ответите буду очень благодарен! Еще раз СПАСИБО! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |