Имя: Пароль:
1C
 
УФ : Загрузка контекста из дополнительной произвольной формы документа в сам документ
0 bvb
 
04.06.26
11:35
Добрый день

Никогда не делал и вот надо.

Нужно грузить данные из Excel в ТЧ документа "Заказ"
С предварительной визуализацией и ПРЕД обработкой

1. Для этого хочу сделать доп. произвольную форму данного документа в расширении (с внешней обработкой ТЧ связываться не хочу)
2. Форма открывается с блокировки окна владельца
3. На форме ТЗ и в нее грузим Excel.
4. Подшаманиваем данные форме и затем переносим в документ


Вопрос :
КАк правильно загрузить данные из ТЗ в ТЧ документа после закрытие обработки в команде "ЗагрузитьВДокумент" после закрытия формы?
У меня в голове только вариант со временным хранилищем
1 Мультук
 
гуру
04.06.26
11:53
(0)

1) "загрузка контекста" -- вы грузите не контекст, вы грузите данные.

2) И что не так с этим решением ?

3) В УТ/ЕРП есть типовой импорт из XLS табличных частей
Можно посмотреть "а как сделано там"
2 Мнемоника
 
04.06.26
12:03
В форме с табличкой при нажатии на кнопку оповещаем о выборе с передачей через ПоместитьВоВременноеХранилище нашей таблички
В исходной форме в ОбработкаВыбора обрабатываем это дело.
3 КонецЕсли
 
04.06.26
13:01
(0) Вариант без временного хранилища:
Использовать ОткрытьФорму  с оповещением о закрытии.
В вашей форме при нажатии на ОК формировать массив структур содержащий выбранные строки таблицы (колонки - элементы структуры) и закрыть форму с возвратом этого массива.  
В оповещении о закрытии (на клиенте) сразу добавляем строки в ТЧ документа по полученным данным. Не забываем о заполнении служебных полей в строках ТЧ.
4 AAA
 
04.06.26
13:28
А чем не угодила обработка заполнения ТЧ? Там как раз все просто, никаких извращений
5 mikecool
 
04.06.26
13:47
(4) а где подглядеть такое? а то сподобился писать контекстный внешний отчет, так час пару процедур писал(типа описание и ВыполнитьКоманду) )))
остальное то понятно, а вот сама "обвязка" с привязкой к БСП и объектам - это не знаю как
6 Прохожий
 
04.06.26
13:58
(0) Правильно Дополнительные отчеты и обработки.
Функция СведенияОВнешнейОбработке() Экспорт
            ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("1.1.1.1");
            ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();  //ВидОбработкиПечатнаяФорма();
            МасНазначений = Новый Массив;
            //МасНазначений.Добавить("Документ.ЗаказНаПеремещение");
            МасНазначений.Добавить("Документ.ЗаказПоставщику");
            
            ПараметрыРегистрации.Назначение = МасНазначений;
            ПараметрыРегистрации.Наименование = "Загрузка Номенклатуры из Эксель";
            ПараметрыРегистрации.БезопасныйРежим = Ложь;
            НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
            НоваяКоманда.Представление = НСтр("ru = 'Загрузка Номенклатуры из Эксель'");
            НоваяКоманда.Идентификатор = "ЗагрузкаНовыхРеквизитовНоменклатуры";
            НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
            НоваяКоманда.ПоказыватьОповещение = Истина;
            Возврат ПараметрыРегистрации;
КонецФункции
7 Прохожий
 
04.06.26
14:01
Ничего ни в какие хранилища передавать не надо. Дикари какие-то.
8 Прохожий
 
04.06.26
14:01
&НаКлиенте
Процедура ЗагрузитьДанные()    
    
    Товары = ВладелецФормы.Объект.Товары;
    Товары.Очистить();
    Для Каждого Стр из ТаблицаЗаказа Цикл
        Строчка = Товары.Добавить();
        ЗаполнитьЗначенияСвойств(Строчка, Стр,"Номенклатура,Количество");
        Строчка.Упаковка = Стр.ЕдиницаИзмерения;
        Строчка.КоличествоУпаковок = Строчка.Количество;  
        Если Строчка.Свойство("Цена") Тогда
            Строчка.Цена = Стр.Цена;
            Строчка.СтавкаНДС = ПредопределенноеЗначение("Справочник.СтавкиНДС.НДС12");
            Строчка.СуммаСНДС = Стр.Сумма;
            Строчка.СуммаНДС = Строчка.Сумма * 12 / 112;
            Строчка.Сумма = Строчка.СуммаСНДС - Строчка.СуммаНДС;  
        КонецЕсли;
        Если Строчка.Свойство("Артикул")И НЕ ЗначениеЗаполнено(Строчка.Артикул) Тогда
            Строчка.Артикул = Стр.Артикул;  
            //Строчка.Артикул = СвойствоРеквизита(Строчка.Номенклатура, "Артикул");  
        КонецЕсли;
    КонецЦикла;
    ЭтаФорма.Закрыть();
    
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьЗаказ(Команда)
    
    Если ВладелецФормы.Объект.Товары.Количество() > 0 Тогда
        ПоказатьВопрос(Новый ОписаниеОповещения("ЗаполнитьЗаказЗавершение", ЭтаФорма), "Табличная часть в документе будет очищена. Продолжить?", РежимДиалогаВопрос.ОКОтмена);
    иначе
        ЗагрузитьДанные();    
    КонецЕсли ;
    
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьЗаказЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    Ответ = РезультатВопроса;
    Если Ответ = КодВозвратаДиалога.Отмена Тогда
        Возврат;
    Иначе
        ЗагрузитьДанные();
    КонецЕсли;

КонецПроцедуры
9 Прохожий
 
04.06.26
14:02
(4) Это правильный ответ
10 Fedor-1971
 
04.06.26
14:04
(0) Если совсем не заморачиваться:
В открытой форме есть форма владелец: при создании на сервере запиши её в реквизит открытой формы (например, фрмВладелец)
Заполняешь что тебе нужно
Дальше: нов = ФрмВладелец.Объект.ТЧ.Добавить()

Не айс при большом количестве строк, но имеет место и такой вариант.
Поддерживать такое сложновато, тупо забываешь, как заполнял ТЧ
11 Прохожий
 
04.06.26
14:04
Модуль и форма из разных обработок надерганы, но смысл понятен надеюсь. Права, размещение. Все управляется стандартно. Красота.
12 Fedor-1971
 
04.06.26
14:06
(7) Попробуй передать своим способом ТаблицуЗначений и сразу станет понятно зачем хранилище
13 Прохожий
 
04.06.26
14:13
Вопрос: "Нужно грузить данные из Excel в ТЧ документа "Заказ""
Ответ: "ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта()"

Мы разный интернет читаем?
14 Прохожий
 
04.06.26
14:14
Это вообще тестовое задание у некоторых франчей если что.
15 Прохожий
 
04.06.26
14:14
А я его только что испортил...
Основная теорема систематики: Новые системы плодят новые проблемы.