Имя: Пароль:
1C
1С v8
Управляемые формы: Как изменить документ с помощью подключенной внеш. обработки?
0 Saari
 
06.04.16
09:13
Подскажите, пожалуйста, начинающему разбираться в управляемых формах.
Требуется: в БУХ 3.0 в документе "Списание материалов из эксплуатации" заполнить ТЧ "Спецодежда" по указанному МОЛ.

Сделал следующее: создал внешнюю обработку, которую подключил к документу (через "Администрирование"-"Дополнительные отчеты и обработки"). В документе появилась кнопка "Заполнить", которая вызывает подключенную обработку.

В результате на форме табличная часть изменяется. Но после закрытия/открытия документа табличная часть остается старой (до изменения).

Как передать изменения в объект базы данных?

Описание внешней обработки:
Во внешнюю обработку добавил:
- реквизит "ДокументСписание" с типом "(ДокументОбъект.СписаниеМатериаловИзЭксплуатации)";
- кнопка "Заполнить ТЧ"

Модуль формы внешней обработки:

&НаСервере
Процедура ЗаполнениеДанных()
    
Об = ДанныеФормыВЗначение(ДокументСписание, Тип("ДокументОбъект.СписаниеМатериаловИзЭксплуатации"));
    
Об.Спецодежда.Очистить();
        
ЗначениеВДанныеФормы(Об, ДокументСписание);

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

&НаКлиенте
Процедура КомандаЗаполнитьТЧ(Команда) //вызывается по нажатии на кнопку формы обработки
    
КопироватьДанныеФормы(ВладелецФормы.Объект, ДокументСписание);
ЗаполнениеДанных();
КопироватьДанныеФормы(ДокументСписание, ВладелецФормы.Объект);

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

Покажите, пожалуйста, ошибку в коде и как написать правильно?
1 Defender aka LINN
 
06.04.16
09:24
Чтобы изменения записались, их надо таки записывать.
2 Cyberhawk
 
06.04.16
09:32
Модифицированность у формы не взводишь.
А вообще, если тебе без интерактива надо менять объект, тоиспользуй тип команды "ЗаполнениеФормы"
3 Saari
 
06.04.16
11:48
(2) подскажи, пожалуйста, как именно обратиться к форме документа чтобы установить Модифицированность = Истина?
4 Saari
 
06.04.16
12:16
подскажите, пожалуйста.
5 Cyberhawk
 
06.04.16
12:17
(3) Модуль обработки покажи
6 Fragster
 
гуру
06.04.16
12:18
ВладелецФормы.Модифицированность = Истина;
7 Saari
 
06.04.16
12:22
(5)
Модуль обработки:

Функция ПТКоманд()

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


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

Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.СписаниеМатериаловИзЭксплуатации");
    
    ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("Наименование", "Заполнить Аванс "+ПараметрыРегистрации.Версия);
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная обработка табличной части к документу СписаниеМатериаловИзЭксплуатации");
    
    ТаблицаКоманд = ПТКоманд();
    
    ДобавитьКоманду(ТаблицаКоманд,
    "Заполнить ТЧ "+ПараметрыРегистрации.Версия,
    "Заполнить ТЧ "+ПараметрыРегистрации.Версия,
    "ОткрытиеФормы",
    Истина);
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
КонецФункции
8 Saari
 
06.04.16
12:28
(6) сделал так:
Процедура КомандаЗаполнитьТЧ(Команда)
    
    КопироватьДанныеФормы(ВладелецФормы.Объект, ДокументСписание);
    ЗаполнениеДанных();
    КопироватьДанныеФормы(ДокументСписание, ВладелецФормы.Объект);
    ВладелецФормы.Модифицированность = Истина;
        ЭтаФорма.Закрыть();

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

теперь вызываемая внешняя обработка закрывается, в документе, из которого она открывается, ТЧ изменена и документ стал измененным, т.е. при закрытии его выдается запрос на записать изменения.
Я так понял, что все получилось :)
Спасибо!
9 Cyberhawk
 
06.04.16
12:34
(8) Можно и так.
Но все-таки тебе открытие своей формы-то и не нужно, судя по коду (пользователь ничего не делает в промежутке между вызовом команды и получением результата заполнения), поэтому на будущее рекомендую делать как во втором предложении (2)
10 Saari
 
06.04.16
13:20
(9) в условии обработки необходимо выбирать МОЛ. Просто я в коде еще его не обрабатывал. Хотел попробовать в принципе менять данные ТЧ. Получилось.
Спасибо вам всем!
11 Saari
 
06.04.16
13:34
Еще один интересный вопрос возник:
при подключении внешней обработки на форме документа появляется кнопка "Заполнить".

На форме документа есть несколько табличных частей, причем у каждой ТЧ на форме есть своя кнопка "Заполнить" с ниспадающим меню действий.

Как встроить внешнюю обработку в конкретную кнопку "Заполнить" в конкретной табличной части?

В простых формах 8.2 это делалось легко. А как это сделать в управляемых формах?
12 Cyberhawk
 
06.04.16
13:39
Никак - в разных версиях БСП расположение этого меню меняется (где-то у каждой ТЧ, где-то - в шапке формы).
13 Cyberhawk
 
06.04.16
13:40
(штатно никак - только смотреть на код заполнения этого меню и доработать форму по аналогии)
14 Saari
 
06.04.16
14:00
Как сделать несколько пунктов в ниспадающем меню из общей кнопки "Заполнить" (которая появилась при подключении внешней обработки) на форме документа?

Во! Проще в одной форме обработки сделать несколько кнопок, которые будут обрабатывать ту или иную ТЧ.

А все же, как сделать несколько пунктов в ниспадающем меню одной кнопки?
15 Cyberhawk
 
06.04.16
19:43
"как сделать несколько пунктов в ниспадающем меню одной кнопки?" // Добавить несколько команд у обработки