|   |   | 
| 
 | БП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) примеры в типовой есть передачи через массив структур.?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |