|
Открыть форму нового элемента справочника до записи объекта с нужным УИД | ☑ | ||
---|---|---|---|---|
0
ZaprosMan
11.09.17
✎
16:52
|
Здравствуйте!
Есть обработка, которая создает номенклатуру по УИД. УИД из другой базы приходит (настроен обмен) чтобы всякий мусор не гнать, надо только выбранные значения. // Короче, есть УИД, надо создать новый элемент номенклатуры с этим УИДом и открыть пользователю его форму до записи. //////////////////// Делаю так: &НаКлиенте Процедура СоздатьНоменклатуру(Команда) ТекДанные = Элементы.ТабНоменклатура.ТекущиеДанные; Если ТекДанные = Неопределено Тогда Возврат; КонецЕсли; Если ЗначениеЗаполнено(ТекДанные.Номенклатура) И ТипЗнч(ТекДанные.Номенклатура) = Тип("СправочникСсылка.Номенклатура") Тогда ПоказатьПредупреждение(Неопределено,"Создание номенклатуры не требуется!"); Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(ТекДанные.Номенклатура) Тогда ПоказатьПредупреждение(Неопределено,"Поле номенклатура пустое!"); Возврат; КонецЕсли; // Ошибка = ""; ПодключитьсяКБазеУПП(Ошибка); Если ЗначениеЗаполнено(Ошибка) Тогда Состояние("Подключение не выполнено!"); СтатусПодключения = "Ощибка подключения!"; Элементы.ПоказатьОшибку.Видимость = Истина; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = Ошибка; Сообщение.Сообщить(); Возврат; Иначе Состояние("Подключение выполнено!"); СтатусПодключения = "Подключение выполнено!"; Элементы.ПоказатьОшибку.Видимость = Ложь; КонецЕсли; ФормаЭлементаНоменклатуры = ПолучитьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента"); СоздатьНоменклатуруУППСервер(ТекДанные.Номенклатура,ТекДанные.УИД,Ошибка); Если ЗначениеЗаполнено(Ошибка) Тогда ПоказатьПредупреждение(Неопределено,Ошибка); Возврат; КонецЕсли; //Объект.Номенклатура.ВидНоменклатуры = ТекДанные.ВидНоменклатуры; //Объект.Номенклатура.ЕдиницаИзмерения = ТекДанные.ЕдиницаИзмерения; // КопироватьДанныеФормы(Объект.Номенклатура, ФормаЭлементаНоменклатуры.Объект); ФормаЭлементаНоменклатуры.Открыть(); // КонецПроцедуры Процедура СоздатьНоменклатуруУППСервер(Номенклатура,УИД,Ошибка) СтруктураПодключения = ПолучитьИзВременногоХранилища(Адрес); БазаУПП = СтруктураПодключения.Подключение; /// СписокСкладов.Очистить(); СоответствиеСкладов = Новый Соответствие; // Если ЗначениеЗаполнено(УИД) Тогда УИДНоменклатуры = УИД; Иначе НоменклатураУПП = БазаУПП.Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура); Если НоменклатураУПП = Неопределено Тогда Ошибка = "Не найдена номенклатура в УУП!"; Возврат; КонецЕсли; // УИДНоменклатуры = БазаУПП.XMLСтрока(НоменклатураУПП); КонецЕсли; ОбНоменклатура = Справочники.Номенклатура.СоздатьЭлемент(); ОбНоменклатура.Наименование = Номенклатура; ОбНоменклатура.УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(УИДНоменклатуры))); ЗначениеВДанныеФормы(ОбНоменклатура,Объект.Номенклатура); КонецПроцедуры /////////////// //Поясню Все мои попытки передать объект с сервера на клиент, не взлетели. ТОгда я добавил реквизит обработки "Объект.Номенклатура" с типом НоменклатураОбъект и делаю через него. //// Косяк в том, что после записи объекта в форме, уид не тот, что надо!!! Подскажите, помогите, как это сделать правильно? Спасибо! |
|||
1
Tateossian
11.09.17
✎
16:55
|
Ставь Обменданными.Загрузка = ИСТИНА принудительно.
|
|||
2
Tateossian
11.09.17
✎
16:55
|
Вот сюда
ОбНоменклатура |
|||
3
ZaprosMan
11.09.17
✎
16:57
|
Спасибо!
|
|||
4
ZaprosMan
12.09.17
✎
10:02
|
Здравствуйте!
НЕ взлетает. Ставлю Обменданными.Загрузка = ИСТИНА; ///////////// //Пихаю его в реквизит обработки ЗначениеВДанныеФормы(ОбНоменклатура,Объект.Номенклатура); //Затем выпихиваю обратно для проверки ОбъектНоменклатура = ДанныеФормыВЗначение(Объект.Номенклатура,Тип("СправочникОбъект.Номенклатура")); //И опа...Обменданными.Загрузка = ложь // Кто знает способ открыть объект до записи с нужным мне УИДом? |
|||
5
ZaprosMan
12.09.17
✎
10:54
|
Придется записывать до открытия...
Не спортивно, но делать нечего! |
|||
6
DrShad
12.09.17
✎
10:58
|
при записи устанавливай свой УИД
|
|||
7
vicof
12.09.17
✎
10:59
|
ПолучитьСсылкуНОВОГО
|
|||
8
Рэйв
12.09.17
✎
12:17
|
как то так...
УИД=Новый УникальныйИдентификатор(ТвойНужныйУид); Ссылка=Справочники.Номенклатура.ПолучитьСсылку(УИД); ОбНезаписанный=Справочники.Номенклатура.СоздатьЭлемент(); ОбНезаписанный.УстановитьссылкуНового(Ссылка); Ф=ОбНезаписанный,ПолучитьФорму(); Ф.Открыть(); |
|||
9
Рэйв
12.09.17
✎
12:17
|
ТвойНужныйУид-строка естессно
|
|||
10
Рэйв
12.09.17
✎
12:18
|
только если уид всетаки существует, то откроет существующую записанную ссылку
|
|||
11
DrShad
12.09.17
✎
12:19
|
(8) как-то так у него в коде и есть, кроме того факта что у него УФ
|
|||
12
Рэйв
12.09.17
✎
12:20
|
(11)Ну тогда через ОткрытьФорму с параметром "Ключ" помоему
|
|||
13
FIXXXL
12.09.17
✎
12:20
|
(7) и пихнуть ее как Ключ в Параметр открываемой формы
|
|||
14
ZaprosMan
12.09.17
✎
12:39
|
С ссылкой то всё понятно.
А как открыть объект для пользователя, до записи объекта, но с заранее заданным УИДом? |
|||
15
vicof
12.09.17
✎
12:44
|
(14), (7) принципиально не читаешь?
ОткрытьФорму(имяформы, параметрыформы) в параметры пихаешь ключ |
|||
16
DrShad
12.09.17
✎
12:55
|
(15) т.е. у тебя уже все вышло? а то что в (7) ТС уже использовал
|
|||
17
ZaprosMan
12.09.17
✎
12:56
|
(15) Ага, понял, спасибо!!!
|
|||
18
ZaprosMan
12.09.17
✎
13:04
|
//Не, не работает.
ПараметрыФормы = Новый Структура("Ключ",ТекДанные.Номенклатура); ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента",ПараметрыФормы); В отладке: ТекДанные.Номенклатура <Объект не найден> (270:b2450019dbe48b9d11e429edfd703101) СправочникСсылка.Номенклатура Ошибка: {ВнешняяОбработка.ВводОстатковERP.Форма.Форма.Форма(1531)}: Ошибка при вызове метода контекста (ОткрытьФорму) ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента",ПараметрыФормы); по причине: Объект не найден //// Думал кину в "ключ" не записанную ссылку и взлетит, но нет. |
|||
19
FIXXXL
12.09.17
✎
14:11
|
а ОткрытьЗначение(ТекДанные.Номенклатура) сработает интересно?
|
|||
20
FIXXXL
12.09.17
✎
14:19
|
ну и кусок классики
&НаКлиенте Процедура ОткрытьФормуНового(Команда) Форма = ПолучитьФорму("Документ.ПродажаТоваровУслуг.Форма.ФормаДокумента"); ДанныеФормы = Форма.Объект; ЗаполнитьНаСервере(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); Форма.Открыть(); КонецПроцедуры &НаСервере Процедура ЗаполнитьНаСервере(НовыйОбъект) НовыйОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000005"); КонецПроцедуры |
|||
21
vicof
12.09.17
✎
15:05
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |