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

Обработка удаления документов

Автор BEV, 13 окт 2015, 14:27

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

BEV

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

При выполнении ничего не происходит, пометка на удаление не ставится.


Kironten

Существует обработка ИТС "Групповая обработка справочников и документов", которая прекрасно решает все ваши проблемы.

DmitriyF

Цитата: BEV от 13 окт 2015, 14:27
Всем привет! Помогите начинающему!
Необходимо создать обработку, которая позволяет пометить на удаление документы указанного пользователем типа за указанный им период.
Мой вариант: Есть документ ПриказОПриемеНаРаботу. Но форму списка поместил команду Удалить документы за период. Она открывает форму УдалениеДокументов. В ней есть два реквизита: ДатаНачала, ДатаКонца. Пользователь указывает даты и нажимает на кнопку удалить. В модуле процедура:
&НаСервере
Процедура Удалить(Команда)
      Элемент = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Элемент;
Запрос.Текст =
      "ВЫБРАТЬ
   |   ПриказОПриемеНаРаботу.Ссылка,
   |   ПриказОПриемеНаРаботу.ВерсияДанных,
   |   ПриказОПриемеНаРаботу.ПометкаУдаления,
   |   ПриказОПриемеНаРаботу.Номер,
   |   ПриказОПриемеНаРаботу.Дата,
   |   ПриказОПриемеНаРаботу.Проведен,
   |   ПриказОПриемеНаРаботу.Фамилия,
   |   ПриказОПриемеНаРаботу.Имя,
   |   ПриказОПриемеНаРаботу.Отчество,
   |   ПриказОПриемеНаРаботу.ДатаРождения,
   |   ПриказОПриемеНаРаботу.Подразделение,
   |   ПриказОПриемеНаРаботу.Должность,
   |   ПриказОПриемеНаРаботу.Комментарий,
   |   ПриказОПриемеНаРаботу.ТабличнаяЧасть1.(
   |      Ссылка,
   |      НомерСтроки,
   |      СемейноеПоложение,
   |      ПаспортныеДанные
   |   )
   |ИЗ
   |   Документ.ПриказОПриемеНаРаботу КАК ПриказОПриемеНаРаботу
   |ГДЕ
   |   ПриказОПриемеНаРаботу.Дата >= &Дата1
   |   И ПриказОПриемеНаРаботу.Дата <= &Дата2";
   Запрос.УстановитьПараметр("Дата1", ДатаНачала );
   Запрос.УстановитьПараметр("Дата2", ДатаКонца);
   Выборка = Запрос.Выполнить().Выбрать();
   
   Пока Выборка.Следующий() Цикл
   ТекущийОбъектНоменклатура = Выборка.Ссылка.ПолучитьОбъект();
   ТекущийОбъектНоменклатура.ПометкаУдаления = Истина;
   ТекущийОбъектНоменклатура.Записать();
   Сообщить("Объект удален!");
КонецЦикла;
КонецПроцедуры

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

ferrari314

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

И отбор по типу документа забыл отразить в запросе.
И лишнюю хрень зачем получаешь? Получай только ссылку и поля по которым идет отбор экономишь скорость чтения кода человеком и получения данных машиной.


NastyStep

Цитата: ferrari314 от 14 окт 2015, 09:28
Много лишнего хлама.
МенеджерВременныхТаблиц убери нафиг, откуда это вообще прилипло?
Просто:
Запрос = Новый запрос.
Запрос.Текст ="ВЫБРАТЬ
   |   ПриказОПриемеНаРаботу.Ссылка,
   |   ПриказОПриемеНаРаботу.Дата
   |ИЗ
   |   Документ.ПриказОПриемеНаРаботу КАК ПриказОПриемеНаРаботу
   |ГДЕ
   |   ПриказОПриемеНаРаботу.Дата МЕЖДУ &Дата1 И &Дата2";
   Запрос.УстановитьПараметр("Дата1", ДатаНачала );
   Запрос.УстановитьПараметр("Дата2", ДатаКонца);
ТЗ = Запрос.Выполнить().Выгрузить();
Для каждого документ из ТЗ Цикл
ОбъектДокумент = Документ.Ссылка.ПолучитьОбъект();
ОбъектДокумент.ПометкаУдаления = Истина;
ОбъектДокумент.Записать();
КонецЦикла;

И отбор по типу документа забыл отразить в запросе.
И лишнюю хрень зачем получаешь? Получай только ссылку и поля по которым идет отбор экономишь скорость чтения кода человеком и получения данных машиной.
:btbzdb:
Не могли бы вы помочь включить в запрос отбор по типу документа?

cska-fanat-kz

1.кидаешь на форму строковое поле
2.в ПриОткрытии() заполняешь его список выбора именами документов из метаданных
3.подменяешь выделенное место на то что у тебя в поле
|ИЗ
   |   Документ.ПриказОПриемеНаРаботу КАК ПриказОПриемеНаРаботу
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

NastyStep

Цитата: cska-fanat-kz от 06 апр 2016, 12:50
1.кидаешь на форму строковое поле
2.в ПриОткрытии() заполняешь его список выбора именами документов из метаданных
3.подменяешь выделенное место на то что у тебя в поле
|ИЗ
   |   Документ.ПриказОПриемеНаРаботу КАК ПриказОПриемеНаРаботу

Логика понятна, реализовать не получается:(
т.е. именно заполнение списка именами документов и синтаксис следующего действия.
Подскажите, пожалуйста.

cska-fanat-kz

СписокДокументов = Новый СписокЗначений;
Для каждого Док Из Метаданные.Документы Цикл
    СписокДокументов.Добавить(Док.Имя, Док.Синоним);
КонецЦикла;

не проверял, лень )
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Hedinnk

Правильнее использовать УстановитьПометкуУдаления
На форуме есть волшебная кнопка "Сказать СПАСИБО"

cska-fanat-kz

Цитата: Hedinnk от 17 апр 2016, 08:52
Правильнее использовать УстановитьПометкуУдаления

может вы просветите в чем разница?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

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

Рейтинг@Mail.ru

Поиск