Имя: Пароль:
1C
 
Как програмно удалить документ (если в модуле объекта есть контроли)
, ,
0 vova1122
 
06.02.19
18:58
В модуле объекта документа у меня есть контроль запрещающий удаление документов
Процедура ПередЗаписью(....)
Если Проведен тогда  
ЕСли (Ссылка.ПометкаУдаления = Ложь) и (ПометкаУдаления = Истина) тогда
    //это пометка на удаление
Если Дата=ТекущаяДата() тогда
Отказ=Истина;
Возврат;
КонецЕсли;
КонецЕсли;

На самом деле там больше всяких проверок.

А как программно удалить этот документ (обойдя все эти проверки)?
1 unregistered
 
06.02.19
19:00
И в начале нет ничего типа.

Если ОбменДанными.Загрузка Тогда
   Возврат;
КонецЕсли;
2 vova1122
 
06.02.19
19:03
нет такого. я только учусь писать на 8. в семерке таких проблем нет
3 Джинн
 
06.02.19
19:05
(2) Сами добавили - сами и обойдите.
4 unregistered
 
06.02.19
19:08
(2) А что за конфигурация?
Во всех типовых такой кусок кода с проверкой на параметры обмена данными в обязательном порядке стоит во всех обработчиках ПередЗаписью и им подобным.
При необходимости записать объект, игнорируя бизнес-логику, включают режим обмена данными.

А по сути Джинн прав. Если это самописка, то придумывайте сами - как вам лучше обходить свои собственные заборы.
5 vova1122
 
06.02.19
19:16
да, конфигурация самописная. Пока моло опыта чтобы придумать. Может подскажите?
6 vova1122
 
06.02.19
19:19
Пока придумал только завести СуперПуперПользователя и для него не делать эти проверки. Но это тупо?
7 unregistered
 
06.02.19
19:35
(6) Это бред.
8 ДенисЧ
 
06.02.19
19:36
(6) Как в (1) сделать религия не позволяет?
9 Garykom
 
гуру
06.02.19
19:37
Бред это делать запреты чтобы потом героически их преодолевать
10 unregistered
 
06.02.19
19:38
В самом начале обработчика ПередЗаписью добавляешь код.

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

Затем в твоей обработке, где ты пытаешься программно удалить документ пишешь что-то типа.

УдаляемыйМноюДокументОбъект.ОбменДанными.Загрузка = Истина;
УдаляемыйМноюДокументОбъект.УстановитьПометкуУдаления(Истина);
11 unregistered
 
06.02.19
19:40
(9) Почему же? Запреты и разного рода проверки - это обычная практика, применяемая повсеместно. Есть определенная бизнес-логика приложения, которая должна соблюдаться, чтобы приложение работало корректно. Не понимаю чего в этом странного?
12 vova1122
 
06.02.19
19:47
это в журнале документов
Процедура УдалитьНажатие(Элемент)
    ТД=ЭтаФорма.ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока;
    ТДД=ТД.ПолучитьОбъект();
    ТДД.ОбменДанными.Загрузка = Истина;
    ТДД.УстановитьПометкуУдаления(Истина);  
КонецПроцедуры

1С-ка ругается: Действие не может выполняться в режиме загрузки данных. (не может установить пометку удаления)
13 Garykom
 
гуру
06.02.19
19:49
(12)
ТДД.ПометкаУдаления = Истина;
ТДД.Записать(РежимЗаписиДокумента.Запись);
14 vova1122
 
06.02.19
19:56
(13) не помогло.  с этим кодом никаких действий не возникает.
А если пробовать удалить непроведенный документ по удаляет
15 Garykom
 
гуру
06.02.19
20:02
(14) РежимЗаписиДокумента.ОтменаПроведения ?
16 vova1122
 
06.02.19
20:06
(15) теперь ругается как же само на эту строку. (Действие не может выполняться в режиме загрузки данных.)
17 hhhh
 
06.02.19
20:14
(16) а если просто удалить, какую ошибку выдает?

дело в том, что

ЕСли (Ссылка.ПометкаУдаления = Ложь) и (ПометкаУдаления = Истина) тогда
    //это пометка на удаление

Если Дата=ТекущаяДата() тогда
Отказ=Истина;
Возврат;
КонецЕсли;

не запрещает пометку Удаления. Какие-то балбесы его писали. Должно спокойно пометить.
18 vova1122
 
06.02.19
20:18
(17) Так смотри ниже проверяется дата (Правильно у меня так (Если Дата<=ТекущаяДата() тогда ))  . И если дата меньше то отказ
19 vova1122
 
06.02.19
20:21
+(18) Єтот балбес - єто я. Нашеп такой пример как проверить что дукументу устанавливают признак удаления. вот и применил.
20 vova1122
 
06.02.19
20:23
Вот что выдала Миста: При ОбменДанными.Загрузка=Истина проведение запрещено (первый ответ Действие не может выполняться в режиме загрузки данных, почему?)
21 vova1122
 
06.02.19
20:28
вот так заработало
    Если ОбменДанными.Загрузка Тогда
        ОбменДанными.Загрузка=Ложь;
   Возврат;
КонецЕсли;
22 timurhv
 
06.02.19
20:36
(21) По-любому, код из (0) - ваш!
23 vova1122
 
06.02.19
20:46
(22) Эта строка из интернета
ЕСли (Ссылка.ПометкаУдаления = Ложь) и (ПометкаУдаления = Истина) тогда
24 GANR
 
06.02.19
20:49
(23) А какой мудила без ОбменДанными.Загрузка сделал обработчик? Найдете - проучите обязательно, чтоб он в других местах такого не наделал. Отсутствие этого заклинания приведет к "неожиданному" падению любой конвертации, загрузки данных, удаления и других массовых операций над объектами, при которых необходимо выключать бизнес-логику.
25 vova1122
 
06.02.19
20:54
(24) повторюсь. Этот мудила я. Так как мыслю стандартами 7.7. И только начал знакомится с 8.3 и первое задание переписать нетленку из 7.7 на 8.3
26 Мимохожий Однако
 
06.02.19
23:26
(25) Я тебя зауважал )
27 palsergeich
 
06.02.19
23:27
(25) Мужик!
28 catena
 
07.02.19
05:56
(21)Давно я не пополняла свои анналы, спасибо)))
29 Конструктор1С
 
07.02.19
08:47
Обязательно изучи вот этот стандарт:
https://its.1c.ru/db/v8std
30 Мыш
 
07.02.19
09:14
(25) > переписать нетленку из 7.7 на 8.3

Безумству храбрых поём мы песню )
31 Конструктор1С
 
07.02.19
09:20
(25) "первое задание переписать нетленку из 7.7 на 8.3"

Под восьмерку нужно не тупо переписывать с семерки, а перепроектировать всё заново. Когда семерошную нетленку пытаются превратить в восмерочную нетленку, обычно жуткая костылина получается.
32 Мыш
 
07.02.19
09:21
(31) Но сколько опыта! Не догонит, зато согреется )