Открытие управляемой формы незаписанного документа в 1С 8.2

Нередко необходимо программно создать новый документ или элемент справочника и заполнить его данными. А затем, НЕ ЗАПИСЫВАЯ его в базу данных, открыть форму для того чтобы пользователь получил возможность его отредактировать и потом сам принял решение о его записи в БД(или отказался от записи). На платформах 8.0, 8.1 (и даже 7.7) это не представляло никакой сложности, а вот в тонком клиенте управляемого приложения 8.2 эта задача уже ни кажется столь тривиальной.

Первый способ заключается в том, что необходимо заранее подготовить некую структуру, которая будет содержать данные для заполнения документа, передать эту структуру в открываемую форму, а уже в самой форме в событии ПриСозданииНаСервере() заполнять вновь открываемую форму переданными в неё данными. Этот способ не нов, но у него есть один серьезный недостаток – необходимо изменить модуль формы самого объекта, чтобы добавить/изменить событие формы ПриСозданииНаСервере(), это очень не понравится тем кто работает с типовыми конфигурациями находящимися на поддержке. Кроме того этот подход не применим во внешних обработках, что сильно сокращает потенциал его применения.

Второй способ решения этой задачи лишен вышеупомянутых недостатков:

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

&НаСервереБезКонтекста
Процедура ЗаполнитьНаСервере(НовыйОбъект);
        НовыйОбъект.Наименование = "Новый элемент";
	Для К=1 По 100 Цикл
	 	НоваяСтрока = НовыйОбъект.ТЧ.Добавить();
		НоваяСтрока.РеквизитТЧ = К;
	КонецЦикла; 
КонецПроцедуры

Если публикация показалась Вам полезной и интересной не забывайте оставлять свои отзывы и комментарии, так же Вы можете выразить свою благодарность материально.

Комментарии:

  1. Эдуард пишет:

    Как потом вызвать процедуры документ?
    НовыйОбъект.ПроцедураДокумента();

  2. Эдуард пишет:

    Надо так

    &НаКлиенте
    Процедура СоздатьДокумент(Команда)

    Форма = ПолучитьФорму(“Документ.Реализация.ФормаОбъекта”);
    ДанныеФормы = Форма.Объект;
    ЗаполнитьДокументНаСервере(ДанныеФормы);
    КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
    Форма.Открыть();

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

    &НаСервере
    Функция ЗаполнитьДокументНаСервере(ДанныеФормы);

    Док = ДанныеФормыВЗначение(ДанныеФормы, Тип(“ДокументОбъект.Реализация));

    Для каждого Стр Из ТЗ Цикл
    СтрДок = Док.Товары.Добавить();
    СтрДок.Количество = Стр.Количество;
    СтрДок.Номенклатура = Стр.Номенклатура;

    КонецЦикла;

    ЗначениеВДанныеФормы(Док,ДанныеФормы);

    КонецФункции

  3. jorelingo пишет:

    Класс!!искал часа 2 по инету как мне передать данные из первой формы во вторую. нашел. спасибо большое!!

  4. mir-mup пишет:

    Огромное спасибо! Очень помогло!

  5. concent пишет:

    Спасибо!!!

  6. АннаПам пишет:

    Спасибо, помогло.

  7. Ярик пишет:

    А у меня на клиенте нету Форма.Объект…

  8. Андрей пишет:

    Все отлично работает!
    В моем случае только пришлось изменить режим работы функции на &НаСервере.
    СпасиБО!

  9. Алексей пишет:

    Спасибо, действительно помогло, искал долго :)

  10. Егор пишет:

    Спасибо, помогло.

  11. Kamil пишет:

    Спасибо огромное!!!

  12. Kooaei пишет:

    Откуда вы берёте Форма.Объект?
    Говорит нет такого

    1. Kooaei пишет:

      Разобрался – в моём конкретном случае было что у меня доставалась обычная форма, а ни управляемая.

      ПолучитьФорму(“Документ.Реализация.Форма.ФормаУправляемая”)

      Вот так заработало.

  13. kuz пишет:

    Спасибо огромное автору статьи – именно то, что нужно! И ничего лишнего.

  14. capitannemo пишет:

    Не работает с табличной частью дополнительные реквизиты.

  15. Юлия пишет:

    Спасибо. Вам и Эдуарду. Очень полезная информация. Очень.

  16. Алексей пишет:

    Спасибо тебе огромное, автор этой статьи, я уже три рабочих дня бьюсь над проблемой, которая на обычных формах делалась одной строчкой кода. В тонком клиенте нет типа “Таблица значений”, следовательно его в структуру не поместишь. Поэтому первым способом документ создается без табличной части. Если решить через служебный реквизит формы с видом ТаблицаЗначений и передать его в структуру, то передается тип “Коллекция реквизитов формы” и приходится менять модуль типового документа, а этого я делать категорически не хочу. Остается только второй способ описанный в это статье. Еще раз спасибо.

  17. Aleksandrs пишет:

    Спасибо автору!

  18. Phace пишет:

    СПАСИБИЩЕ!!!

Оставить комментарий