Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

БП3 заполнить движения нового док ОперацияБух и показать пользователю док не записывая

БП3 заполнить движения нового док ОперацияБух и показать пользователю док не записывая
Я
   Snork
 
15.04.19 - 23:37
БП3 заполнить движения нового док ОперацияБух и показать пользователю док не записывая

тут есть наводка:
в типовой БП3 в док ОперацияБух

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
....    
    Если Параметры.Ключ.Пустая() Тогда
        ЗаполнитьДвижения(Параметры.ЗначенияЗаполнения);
    КонецЕсли;
...
КонецПроцедуры


Процедура ЗаполнитьДвижения(ЗначенияЗаполнения)
    Если НЕ ЗначенияЗаполнения.Свойство("Хозрасчетный") Тогда
        Возврат;
    КонецЕсли;
    
    Для Каждого СтруктураПроводки Из ЗначенияЗаполнения.Хозрасчетный Цикл
        НоваяПроводка = ХозрасчетныйНаборЗаписей.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяПроводка, СтруктураПроводки);
        ...
    КонецЦикла;
КонецПроцедуры

Но как передать в значения заполнения "Хозрасчетный"? Ведь ПолучитьФорму() происходит на сервере, а обработки передачи через адрес в типовой нет
 
 
   Snork
 
1 - 15.04.19 - 23:43
ошибся:
Ведь ПолучитьФорму() происходит на клиенте!
   один я дАртаньян
 
2 - 16.04.19 - 02:46
Внешняя обработка для заполнения

Реквизит обработки
ОперацияБух с типом ДОкумент.ОперацияБух

Модуль формы

&НаСервере
Процедура Распределение26(ОперацияДок)
    
    //Сообщить(ОперацияДок.Организация);

    Если не  ЗначениеЗаполнено(ОперацияДок.Дата) Тогда
        Сообщить("Не заполнена ""Дата"" документа");
        Возврат;
    КонецЕСли;
    
    Если не ЗначениеЗаполнено(ОперацияДок.Организация) Тогда
        Сообщить("Не заполнена ""Органиазция"".");
        Возврат;
    КонецЕСли;
    
    
            НаборЗаписей=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        
    
            НаборЗаписей=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        
        НаборЗаписей.Отбор.Регистратор.Значение=ОперацияДок.Ссылка;
        НаборЗаписей.Отбор.Регистратор.Использование=Истина;
        НаборЗаписей.Прочитать();
        НаборЗаписей.Очистить();
НаборЗаписей.Записать();

        ....
             НаборЗаписей.Записать();

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


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    //Сообщить("Х2Х");

    
    Для Каждого элмОбъектов из ОбъектыНазначенияМассив Цикл
        Объект.ОперацияБух = элмОбъектов;
        
        ЭтаФорма.ОткрытьМодально();
        
        
        
        КлючПоиска = Новый Структура("Ключ", элмОбъектов);
        ФормаДокумента = ПолучитьФорму("Документ.ОперацияБух.Форма.ФормаДокумента", КлючПоиска); 
        ФормаДокумента.Прочитать();
        
        
        //ДанныеФормыОбъект = ФормаДокумента.Объект;

        //

        //ОстатокНаКонец = ПеренестиВДокументНаСервере(ДанныеФормыОбъект);

        //КопироватьДанныеФормы(ДанныеФормыОбъект, ФормаДокумента.Объект);

        //ФормаДокумента.ОстатокНаКонец =  ОстатокНаКонец;

    КонецЦИкла;
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗакрытие26счета(Команда)
    // Вставить содержимое обработчика.

    Распределение26(Объект.ОперацияБух);
ЭтаФорма.Закрыть();
КонецПроцедуры

Модуль объекта


Функция СведенияОВнешнейОбработке() Экспорт
    
    Имя  = ЭтотОбъект.Метаданные().Имя;
    Наименование = ЭтотОбъект.Метаданные().Синоним;
//Сообщить("ххх"+Имя);

//Сообщить("ъъъ"+Наименование);
    
    // Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные

    ПараметрыРегистрации = Новый Структура;

    // Объявим еще одну переменную, которая нам потребуется ниже

    МассивНазначений = Новый Массив;
    
    // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать. 

    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов

    ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");

    // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ

    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе, 

    // которые поддерживают механизм ВПФ

    МассивНазначений.Добавить("Документ.ОперацияБух");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок

    ПараметрыРегистрации.Вставить("Наименование", Наименование);
    
    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)

    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);

    // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке

    ПараметрыРегистрации.Вставить("Наименование", Наименование);
    ПараметрыРегистрации.Вставить("Версия", "1.0");    
    ПараметрыРегистрации.Вставить("Информация", Наименование);
    
    // Создадим таблицу команд (подробнее смотрим ниже)

    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    // Добавим команду в таблицу

    //ДобавитьКоманду(ТаблицаКоманд, Наименование, Имя, "ВызовСерверногоМетода", Истина, Имя);

    ДобавитьКоманду(ТаблицаКоманд, Наименование, Имя, "ВызовКлиентскогоМетода", Истина, Имя);
                                                                                      
    // Сохраним таблицу команд в параметры регистрации обработки

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    // Теперь вернем системе наши параметры

    Возврат ПараметрыРегистрации;
    
КонецФункции

Функция ПолучитьТаблицуКоманд()

  // Создадим пустую таблицу команд и колонки в ней

   Команды = Новый ТаблицаЗначений;

  // Как будет выглядеть описание печатной формы для пользователя

   Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); 

  // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати

   Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

  // Тут задается, как должна вызваться команда обработки

  // Возможные варианты:

  // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система

  // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки

  // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки

   Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

  // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы

   Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

  // Для печатной формы должен содержать строку ПечатьMXL 

   Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
   Возврат Команды;
   
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    
  // Добавляем команду в таблицу команд по переданному описанию.

  // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд

  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры
   catena
 
3 - 16.04.19 - 05:51
(2)Ему же надо незаписанный док показать.
ПС: А два раза создавать набор записей - это для надежности?))
   Rie
 
4 - 16.04.19 - 07:29
(0) Не понял, что именно надо.
Но в ПриСозданииНаСервере доступны Параметры - куда можно передать желаемое.
   PaulBC
 
5 - 16.04.19 - 07:45
(0) в ЗначенияЗаполнения.Хозрасчетный передаешь массив структур со значениями для заполнения проводки.
   один я дАртаньян
 
6 - 16.04.19 - 08:00
(3) Насколько помню работает с незаписанным документом.
   catena
 
7 - 16.04.19 - 08:06
(6)хм...
        НаборЗаписей.Отбор.Регистратор.Значение=ОперацияДок.Ссылка;
   Snork
 
8 - 16.04.19 - 12:35
(7) ссылки еще нет
   Snork
 
9 - 16.04.19 - 12:37
(4) (6) не клиенте нельзя получить в переменную весь этот массив структур, т.к. отсутствует отображение типов. Только на сервер.
А если передавать через временное хранилище, то типовая ОперацияБух не понимает адреса, ей подавай переменную
   catena
 
10 - 16.04.19 - 12:40
(8)Так а я о чем?
 
 Рекламное место пустует
   Snork
 
11 - 16.04.19 - 12:52
(10) вариант (2) не удачный. что его дальше обсуждать

можно ли как то передать в ПолучитьФорму / ОтркытьФорму в ЗначенияЗаполнения параметр Хозрасчетный, который заполняется только на сервере
   Snork
 
12 - 16.04.19 - 14:17
ап
   RomanYS
 
13 - 16.04.19 - 14:30
(11) Ты форму открывал?

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // СтандартныеПодсистемы.ПодключаемыеКоманды

    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды

    
    
    Если Параметры.Ключ.Пустая() Тогда
        УстановитьСостояниеДокумента("НезаписанныйДокумент");
        ПодготовитьФормуНаСервере(Параметры.ЗначениеКопирования);
        ЗаполнитьДвижения(Параметры.ЗначенияЗаполнения)//!!! разберись что сюда можно передать доступное на клиенте

    КонецЕсли;
   RomanYS
 
14 - 16.04.19 - 14:32
Вариант 2: на форме проводки в отдельном реквизите формы(!) ХозрасчетныйНаборЗаписей. Его можно заполнять после создания/открытия формы. Проблема та же: делать это придётся на клиенте
   Rie
 
15 - 16.04.19 - 14:35
(8) А зачем _в этот момент_ ссылка?
В ПриСозданииНаСервере уже доступны Движения.
Вот их и заполнить - чем он там хочет их заполнить, например, из таблицы значечний.
А вот когда записывать будет (если будет) - так тогда и ссылка уже будет.
   RomanYS
 
16 - 16.04.19 - 14:53
+(13)
(0) извини, ветку с конца читал)
Ответ на (0) очевиден (хотя бы из названия переменных в коде): передавать можно массив структур.
   Snork
 
17 - 17.04.19 - 12:07
(16) примеры в типовой есть передачи через массив структур.?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует