Очень часто, менеджерам или бухгалтерам необходимо удалить документы помеченные на удаление. Две обработки предназначенные для быстрого удаления документов за период для конфигурации 1С Управление торговлей 10.3.
В моем случае обработка пригодилась для завершения обновления 1С Управление торговлей до новой версии. После обновления выполняются дополнительные процедуры обработки данных, часть из которых у меня завершалась ошибкой. И в разделе администрирование — Обслуживание — Результаты обновления и дополнительная обработка данных было указано: "Не все процедуры удалось выполнить (выполнено 12 из 14)."
Одна из процедур завершилась ошибкой:
"Процедура "Документы" обработки данных завершилась с ошибкой:
"{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(4342)}: Произошло зацикливание процедуры обработки данных. Выполнение прервано. ВызватьИсключение ТекстИсключения;"
При установке пометки удаления на документ (у меня было из много в базе) возникала ошибка: "Ошибка при выполнении обработчика — ‘ПередЗаписью’ по причине:
{ОбщийМодуль.ОбновлениеИнформационнойБазы.Модуль(194)}: Действия с объектом временно запрещены, так как не завершен переход на новую версию программы.
Не завершены следующие процедуры обработки данных:
ОбработатьДанныеДляПереходаНаНовуюВерсию ВызватьИсключение Результат.ТекстИсключения."
В общем получился замкнутый круг, в связи с чем и было принято решение удалить документы программно с использованием приложенной обработки, после чего ошибка ушла.
Открывать через Файл — Открыть.
Инструкция по применению:
1. Выбрать начало и окончание периода
2. Нажать на соответствующую кнопку
Инструкция по программированию:
Можно добавить любой вид документа, путем небольших манипуляций в коде:
Процедура УдалитьДокументы(ИмяДокумента) Зап=Новый Запрос("ВЫБРАТЬ | Док1.Ссылка КАК Док |ИЗ | Документ."+ИмяДокумента+" КАК Док1 |ГДЕ | Док1.ПометкаУдаления = ИСТИНА | И Док1.Дата МЕЖДУ &ДатаНач И &ДатаКон | |УПОРЯДОЧИТЬ ПО | Док1.Дата"); Зап.УстановитьПараметр("ДатаНач",ДатаНач); Зап.УстановитьПараметр("ДатаКон",ДатаКон); ТЗ=Зап.Выполнить().Выгрузить(); Для Каждого Стр ИЗ ТЗ Цикл ДокОб=Стр.Док.ПолучитьОбъект(); Сообщить("Док:"+СокрЛП(Стр.Док)); Попытка ДокОб.Удалить(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Если Вопрос("Нажмите ДА если прекратить?",РежимДиалогаВопрос.ДаНетОтмена,2)=КодВозвратаДиалога.Да Тогда Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура УдалитьАктыСверокНажатие(Элемент) УдалитьДокументы("АктСверкиВзаиморасчетов"); КонецПроцедуры Процедура УдалитьПКОНажатие(Элемент) УдалитьДокументы("ПриходныйКассовыйОрдер"); КонецПроцедуры Процедура УдалитьРКОНажатие(Элемент) УдалитьДокументы("РасходныйКассовыйОрдер"); КонецПроцедуры Процедура УдалитьСчетФактураВыданныйНажатие(Элемент) УдалитьДокументы("СчетФактураВыданный"); КонецПроцедуры Процедура УдалитьРеализацииНажатие(Элемент) УдалитьДокументы("РеализацияТоваровУслуг"); КонецПроцедуры Процедура УдалитьФормированиеЗаписейКнигиПродажНажатие(Элемент) УдалитьДокументы("ФормированиеЗаписейКнигиПродаж"); КонецПроцедуры
Тестировалось для "Управление торговлей", редакция 10.3 (10.3.10.4). Может работать и на предыдущих релизах, но нет 100% гарантии, что все будет правильно.
(0) Групповое создание битых ссылок?
(1) Сначала учимся говнокодить, потом а потом создаем темы «как найти объект с битыми ссылками в реквизитах»)
Менеджерам и бухам, которые лезут во внутреннюю кухню одноэса и удаляют документы, я бы ручки пообламывал, а не давал им инструмент самоуправства.. Это однозначно глупо, писать такое для обычных пользователей.
В обработке обмен данными в формате xml в пользовательском режиме типовых конфигураций все это есть и доступно.
(2) Вам поможет наверное эта обработкаhttps://infostart.ru/public/823544/ ?
(3) Чем дальше в лес, тем тольше партизаны 😉