Как исправить ошибку «#ИсключениеУжеЗафиксировано» при проведении реализации и расчете себестоимости в 1С:Управление торговлей 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе в программе 1С:Управление торговлей (редакция 11), а также в родственных конфигурациях 1С:Комплексная автоматизация 2 и 1С:ERP, пользователи и администраторы часто сталкиваются со сложной технической проблемой при проведении документов «Реализация товаров и услуг» или в процессе закрытия месяца. Программа выдает ошибку, ссылаясь на общий модуль УниверсальныеМеханизмыПартийИСебестоимости и регистр накопления ПартииТоваровОрганизаций, сопровождающуюся загадочной формулировкой #ИсключениеУжеЗафиксировано.

В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем внутренние механизмы партионного учета 1С и пошагово выясним, как вернуть базу данных в рабочее состояние и успешно рассчитать себестоимость за отчетный период.

Почему возникает ошибка «#ИсключениеУжеЗафиксировано»?

Для начала проанализируем суть происходящего внутри системы. Начиная с версии 11.4, в «1С:Управление торговлей» расчет себестоимости и распределение партий представляют собой сложнейший математический алгоритм, который решает системы линейных уравнений. Этот алгоритм работает в транзакции и нередко выполняется в многопоточном фоновом режиме.

Суть ошибки сводится к следующему: система запускает расчет партий по определенной группе документов. Программа рассчитывает движения для документа «Реализация товаров и услуг» и пытается записать новые данные в регистр накопления ПартииТоваровОрганизаций. Однако в этот же самый момент параллельный процесс (другой поток расчета, фоновое задание отложенных расчетов или действия пользователя, перепроводившего документ вручную) изменяет движения этого же документа или блокирует те же самые аналитики учета. Происходит конфликт транзакций, СУБД блокирует таблицы, и платформа 1С аварийно прерывает операцию с фиксацией исключения.

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

---

Шаг 1. Очистка и переформирование регистра «Задания к расчету себестоимости»

Как показывает практика и опыт практикующих специалистов, наиболее частой причиной сбоя являются некорректные записи в регистре сведений Задания к расчету себестоимости. В этот регистр программа автоматически записывает информацию каждый раз, когда пользователь создает или изменяет любые документы движения товаров. Если расчет за прошлые периоды содержал ошибки, эти задания накапливаются, зацикливаются и вызывают сбои при расчете текущего месяца.

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

Рассмотрим правильный алгоритм очистки и перерегистрации заданий:

  1. Откроем регистр сведений Задания к расчету себестоимости через «Функции для технического специалиста» (или «Все функции»).
  2. Если записей накопилось очень много за несколько лет, ручное удаление не поможет — система зависнет. В этом случае мы можем применить простую программную обработку для полной очистки регистра. Создадим внешнюю обработку и напишем следующий код:

НаборЗаписей = РегистрыСведений.ЗаданияКРасчетуСебестоимости.СоздатьНаборЗаписей();
// Записываем пустой набор, чтобы полностью очистить регистр сведений
НаборЗаписей.Записать(Истина);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Регистр 'Задания к расчету себестоимости' успешно очищен!");
  1. После полной очистки регистра нам необходимо заново зарегистрировать задания на расчет, но уже без системного мусора и только за актуальный период (например, текущий закрываемый месяц).
  2. Для этого мы воспользуемся типовой обработкой «Групповое перепроведение документов». Перейдем в раздел НСИ и администрирование — Обслуживание — Корректировка данных — Групповое перепроведение документов.
  3. Выберем период (закрываемый месяц) и запустим перепроведение только тех документов, которые влияют на складские остатки (Приобретения, Реализации, Перемещения, Сборки). При проведении этих документов система автоматически создаст новые, чистые и корректные записи в регистре Задания к расчету себестоимости.

---

Шаг 2. Отключение многопоточности при расчете себестоимости

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

По умолчанию 1С старается выполнять расчет себестоимости в несколько фоновых потоков для ускорения процесса на многопроцессорных серверах. Однако при сложных схемах обеспечения или использовании механизма «Интеркампани» (передачи товаров между организациями) эти потоки начинают конкурировать друг с другом за одни и те же таблицы СУБД.

Выполним следующие действия для перевода расчета в однопоточный режим:

  1. Перейдем в раздел Финансовый результат и контроллинг — Настройки и справочники.
  2. Найдем параметры расчета себестоимости. В зависимости от релиза конфигурации, ограничение количества потоков может находиться в форме настройки закрытия месяца или регулироваться системной константой.
  3. Временно установим количество фоновых потоков для расчета себестоимости равным 1.
  4. Запустим процедуру расчета себестоимости заново. В один поток расчет может выполняться несколько дольше, однако это гарантирует отсутствие взаимных блокировок и конфликтов транзакций СУБД.

---

Шаг 3. Анализ расхождений по регистрам партий и товаров

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

Выясним причину расхождения по шагам:

  1. Сформируем отчет «Ведомость по товарам организаций» с детализацией до позиций номенклатуры и организаций. Наша задача — проверить базу на наличие отрицательных остатков (так называемых «красных» остатков). Если по какой-то организации товар ушел в минус, партионный расчет не сможет сопоставить партию списания и вызовет сбой в общем модуле УниверсальныеМеханизмыПартийИСебестоимости.
  2. Если в базе используется схема «Интеркампани», проверим, оформлены ли документы «Передача товаров между организациями». Для автоматического выявления таких проблем воспользуемся встроенным инструментом: перейдем в Финансовый результат и контроллинг — Помощник исправления остатков товаров организаций. Данный помощник проанализирует продажи чужих товаров и предложит автоматически сформировать недостающие передачи.
  3. Сравним остатки по регистру накопления ТоварыОрганизаций и регистру ПартииТоваровОрганизаций. Сделать это можно с помощью универсального отчета по регистрам. Если количество товара по регистру товаров равно 2, а по регистру партий числится 0 (так как товар был списан прошлым месяцем, как в сообщении №8 на форуме), необходимо найти первопричину деления партий. Одной из частых ошибок является изменение документов прошлых периодов после того, как по ним уже был зафиксирован окончательный расчет себестоимости.

---

Шаг 4. Установка даты запрета редактирования и монопольный режим

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

Мы рекомендуем соблюдать строгий регламент закрытия отчетного периода:

  1. Перед запуском закрытия месяца перейдем в раздел НСИ и администрирование — Настройки пользователей и прав — Даты запрета изменения данных.
  2. Установим дату запрета редактирования для всех пользователей (включая администраторов) на последний день закрываемого месяца. Это гарантирует, что никто из сотрудников не сможет случайно перепровести документы в процессе расчета себестоимости.
  3. Попросим всех активных пользователей выйти из базы данных на время расчета себестоимости.
  4. Заблокируем выполнение регламентных и фоновых заданий, не относящихся к расчету себестоимости (например, отложим регламентную загрузку курсов валют, обмен с сайтом или классификаторами, чтобы они не создавали излишнюю нагрузку на СУБД и не вызывали эскалацию блокировок таблиц).

---

Шаг 5. Поиск и установка патчей (исправлений) конфигурации

Если все вышеперечисленные шаги выполнены, но при расчете себестоимости конкретного месяца система стабильно выбрасывает ошибку #ИсключениеУжеЗафиксировано в общем модуле партионного учета, мы имеем дело с внутренней программной ошибкой (багом) релиза конфигурации.

Разработчики фирмы 1С регулярно оптимизируют алгоритмы распределения партий и исправляют выявляемые коллизии. Чтобы решить проблему системного сбоя в кодовой базе:

  1. Запустим программу в режиме «1С:Предприятие» под правами администратора.
  2. Перейдем в раздел Администрирование — Обслуживание — Обновление программы — Установка обновлений и исправлений (патчей).
  3. Разрешим программе подключиться к Порталу ИТС для поиска доступных исправлений. По ключевому слову «ПартииТоваровОрганизаций» или названию общего модуля проверим наличие зарегистрированных ошибок для нашего релиза.
  4. Если для вашей версии конфигурации УТ 11 выпущены патчи, исправляющие расчет партий при возвратах, перемещениях или многопоточном расчете, установим их и перезапустим рабочий процесс сервера 1С:Предприятия.
  5. Если база давно не обновлялась, лучшим решением будет обновление конфигурации «1С:Управление торговлей» на актуальный релиз, где алгоритмы расчета себестоимости работают более стабильно и быстро.

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

← На главную