Удалить документ программно

1. waitklassik 09.06.21 13:12 Сейчас в теме
Подскажите возможно из документа программно по нажатию кнопки закрыть документ и удалить его. перебрал все что мог не получается
Nefilimus; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Nefilimus 75 09.06.21 13:13 Сейчас в теме
(1) странный запрос конечно... Напрямую удалять не советую, лучше помечать на удаление
3. waitklassik 09.06.21 13:45 Сейчас в теме
(2)надо напрямую. Если можно то как? уже все что можно перебрал
4. Denis_CFO 49 09.06.21 13:48 Сейчас в теме
(3)
Если можно то как?

Произвольным кодом:
1. Найти документ в базе;
2. ДокОбъект = ПолучитьОбъект Из базы;
3. ДокОбъект.ОбменДанными.ЗагрузкаДанных = Истина;
3. ДокОбъект.Удалить();

Только потом движения по регистрам надо будет удалять. Да и где-то последовательности документов исправлять.

Пометьте на удаление и удалите, как разработчик спроектировал.
5. waitklassik 09.06.21 13:53 Сейчас в теме
(4)это не подходит. Возможно сделать так что бы из самого документа по нажатию кнопки документ закрылся и удалился? Как прописать что бы текущий документ был удален?
finist7490; +1 Ответить
6. Denis_CFO 49 09.06.21 13:57 Сейчас в теме
(5) дать права пользователю на документ "интерактивное удаление документа".

еще можно в процедуре после закрытия прописать, что я раньше писал.

но, проблем огребёте.
7. waitklassik 09.06.21 13:58 Сейчас в теме
(6)что именно прописать что бы удалить текущий документ после закрытия документа?
8. Vlan 36 09.06.21 13:59 Сейчас в теме
(7) как-то так
&НаКлиенте
Процедура УдалитьДокумент(Команда)
	Пометить();
	ЭтаФорма.Закрыть();
КонецПроцедуры
&НаСервере
Процедура Пометить()
	Если Объект.Проведен Тогда
		Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.ОтменаПроведения));
	КонецЕсли;
	Объект.ПометкаУдаления = Истина;
	Записать();
КонецПроцедуры
Показать

Только сразу в журнале не видно, что удален. Нужно обновить список
10. Denis_CFO 49 09.06.21 14:01 Сейчас в теме
(8) здесь нет полного удаления. только пометка.
13. пользователь 09.06.21 14:02
Сообщение было скрыто модератором.
...
16. пользователь 21.12.21 14:11
Сообщение было скрыто модератором.
...
9. пользователь 09.06.21 14:00
Сообщение было скрыто модератором.
...
15. blockcode 40 12.06.21 12:33 Сейчас в теме
(3) Я так понимаю, что заказчик требует, чтобы при удалении документ не отображался в списке документов, т.е. был "реально удален". Возможно достаточно будет подправить ФормуСписка и ФормуВыбора, т.е. не отображать документы с пометкой на удаление.
14. succub1_5 93 09.06.21 16:20 Сейчас в теме
(1)При нажатии кнопки - пишите в регистр "УдалениеДоковНапрямуюПоСтраннойЗаявкеОтПользователя" - ссылку на док. Потом в ПодпискеНаСобытия или в рег задании - читаете эти ссылки и удаляете объекты.
Да, и скорее всего - не забудьте написать заявление по собственному.
user1050439; +1 1 Ответить
17. ssn5810 21.12.21 14:12 Сейчас в теме
(14)Не знаешь зачем лезешь, поболтать не с кем ?
11. пользователь 09.06.21 14:01
Сообщение было скрыто модератором.
...
12. пользователь 09.06.21 14:02
Сообщение было скрыто модератором.
...
18. пользователь 21.12.21 14:14
Сообщение было скрыто модератором.
...
19. user1980224 18.08.23 05:45 Сейчас в теме
У меня на толстом клиенте, движения по регистру автоматом удалились.
20. alexey123perm 23 18.08.23 11:00 Сейчас в теме
(1)
1. УстановитьПривилегированныйРежим (либо дать права Интерактивного удаления)
2. Использовать метод "Удалить" у объекта документа. Т.е. возможно, что нужно будет использовать ПолучитьОбъект()
21. alexey123perm 23 18.08.23 11:01 Сейчас в теме
(2) Всяко бывает. Например, обработка ошибочно сгенерировала документы...
22. dachnik 27 18.08.23 13:38 Сейчас в теме
Помечаете на удаление как в примере (8)
В модуле документа в обработчик "При закрытии" допишите

Если Объект.ПометкаУдаления = истина тогда
    Объект.ОбменДанными.ЗагрузкаДанных = истина;
    Объект.Удалить();
КонецЕсли;


У пользователя может быть недостаточно прав для исполнения кода. Если не сработает, может потребоваться дополнительно расширить права пользователя (интерактивное удаление на документ, а лучше все права что есть на документ) и привилегированный режим установить.

Как писали, может возникнуть проблема с ссылочной целостностью, если документ упоминается в других объектах в качестве свойства или реквизита, тогда будут битые ссылки.
Я бы дополнительно перед физическим удалением выполнял проверку на наличие ссылок на объект.
Фрагмент из БСП
// Проверяет наличие ссылок на объект в базе данных
ОбщегоНазначения.ЕстьСсылкиНаОбъект(Знач СсылкаИлиМассивСсылок, Знач ИскатьСредиСлужебныхОбъектов = Ложь,  ДругиеИсключения = Неопределено)
 
Пример:
Если ОбщегоНазначения.ЕстьСсылкиНаОбъект(Контрагент) Тогда
     Продолжить;
КонецЕсли;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот