Обработка для удаления движений у непроведенных документов.
Иногда случается так, что документ помечен как непроведенный, однако по нему остались движения. Такие ситуации создают дополнительные проблемы при выверке данных. Для избежания этого достаточно с определенной периодичностью запускать эту обработку. Обработка позволяет обнаружить и удалить движения у непроведенных документов.
А обясните коллега, как это могут остатся движения, если документ не проведен? Может программисту по щупальцам надавать за модуль Проведения/ОтменыПроведения документа, чем лобазить подобные обработки?
+ к (1) Обратите внимание на абзац после слов «Оценка сообщества» и на последнюю строчку вашего описания — не находите, что или что-то лишнее, или одно из двух?
Иногда в наследство достается конфа с огромным количеством доработанного функционала среди которого могут быть очень неожиданные кривости. И отловить все такие точки достаточно сложно и долго. А работать как-то дальше надо =)
+(2) Автор уберите из описание
«Активно ставим плюсики если пригодилось ;)»
а то будет расценено совершено противоположно
«Активно ставим МИНУСА если не пригодилось — не проходите мимо»
(3) Возможно, возможно…. Но косяки поЛЮБЭ надо исправлять.
а как относительно (2)? Вымогательство плюсов не ИС не приветствуется — об этом администрация уже подсуетилась.
Вот и чудненько.
Хотя, Tatitutu, не вспомнишь — вроде подобная обработка уже где-то представлялась на ИС? Интересно, автор просмотрел аналоги, прежде чем выкладывать…
Ну что ж пусть сообщество заценит теперь эту штукойовину — описание подправлено, скрин есть — претензий естественно больше нет.
(7) Молодец — все оперативно исправил.
(многие 7-ники в страшном сне представить себе не могут — у непроведенного документа — движения по регистрам)
(8) Это действительно страшный сон. Но уж если если приснилась северная лиса (писец) регистрам, то эта обработка будет прлезна. А посему ставим +.
+ к (9) А товарищ автор не пробовал опять провести и отменить проведение документа? Ведь по логике: если при первой отмене регистры по каким-либо причинам не очистились (транзакция, землетрясение в Индонезии), то при второй ОБЯЗАНЫ.
(10) Иногда такой документ нельзя провести в силу всяческих контролей (заполненность обязательных реквизитов, наличие остатков и т.д.)
(1) Надавайте по щупальцам программистам 1с (: Ситуация с непроведенными документами с движениями возникает в стандартных конфах в разных ситуациях. Например при активном использовании УРБД. Опять-таки движения в таком документе часто можно решить Документ.Записать(РежимЗаписиДокумента.ОтменаПроведения). Для себя в комплексной обработке делал такое. Завтра оценю на работе код. Может в расширенном виде лучше будет.
Добавлю про наличие проводок у непроведенных — встречается. Например, в некоторых партнерских конфигурациях, в которых не только сие чудо случается по необъяснимой причине (безо всяких РИБ), но и другие не менее чудные неприятности типа затроения движений по некоторым регистрам, закономерность появления которых не смогли выявить даже разработчики, а потому заботливо вставили прямо в конфу обработки, подобные выложенной здесь 🙂
(1) Для 8-ки явление непроведенного документа с движениями очень распространено: так в таблице регистров есть колонка «Активность» и у непроведенного документа могут быть записи в регистре с Активностью = ложь.
При необходимости, при проведении документа, в определенных случаях не нужно делать повторные расчеты, а достаточно изменить одну запись, а остальным поставить активность = истина. Это резко увеличивает скорость проведения (аналог вкл./выкл. проводок операции в 7.7). Станадартные запросы 1с к регистрам игнорируют «неактивные» записи регистров. Если работаете с прямыми запросами к базе, не забудьте учесть «Активность» в запросе.
Для «старых» документов в «закрытом» периоде неактивные записи регистров являются «информационным мусором». Их имеет смысл и удалить для сокращения объема базы.
Спасибо, пригодится.
Есть одно замечание — в параметр запроса вместо ДатаКон поставить КонецДня(ДатаКон) — больше документов найдет 🙂
И есть еще пожелание — чтоб можно было как-то посмотреть, по какому регистру есть движения у этих непроведенных документов, чтоб потом анализ сделать — кому по рукам бить (себе, как программисту, или юзерам, или платформе…)
(6) (15)http://infostart.ru/projects/652/
(16) Дим, а у тебя там скрина нет…. Нехорошо…. Добавь скрины — от меня плюсара.
Скажу честно, была такая ситуация с одним документом, он был не проведен, но движения были. Выловил его по отчетам, потом провел и опять сделал не проведенным. Движения исчезли.
Была. бы у меня раньше такая обработка, не пришлось бы ковырять отчеты: запустил и все исправилось.
Спасибо автору за разработку.
(16) Видел, хорошая штука. Основное отличие от этой — нет анализа движений по регистрам бухгалтерии, а тут есть.
Сам сталкиваюсь с подобной проблемой неоднократно при загрузке данных из ТиС 7.7 в БП 8.1. Очень часто бывают такие ситуации особенно если проведение документа вида «Возврат поставщику» програмно отменяется из-за какой-либо ошибки (например отсутствуют остатки партий указанного поставщика в должном количестве) — все сделанные проведения до момента ошибки остаются. Кажется приходилось помечать документ на удаление. Но это гемор — отслеживать движения и проверять проведен документ или нет. Тем более, что он проводится частично и от этого неизбежны косяки в учете.
Тут еще одна беда бывает когда при перезаписи документа (в режиме «Проведение») записи регистра удваиваются!
Сегодня как раз была такая проблема! Самое интересное это у нас в Казахстане в типовой сделали изменения (запретили автоматическое удаление движений) и прописали их в событии ОбработкаУдаленияДвижений 🙂 я когда увидел чуть не упал. Короче результат таков: куча не проведенных документов по которым есть проводки.
Сколлько понакомментили )
(1) Объясню и я коллеге ) Посмотри документ в любой типовой «Корректировка записей регистров накопления», у него вообще выключена возможность проведения, а следовательно Проведен всегда равно Ложь. И при этом у него конечно же могут быть движения.
Это просто пример. В данном случае все регулируется Активностью. Я к тому что для восьмерки такая ситуация не следствие косяков программиста.
ЗЫ: Кстати! Автор, Ваша обработка такие движения тоже найдет и потрет преспокойненько??? ))) Или же все-таки есть проверка на разрешено/запрещено проведение (я не качал)?…
Для этих целей в обработке есть флажки в табличной части, если у какого-то документа не надо удалять движения, просто не устанавливайте флажок обработки.
(0) Поставлю плюс, но все-таки ценности вашей обработки не понимаю. Во-первых в типовых конфах практически всегда присутствуют документы, у которых есть движения, но которые при этом не проводятся (у них даже свойство «Проведение» стоит в положение «запрещено»). Посмотрите хотя бы на «Операция» в УПП или на «Перенос данных» в ЗиУП. Даже на признак «проведения» опираться нельзя. Как говорилось выше, в типовых конфах существуют механизмы оптимизации проведения документов, при которых записи не удаляются, а помечаются неактивными.
Во-вторых, такую штуку можно сваять в консоли запросов за пару минут.
(23) Ну это же не дело совсем!
Разве нельзя не помечать такие документы по-умолчанию или выделять их как-то или вообще не включать в список? Добавьте немного интеллектуальности обработке — это не сложно, а не опытного админа убережет от лишних проблем.
(24,25) Документы, у которых не установлен признак разрешения проведения, в список не включаются.
Тоже сталкивалась с этой проблемой, полезная вещь 🙂 +
Полезная штука, я тоже сталкивалась, ставлю +, токо для УПП строчку надо поправить:» ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»Период «,»Регистратор.Дата «);
«, а то Случился такой регистр «ПериодыРаботыРАботников» и Ваше СтрЗаменить цеплялось за него..
бред какой-то 🙂
изменила
ах, там таких много…
У меня, к сожалению, не нашла такой документ. Хотя Активность = Истина, Док.Проведен = Ложь, и движения в общем-то есть. Конфигурация УТ, документ «Отчет о розничных продажах». Просто на 1 из регистров не дал права на изменение. Но 2-м регистрам движения появились, а по остальным нет. Обработку запускал под полными правами. Обратку (ну или идею) считаю полезной, но «+» не ставлю, т.к. проверка не пройдена.
А для чего вот это?
Процедура ОбработатьДвижения(ИмяРегистра,ВидРегистра,Периодический=Истина)
Запрос= Новый Запрос;
ТекстЗапроса =
«ВЫБРАТЬ
| БракВПроизводстве.Регистратор.Ссылка КАК Ссылка
|ИЗ
| РегистрНакопления.БракВПроизводстве КАК БракВПроизводстве
|ГДЕ
| БракВПроизводстве.Регистратор.Проведен = ЛОЖЬ
| И БракВПроизводстве.Период МЕЖДУ &ДатаНач И &ДатаКон»;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»БракВПроизводстве»,ИмяРегистра);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»РегистрНакопления»,ВидРегистра);
Если НЕ Периодический Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,»Период»,»Регистратор.Дата»);
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр(«ДатаНач»,ДатаНач);
Запрос.УстановитьПараметр(«ДатаКон»,ДатаКон);
ТаблицаРезультата = Запрос.Выполнить().Выгрузить();
Если ТаблицаРезультата.Количество() Тогда
ОбщегоНазначения.ЗагрузитьВТаблицуЗначений(ТаблицаРезультата,ТЗДокументы);
КонецЕсли;
КонецПроцедуры
А вызывается это так:
//Регистры накопления
Для каждого Регистр Из Метаданные.РегистрыНакопления Цикл
Состояние(«Обрабатывается регистр накопления: «+Регистр.Имя);
ОбработатьДвижения(Регистр.Имя,»РегистрНакопления»);
КонецЦикла;
//Регистры сведений
Для каждого Регистр Из Метаданные.РегистрыСведений Цикл
Если Регистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору Тогда
Состояние(«Обрабатывается регистр сведений: «+Регистр.Имя);
Периодический = (Регистр.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический);
ОбработатьДвижения(Регистр.Имя,»РегистрСведений»,Периодический);
КонецЕсли;
КонецЦикла;
//Регистры бухгалтерии
Для каждого Регистр Из Метаданные.РегистрыБухгалтерии Цикл
Состояние(«Обрабатывается регистр бухгалтерии: «+Регистр.Имя);
ОбработатьДвижения(Регистр.Имя,»РегистрБухгалтерии»);
КонецЦикла;
Вроде в аннотации написано, что «Внешний отчет, обработка для 1С: Предприятие 8.1»
Извиняюсь, все относится к процедуре общего назначения. А так если переписать, то работает )))
Офигенная вещь, очень нужна когда тестируешь конвертацию данных!!! Очень часто возникают ситуации когда у документа снимается пометка проведения, а на факте проводки остаются. Удаляет всё как надо, никаких нареканий!
под 8.2 работает?
Ошибка, СтрЗаменяет сами знаете что при запросе в регистр ПериодическиеНачисления (Период). Надо заменять «%СтрокаЗамены%»
Вопрос…. а если надо наоборот провести документ и оставить все проводки. Период закрыт, только болтаются не проведенные доки. ВЕРНЕЕ — поставить на документ отметку проведения и все. не трогая регистров и проводок. Как это сделать?
Спасибо, пригодилось. Типовая бух 2.0
(38)
Через универсальную обработку выполнить алгоритм
Объект.Проведен = Истина;
Объект.Записать();
Но если период жестко закрыт — то даже записать без проведения не даст…
Спасибо. я так и делаю.