1с зависает при перепроведении документа

Обновлено: 07.07.2024

Нестабильно работает закрытие месяца -зависает на3% или более.
После выхода из 1с и заново открытой базы иногда срабатывает сразу закрытие, но на следующем периоде опять зависает.

До этого с трудом, при отсутствии документов реализации, но при наличии выписок банка и поступлении выручки на 62сч все закрытия до декабря провелись и сформировалась КУДИР.
Затем решила ввести помесячно реализацию по полученным ден.ср по клиентам.
Опять с большим трудом, периодически закрывая базу удалось добраться до декабря.

В чем может быть причина? Базу создавала сразу на этом релизе (100)

Яна, У меня то же самое подскажите как вы исправили ситуацию. Спасибо. Сергей , Здравствуйте! У меня настроена учетная политика с 01.04.2015, я начинаю закрывать апрель 2015 он предлагает мне перепровести март 2015, а когда начинаю его перепроводить он требует настроить учетную политику за 2015 год и так далее в обратную сторону.. Я уже почистила Неактуальные регламентные операции и сделала Исключенные из перепроведения месяцы ". Все равно не дает закрывать. Выручайте, а? попробуйте завести учетную политику на 2014 год и в Закрытии месяца за декабрь 2014 года отметить пропустить операцию перепроведение документов. Здравствуйте. Программа не дает провести месяцы. Все месяцы до этого сохранила в "Исключенные для перепроведения месяцы". Но программа все-равно требует их проводить. Через "Неактуальные регламентные операции" побоялась все удалять- список очень большой. Подскажите пожалуйста, что делать?


Алла2016
Здравствуйте. Программа не дает провести месяцы. Все месяцы до этого сохранила в "Исключенные для перепроведения месяцы". Но программа все-равно требует их проводить. Через "Неактуальные регламентные операции" побоялась все удалять- список очень большой. Подскажите пожалуйста, что делать?
И еще- учетная политика с 2011 года. И где отметка- пропустить операцию перепроведения документов ( у меня версия 8,3). Спасибо)) И другой вопрос. Была ошибка в ведомости по зарплате впрошлом периоде. В ведомости и расходнике исправила сумму, провела. Но, программа пишет, что обороты по документам и проводкам не совпадают. Не меняет сумму в проводке по счету в корреспонденции 70/50. Пробовала разные варианты- порядок записи документов, перепроводила документы за месяц. Ничего не помогает. В ведомости и расходнике стоит правильная сумма, они проведены, а по счету проводка со старым вариантом. Что нужно сделать? Спасибо)) (кстати, по предыдущему вопросу, отметку "пропустить операцию перепроведения нашла, но и это не помогает)

Доброго времени суток.

на сегодняшний день программа Бухгалтерия предприятия, редакция 3.0 (8.3.7.1949), конфигурация (3.0.43.147)


ООО в 2013 была на УСН - бухгалтер делает "закрытие месяца", при этом отмену "расчета УСН", а вводила исчисленный налог вручную.
2014г. 1 кв. - тоже УСН, тот же порядок действий.
2014г. 2 кв. - организация меняет налоговый режим на Общий, и продолжает делать закрытие месяца и отменять "расчет налога на прибыль"
2015 - организация на Общем режиме, начинает делать закрытие месяца и "расчет налога на прибыль" (это уже моя работа). При этом убыток прошлого года не переходит на новый финансовый год.

Мне сегодня делать закрытие месяцев с "расчетом УСН" за прошлые года? Делать закрытие месяцев с "расчетом налога на прибыль" за прошлые года? Сдавать исправительные (автоматически). ИЛИ ввести на начало 2016 года бухгалтерской проводкой убыток прошлых лет (97.21-99.01.1).

Необходимость в такой доработке возникла после того, как такая регулярная операция, как перепроведение месяца, перестала укладываться в ночь. Начальник IT сказал, что полгода назад всё было ОК, а значит, надо откатить все изменения, сделанные предыдущим программистом (я тогда только-только устроился на эту работу) за последние полгода, благо бэкап есть.
Идея интересная, чтобы не сказать больше, но я решил пойти другим путём: запустил замер производительности, перепровёл день и посмотрел, кто вылез в топ. Одним из рекордсменов оказалась процедура ОбщегоНазначения.УдалитьЗаписанныеДвиженияДокумента, которая вызывалась перед проведением каждого документа. Процедура записывает пустые наборы записей в каждый регистр, в котором проводимый документ является регистратором, что не есть хорошо, потому что обычно в большинстве этих регистров данный документ и так не делал движений.

Список регистров для очистки процедура получала от функции ПроведениеДокументов.МассивРегистровНужноОчистить, поэтому оставалось сделать так, чтобы эта процедура возвращала только те регистры, в которых есть движения.

Для этого в конфигурацию я добавил:

  • регистр сведений ГМ_НепустыеДвижения (по старой традиции этой конфигурации, истоков которой никто не помнит, все нетиповые объекты должны содержать префикс "ГМ_") с измерениями Документ (ведущее, основной отбор) типа ДокументСсылка и НомерРегистра (основной отбор) типа Число(3,0,Неотрицательное).
  • параметр сеанса ГМ_РегистрыПоНомеру типа ФиксированныйМассив
  • параметр сеанса ГМ_НомераРегистровПоИмени типа ФиксированноеСоответствие
  • справочник ГМ_НомераРегистров с кодом типа Число длиной 3 (должно совпадать с длиной измерения НомерРегистра)

Затем подправил процедуру ПроведениеДокументов.МассивРегистровНужноОчистить:

И добавил в привилегированный модуль процедуру, которую потом вызвал в начале процедуры ПередНачаломРаботыСистемы модуля обычного приложения:

И, наконец, добавил подписку на событие ПриЗаписи всех регистров накопления:

При очистке движений документа изменённая процедура ПроведениеДокументов.МассивРегистровНужноОчистить читает из регистра ГМ_НепустыеДвижения все записи по этому документу и возвращает массив регистров, для которых записи есть. Если нет ни одной записи, то работает старый алгоритм - на тот случай, если перепроводимый документ был проведён до того, как в конфигурацию были внесены эти изменения. Это также означает, что из регистра ГМ_НепустыеДвижения можно смело вычищать записи по документам из закрытых периодов, которые трогать не предполагается, так как в случае необходимости перепроведение этих документов пройдёт нормально без всяких дополнительных действий.

Upd

В комментариях мне указали на то, что переименование регистра приведёт к проблемам. Тут я вижу три способа с этим разобраться:

1. Непосредственно перед сохранением изменений конфигурации, включающих в себя переименование регистра, переименовать этот регистр в справочнике ГМ_НомераРегистров. Самый простой и быстрый способ, который, однако, требует помнить о такой необходимости, потому что если сохранить изменения в конфигурацию базы данных, воспользоваться этим способом уже не выйдет.

2. Очистить регистр ГМ_НепустыеДвижения. Способ на случай, когда не воспользовались первым. Справочник ГМ_НомераРегистров тоже можно очистить (я бы очистил), но необязательно.

3. Доработать алгоритм так, чтобы в справочнике ГМ_НомераРегистров также хранилось имя таблицы базы данных соответствующего регистра. При переименовании регистра имя таблицы не поменяется и это можно будет использовать в процедуре ПодготовитьНомераРегистров.

Я эту проблему решать не стал, потому что не помню, чтобы хоть раз менял имя регистра (разве что с ИмяРегистра на УдалитьИмяРегистра, но к этому моменту в регистре, как правило, всё равно не было записей), но эта проблема на самом деле не единственная, есть и более вероятная и неприятная: некоторые обновления релиза включают в себя какую-нибудь обработку записей регистров. При этом могут быть перезаписаны наборы записей в том периоде, для которого в регистре ГМ_НепустыеДвижения нет записей и тогда при перепроведении тех документов этого периода, которые делали движения по перезаписанному регистру, движения по всем остальным регистрам задвоятся. Неприятность этой второй проблемы в том, что вы не узнаете о ней по матюкам программы, как непременно узнаете о первой. Зато если вы про неё в курсе, решить её можно способом №2 из решений первой проблемы.

В качестве профилактической меры можно после каждого обновления релиза запускать обработку, которая бы удаляла записи из регистра ГМ_НепустыеДвижения до определённой даты. Такую обработку по-любому стоит иметь для того, чтобы удалять заведомо старые записи, ибо маленькие регистры быстрее работают.

Имеется типовой документ «Требование накладная" с типовыми же настройками УПП:

  • Удаление движений: Не удалять автоматически.
  • Запись движений при проведении: Записывать модифицированные.


Визуальное описание проблемы:

При первичном проведении документа движения по нетиповому (добавленному) регистру накопления выполняются успешно и корректно. При повторном проведении документа движения исчезают «загадочным образом». При последующем перепроведении документа движения опять появляются и т.д. То есть, то нет…

Доработок, связанных «непосредственно» с механизмом проведения в целом и конкретно по данному регистру накопления выполнено не было.

Анализ проблемы:

Анализ механизма проведения по добавленному регистру накопления показал, что разработчик данного механизма по уже неизвестным причинам решил выполнять движения НЕ обращаясь к коллекции движений документа, что было бы правильно, а выполняя запись движений посредством набора записей регистра накопления:



Однако же точно известно, что до недавнего времени перепроведение документа НЕ приводило к стиранию движений по этому регистру накопления.

Дальнейший анализ показал, что в модуль объекта документа в процедуру «ПередЗаписью()» недавно был добавлен код:


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

В Обработчике «ОбработкаПроведения()» имеется типовой вызов процедуры «ОбщегоНазначения.УдалитьДвиженияРегистратора(), который очищает все движения регистратора:


Процедура «ОчисткаКоллекцийДвиженийДокумента()» общего модуля «ОбщегоНазначения» очищает те коллекции движения, в которых количество больше 0:


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

Как результат мы видим, что вернувшись в обработку проведения модифицированность набора записей нашего регистра накопления осталась в значении «Ложь». Это значит, что движения выполнены НЕ будут типовым образом. Но мы уже выяснили, что разработчик внесет изменения в данные регистра накопления позже, используя метод «СоздатьНаборЗаписей()».

Теперь же перепроведем документ.

Перед выходом из процедуры «ПередЗаписью()» модифицированность набора записей стоит «Ложь»:


Теперь в процедуре ОчисткаКоллекцийДвиженийДокумента()» наш набор записей содержит количество больше 0 и очищается:


Абсолютно логично, что теперь модифицированность нашего набора записей взведена в положение «Истина»:


После этого мы до окончания транзакции проведения зайдем в отдельную процедуру, выполняющую движения по нашему регистру накопления «вручную», а не посредством набора движений, и произведем эти самые движения. Однако набор записей, содержащийся в объекте документа НЕ станет заполнен (мы его сами только что очистили на предыдущем скриншоте):


Результат теперь очевиден – мы запишем пустые движения, т.к. согласно настройкам должны записывать модифицированные наборы. А наши «ручные» усилия пропадут, т.к. будут стерты пустым набором записей…

После анализа всё становится логично и понятно, кроме одного момента – почему, если убрать конструкцию «Набор.Прочитать()» в процедуре «ПередЗаписью()», то проблема «исчезновения движений» отсутствует??

Ответ оказался следующим:

Если мы не читаем набор записей принудительно подобной конструкцией, то все движения в объекте документа у нас пустые:


Абсолютно все. Получается, что в отсутствие принудительного чтения мы как будто бы «первый раз проводим» наш девственно чистый документ. Действия по очистке движений в процедуре «Обработка проведения» в данном случае не выполняются, т.к. наборы не прочитаны (они пустые) и модифицированность не взводится. Движения заполнятся и модифицированность взведется дальше в логике ОбработкиПроведения.

Выводы:

  1. Движения в подчиненные регистраторам регистры нужно выполнять через движения объекта документа, а не «вручную».
  2. Мистики не бывает – на все есть причина – главное ее найти.

Возможно, для большинства написанное покажется «детским садом», поэтому заранее прошу их реагировать поспокойнее. При написании данной статьи хотелось в первую очередь для себя уложить в голове причину «загадочного поведения» документа. Надеюсь, что кому-то это будет полезно.

Здравствуйте! У меня конфигурация 3.0.39.56. При закрытии февраля не перепроводятся документы, месяц не закрывается. Подскажите!

NadyaLeonidovna ,что пишет при этом?

Prikum , спасибо, что ответили. А программа ничего не пишет. Просто "подумает" немного и оставляет все как есть. Как будто не реагирует на команду.

NadyaLeonidovna ,почему решили что есть какая то ошибка?

Prikum , не могу закрыть месяц. Ничего не происходит при попытке закрыть месяц: ошибок не пишет, документы остаются не перепроведенными.

NadyaLeonidovna ,я так не подскажу, не могу понять какие документы остаются непроведенными и что Вы там делаете. Надо на месте смотреть.

Prikum ,спасибо! Конечно, так трудно. Попробую "погонять". При нажатии кнопки "перепроведение документов за февраль" ничего не происходит.

NadyaLeonidovna ,окошко с выбором операции выходит? После проведения ссылка не становится зеленой?

Prikum , да, ссылка вроде работает, начинает что-то делать, но секунд через 5, опять синего цвета, зеленой не становится.

Читают тему:

Мероприятия

1C:Лекторий: 25 ноября 2021 года (четверг, начало в 12:00) — Специальные механизмы в "1С:ЗУП 8" (ред. 3)

  • Где купить СОФТ
  • Вакансии фирм-партнеров "1С"
  • Центры Сертифицированного Обучения
  • Интернет курсы обучения "1С"
  • Самоучители
  • Учебный центр № 1
  • Учебный центр № 3
  • Сертификация по "1С:Профессионал"
  • Организация обучения под заказ
  • Книги по 1С:Предприятию

При использовании материалов активная прямая гиперссылка на перепечатанный материал обязательна.

Редакция БУХ.1С не несет ответственности за мнения и информацию, опубликованную в комментариях к материалам.

Редакция уважает мнение авторов, но не всегда разделяет его.

Дизайн сайта

Мы используем файлы cookie, чтобы анализировать трафик, подбирать для вас подходящий контент и рекламу, а также дать вам возможность делиться информацией в социальных сетях. Если вы продолжите использовать сайт, мы будем считать, что вас это устраивает.

Читайте также: