Перепроведение документов (управляемый интерфейс) с возможностью очистки Видов Запасов (УТ11) и отменой регистрации в планах обмена.

0. 1221 20.08.12 11:56 Сейчас в теме
В основном предназначена для УТ11. Умеет при проведении:
1. Очищать таблицу "ВидыЗапасов".
2. Отменять регистрацию в планах обмена.
3. Сначала распровести все документы, а потом провести их.
4. Может работать со списком документов (отбор по виду документа и интервалу), или по индивидуальному набору (поддерживает drag&drop, например из регистров)

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alika 14.08.13 17:56 Сейчас в теме
Возникла необходимость очистить Виды запасов, а затем перепровести документы. Очень пригодилась эта обработка. Спасибо
2. Marka_ 14 27.08.13 09:25 Сейчас в теме
Обработка очень помогла. Спасибо.
3. Atom74 36 03.12.13 09:10 Сейчас в теме
Не заменима при корректировках задним числом. Спасибо.
4. Flashback1979SE 05.12.13 03:59 Сейчас в теме
Зачетная штука, когда надо перепровести документы, для перезаполнения аналитик по регистрам (аналитика по партнерам, аналитика по номенклатуре), в моем случае, после "кривой" свертки дублей справочников пользователем.
5. Flashback1979SE 05.12.13 03:59 Сейчас в теме
Еще можно добавить возможность перепроведения по списку регистров...
6. Flashback1979SE 05.12.13 04:00 Сейчас в теме
Можно при этом использовать стандартные процедуры из процедуры проведения каждого типа документа
7. maxx 945 25.11.14 10:02 Сейчас в теме
Ошибка похоже есть в этой обработке, документ перепроводятся в случайном порядке и не в хронологическом.

Не Нужно при переборе отсортированного по дате массива документов использовать инструкцию "Для каждого"
8. tedkuban 36 24.04.15 21:21 Сейчас в теме
Вот небольшая корректировка. Делает две вещи:

1. Документы проводятся в правильной последовательности
2. Изменена передача параметров дат в запрос (мне непонятно, как работает указание даты без времени в запросе по >= или <=)

