![]() |
|
БП3 заполнить движения нового док ОперацияБух и показать пользователю док не записывая | ☑ | ||
---|---|---|---|---|
0
Snork
15.04.19
✎
23:37
|
БП3 заполнить движения нового док ОперацияБух и показать пользователю док не записывая
тут есть наводка: в типовой БП3 в док ОперацияБух Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) .... Если Параметры.Ключ.Пустая() Тогда ЗаполнитьДвижения(Параметры.ЗначенияЗаполнения); КонецЕсли; ... КонецПроцедуры Процедура ЗаполнитьДвижения(ЗначенияЗаполнения) Если НЕ ЗначенияЗаполнения.Свойство("Хозрасчетный") Тогда Возврат; КонецЕсли; Для Каждого СтруктураПроводки Из ЗначенияЗаполнения.Хозрасчетный Цикл НоваяПроводка = ХозрасчетныйНаборЗаписей.Добавить(); ЗаполнитьЗначенияСвойств(НоваяПроводка, СтруктураПроводки); ... КонецЦикла; КонецПроцедуры Но как передать в значения заполнения "Хозрасчетный"? Ведь ПолучитьФорму() происходит на сервере, а обработки передачи через адрес в типовой нет |
|||
1
Snork
15.04.19
✎
23:43
|
ошибся:
Ведь ПолучитьФорму() происходит на клиенте! |
|||
2
один я дАртаньян
16.04.19
✎
02:46
|
Внешняя обработка для заполнения
Реквизит обработки ОперацияБух с типом ДОкумент.ОперацияБух Модуль формы &НаСервере Процедура Распределение26(ОперацияДок) //Сообщить(ОперацияДок.Организация); Если не ЗначениеЗаполнено(ОперацияДок.Дата) Тогда Сообщить("Не заполнена ""Дата"" документа"); Возврат; КонецЕСли; Если не ЗначениеЗаполнено(ОперацияДок.Организация) Тогда Сообщить("Не заполнена ""Органиазция""."); Возврат; КонецЕСли; НаборЗаписей=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); НаборЗаписей=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Значение=ОперацияДок.Ссылка; НаборЗаписей.Отбор.Регистратор.Использование=Истина; НаборЗаписей.Прочитать(); НаборЗаписей.Очистить(); НаборЗаписей.Записать(); .... НаборЗаписей.Записать(); КонецПроцедуры &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт //Сообщить("Х2Х"); Для Каждого элмОбъектов из ОбъектыНазначенияМассив Цикл Объект.ОперацияБух = элмОбъектов; ЭтаФорма.ОткрытьМодально(); КлючПоиска = Новый Структура("Ключ", элмОбъектов); ФормаДокумента = ПолучитьФорму("Документ.ОперацияБух.Форма.ФормаДокумента", КлючПоиска); ФормаДокумента.Прочитать(); //ДанныеФормыОбъект = ФормаДокумента.Объект; // //ОстатокНаКонец = ПеренестиВДокументНаСервере(ДанныеФормыОбъект); //КопироватьДанныеФормы(ДанныеФормыОбъект, ФормаДокумента.Объект); //ФормаДокумента.ОстатокНаКонец = ОстатокНаКонец; КонецЦИкла; КонецПроцедуры &НаКлиенте Процедура ВыполнитьЗакрытие26счета(Команда) // Вставить содержимое обработчика. Распределение26(Объект.ОперацияБух); ЭтаФорма.Закрыть(); КонецПроцедуры Модуль объекта Функция СведенияОВнешнейОбработке() Экспорт Имя = ЭтотОбъект.Метаданные().Имя; Наименование = ЭтотОбъект.Метаданные().Синоним; //Сообщить("ххх"+Имя); //Сообщить("ъъъ"+Наименование); // Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные ПараметрыРегистрации = Новый Структура; // Объявим еще одну переменную, которая нам потребуется ниже МассивНазначений = Новый Массив; // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать. // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта"); // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе, // которые поддерживают механизм ВПФ МассивНазначений.Добавить("Документ.ОперацияБух"); ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок ПараметрыРегистрации.Вставить("Наименование", Наименование); // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим) ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке ПараметрыРегистрации.Вставить("Наименование", Наименование); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("Информация", Наименование); // Создадим таблицу команд (подробнее смотрим ниже) ТаблицаКоманд = ПолучитьТаблицуКоманд(); // Добавим команду в таблицу //ДобавитьКоманду(ТаблицаКоманд, Наименование, Имя, "ВызовСерверногоМетода", Истина, Имя); ДобавитьКоманду(ТаблицаКоманд, Наименование, Имя, "ВызовКлиентскогоМетода", Истина, Имя); // Сохраним таблицу команд в параметры регистрации обработки ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); // Теперь вернем системе наши параметры Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() // Создадим пустую таблицу команд и колонки в ней Команды = Новый ТаблицаЗначений; // Как будет выглядеть описание печатной формы для пользователя Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); // Тут задается, как должна вызваться команда обработки // Возможные варианты: // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); // Для печатной формы должен содержать строку ПечатьMXL Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") // Добавляем команду в таблицу команд по переданному описанию. // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры |
|||
3
catena
16.04.19
✎
05:51
|
(2)Ему же надо незаписанный док показать.
ПС: А два раза создавать набор записей - это для надежности?)) |
|||
4
Rie
16.04.19
✎
07:29
|
(0) Не понял, что именно надо.
Но в ПриСозданииНаСервере доступны Параметры - куда можно передать желаемое. |
|||
5
PaulBC
16.04.19
✎
07:45
|
(0) в ЗначенияЗаполнения.Хозрасчетный передаешь массив структур со значениями для заполнения проводки.
|
|||
6
один я дАртаньян
16.04.19
✎
08:00
|
(3) Насколько помню работает с незаписанным документом.
|
|||
7
catena
16.04.19
✎
08:06
|
(6)хм...
НаборЗаписей.Отбор.Регистратор.Значение=ОперацияДок.Ссылка; |
|||
8
Snork
16.04.19
✎
12:35
|
(7) ссылки еще нет
|
|||
9
Snork
16.04.19
✎
12:37
|
(4) (6) не клиенте нельзя получить в переменную весь этот массив структур, т.к. отсутствует отображение типов. Только на сервер.
А если передавать через временное хранилище, то типовая ОперацияБух не понимает адреса, ей подавай переменную |
|||
10
catena
16.04.19
✎
12:40
|
(8)Так а я о чем?
|
|||
11
Snork
16.04.19
✎
12:52
|
(10) вариант (2) не удачный. что его дальше обсуждать
можно ли как то передать в ПолучитьФорму / ОтркытьФорму в ЗначенияЗаполнения параметр Хозрасчетный, который заполняется только на сервере |
|||
12
Snork
16.04.19
✎
14:17
|
ап
|
|||
13
RomanYS
16.04.19
✎
14:30
|
(11) Ты форму открывал?
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды Если Параметры.Ключ.Пустая() Тогда УстановитьСостояниеДокумента("НезаписанныйДокумент"); ПодготовитьФормуНаСервере(Параметры.ЗначениеКопирования); ЗаполнитьДвижения(Параметры.ЗначенияЗаполнения);//!!! разберись что сюда можно передать доступное на клиенте КонецЕсли; |
|||
14
RomanYS
16.04.19
✎
14:32
|
Вариант 2: на форме проводки в отдельном реквизите формы(!) ХозрасчетныйНаборЗаписей. Его можно заполнять после создания/открытия формы. Проблема та же: делать это придётся на клиенте
|
|||
15
Rie
16.04.19
✎
14:35
|
(8) А зачем _в этот момент_ ссылка?
В ПриСозданииНаСервере уже доступны Движения. Вот их и заполнить - чем он там хочет их заполнить, например, из таблицы значечний. А вот когда записывать будет (если будет) - так тогда и ссылка уже будет. |
|||
16
RomanYS
16.04.19
✎
14:53
|
+(13)
(0) извини, ветку с конца читал) Ответ на (0) очевиден (хотя бы из названия переменных в коде): передавать можно массив структур. |
|||
17
Snork
17.04.19
✎
12:07
|
(16) примеры в типовой есть передачи через массив структур.?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |