Имя: Пароль:
1C
1С v8
БП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) примеры в типовой есть передачи через массив структур.?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс