Имя: Пароль:
1C
 
Обмен в формах. ОткрытьФорму и ПолучитьФорму - в чем разница?
0 ketzer
 
03.06.18
16:51
Доброго всем дня.
Только начинаю изучать 1С. Бьюсь в 1С:Предприятие 8.3 (8.3.12.1412) с 1С:Фитнес клуб КОРП, редакция 4.0 (4.0.3.9)

Делаю расширение основной конфигурации. Должен сказать, многое уже удалось реализовать, и оно работает. Но возникла проблема:

хочу модифицировать штатную процедуру оплаты услуги. После нажатия кнопки "оплатить" хочу передать в форму обработки "ПомощникПроведенияОплаты" некие данные, делаю так:


в Документы-Реализация-Формы-ФормаДокумента:

&НаКлиенте
Процедура Расш2_ОплатитьПеред(Команда)

формаОплаты = ПолучитьФорму("Обработка.ПомощникПроведенияОплаты.Форма");
        
формаОплаты.ЭтоСпецПродажа = истина;
формаОплаты.СпецСтоимость = Объект.Запасы[0].Всего;
формаОплаты.СпецПродолжительность =  Объект.Запасы[0].Количество;


далее выполняется штатная функция оплаты, с открытием формыоплаты.

Прошу помочь:

1. Думал, что получив "ссылку" на форму, могу просто предустановить ей некоторые реквизиты (они созданы в конструкторе и нормально читаются). Но Функция ПолучитьФорму() почему-то выполняет процедуру "получаемой" формы "ПриСозданииНаСервере" расширяемой конфигурации и все что в нее вложено, что, разумеется, вызывает ряд ошибок в 90% случаев. Зачем тогда нужна функция ПолучитьФорму? получается она почти идентична функции ОткрытьФорму с указанными параметрами, но без вызова метода Открыть()?

2. Если ошибки в первом пункте все-же не появились, все равно, в итоге, в уже открывшейся форме, значения указанных выше реквизитов не изменились.

Заранее благодарю за ответы.
1 triviumfan
 
03.06.18
18:24
2 triviumfan
 
03.06.18
18:25
(1) Вдруг нет доступа к ИТС.. тогда вот - https://yadi.sk/d/QNWbDzJ23WyGpX
3 triviumfan
 
03.06.18
18:32
В общем тебе нужно использовать православный метод "ОткрытьФорму()" с передачей параметров =)
Получается, для переопределения нужно использовать аннотацию "Вместо" и изменить открытие.
4 ketzer
 
03.06.18
19:22
(3) спасибо за ответ! Trivium!!!

Но, может можно как-то обратиться напрямую к реквизиту/параметру? или глобальную переменную намутить? Без получения формы?
5 triviumfan
 
03.06.18
20:34
(4) вопрос не понятен.
Ты написал, что хочешь передать параметр в обработку.
ОткрытьФорму("Обработка.ПомощникПроведенияОплаты.Форма", Новый Структура("Параметр1, ..., ПараметрN", Значение1, ..., ЗначениеN));
А уже в ПриСозданииНаСервере() этой формы обращаешься к Параметры и обрабатываешь. Что не так?
6 Cyberhawk
 
03.06.18
22:57
Разница в том, что второе - *овнокод
7 ketzer
 
04.06.18
09:07
(5) Да, я не хочу открывать форму, она уже открывается в штатной конфигурации, мне надо "предзадать" ей параметры.

(6) Вы про 1С или?
8 catena
 
04.06.18
10:05
(7)Как обычно, 90% проблем решается внимательным чтением СП:

Синтаксис:

ПолучитьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>)
......................................
<Уникальность> (необязательный)

Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
9 Cyberhawk
 
04.06.18
10:44
(7) Прочитал заголовок ветки
10 ketzer
 
09.06.18
12:46
(8) спасибо! Сработало! Ключ уникальности пуст, но идея работы с уже открытой формой помогла.