Имя: Пароль:
1C
 
Открыть форму нового элемента справочника до записи объекта с нужным УИД
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