Имя: Пароль:
1C
1С v8
Передать ТабДок из общего модуля серверного на клиента
0 cons74
 
10.02.16
09:00
Гуглем не нашел.
Обычные формы.
В форме справочника после записи получается отчет по изменениям и отправляется рассылка:
в привилегированном модуле с галкой сервер получаю ТабДок (результат отчета). Далее его надо передать на клиента (вернуть в форму) чтобы передать в общий модуль рассылки.

Ну и получаю ошибку - нельзя передать мутабельное с сервера на клиента.
1 Ma3eIIa
 
10.02.16
09:01
код покажи
2 Ma3eIIa
 
10.02.16
09:02
(0) что ты не договариваешь.
Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Сериализуется.
3 ДенисЧ
 
10.02.16
09:02
у тебя, видать, в расшифровках ересь какая-то лежит
4 cons74
 
10.02.16
09:03

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

//в общем модуле

Процедура ПолучитьОтчетПоИзменениямПоВерсиямОбъектов(Ссылка, ТабДок) Экспорт
    
    НомерТекВерсии = ВерсионированиеОбъектовПривилегированный.ПолучитьКоличествоВерсийОбъекта(Ссылка);
    
    СписокВерсий = новый СписокЗначений;
    СписокВерсий.Добавить(НомерТекВерсии);
    Если НомерТекВерсии >1 Тогда
        СписокВерсий.Добавить(НомерТекВерсии-1);
    КонецЕсли;

    ОтчетОбъект = Отчеты.ИсторияИзмененийОбъектов.Создать();
    ОтчетОбъект.СсылкаНаОбъект = Ссылка;

    //ТабДок = новый ТабличныйДокумент;
    //лФорма = ОтчетОбъект.ПолучитьФорму("ФормаОтчета");
    //ОтчетОбъект.СформироватьОтчет(лФорма.ЭлементыФормы.ТЧОтчета, СписокВерсий);
    ОтчетОбъект.СформироватьОтчет(ТабДок, СписокВерсий);

    //ТабДок.Вывести(лФорма.ЭлементыФормы.ТЧОтчета);
    //Возврат ТабДок;
    
КонецПроцедуры
5 Ma3eIIa
 
10.02.16
09:04
Справочники.итКонстанты.ПолучателиРассылкиПоИзменениямВодителей.Значения

Это что ?
6 cons74
 
10.02.16
09:06
(4) Возврат ТабДок; должен быть раскомментирован
7 Ma3eIIa
 
10.02.16
09:07
Далее его надо передать на клиента (вернуть в форму) чтобы передать в общий модуль рассылки.

Зачем передавать на клиент ? рассылка должна быть на сервере. после записи. передаешь на рассылку и все.

У тебя же процедура и параметр табдок. какой возврат :)
8 Ma3eIIa
 
10.02.16
09:08
Посмотри отладчким. где у тебя мутабельное значение
9 Ma3eIIa
 
10.02.16
09:10
тут 1 параметр ты передаешь.
а в процедуре 2.
итПолныеПрава.ПолучитьОтчетПоИзменениямПоВерсиямОбъектов(Ссылка);

ПолучитьОтчетПоИзменениямПоВерсиямОбъектов(Ссылка, ТабДок) Экспорт
10 Ma3eIIa
 
10.02.16
09:11
Сделай подписку на событие после записи. в модуле поставь сервер. у тебя будет источник. это твой объект. и там пропиши. получение и отправку таб дока на почту. все
11 cons74
 
10.02.16
09:12
поправил

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

Функция ПолучитьОтчетПоИзменениямПоВерсиямОбъектов(Ссылка) Экспорт
    
    НомерТекВерсии = ВерсионированиеОбъектовПривилегированный.ПолучитьКоличествоВерсийОбъекта(Ссылка);
    
    СписокВерсий = новый СписокЗначений;
    СписокВерсий.Добавить(НомерТекВерсии);
    Если НомерТекВерсии >1 Тогда
        СписокВерсий.Добавить(НомерТекВерсии-1);
    КонецЕсли;

    ОтчетОбъект = Отчеты.ИсторияИзмененийОбъектов.Создать();
    ОтчетОбъект.СсылкаНаОбъект = Ссылка;

    ТабДок = новый ТабличныйДокумент;
    ОтчетОбъект.СформироватьОтчет(ТабДок, СписокВерсий);

    Возврат ТабДок;
    
КонецФункции
12 cons74
 
10.02.16
09:12
(10)  
"Сделай подписку на событие после записи" такой не существет
13 cons74
 
10.02.16
09:13
{Справочник.кзВодители.Форма.ФормаЭлемента.Форма(109)}: Ошибка при вызове метода контекста (ПолучитьОтчетПоИзменениямПоВерсиямОбъектов)
        ТабДок = итПолныеПрава.ПолучитьОтчетПоИзменениямПоВерсиямОбъектов(Ссылка);
по причине:
Попытка передачи мутабельного значения результата метода ПолучитьОтчетПоИзменениямПоВерсиямОбъектов ().
14 Ma3eIIa
 
10.02.16
09:16
(12) при записи.
(13) можно так

КлючУникальности = Новый УникальныйИдентификатор;
Адрес=ПоместитьВоВременноеХранилище(ТабличныйДокумент,КлючУникальности);


На Сервере
ТабДок = ПолучитьИзВременногоХранилища(Адрес);
15 cons74
 
10.02.16
09:18
(14) при записи не хочется: вдруг транзакция откатится, а рассылка уже ушла?
16 Ma3eIIa
 
10.02.16
09:23
(15) ну так проверку. если объект действительно записан. через допольнительные сведенья. где ты можешь сравнить до записи и после ее
17 cons74
 
10.02.16
09:54
Ну т.е. ошибки в моем коде (11) вроде как нет? Считаем косяком платформы?
18 Ma3eIIa
 
10.02.16
10:50
(17) при чем тут. смотри что у тебя помещается в таб док. если поле расшифоровки. (3)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс