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

Перепроведение документов

Автор Гамаюн1991, 29 июн 2015, 17:02

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

Гамаюн1991

Добрый день!
Помогите пожалуйста, нужно найти документ который еще не провели и перепровести его.
В отладчике РезультатЗапроса значение ="Ошибка чтения значения"....
Вот мой код :
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Проведен = Ложь";


РезультатЗапроса = Запрос.Выполнить().Выбрать();

Пока РезультатЗапроса.Следующий() Цикл
Объект = РезультатЗапроса.Ссылка.ПолучитьОбъект();
Объект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
КонецЦикла;

Rasty

А может проще через групповая обработка справочников и документ
Если хочется так, то:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Проведен = &Проведен";

Запрос.УстановитьПараметр("Проведен", Ложь);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Выборка.Ссылка.ПолучитьОбъект().Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
КонецЦикла;
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Гамаюн1991

Цитата: Rasty от 29 июн 2015, 17:07
А может проще через групповая обработка справочников и документ
Если хочется так, то:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
|ГДЕ
| ПоступлениеТоваровУслуг.Проведен = &Проведен";

Запрос.УстановитьПараметр("Проведен", Ложь);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Выборка.Ссылка.ПолучитьОбъект().Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
КонецЦикла;


Спасибо большое, но этот запрос очень долго выполняется, не подскажите можно ли через УстановитьИспользованиеИтогов() ускорить процесс?

Rasty

а на ваш взгляд сколько приблизительно документов не проведено?
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

LexaK

можно небольшое дополнение сделать?

ДОКУМЕНТЫ ПОМЕЧЕННЫЕ НА УДАЛЕНИЕ ПРОВОДИТЬ НЕ НАДО!!!

а по вашему запросу они могут попадать в вашу обработку,

поэтому условие хотя бы должно быть таким

|ГДЕ
| Не ПоступлениеТоваровУслуг.Проведен
|и Не ПоступлениеТоваровУслуг.ПометкаУдаления
|


при этом по хорошим правилам надо бы дать пользователю обрабатывать документы за нужный период,
если в базе документы за 10 лет, вряд ли надо проводить документы больше 1,2,3 голда назад
еще полезно включать сортировку,
еще в цикл надо вставить процедуру ОбработкаПрерыванияПользователя();
еще в цикл надо добавить вывод сообщения или состояния о ходе выполнения обработки
и т.д. и т.п.
если помогло нажмите: Спасибо!

Rasty

во истину, а я то и забыл :o
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Гамаюн1991

Цитата: LexaK от 29 июн 2015, 17:56
можно небольшое дополнение сделать?

ДОКУМЕНТЫ ПОМЕЧЕННЫЕ НА УДАЛЕНИЕ ПРОВОДИТЬ НЕ НАДО!!!

а по вашему запросу они могут попадать в вашу обработку,

поэтому условие хотя бы должно быть таким

|ГДЕ
| Не ПоступлениеТоваровУслуг.Проведен
|и Не ПоступлениеТоваровУслуг.ПометкаУдаления
|


при этом по хорошим правилам надо бы дать пользователю обрабатывать документы за нужный период,
если в базе документы за 10 лет, вряд ли надо проводить документы больше 1,2,3 голда назад
еще полезно включать сортировку,
еще в цикл надо вставить процедуру ОбработкаПрерыванияПользователя();
еще в цикл надо добавить вывод сообщения или состояния о ходе выполнения обработки
и т.д. и т.п.
Спасибо большое за замечание, учту и исправлю!

Теги:

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

Рейтинг@Mail.ru

Поиск