Версия для печати темы (https://pro1c.org.ua/index.php?s=2eeda5bf4735c483568b31839b4ef550&showtopic=53594)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Запись без (пере)проведения

Автор: Constantus 14.08.19, 8:07

Приветствую, Форумчане!
1с8.3.12, самопис, БСП, УФ

В документе есть несколько реквизитов, которые не нужны в регистрах по данному документу.
Они чисто информационные и их при нажатии некой кнопки нужно просто и по-тихому записать.

&НаКлиенте
Процедура ДокументСдан(Команда)
    ДокументСданНаСервере();
    //ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
    //ПриЗаписиПерепроводить(0);
    Записать();
    //ПриЗаписиПерепроводить(1);
    Парам = Новый Структура(); //108470
    Парам.Вставить("Основание",Объект.Ссылка);
    Парам.Вставить("Действие","Принят");
    Форм = ОткрытьФорму("Документ.ПрохождениеДокумента.ФормаОбъекта",Парам,,,ВариантОткрытияОкна.ОтдельноеОкно,,Новый ОписаниеОповещения("ДокументСданЗавершение", ЭтотОбъект, Новый Структура("Команда", Команда)),РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    //Закрыть();
КонецПроцедуры

&НаСервере
Процедура ДокументСданНаСервере()
    Объект.Сдан = Истина;
    Объект.Принял = ПользователиКлиентСервер.АвторизованныйПользователь();
    Объект.ДатаПринятия = ТекущаяДата();
    Объект.ТекущийСтатус = Перечисления.СтатусыПрохожденияДокументов.Принят;
    
КонецПроцедуры


речь идет о 4-х реквизитах в нижней процедуре.

Как можно просто записать их без затрагивания процесса проведения?


Автор: takefive 14.08.19, 8:46

Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();

Автор: Constantus 14.08.19, 9:20

takefive @ Сегодня, 12:46 * ,

Из первой процедуры убрать Записать(), а во вторую добавить предложенный код?

takefive @ Сегодня, 12:46 * ,

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


Пишет, что ОбменДанными - поле не обнаружено...

Constantus @ Сегодня, 13:11 * ,

Все действия происходят в модуле формы документа

Автор: pablo 14.08.19, 9:44

ОбменДанными - есть только в Типовых конфигурациях. В самописке нужно делать подобный механизм самому.

Автор: Petre 14.08.19, 10:18

Constantus @ Today, 9:20 * ,
1. Это надо делать в модуле объекта.
2. Для подобных вещей правильнее использовать подсистему Свойства.

Автор: takefive 14.08.19, 10:59

ОбменДанными это свойство для типа "ДокументОбъект". ДокументОбъект можно получить методом формы РеквизитФормыВЗначение. Ну и, если изменили, вернуть обратно на форму не помешает...

Автор: Constantus 14.08.19, 11:19

Много методов перепробовал... Вроде все рабочие, но всё равно у меня что-то более сильное сидит,
что выводит на проведение, а там у меня подписка на событие сидит "Перед записью"

В этой подписке проверяется дата запрета, если дата в диапазоне запрета, то

Отказ = Истина;

Подписка на событие:

    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    ТекДата = ТекущаяДата();
    ПредМесяц = ДобавитьМесяц(ТекДата, - 1);
    ДатаБлокировки = ?(День(ТекДата) > 10, КонецМесяца(ПредМесяц), НачалоМесяца(ПредМесяц) - 1);

    Если Источник.Дата <= ДатаБлокировки Или ДатаСтара <= ДатаБлокировки Тогда
             Отказ = Истина;
    КонецЕсли;

Автор: Petre 14.08.19, 11:57

Constantus @ Today, 11:19 * ,
Субъективное ощущение: причиной всему то, что вы вместо использования механизмов подсистем БСП придумываете свои "велосипеды".

Автор: Constantus 14.08.19, 13:21

Petre @ Сегодня, 15:57 * ,

Это да... Но что сейчас можно сделать... Наследство...

Подсказали, вроде работает:

&НаКлиенте
Процедура ЗаписатьБезПроведения(Команда)
    УказатьПерепроводить(Ложь);
    Записать(Новый Структура("РежимЗаписи,НеПерепроводить", РежимЗаписиДокумента.Запись, Истина));
КонецПроцедуры

&НаСервере
Процедура УказатьПерепроводить(Перепроводить)
    ПриЗаписиПерепроводить = Перепроводить;
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Если ПараметрыЗаписи.Свойство("НеПерепроводить") Тогда
        ТекущийОбъект.ОбменДанными.Загрузка = Истина;
    КонецЕсли;
КонецПроцедуры


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua