|
Создать объект документа и открыть его форму 8.2 | ☑ | ||
---|---|---|---|---|
0
riv40rus
04.03.10
✎
12:33
|
Создан объект документа, документ не записан. Как открыть его форму ?
|
|||
1
Stepa86
04.03.10
✎
12:42
|
Как создать документ и открыть его форму?
В 1С Предприятии 8.2 для этих целей существует два возможных сценария работы: открыть форму нового документа и предоставить пользователю самому интерактивно записать данные объекта в базу данных. создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю. В первом сценарии проще всего использовать метод глобального контекста ОткрытьФорму(). Это можно сделать на клиенте. ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта"); При этом создается новый документ и открывается для редактирования основная форма этого документа. Если нужно какое-то предварительное заполнение документа начальными данными, то это можно сделать либо с помощью свойств реквизитов документа ЗначениеЗаполнения, ЗаполнятьИзДанныхЗаполнения либо в обработчике события документа ОбработкаЗаполнения. Подробнее об этом событии можно посмотреть в вопросе Как при открытии формы определить, что создается новый элемент?. Во втором случае можно программно создать документ на сервере, заполнить данными, если это нужно в обработчике события ОбработкаЗаполнения, записать, и передать ссылку на новый документ в метод глобального контекста ОткрытьЗначение(), который откроет форму этого документа. Например: &НаКлиенте Процедура ПриходнаяНакладная(Команда) СсылкаНаДокумент = СоздатьНовыйДокумент(); ОткрытьЗначение(СсылкаНаДокумент); КонецПроцедуры &НаСервере Функция СоздатьНовыйДокумент() НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент(); НовыйДокумент.Номер = "111"; НовыйДокумент.Дата = ТекущаяДата(); НовыйДокумент.Записать(); Возврат НовыйДокумент.Ссылка; КонецФункции Подробнее об использовании методов ОткрытьЗначение() и ОткрытьФорму() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции для интерактивной работы. http://v8.1c.ru/metod/faq/answer.jsp?id=101 |
|||
2
riv40rus
04.03.10
✎
12:50
|
Stepa86 конечно все это хорошо. Но как без записи в базу, ссылки на документ нет, а имеется только созданный объект на сервере. Это нужно для того чтобы реализовать нестандартный ввод на основании.
|
|||
3
Stepa86
04.03.10
✎
12:52
|
>> Если нужно какое-то предварительное заполнение документа начальными данными, то это можно сделать либо с помощью свойств реквизитов документа ЗначениеЗаполнения, ЗаполнятьИзДанныхЗаполнения либо в обработчике события документа ОбработкаЗаполнения. Подробнее об этом событии можно посмотреть в вопросе Как при открытии формы определить, что создается новый элемент?.
|
|||
4
Ненавижу 1С
гуру
04.03.10
✎
12:57
|
Складывается впечатление, что программировать станет несколько сложнее
|
|||
5
Stepa86
04.03.10
✎
12:59
|
(4) программировать придется правильнее... мы не создаем объект и наполняем его свойствами, а вызываем конструктор
|
|||
6
Ненавижу 1С
гуру
04.03.10
✎
13:07
|
(5) у тебя в "конструкторе" документ записывается уже
|
|||
7
riv40rus
04.03.10
✎
13:09
|
Тогда как вызвать обработку заполнения другого документа и передать параметр ДанныеЗаполнения?
|
|||
8
Stepa86
04.03.10
✎
13:13
|
(6) я про обработку заполнения, документ не записывается
|
|||
9
riv40rus
04.03.10
✎
13:13
|
&НаСервере
Процедура СоздатьДокументПеремещениеТоваров(ОбъектФормы, ДанныеЗаполнения) Объект = ДанныеФормыВЗначение(ОбъектФормы, Тип("ДокументОбъект.ПеремещениеТоваров"); ЗаполнитьЗначенияСвойств(Объект, ДанныеЗаполнения); Объект.Ответственный = ПараметрыСеанса.ТекущийПользователь; Объект.ПодразделениеОтправитель = ДанныеЗаполнения.Подразделение; Для Каждого ТекПродукт Из ДанныеЗаполнения.Товары Цикл НоваяСтрока = Объект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекПродукт,,"Цена, Сумма"); НоваяСтрока.Цена = ТекПродукт.ЦенаСНаценкой; НоваяСтрока.Сумма = ТекПродукт.СуммаСНаценкой; КонецЦикла; ЗначениеВДанныеФормы(Объект, ОбъектФормы); КонецПроцедуры &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ФормаНовогоДокумента = ПолучитьФорму("Документ.ПеремещениеТоваров.Форма.ФормаДокумента"); СоздатьДокументПеремещениеТоваров(ФормаНовогоДокумента.Объект, ПараметрКоманды); ФормаНовогоДокумента.Открыть(); КонецПроцедуры Алгоритм не прокатил. Вылетает ошибка "Нельзя изменять поле, содержащее объект данных формы". |
|||
10
riv40rus
04.03.10
✎
13:16
|
Какие мысли еще будут?
|
|||
11
Stepa86
04.03.10
✎
13:24
|
Пример из УТ11:
|
|||
12
Stepa86
04.03.10
✎
13:24
|
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Документ.УстановкаЦенНоменклатурыПартнера.Форма.ФормаДокумента", Новый Структура("Основание",ПараметрКоманды), , , ); КонецПроцедуры |
|||
13
Stepa86
04.03.10
✎
13:26
|
http://screencast.com/t/YjdhNmEyY2Q
// Процедура - обработчик события "ОбработкаЗаполнения". // Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения); Если ТипДанныхЗаполнения = Тип("Структура") Тогда ЗаполнитьДокументПоОтбору(ДанныеЗаполнения); ИначеЕсли ТипДанныхЗаполнения = Тип("СправочникСсылка.Партнеры") Тогда ЗаполнитьДокументНаОснованииПартнера(ДанныеЗаполнения); КонецЕсли; ИнициализироватьДокумент(); КонецПроцедуры // ОбработкаЗаполнения() |
|||
14
Mort
04.03.10
✎
13:35
|
Автор предполагает порядок действий неприемлемый для клиент-серверного сценария.
|
|||
15
Mort
04.03.10
✎
13:36
|
Объект создается на сервере. Зачем ему там форма?
|
|||
16
Mort
04.03.10
✎
13:37
|
А если предполагалось получать форму на клиенте, зачем создавать объект на сервере?
|
|||
17
riv40rus
04.03.10
✎
13:41
|
Stepa86 спасибо.
|
|||
18
riv40rus
04.03.10
✎
13:51
|
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Документ.УстановкаЦенНоменклатурыПартнера.Форма.ФормаДокумента", Новый Структура("Основание",ПараметрКоманды), , , ); КонецПроцедуры Не прокатывает. В документе вызывается ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка), а данные заполнения пустые. |
|||
19
Mort
04.03.10
✎
13:54
|
(18) А ты в ПараметрКоманды что пихаешь?
|
|||
20
riv40rus
04.03.10
✎
13:55
|
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.ФормаДокумента", Новый Структура("Основание, ВидОперацииЗаполнения",ПараметрКоманды, "Продукция")); КонецПроцедуры |
|||
21
riv40rus
04.03.10
✎
13:55
|
ПараметрКоманды имеет тип ДокументСсылка
|
|||
22
Asmody
04.03.10
✎
14:00
|
&НаКлиенте
Процедура Команда1(Команда) Форма=ПолучитьФорму("Справочник.Справочник1.ФормаОбъекта"); Форма.Объект.Наименование="Создано обработкой"; Форма.Объект.Реквизит1="Реквизит1"; Форма.Объект.Реквизит2="Реквизит2"; НоваяСтрока=Форма.Объект.ТабличнаяЧасть1.Добавить(); НоваяСтрока.Реквизит1=10; НоваяСтрока.Реквизит2=20; ОткрытьФорму(Форма); КонецПроцедуры |
|||
23
riv40rus
04.03.10
✎
14:06
|
Asmody читай выше, форма создается по данным объекта. На клиенте данные объекта не доступны.
|
|||
24
riv40rus
04.03.10
✎
14:06
|
ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.ФормаДокумента",
Новый Структура("Основание", Новый Структура("Основание, ВидОперацииЗаполнения", ПараметрКоманды, "Продукция"))); |
|||
25
riv40rus
04.03.10
✎
14:07
|
Всем спасибо! Разобрался.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |