Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Удаление документа ПоступлениеТоваровИУслуг
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Пользователю 1С 8.3, 8.2, 8.1, 8.0 > 1С Управление Торговым Предприятием 8
vet07
Платформа 8.3, Конфигурация УТП_Demo.
Программно удаляет очень долго. Удалял двумя вариантами:
1. Вариант
Выборка = Документы.ПоступлениеТоваровУслуг.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        Если Не Выборка.Проведен Тогда
            Выборка.ПолучитьОбъект().Удалить();
        КонецЕсли;
    КонецЦикла;

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


Почему долго удаляет обеими способами и в чем принципиальная разница между вариантами кода?
pablo
Цитата
Почему долго удаляет обеими способами
Потому что Вы для удаления используете одну и ту же процедуру
Цитата
в чем принципиальная разница между вариантами кода?
В первом случае вы с сервера БД получаете все 100500 документов, а во втором - только 10050 непроведенных.
vet07
Цитата(pablo @ 26.06.14, 11:18) необходимо зарегистрироваться для просмотра ссылки
Потому что Вы для удаления используете одну и ту же процедуру

Можно по-подробней - что Вы имеете в виду под одной и той же процедурой?

Цитата(pablo @ 26.06.14, 11:18) необходимо зарегистрироваться для просмотра ссылки
В первом случае вы с сервера БД получаете все 100500 документов, а во втором - только 10050 непроведенных.

Ясно. Спасибо. А в каких случаях используется Вариант1?
pablo
Цитата
Можно по-подробней - что Вы имеете в виду под одной и той же процедурой?

Удалить()

Цитата
А в каких случаях используется Вариант1

В старых и не переписанных до сих пор.
Petre
Цитата(vet07 @ 26.06.14, 11:13) необходимо зарегистрироваться для просмотра ссылки
Почему долго удаляет обеими способами

Попробуйте в транзакции.
DartRomanius
Цитата(Petre @ 26.06.14, 13:11) необходимо зарегистрироваться для просмотра ссылки
Попробуйте в транзакции.


Шоб еще медленнее? why.gif
sava1
Цитата(DartRomanius @ 26.06.14, 15:03) необходимо зарегистрироваться для просмотра ссылки
Шоб еще медленнее?

Не факт. Только транзакции делать небольшими - 20-50 документов
DartRomanius
Цитата(sava1 @ 26.06.14, 15:35) необходимо зарегистрироваться для просмотра ссылки
Не факт. Только транзакции делать небольшими - 20-50 документов


Если гоню, то поправьте.
Документ проводится/удаляется(пометка удаления) в собственной транзакции.
sava1
1.Документ удаляется, правятся все регистры / таблицы БД, собственный лог в журнале, физическая запись таблиц

при транз.
физическая запись происходит один раз для транзакции
DartRomanius
Цитата(sava1 @ 26.06.14, 15:43) необходимо зарегистрироваться для просмотра ссылки
1.Документ удаляется, правятся все регистры / таблицы БД, собственный лог в журнале, физическая запись таблиц

при транз.
физическая запись происходит один раз для транзакции


ммм.... эээ....
может я не так понимаю...

ИМХО:
документ работает со своей транзакцией
а если их пачками то это еще транзакция так сказать верхнего уровня?
sava1
Документ удаляется в своей транзакции (и это делает платформа), но никто не запрещает объявить транзакцию верхнего уровня:
НачатьТранзакцию.....Зафиксировать...Откатить

За счет более крупных транзакций обращений к физической таблице будет меньше (соответсвенно и блокировок тоже).
Не делать слишком больших транзакций - это вариант скорее из практики - чтобы не рос журнал транзакций

ну типа так...
DartRomanius
Цитата(sava1 @ 26.06.14, 15:54) необходимо зарегистрироваться для просмотра ссылки
Документ удаляется в своей транзакции (и это делает платформа), но никто не запрещает объявить транзакцию верхнего уровня:
НачатьТранзакцию.....Зафиксировать...Откатить

За счет более крупных транзакций обращений к физической таблице будет меньше (соответсвенно и блокировок тоже).
Не делать слишком больших транзакций - это вариант скорее из практики - чтобы не рос журнал транзакций

ну типа так...


Ну то есть получается как-то так:
1. Начинаем транзакцию. Это делает как бы личное пространство в таблицах.
2. Проводим где-то 50-100 доков, ну или удаляем, не важно. За счет того что в транзакции верхнего уровня мы как бы одни.
... как бы мы пока в транзакции мы не пишем в физическую таблицу, пока во временную?
3. если все норм, фиксируем транзакцию, собственно записываем уже агрегированно, плюс ко всему запись в 50-100 раз реже происходит.... smile.gif
4....
5. PROFIT

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.