перепроведение исправленного документа

Новая тема
Показывать по 10 20 40 сообщений
Уважаемые коллеги! Как перепровести документ (начисления з-ты, например) за прошлый  (2013) период, если к нему есть документ-исправление. Необходимость этого возникла из-за "кривой регистрации" этих самых ОКТМО.
Я писал обрботку примерно с таким алгоритмом:
1. Поиск документов-исправлений и отвязывание в них перерасчитываемого документа.
2. Перепроведение документа.
3. Привязка перерасчитываемого документа обратно к документам-исправлениям.
Все это в транзакции.
До сих пор загадка для меня – а если просто отвяжу исправление и проведу документы по отдельности, то что–нибудь разве испортиться?
кто его знает?! Но рисковать не хочется - не тот случай, и времени на эксперимент нет :-(
> Я писал обрботку
а поделиться? :-)
Да в том то и вопрос, что я так делала. И ничего нигде не вылазило. Вот стало интересно, может я чего–то не вижу
"Этой обработкой я выправлял 2 года назад НДФЛ и написал побыстрому. Там перепроведение не только ЗП, а всех возможных документов, которые двигают НДФЛ. В том числе за период и с возможностью отбора по физлицу и еще куча всяких вариантов проведения. И с тех пор я ей не пользовался, поэтому не хотелось бы выкладывать тут неизвестно что.
А нужная процедура вот она... Только надо на форму обработки вывести ссылку на документ и в процедуру кнопки вставить вызов ПерезаписатьДокумент().
Еще раз повторюсь, процедура для универсального проведения, если надо только ЗП, то можно упростить.


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

Быстрый переход