Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Внешняя обработка для заполнения объектов в УФ

Внешняя обработка для заполнения объектов в УФ
Я
   Alexey vip
 
05.01.13 - 21:15
Требуется заполнить ТЧ документа с помощью подключенной внешней обработки в бп 3.0.
Пишу код:

модуль обработки:
Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.ТребованиеНакладная");

    ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Заполнить по спецификации номенклатуры");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка табличной части к документу Требование-Накладная");

    ТаблицаКоманд = Получить*Таб*лиц*уКоманд();

    ДобавитьКоманду(ТаблицаКоманд,
    "Заполнить по спецификации",
    "Заполнить документ",
    "ВызовКлиентскогоМетода",
    Истина);

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;
КонецФункции

Функция Получ*итьТа*блиц*уКоманд()
  Команды = Новый ТаблицаЗначений;
  Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
  Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
  Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
  Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

все стандартно, всё ок.

модуль формы обработки:


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

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

&НаСервере
Функция ЗаполнитьОбъект(НовыйОбъект, СпецификацияНоменклатуры)
    Если ТипЗнч(НовыйОбъект.Ссылка) = Тип("ДокументСсылка.ТребованиеНакладная") Тогда
        Для каждого СтрокаТЧ из СпецификацияНоменклатуры.ИсходныеКомплектующие Цикл
            НоваяСтрока = НовыйОбъект.Материалы.Добавить();
            НоваяСтрока.Номенклатура = СтрокаТЧ.Номенклатура;
            НоваяСтрока.Количество = СтрокаТЧ.Количество;
            
            СчетаУчета = БухгалтерскийУчетПереопределяемый.ПолучитьСчетаУчетаНоменклатуры(НовыйОбъект.Организация, СтрокаТЧ.Номенклатура, НовыйОбъект.Склад);
            НоваяСтрока.Счет = СчетаУчета.СчетУчета;
        КонецЦикла;
    КонецЕсли;
КонецФункции

теперь собственно проблема. Когда доходит до вопроса, то я вижу, что ТЧ заполнилась, но как только обработка закончит свое выполнение, всё сбрасывается.

Кто подскажет, почему так?

Может вообще по другому нужно как-то подключать?
 
 
   Alexey vip
 
1 - 05.01.13 - 21:15
звездочки поставил, так как там какой-то фильтр сработал.
   Alexey vip
 
2 - 07.01.13 - 14:30
Если кому-то интересно то вот ответ
http://forum.infostart.ru/forum26/topic74015/
   banco
 
3 - 07.01.13 - 15:45
жди БСП  2.1.3    Возможность разрабатывать дополнительные обработки по заполнению объектов, которые не требуют записи объектов в информационную базу. После выполнения такой обработки результат ее работы сразу виден в форме объекта.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует