Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 фев 2024, 08:25

Проблема с програмным удалением документов

Автор Storm03, 15 окт 2023, 09:27

0 Пользователей и 1 гость просматривают эту тему.

Storm03

Нужно удалить все документы по организации из Комплексной.
Написал обработку:

Процедура УдалитьНаСервере()
Пример = Справочники.Организации.НайтиПоНаименованию("Пример ООО");
ТекстЗапроса = "";
Для каждого Вид Из Метаданные.Документы Цикл
Если Вид.Реквизиты.Найти("Организация") <> Неопределено Тогда
Если ТекстЗапроса<>"" Тогда
            ТекстЗапроса=ТекстЗапроса+"
|
        |ОБЪЕДИНИТЬ ВСЕ";
        КонецЕсли;         
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| Ссылка КАК Ссылка,
|   Дата КАК Дата
|ИЗ Документ." + Вид.Имя + "
|ГДЕ
        | Ссылка.Организация = &Организация
| И Ссылка.ПометкаУдаления <> Истина";
КонецЕсли;
КонецЦикла;
ТекстЗапроса = ТекстЗапроса + "
        |
        |УПОРЯДОЧИТЬ ПО
        | Дата УБЫВ";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Организация", Пример);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокументОбъект.ПометкаУдаления = Истина;
ПУ = 1;
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Исключение
            ПУ = 0;
Сообщить(" " + Выборка.Ссылка + " " + ИнформацияОбОшибке().Описание);
КонецПопытки;
Если ПУ = 1 Тогда
Попытка
ДокументОбъект.Удалить();
Исключение
Сообщить(" " + Выборка.Ссылка + " " + ИнформацияОбОшибке().Описание);
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры

Обработка идёт долго, примерно 4 дня.
И после выдаёт кучу ощибок типа:

 Расчет по страховым взносам за 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Удалить)
 6-НДФЛ за 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Записать)
 6-НДФЛ за 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Удалить)
 6-НДФЛ за 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Записать)
 6-НДФЛ за 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Удалить)
 Расчет по страховым взносам за 9 месяцев 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Записать)
 Расчет по страховым взносам за 9 месяцев 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Удалить)
 4-ФСС за 9 месяцев 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Записать)
 4-ФСС за 9 месяцев 2020 г. (Вид: П. Организация: Пример ООО) Ошибка при вызове метода контекста (Удалить)

Подскажите, пожалуйста, что я не досмотрел?

Максим75

Storm03, в выборке находите объект и ДокументОбъект.УстановитьПометкуУдаления(Истина) ;

а потом уже штатной обработкой по удалению помеченных объектов удаляете. там сразу идет проверка на возможность удаления и удаляет физически, что возможно.

а так Вы снимаете с  проведения, а на куче документов это долго. скорее всего в ОбработкеУдаленияПроведения у документов много чего может быть написано, пока обработает...

Storm03

Максим75, Просто хочется верить, что штатной отменой проведения отменится проведение связанных документов)))

Максим75

Storm03, я написал за удаление помеченных, а не за отмену проведения.
как раз при отмене проведения и вылазит такое гигантское время, видимо в документах при отмене проведения много чего считается.
да и у Вас связанные документы никак не обрабатываются. Это тоже огромный вопрос. Обычно вначале в документах чистятся перекрестные ссылки, а уже потом помечаются на удаление.

LexaK

И ещё, при массовых обработках документов, изменяющих движения, отключайте Итоги, будет гораздо быстрее.
если помогло нажмите: Спасибо!

Storm03

Т.е. никого не смутило, что по логике программа должна удалять документ только в случае удачной отмены проведения?
В сообщениях идет сначала обработка исключения отмены проведения, а потом удаления. Т.е. пытается удалить, не смотря на ошибку записи.

Максим75

Storm03, нет, никого не смутило.
в самом первом сообщении было: "Нужно удалить все документы по организации."
Если такая задача ставится - то нет необходимости что-то еще проверять, тупо берутся и удаляются все документы. Т.е. чистится период, а остатки где-то сохраняются, а потом заполняются.

Storm03

Максим75, Понятно. Дальше заголовка не читаем.

Максим75

Storm03, ну куда уж нам читать то.
дальше заголовка код.
дальше описание проблемы, что о-о-о-очень долго маслает документы.
что еще читать?

Вам ответили, почему так долго.
Дальше сами решайте, что со всем этим кином делать.

alexandr_ll

Storm03, https://infostart.ru/1c/tools/718721/

Выделение нескольких организаций из базы через удаление

Задача - разделить базы, оставив часть организаций в одной, часть в другой.

Если у вас база типовая или доработанная, но без добавления новых регистров сведений, документов и справочников, можно воспользоваться планом обмена по РИБ.

Разделение методом РИБ

Преимущества:

1) Все происходит штатными средствами, не нужно никаких дополнительных обработок;

2) Даже если у вас были свои документы, которые делали проводки, то оборотно-сальдовая ведомость сойдется 100%, но при этом документов может и не быть <объект не найден>;

3) Справочник ОС переносится только по нужным организациям.

Недостатки:

1) Если Вы ожидаете в результате, что получите идеальную базу только с нужными справочниками и документами,то увы:

1.1) <Объект не найден> может попадаться в самых неожиданных местах, например в справочнике ОС код ОКОФ;

1.2) Переносятся почти вся справочная информация, часто излишняя, я ожидал, что будет только используемые справочники, но это не так;

1.3) Работу с файлами и сами вложенные файлы надо проверять отдельно;

1.4) После разделения базы не забудьте отвязать от РИБ.

Реализация:

Администрирование -> Синхронизация данных-> Настройки синхронизации данных и далее "Настроить синхронизацию данных" и там выбрать Распределенная информационная база с фильтром по организации.

Разделение методом удаления организаций

Я рекомендую всё же просто скопировать базы и в них по удалять ненужные организации моей обработкой.

При этом для удаления стандартными средствами через поиск ссылок- это не реально долгий процесс для более менее больших баз, поэтому я выбрал логику попроще:

1) Отбираем все документы, которые имеют реквизит "Организация" и 1 шагом устанавливаем пометку на удаление, 2 Удаляем документы непосредственно без контроля ссылочной целостности;

2) Отбираем все справочники, которые имеют реквизит "Организация" и удаляем непосредственно без контроля ссылочной целостности;

3) Удаляем организации без контроля ссылочной целостности - на этом этапе приходится удалять все даты запрета изменения данных, иначе Организацию удалить не получается, ругается на регистр сведений "Страховые взносы".

Обработка позволяет сделать отбор по видам документов.

Тестировалось на Аренда и управление недвижимостью для "1С:Бухгалтерия 8", редакция 3.0 (3.0.52.39/3.3.3.96) и
Зарплата и управление персоналом, редакция 3.1 (3.1.3.253) Платформа: 1С:Предприятие 8.3 (8.3.10.2580).


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск