gifts2017

Непосредственное удаление

Опубликовал Федор (tdr1225) в раздел Администрирование - Чистка базы

Бывает, создашь документ (случайно или при тестировании),
и хочешь его удалить, а он лишь помечается на удаление.
Войти монопольно и удалить помеченные далеко не всегда возможно.
Эта маленькая обработка поможет избавиться от мусора.
(Используется FormEx, автор АЛьФ).

Как подключить?

  1. В "Конфигураторе" создайте кнопку на панели инструментов и "привяжите" ее к этой обработке. При желании здесь же можно назначить сочетание клавиш, например, Ctrl+Alt+D
  2. В глобальном модуле создайте процедуру ПриНажатииКнопкиКлавиатуры() (опять же FormEx) и в ней обработайте требуемое сочетание клавиш, например, Ctrl+Alt+D
    (интересен вариант 1+2 без сброса ФСО :)
  3. см. "Условности" п.2.


Условности (см. процедуру ПриОткрытии() данной обработки)

1. В строку

Если глПользователь.СуперПупер<>1 
    Тогда Возврат; 
КонецЕсли;

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

2. Используется глобальная переменная глСервис, которую я определяю в глобальном модуле:

Перем глСервис Экспорт;

И в конце процедуры ПриНачалеРаботыСистемы() указываю

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

Но можно это сделать и внутри обработки.

Первый вызов сделайте при всех закрытых окнах.

PS
Хотелось бы для кнопки в панели инструментов сделать свою иконку (типа "Не влезай - убьет!"). Может, кто подскажет, как это делается.

Скачать файлы

Наименование Файл Версия Размер
Erasing 202
.1226663911 9,42Kb
20.10.14
202
.1226663911 9,42Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Епрст (Ёпрст) 14.11.08 15:46
2. VasilyKushnir (vasilykushnir) 14.11.08 16:24
(1) Абсолютне прав пан Ёпрст - штатными средствами, пишем внешнюю ert с выбором документа и удаляем безо всяких ВК, кнопочек и прочих понтов, меняющих конфигурацию. Не упоминай имя Бога своего и Formex всуе.... К тому, что если можно что-то сделать штатно и без проблем - делай это. М.Б. я не прав, но ИМХО формекс - для расширения и добавления недостающего фукнционала.
Хотя возможно кому-то идея покажется привлекательной.
3. Альтаир (Altair777) 14.11.08 16:37
(1), (2) - полностью согласен!
Автор, прими совет - удаляй пока не заминусовали :-)
4. Федор (tdr1225) 14.11.08 17:02
(2) Небольшое уточнение - документ выбирать не надо
(3) Да минусуйте - я не гордый
5. VasilyKushnir (vasilykushnir) 14.11.08 17:07
(4) Разве только в выборе документа дело? Не боись - еще никто никого не минусует.
6. Альтаир (Altair777) 14.11.08 17:09
Такие вещи пишутся за 3 минуты, если надо
Код
Процедура ПриОткрытии()         
   Перем ТД;      
   Док=СоздатьОбъект("Документ");      
   Если Док.Выбрать("Выберите документ для удаления нах","") = 1 Тогда      
      ТД=""+Док.ТекущийДокумент();   
      Попытка   
         Док.Удалить(1);
         Сообщить("Документ удален"+ТД);
      Исключение   
         Сообщить("Документ не удален"+ТД,"!");
      КонецПопытки;   
   КонецЕсли;      
   СтатусВозврата(0);      
КонецПроцедуры         
Показать полностью
7. Федор (tdr1225) 17.11.08 09:18
2 (VasilyKushnir) В данном случае - в выборе.
2 (Altair777)
Потрать еще 3 минуты и найди в этой обработке команду Выбрать()
8. Епрст (Ёпрст) 17.11.08 09:27
>>>"Хотелось бы для кнопки в панели инструментов сделать свою иконку (типа "Не влезай - убьет!"). Может, кто подскажет, как это делается."
Открой пофигуратор и добавляй в интерфейс .. делов то..
9. VasilyKushnir (vasilykushnir) 17.11.08 09:31
(7) ну если уж так настаиваешь... Лично я обработки доков у себя вешаю на кнопу Печать в журнале, при вызове определенной обработки из журнала беру контекст текущего дока и дальше делаю с ним, что хочу. Как видишь - выбора дока в данном варианте нет. Но это так... детали реализации.
Еще раз повторюсь - никто не ставит целей тебя заулюлюкать. И вполне допускаю, что твой метод имеет право на жизнь, хотя бы в качестве примера использования Формекса. Просто, я всегда стараюсь сделать все средствами 1С, если это без напряга делается средствами 1С. Хотя Формекс у меня есть и вовсю используется. Но это мое личное ИМХО :-)
10. VasilyKushnir (vasilykushnir) 17.11.08 09:37
+ к (7) А в доказательство выше сказанного - вот тебе плюсик, так сказать за попыткую (лиха беда начало :-) )
11. Альтаир (Altair777) 17.11.08 09:39
(7) Потрать еще 3 минуты и найди в этой обработке команду Выбрать()
Ты так и не понял, что тебе пытаются сказать? Зачем вешать формексы, кнопочки на панель инструментов?
Непосредственное удаление документов - это исключительная мера.
Нельзя как попало ее применять.
А если уж приспичит, за 3 минуты можно написать внешнюю обработку ждя этого.
П.С. У меня есть в универсальном журнале через ТЗ (сам писал), но использовал не более 10 раз.
vasilykushnir; lomok; +2 Ответить 1
12. Аркадий Кучер (Abadonna) 17.11.08 10:27
Если уж юзается formex, то можно сделать красивее и универсальнее:
Код
Процедура ПриОтжатииПравойКнопки(Конт,Состоян,X,Y,ФСО)
   Перем ВыбЗнач,Поз;        
   Если ИмяПользователя()<>"Кучер" Тогда 
      Возврат; // поставьте свое условие, кому нельзя
   КонецЕсли;
   ФормаРасш = СоздатьОбъект("РасширениеФормы");   
   Попытка
      ФормаРасш.УстановитьФорму(Конт.Форма);
   Исключение
      Возврат;
   КонецПопытки;   
   Тип=ФормаРасш.ТипОбъекта(); 
   Если (Тип="Журнал") И (Y<0) Тогда // кликнули правой кнопкой на тулбаре открытого журнала
      СПС=СоздатьОбъект("СписокЗначений");
      СПС.ДобавитьЗначение("Пометить","Пометить на удаление");    
      СПС.ДобавитьЗначение("УдалитьСсылка","Удалить с проверкой ссылок");
      СПС.ДобавитьЗначение("УдалитьБезСсылок","Удалить без проверки ссылок");
                        // можно добавить еще печать документа и т.д.  
      Если СПС.ВыбратьЗначение(ВыбЗнач,"Действие",Поз,30,0)<=0 Тогда
         Возврат;
      КонецЕсли;            
      Док=СоздатьОбъект("Документ"); 
      Док.НайтиДокумент(Конт.ТекущийДокумент);
      Если Поз=1 Тогда    
         Док.Удалить(0);  
      ИначеЕсли Поз=3 Тогда 
         ТекстВопроса="Документ будет удален безвозвратно. Продолжить?";
         Ответ=Вопрос(ТекстВопроса,"Да+Нет");
         Если Ответ="Нет" Тогда Возврат;  КонецЕсли;
         Док.Удалить(1);
      Иначе
         ТЗС=СоздатьОбъект("ТаблицаЗначений");
         НайтиСсылки(Док.ТекущийДокумент(),ТЗС);
         Если ТЗС.КоличествоСтрок()>0 Тогда
            Предупреждение("На документ есть ссылки, удалять нельзя!",15);
            Возврат;
         Иначе
            Док.Удалить(1); 
         КонецЕсли;      
      КонецЕсли;
   КонецЕсли;   
КонецПроцедуры    
Показать полностью
13. VasilyKushnir (vasilykushnir) 17.11.08 10:49
(12) Дык все это понятно и здорово... Но постановка задачи-то в другом: создали пробный док, или создали по ошибке и надо шустренько его удалить. Скажите на милость товарищ Абадонна какие тут проверки ссылок? Его надо тупо удалить, а это действительно пара строчек (не две!! - к слову не цепляйтесь) кода. Ну и, естественно, я бы этот инструмент кому-попало не давал...
14. Аркадий Кучер (Abadonna) 17.11.08 10:54
(13) >Но постановка задачи-то в другом:
Это у автора постановка в другом, а у меня постановка в том, чтобы создать себе, любимому, максимум удобств.
Это я что ж, должен Файл-Открыть... выбрать в обработке документ, потом еще кнопку нажать и прочим онанизмом заниматься? ;)
15. Федор (tdr1225) 17.11.08 10:58
(13-14) У автора постановка не в другом, а "в себе любимом":
Код
Если глПользователь.СуперПупер<>1 Тогда Возврат; КонецЕсли;
Показать полностью

и
Код
Если ИмяПользователя()<>"Кучер" Тогда Возврат; КонецЕсли;
Показать полностью

16. VasilyKushnir (vasilykushnir) 17.11.08 10:59
(14) Зачем "Файл-Открыть... выбрать в обработке документ" - почитай (9):
1. Левой "лапой" мыши по нужному доку в журнале потом по кнопе Печать
2. Из списка действий выбираем "Удалить с концами"
Все!
17. Альтаир (Altair777) 17.11.08 11:05
(0) А в чем революционность метода?
Если про кнопочку на панельке - это плагит.
У Альфа есть конфигурация - FormEx Demo
Copyright© Алексей Фёдоров aka АЛьФ, 2003
18. VasilyKushnir (vasilykushnir) 17.11.08 11:05
+ к (16) - Но согласен и с тем, что метод (12) более общий и правильный. :-)
19. Аркадий Кучер (Abadonna) 17.11.08 11:06
(9)>Лично я обработки доков у себя вешаю на кнопу Печать в журнале
Позор, друган мой Василий! ;) В каждый журнал вешать на кнопку "Печать". А если их пара десятков?
Ключевые слова в (12) - красивее и универсальнее
20. Альтаир (Altair777) 17.11.08 11:08
(15) Вторая проверка лишняя, имхо :-)
21. VasilyKushnir (vasilykushnir) 17.11.08 11:15
(19) Не поверишь, но в каждом журнале у меня висит кнопа печать. И там не только печать самого дока (текущего)....
22. Федор (tdr1225) 17.11.08 11:16
(Altair777) Первая проверка моя, вторая - Абадонны. Это одно и то же.
(VasilyKushnir) Именно пара десятков (см 19)
(Abadonna) Хотел использовать
Код
Тип=ФормаРасш.ТипОбъекта();
Показать полностью
, но отказался,
т.к. не различаются "Справочник" и "Справочник.ФормаСписка"
23. Альтаир (Altair777) 17.11.08 11:17
по сабжу и по комментам.
Зачем цеплять на кнопку только одно действие?
Можно написать многофункциональную процедурку, в которой пользователь выбирает, что он хочет с делать с тем или иным объектом.
В зависимости от прав можно динамически формировать список доступных действий.
Типа - Напечатать, УдалитьСКонцами, НайтиСсылки и т.п.
Это будет универсальнее :-)
24. Федор (tdr1225) 17.11.08 11:24
25. Аркадий Кучер (Abadonna) 17.11.08 11:26
(22)>т.к. не различаются "Справочник" и "Справочник.ФормаСписка"
RTFM ;) Для таких случаев юзай вот это:
ПолныйТипОбъекта()
Синтаксис:
ПолныйТипОбъекта()
Назначение:
Возвращает полный тип объекта, которому принадлежит расширяемая форма.
Пример:
ФормаРасш = СоздатьОбъект("РасширениеФормы");
ФормаРасш.УстановитьФорму(Форма);
Сообщить(ФормаРасш.ПолныйТипОбъекта());
// выводит строку вида: Справочник.Тестовый.ФормаСписка.ДляВыбора
26. Альтаир (Altair777) 17.11.08 11:32
(24) сравнил.
И что? Внятнее, лиз, оформляй свои мысли.
27. Альтаир (Altair777) 17.11.08 11:34
+26 буковка не пропечаталсь

(24) сравнил.
И что? Внятнее, плиз, оформляй свои мысли.
28. Федор (tdr1225) 17.11.08 11:34
(25) слишком большой TFM, сразу не осилишь ;)