Имя: Пароль:
1C
1С v8
как провести документ в привилегированом режиме?
0 vde69
 
14.10.14
12:13
обычные формы, нужно по кнопке на форме провести документ в привелегированом режиме, наверняка кто-то уже реализовывал?

подскажите куда копать...
1 IШаман
 
14.10.14
12:14
(0) Все процедуры проведения в привелегерованный модуль:) ну или только их часть.
2 Maxus43
 
14.10.14
12:15
по кнопке вызывай процедуру в привелигированном модуле, в которой будет перепроведение документа
3 Ненавижу 1С
 
гуру
14.10.14
12:16
а если...
на клиенте тупо записать, а потом вызвать привелигированный модуль и передать туда ссылку и там провести, а?
4 Maxus43
 
14.10.14
12:16
это в клиент сервере с модулем, в других вариантах проще, установитьпривелигированныйрежим...
5 vde69
 
14.10.14
12:16
форма - форма объекта...

на сервер нельзя передать обьект, мутабельность однако...
6 IШаман
 
14.10.14
12:17
(3) А что значит сначала записать, а потом провести?
7 Ненавижу 1С
 
гуру
14.10.14
12:17
(5) я же попросил передать ссылку в (3)
8 Maxus43
 
14.10.14
12:17
(6) объект на сервер не передать, он мутабелен, надо тока ссылку. А чтоб не потерялись изменения - надо записать
9 Ненавижу 1С
 
гуру
14.10.14
12:18
(6) сначала на клиенте запись (без режима проведения)
потом в привелигированном режиме на сервере получаем по ссылке объект и проводим
10 IШаман
 
14.10.14
12:18
(5) Передавай параметры.
11 vde69
 
14.10.14
12:19
(6) создать движения...

тут вопрос как запретить записывать движения при интерактивном проведении и перехватить это для передачи на сервер, да и вопрос транзакции будет
12 IШаман
 
14.10.14
12:19
(9) Ну если проблема не в записи, то вполне норм решение - самое то для ленивых:)
13 Ненавижу 1С
 
гуру
14.10.14
12:20
(11) так запретить или привелигированный?
14 Maxus43
 
14.10.14
12:21
и это, Объект - сериализуется, можно во временное хранилище запихать, передать на сервер
15 IШаман
 
14.10.14
12:22
(14) Тоже неплохо. Вообще пока ТС не скажет в чем проблема варианты решения можно давать один круче другого.
16 Maxus43
 
14.10.14
12:26
с транзакцие проблем не вижу вроде, будет в рамках идти, в обработке проведения надо толклько Возрат ставить, если это интерактивное, чтоб Отказа не было
17 DrZombi
 
гуру
14.10.14
12:28
(0) Привилегированный режим возможен только на сервере :)
18 DrZombi
 
гуру
14.10.14
12:29
+ В тонком клиенте это команды &НаСервере и через ПолучитьОбъект() проводишь в обход диалога :)
19 DrZombi
 
гуру
14.10.14
12:29
+ В толстом лучше всего для этого организовать Общий модуль :)
20 vde69
 
14.10.14
13:33
давайте по порядку...

задача:
есть документ который должен делать движения по регистру на который у пользователя стоит рельса "гда ложь"

что есть сейчас:
1. стоит запрет на интерактивное проведение, переопределена кнопка "ОК", по ней происходит или перепроведение или запись + старт БП, после окончания БП документ может проводится.
2. проведение реализовано в отдельных модулях менеджерах, что позволяет формировать движения по ссылке
3. у НЕ проведенного документа могут быть движения (например регистр СтатусыДокументов)
21 vde69
 
14.10.14
13:35
модуль документа:

//-------------------------------

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

    Перем Заголовок, СтруктураШапкиДокумента, ТаблицыДвижений;
    
    СтруктураШапкиДокумента = ПроведениеДокументов.СформироватьСтруктуруШапкиДокумента(Заголовок, ЭтотОбъект, Отказ);

    // Проверим правильность заполнения шапки документа
    ПроверитьЗаполнениеШапки(СтруктураШапкиДокумента, Отказ, Заголовок);
    
    СформироватьПолныеДвиженияДокумента (Заголовок, Отказ);
КонецПроцедуры // ОбработкаПроведения()

Процедура ПриЗаписи(Отказ)
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    Если не Проведен Тогда
        Заголовок = "Движение документа """ + СокрЛП(Ссылка) + """: ";
        СформироватьПолныеДвиженияДокумента (Заголовок, Отказ);
    КонецЕсли;
    
КонецПроцедуры

Процедура ПередУдалением(Отказ)
    
    ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Ложь, Ложь);
    
КонецПроцедуры
22 vde69
 
14.10.14
13:39
что мне не например не нравится в предложеных ранее схемах;

ну например после первой записи придется оставлять старые движения и в модуле формирования новых движений придется их исключать отдельно
23 GROOVY
 
14.10.14
13:56
Вообще-то у документов есть свойство "Проведение в привилегированном режиме" Равно как и отмена проведения. Это галки в свойствах документа.
24 vde69
 
14.10.14
14:00
(23) эти галки на интерактивные действия не действуют, они инициирую режим только в том случае если проведение документа програмное и было вызвано на сервере.
При програмном вызове проведения из клиента - режим игнорируется
25 GROOVY
 
14.10.14
14:04
(24) Ну вызывай сервер и там проведение. Или ВключитьПривилегированный , но это тоже только на сервере, так что без разницы.
26 zmaximka
 
14.10.14
14:07
В серверной процедуре установить привелигерованый режим = истина. После проведения выключить привелигированый режим
27 vde69
 
14.10.14
14:07
(25) формы ПРОСТЫЕ, передать обьект на сервер - мутабельность...
28 GROOVY
 
14.10.14
14:20
(27) Вот ведь... Сделай управляемую и открывай ее в обычном приложении.
Основная теорема систематики: Новые системы плодят новые проблемы.