helpf.pro
Регистрация
 0 
Распечатать

1С 8.2 УП : Открытие формы не записанного документа

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

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

Второй способ решения этой задачи лишен вышеупомянутых недостатков:
Код 1C v 8.2 УП
  &НаКлиенте
Процедура КомандаОткрытьФорму(Команда)
Форма = ПолучитьФорму("Справочник.Пользователи.ФормаОбъекта");
ДанныеФормы = Форма.Объект;
ЗаполнитьНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Открыть();
КонецПроцедуры

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

Источник: [url=obrabotki.com]http://www.obrabotki.com/1s-openform-managedforms/[/url]

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


&НаСервере
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип(“ДокументОбъект.Реализация));
Для каждого Стр Из ТЗ Цикл
СтрДок = Док.Товары.Добавить();
СтрДок.Количество = Стр.Количество;
СтрДок.Номенклатура = Стр.Номенклатура;
КонецЦикла;
ЗначениеВДанныеФормы(Док,ДанныеФормы);
КонецФункции
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 25872
 0 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 52
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.