Если ЕстьОтмеченныеЭлементы Тогда
ТекстЗапроса = "ВЫБРАТЬ
| ТаблицаДокументов.Ссылка КАК Ссылка,
| ТаблицаДокументов.Дата КАК Дата
| ИЗ
| (" + ТекстЗапроса +

") КАК ТаблицаДокументов
|
|УПОРЯДОЧИТЬ ПО
| Дата";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(Интервал.ДатаНачала));
Запрос.УстановитьПараметр("ДатаКонца", КонецДня(Интервал.ДатаОкончания));
9. 0pex 164 14.07.15 18:24 Сейчас в теме
По хорошему надо отмену проведеня и обратное проведение засунуть в одну транзакцию. Был случай, запускал эту обработку на большой конфигурации, что-то в начале не провелось и все - баста, половина документов осталась непроведенной - испортил базу. Ищи, свищи, что было проведено ранее, а что нет.
10. clcru 08.03.16 12:02 Сейчас в теме
Выдает ошибку на 1С:Предприятие 8.3 (8.3.7.1949) Управление торговлей, редакция 11.2 (11.2.3.101):
"{Форма.Форма.Форма(185)}: Ошибка при вызове метода контекста (Выполнить)
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
по причине:
{(75, 37)}: Поле не найдено "Док.Организация"
И Док.ПометкаУдаления = ЛОЖЬ И Док.<<?>>Организация = &Организация"
11. shashko 16.05.16 09:14 Сейчас в теме
(10) clcru, Здравствуйте. тоже ищу такую обработку для УТ 11.2. У Вас что-нибудь получилось?
18. tedkuban 36 27.07.17 17:57 Сейчас в теме
12. sergik_nsk 142 27.07.17 13:17 Сейчас в теме
не работает ваша обработка
ПерепроведениеДокументовСВозможностьюОтбораПоОрганизации.epf
ошибка {ВнешняяОбработка.ПерепроведениеДокументов.Форма.Форма.Форма(185)}: Ошибка при вызове метода контекста (Выполнить)
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
по причине:
{(75, 37)}: Поле не найдено "Док.Организация"
И Док.ПометкаУдаления = ЛОЖЬ И Док.<<?>>Организация = &Организация
14. mxm2 1221 27.07.17 13:21 Сейчас в теме
(12) очевидно, что в выборку попадают документы, в которых нету реквизита "Организация", проверьте типы документов в списке
13. sergik_nsk 142 27.07.17 13:19 Сейчас в теме
торговля ут11.3,
хотелось взять и чтоб работало, а оно как всегда
15. mxm2 1221 27.07.17 13:21 Сейчас в теме
(13)было написано давно... во времена 11.0...
19. sergik_nsk 142 28.07.17 12:59 Сейчас в теме
(15) так надо допилить, либо в теме указать, работает только с ут11.0
20. mxm2 1221 01.08.17 08:21 Сейчас в теме
(19) Если в выбранном типе документа нет реквизита "Организация", то будет выдавать ошибку. "{(75, 37)}: Поле не найдено "Док.Организация"". Чисто в теории эта обработка будет работать во всех версиях УТ 11 (да и вообще в любой конфигурации на управляемых формах, имеющей соответствующий реквизитный состав).
16. user803833 27.07.17 13:34 Сейчас в теме
Добрый день! Может пишу не по теме, но у меня проблема( при перемещении товаров в магазин, некоторые наименования номенклатуры перемещаются с нулевым количеством. И одна из позиций номенклатуры привязана к предыдущей поставке
17. tedkuban 36 27.07.17 17:50 Сейчас в теме
(16) Боюсь, совсем не по теме. Тем более, без указания используемой конфигурации и ее версии, сказать что-нибудь совсем сложно.
21. fixin 4094 09.04.20 14:28 Сейчас в теме
Код юного новичка-подавана, поэтому обработка вызывает недоверие.
Кто так пишет? Ужасно некрасивый код.

Есть ошибка с отбором по организации в обработке с отбором по организации.
Причем у автора зачем то две версии, видимо он не понял, что если организация не заполнена, то надо по всем докам делать обработку, кошмар.

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

Показать


Как видите, построение текста запроса ужасное. Зачем стрзаменять кусок кода, если можно стрзаменять параметр, например &УсловиеПоОрганизацие? Это что такое? Молодежь-молодежь!

Ну и если уж делаете красивую обработку, неужели трудно проверить состав плана обмена по метаданным? К чему эти попытки исключения?

			Попытка
				Если ПланыОбмена.ИзменениеЗарегистрировано(ВыборкаУзлов.Ссылка, Ссылка) Тогда
					МассивУзлов.Добавить(ВыборкаУзлов);
				КонецЕсли;
			Исключение;	
			КонецПопытки; 

Показать


Из плюсов могу ответить эстиматор, показывающий прогресс.

Самое главное - выводится список всех документов. А смысл? Мне нужно было только по регистру ТоварыОрганизаций, я доработал, без этого бесполезная приблуда:

&НаСервере
Процедура ПерезаполнитьВидыДокументов()
	СписокВидов.Очистить();
	Для Каждого ВидДокумента Из Метаданные.Документы Цикл
		Если ТолькоПоДвижениямТоваровОрганизаций И ВидДокумента.Движения.Содержит(Метаданные.РегистрыНакопления.ТоварыОрганизаций) 
			ИЛИ НЕ ТолькоПоДвижениямТоваровОрганизаций
		Тогда
			СписокВидов.Добавить(ВидДокумента.Имя, ?(ЗначениеЗаполнено(ВидДокумента.Синоним), ВидДокумента.Синоним, ВидДокумента.Имя), Истина);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать



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


И кстати, в УТ11.4 есть такая шняга, которая включает очистку запасов, рекомендую, она быстрее работает чем распроведение. Тем более что распроведение у тебя опасное, без транзакции, может быть потеряно состояние проведенности документа.

Док.ДополнительныеСвойства.Вставить("ПерезаполнитьВидыЗапасов", Истина);                 
Док.Записать(РежимЗаписиДокумента.Проведение);


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

Показать



На фоне всех этих замечаний меня совсем не удивило, что в модуле обработки нет сведений об обработке, т.е. добавить ее пользователям сразу нельзя. Беда-беда...


Автор, напиши на fixin*mail.ru, скину версию обработки чтобы обновил. Сейчас обработка на троечку.
22. mxm2 1221 09.04.20 17:59 Сейчас в теме
(21)Давненько было... Даже не вспомню, что бы возразить )). Про Попытку-исключение пожалуй соглашусь.
23. fixin 4094 09.04.20 18:12 Сейчас в теме
(22) будь мужиком, перепиши. Я взял и переписал в свое время перенос настроек пользователей. Ну или хотя бы мою версию возьми.

А че вспоминать, я весь код тебе выложил. Ты изменил стиль или все еще так же ужасно кодишь?
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Руководитель проектов 1С
Санкт-Петербург
зарплата от 120 000 руб. до 170 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 80 000 руб. до 150 000 руб.
Полный день

Ведущий аналитик 1С
Санкт-Петербург
зарплата от 90 000 руб. до 150 000 руб.
Полный день

Преподаватель 1С
Санкт-Петербург
зарплата от 100 000 руб. до 120 000 руб.
Временный (на проект)