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