Код юного новичка-подавана, поэтому обработка вызывает недоверие.
Кто так пишет? Ужасно некрасивый код.
Есть ошибка с отбором по организации в обработке с отбором по организации.
Причем у автора зачем то две версии, видимо он не понял, что если организация не заполнена, то надо по всем докам делать обработку, кошмар.
Пришлось переписать так (на скорую руку):
Для Каждого ЭлементСписка Из СписокВидов Цикл
Если Не ЭлементСписка.Пометка Тогда Продолжить; КонецЕсли;
ЕстьОрганизация = (Не Организация.Пустая()) И (Не Метаданные.Документы[ЭлементСписка.Значение].Реквизиты.Найти("Организация") = Неопределено);
ТекстЗапроса = ?(ЗначениеЗаполнено(ТекстЗапроса), ТекстЗапроса
+ "
|
|ОБЪЕДИНИТЬ ВСЕ
|
|", "");
ТекстЗапросаТек =
СтрЗаменить("ВЫБРАТЬ
| Док.Ссылка КАК Ссылка,
| Док.Дата КАК Дата
|ИЗ
| Документ.ЗаказКлиента КАК Док
|ГДЕ
| Док.Дата >= &ДатаНачала
| И Док.Дата <= &ДатаКонца
| И Док.Проведен = ИСТИНА
| И Док.ПометкаУдаления = ЛОЖЬ", "ЗаказКлиента", ЭлементСписка.Значение);
Если ЕстьОрганизация И Не Организация.Пустая() Тогда
ТекстЗапросаТек = ТекстЗапросаТек
+ СтрЗаменить(ТекстЗапроса,
"И Док.ПометкаУдаления = ЛОЖЬ",
"И Док.ПометкаУдаления = ЛОЖЬ И Док.Организация = &Организация");
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + ТекстЗапросаТек;
ЕстьОтмеченныеЭлементы = Истина;
КонецЦикла;
Показать
Как видите, построение текста запроса ужасное. Зачем стрзаменять кусок кода, если можно стрзаменять параметр, например &УсловиеПоОрганизацие? Это что такое? Молодежь-молодежь!
Ну и если уж делаете красивую обработку, неужели трудно проверить состав плана обмена по метаданным? К чему эти попытки исключения?
Попытка
Если ПланыОбмена.ИзменениеЗарегистрировано(ВыборкаУзлов.Ссылка, Ссылка) Тогда
МассивУзлов.Добавить(ВыборкаУзлов);
КонецЕсли;
Исключение;
КонецПопытки;
Показать
Из плюсов могу ответить эстиматор, показывающий прогресс.
Самое главное - выводится список всех документов. А смысл? Мне нужно было только по регистру ТоварыОрганизаций, я доработал, без этого бесполезная приблуда:
&НаСервере
Процедура ПерезаполнитьВидыДокументов()
СписокВидов.Очистить();
Для Каждого ВидДокумента Из Метаданные.Документы Цикл
Если ТолькоПоДвижениямТоваровОрганизаций И ВидДокумента.Движения.Содержит(Метаданные.РегистрыНакопления.ТоварыОрганизаций)
ИЛИ НЕ ТолькоПоДвижениямТоваровОрганизаций
Тогда
СписокВидов.Добавить(ВидДокумента.Имя, ?(ЗначениеЗаполнено(ВидДокумента.Синоним), ВидДокумента.Синоним, ВидДокумента.Имя), Истина);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Да, я не пользовался распроведением, но логично же каждый документ отдельно распроводить, потом проводить, а не все скопом. Тем более не в транзакции, кто будет восстанавливать информацию о состоянии проведенности документа? У своих пользователей скрыл эту несомненно "вредную" галочку.
И кстати, в УТ11.4 есть такая шняга, которая включает очистку запасов, рекомендую, она быстрее работает чем распроведение. Тем более что распроведение у тебя опасное, без транзакции, может быть потеряно состояние проведенности документа.
Док.ДополнительныеСвойства.Вставить("ПерезаполнитьВидыЗапасов", Истина);
Док.Записать(РежимЗаписиДокумента.Проведение);
Но в принципе, очистки видов запасов достаточно. Но у тебя опять же лишний Записать есть после очистки ТЧ, а надо совмещать с проведением, это массовая обработка, тут скорость важна. Я доделал, сделал доп опцию "Проводить с перезаполнением запасов (УТ 11.4)":
ДокументОбъект = Ссылка.ПолучитьОбъект();
Если Провести Тогда
Если ПроводитьСПерезаполнениемЗапасов Тогда
ДокументОбъект.ДополнительныеСвойства.Вставить("ПерезаполнитьВидыЗапасов", Истина);
КонецЕсли;
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Рет = Истина;
Показать
На фоне всех этих замечаний меня совсем не удивило, что в модуле обработки нет сведений об обработке, т.е. добавить ее пользователям сразу нельзя. Беда-беда...
Автор, напиши на fixin*mail.ru, скину версию обработки чтобы обновил. Сейчас обработка на троечку.