Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 02:14

Передать созданный реквизит из формы элемента в форму документа

Автор pan1614, 26 фев 2018, 09:36

0 Пользователей и 1 гость просматривают эту тему.

pan1614

День Добрый!

Прошу помощи у общества. Суть проблемы - Конфа самописная, но простая. Документ приходная накладная, заполняем табличную часть - начинаем с артикула (наименования могут совпадать, вот артикулы у каждой детали свой) если запись в справочнике с таким артикулом есть, то наименование заполняется автоматом

&НаКлиенте
Перем Получить  Экспорт;

&НаСерверебезКонтекста
Функция ПолучитьНаименование(Артикул)    Экспорт

Возврат Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул).Наименование;
 
КонецФункции

&НаКлиенте
Процедура ПриходАртикулПриИзменении(Элемент)

СтрокаТЧ = Элементы.Приход.ТекущиеДанные ;
Получить =  ПолучитьНаименование(СтрокаТЧ.Артикул);

А вот при отсутствии записи с артикулом нужно создать в справочнике соответствующую запись и вставить созданное наименование в поле наименование в табличной части документа приходная накладная
Пусто = ПустаяСтрока(Получить);
Если Пусто = Истина    Тогда
П = Новый Структура;
П.Вставить("ЗначенияЗаполнения", Новый Структура());
П.ЗначенияЗаполнения.Вставить("Артикул",СтрокаТЧ.Артикул);
П.ЗначенияЗаполнения.Вставить("Наименование");

  Форма = ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", П, ЭтотОбъект,,,,
                    Новый ОписаниеОповещения("ФормаЭлементаЗавершение", ЭтотОбЪект, СтрокаТЧ.Артикул), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Получить =  ПолучитьНаименование(СтрокаТЧ.Артикул);
         
КонецЕсли;
 
СтрокаТЧ.Номенклатура = Получить;

КонецПроцедуры


Процедура ФормаЭлементаЗавершение(Результат,Артикул) Экспорт
   
    Если Результат = Неопределено Тогда
Сообщить("Пусто");
Возврат;
    КонецЕсли;
   
   
Получить = Результат;
    Сообщить("НЕ пусто  " + Получить);
КонецПроцедуры


Запись создается но поле не заполняется. Прошу помощи!

AIFrame

Цитата: pan1614 от 26 фев 2018, 09:36А вот при отсутствии записи с артикулом нужно создать в справочнике соответствующую запись
Покажите в вашем коде, где вы создаете новый объект справочника и делаете Объект.Записать();?
Цитата: pan1614 от 26 фев 2018, 09:36Запись создается но поле не заполняется.
Не вижу в вашем коде работу с объектом.

pan1614


sertak

Этот код корректно выводит новую номенклатуру?

Сообщить("НЕ пусто  " + Получить);

pan1614

Этот код Сообщить() технологический для отладки. В сообщении выводится новое наименование. В переменную Получить передается созданный реквизит, но в поле табличной части приходной накладной СтрокаТЧ.Наименование не передается. В отладчике выяснил что процедуры отрабатывают параллельно форме. Т.е сначала отрабатывает код потом открывается форма.

sertak

Цитата: pan1614 от 26 фев 2018, 15:36
Этот код Сообщить() технологический для отладки.
Это понятно.
Цитата: pan1614 от 26 фев 2018, 15:36
В сообщении выводится новое наименование.
Попробуйте там же добавлять строку ТЧ.
Честно, не делал такие штуки через асинхронные вызовы. Может, не то советую.

А в коде
Цитировать
Получить =  ПолучитьНаименование(СтрокаТЧ.Артикул);
вы и не сможете получить ссылку, потому  что создаете элемент в другой функции, вызываемой асинхронно. Если нет понимания, почему так происходит, почитайте про этот механизм или переделайте на синхронный, т.е. без использования ОписаниеОповещения.

pan1614

Вот в чем и вопрос. Как? Не будете ли любезны подсказать?

sertak

Использовать ОткрытьФормуМодально.
Вы попробовали добавлять строку ТЧ в функции ФормаЭлементаЗавершение?

AIFrame

Цитата: pan1614 от 26 фев 2018, 15:36но в поле табличной части приходной накладной СтрокаТЧ.Наименование не передается
Накатил поллитра и таки разобрался в этой каше.
Выполни вот этот код и все поймешь

&НаКлиенте
Процедура КомандаТест(Команда)
Наименование = ПолучитьНаименование(Артикул);
Сообщить("Наименование: " + Наименование + " Тип: " + ТипЗнч(Наименование));
Если НЕ ЗначениеЗаполнено(Наименование) Тогда
    П = Новый Структура;
    П.Вставить("ЗначенияЗаполнения", Новый Структура());
    П.ЗначенияЗаполнения.Вставить("Артикул",Артикул);
    П.ЗначенияЗаполнения.Вставить("Наименование");
ОП = Новый ОписаниеОповещения("ФормаЭлементаЗавершение", ЭтотОбЪект, Артикул);
Форма = ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаВыбора", П, ЭтотОбъект,,,,ОП, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Получить =  ПолучитьНаименование(Артикул);
Сообщить("А пока мы че-то там делаем, код продолжает свое выполенение: " + Получить);
КонецЕсли;
Сообщить("И процедура просто завершается.");

КонецПроцедуры

&НаКлиенте
Процедура ФормаЭлементаЗавершение(Результат, Артикул) Экспорт
   
    Если Результат = Неопределено Тогда
        Сообщить("Пусто");
        Возврат;
    КонецЕсли;
   
   
    Получить = Результат;
    Сообщить("И вот мы наконец передали что-то из выбора, при чем в виде ссылки на справочник." + Символы.ПС + Получить + " (" + ТипЗнч(Получить) + ")");
Сообщить("Спрашивается, а где же мы присваиваем выбранное значение в нужной строке? И хрен его знает, наверное платформа сама догадается, что нужно ждать нашу экспортную переменную и именно  в нужной нам строке что-то там подставить. Мех...");
КонецПроцедуры

&НаСерверебезКонтекста
Функция ПолучитьНаименование(Артикул)    Экспорт
   
Возврат Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул).Наименование;
     
КонецФункции

Добавлено: 26 фев 2018, 16:22


Цитата: pan1614 от 26 фев 2018, 15:50Вот в чем и вопрос. Как? Не будете ли любезны подсказать?
А не проще ли показать ввод строки, ввести это несчастное наименование, записать это несчастное наименование в строку сразу и открыть форму создания элемента справочника, передав в нее для заполнения и несчастное наименование и артикул.
Либо повесить на ТЧ обработчик ПриПолученииДанных и там это несчастное наименование заполнять.

pan1614

Уважаемый, AIFrame! Очевидно поллитры Вам не помогло. ваш код на работает должным образом.

А вопрос решился открытием формы МОДАЛЬНО!

Спасибо  sertak!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск