Имя: Пароль:
1C
1С v8
УФ. Вопрос по передаче параметра между клиентом и сервером
0 suvolod
 
20.01.14
09:17
С управляемыми формами работаю нечасто, поэтому прошу подсказки. В 1С Розница 2.0 хочу типовую обработку "печати этикеток и ценников" заменить на свою.

Для этого в модуле формы типовой обработки сделал следующее:

//1
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Адрес = ПоместитьВоВременноеХранилище(Параметры, УникальныйИдентификатор);
    ??? = Адрес;    
    Возврат;

//2
Процедура ПриОткрытии(Отказ)    
    
    Адрес = ???;
    Парам = ПолучитьИзВременногоХранилища(Адрес);                     
ОткрытьФорму("Обработка.ПечатьЭтикетокИЦенниковНОВАЯ.Форма.Форма", Парам);
    Отказ = Истина;
    Возврат;

Как видно из кода, у меня проблема с сохранением адреса во врем. хранилище. Понятно, что у обработки можно создать реквизит и хранить адрес в нем. Но уж больно некрасиво получается, не хочется создавать новый реквизит в типовых объектам только ради хранения строчки с адресом. Может, есть другой способ сохранения адреса?
1 Адский плющ
 
20.01.14
09:21
Реквизит формы.
2 olegves
 
20.01.14
09:21
(0) в процедуру печати правильнее передавать ссылку (массив ссылок) на объект, саму процедуру размещать в модуле менеджера, а для печати создавать команду объекта
3 Адский плющ
 
20.01.14
09:22
А вообще в приоткрытии какой-то лютый г-код.
4 Cube
 
20.01.14
09:23
(0) Так идентификатор сделай постоянным...
5 suvolod
 
20.01.14
09:23
(4) Это как?
6 Cube
 
20.01.14
09:24
(5) "b608aede-4189-49a6-bdf8-c94a65733962"
7 suvolod
 
20.01.14
09:28
(6)не понимаю, как мне это применить на практике. Уникальный идентификатор и так у меня постоянный, потому-что ПриСозданииНаСервере и ПриОткрытии принадлежат одной форме.
Но как с сервера вытащить адрес без сохранения в промежуточном реквизите, не понимаю.. Вот если бы была какая-нибудь клиентская функция по обратному получению адреса из внешнего хранилища по ИД формы, тогда такая проблема бы даже не обсуждалась...
8 suvolod
 
20.01.14
09:31
На обычных формах было все проще. Достаточно в проц. ПередОткрытием прописать

ОткрытьФорму("Обработка.ПечатьЭтикетокИЦенниковНОВАЯ.Форма.Форма", Парам); Отказ = Истина;

... и все работало. А на УФ мало того что нужно две типовые проц. править, так и еще отдельный реквизит создавать для хранения адреса.
9 banco
 
20.01.14
09:33
(8) в УФ вроде еще проще, есть же обработчик ОбработкаПолученияФормы
10 Cube
 
20.01.14
09:39
(7) Да не, это я затупил что-то)))

Я так понял, что (0) выполняется в одной форме? Ну а чем реквизит формы плох? Его ведь можно и программно создать...
11 suvolod
 
20.01.14
09:51
(9) спасибо, сейчас посмотрю что это за обработчик.. не знал
(10) Программно было-бы самое то, только... как это сделать?
12 suvolod
 
20.01.14
10:32
(9)Попробовал обработчик... задумка хорошая, но у меня не работает. Точнее, если я щелкаю на кнопке "Печать этикеток и ценников" в главном окне программы, то обработчик срабатывае. А вот если я окно печати ценников открываю из формы документа (по кн. Печать > Ценники), то обработчик не срабатывает :(....
13 Cube
 
20.01.14
10:34
(11) "как это сделать?"

Примерно, так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    МассивДобавляемых = Новый Массив;
    МассивДобавляемых.Добавить(Новый РеквизитФормы("МойРеквизит", Новый ОписаниеТипов("Строка")));
    ЭтаФорма.ИзменитьРеквизиты(МассивДобавляемых);
14 Defender aka LINN
 
20.01.14
10:36
Одинэснеги такие одинэснеги...
(0) Оставь форму в покое и меняй КОМАНДУ
15 suvolod
 
20.01.14
10:43
(13) спасибо.
(14) с УФ мало работал.. можно чуть подробнее как меняется команда.. или что погуглить
16 Cube
 
20.01.14
10:44
(15) "как меняется команда"

Программно можно:
1). Создаешь свою команду.
2). Находишь элемент на форме.
3). Меняешь ему команду на свою из п. 1.
17 Cube
 
20.01.14
10:46
То есть, (14) тебе предлагает заменить выполняемое действие на кнопке вызова обработки "печати этикеток и ценников"
18 Defender aka LINN
 
20.01.14
10:47
(16) Рукалицо...
(15) Что значит "как меняется"? Берешь и меняешь.
19 suvolod
 
20.01.14
10:48
спасибо.. Cube, тебе особенно.... Пойду дальше пытать свою УФ
20 Cube
 
20.01.14
10:50
(18) "Рукалицо"
Что, не угадал? Ну, знаешь, телепатов тут нет. Тебе нужно яснее выражать свои мысли... Возможно, ты предлагал поменять модуль команды, но кто об этом знает, кроме тебя?
21 suvolod
 
20.01.14
15:06
Кажется разобрался..

1// Подписка на событие не подойтет, потому-что типовой код 1С Розницы везде использует вызов вида "Обработка.ПечатьЭтикетокИЦенников.Форма.Форма", а подписка срабатывает только при вызове вида ОткрытьФорму("Обработка.ПечатьЭтикетокИЦенников.Форма")

2// "Рукалицо" со сменой команды вообще не годиться. Это нужно будет править еще больше кода.. каждый документ, где будет вызываться эта команда.

3// Наиболее приемлимый вариант - это вар. от Cube с программным созданием реквизита формы.

Небольшой косяк, который еще вылез и пытаюсь победить - это то, что в обработчике ПриСозданииНаСервере свойство ЭтаФорма.Параметры имеют вид ДанныеФормаСтруктура, а вызываемая позже на клиенте команда ОткрытьФорму просит в качестве параметров обычную структуру...

Как проще преобразовать ДанныеФормаСтруктура в обычную Структуру?
22 Defender aka LINN
 
20.01.14
15:48
(21) "Это нужно будет править еще больше кода.. каждый документ, где будет вызываться эта команда"
http://www.miataturbo.net/attachments/build-threads-57/99478-adventures-my-drift-miata-2408017-epic-facepalm_zpsdaaf296c-jpg%3Fdateline%3D1389368159

Команда печати ценников - ОДНА
23 suvolod
 
21.01.14
06:19
(22) Ты заблуждаешься. Я смотрю код Розницы: в документах поступления, перемещения, установки цен и некоторых других есть команды печати ценников (и их модули)
Документ.ОприходованиеТоваров.Команда.ПечатьЦенников.Модуль команды
Документ.ПеремещениеТоваров.Команда.ПечатьЦенников.Модуль команды
Документ.ПоступлениеТоваров.Команда.ПечатьЦенников.Модуль команды
Документ.ПрименениеЦенНоменклатуры.Команда.ПечатьЦенников.Модуль команды

... и т.д. Соотвественно, глобальный хак в одном месте на вызов команды печати ценников я поставить не смогу, придется править, перехватывать и вызывать свою обработку печати ценников в каждом из этих документов.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший