Вход | Регистрация
 
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 или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.