Как изменить тип склада в 1С:Бухгалтерия 3.0, если по нему уже проведены документы?

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

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

Почему программа блокирует изменение типа склада

Проанализируем логику работы типовой конфигурации. Запрет на редактирование данного реквизита установлен не случайно: тип склада определяет ключевые правила бухгалтерского учета материально-производственных запасов:

  1. Оптовый склад: учет номенклатуры ведется по стоимости приобретения на счете 41.01 («Товары на складах»).
  2. Розничный склад: учет может вестись либо по ценам приобретения на счете 41.02 («Товары в розничной торговле (покупная стоимость)»), либо по продажным ценам с выделением торговой наценки на счетах 41.11, 41.12 и 42 («Торговая наценка»).

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

Способ 1. Методически верное решение через создание нового склада

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

  1. Перейдем в раздел Справочники — Склады и создадим новый элемент справочника с требуемым типом (например, Оптовый склад).
  2. Оформим документ Перемещение товаров на текущую дату, указав в качестве склада-отправителя старый розничный склад, а в качестве получателя — созданный оптовый склад.
  3. При проведении документа программа корректно спишет остатки со счетов розничного учета (с учетом списания или сторнирования наценки на счете 42, если она применялась) и оприходует их на счет 41.01 по стоимости приобретения.
  4. В карточке старого склада добавим в наименование пометку «(НЕ ИСПОЛЬЗОВАТЬ)» или переместим его в отдельную архивную группу, чтобы сотрудники не выбирали его в новых первичных документах.

Способ 2. Отмена проведения документов и повторная обработка

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

  1. Найдем все документы, в которых фигурирует данный склад. Для этого воспользуемся отчетом по движениям документа или поиском ссылок на объект (кнопка Еще — Найти ссылки на объект в карточке склада).
  2. Отменим проведение всех найденных документов по данному месту хранения.
  3. Откроем карточку склада: когда активных движений нет, поле Тип склада станет доступным для редактирования. Установим нужное значение из перечисления ТипыСкладов и запишем элемент.
  4. Перепроведем отмененные документы в строгой хронологической последовательности. Обратим внимание: если в табличных частях документов счета учета подставлялись автоматически исходя из старого типа склада, потребуется проверить и вручную изменить счета (например, с 41.02 на 41.01) перед повторным проведением.

Способ 3. Разблокировка редактирования через стандартные функции БСП

В типовых конфигурациях на базе «Библиотеки стандартных подсистем» действует встроенный механизм защиты ключевых реквизитов. Пользователи с полными правами могут временно снять блокировку формы:

  1. Откроем карточку нужного элемента справочника Склады.
  2. Нажмем кнопку Еще в правом верхнем углу формы и выберем команду Разрешить редактирование реквизитов.
  3. Ознакомимся с системным предупреждением о рисках расхождения данных и нажмем Разрешить редактирование.
  4. После этого поле Тип склада станет активным для выбора. Выберем требуемый тип и нажмем Записать и закрыть.

Способ 4. Использование типовой обработки «Групповое изменение реквизитов»

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

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  2. В поле выбора объектов укажем справочник Склады.
  3. Настроим отбор, указав конкретный склад, тип которого необходимо изменить.
  4. В нижней части формы нажмем гиперссылку Дополнительные параметры и установим флаг Разработчикам: разрешить изменение специальных реквизитов.
  5. В списке реквизитов найдем Тип склада, установим флаг напротив него и выберем новое значение.
  6. Нажмем кнопку Изменить реквизиты.

Способ 5. Программное изменение с помощью внешней обработки

Рассмотрим техническое решение для программистов, когда необходимо изменить реквизит в модуле внешней обработки. Чтобы обойти встроенные проверки модуля объекта СправочникОбъект.Склады в обработчиках ПередЗаписью и ПриЗаписи, применим системное свойство ОбменДанными.Загрузка = Истина.

Посмотрим на пример процедуры на встроенном языке 1С:


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

КонецПроцедуры

Проанализируем работу данного кода:

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

Важное предостережение: применив способы 3, 4 или 5, мы меняем только значение реквизита в самом справочнике. Проведенные ранее документы сохранят старые счета учета (например, 41.02 вместо 41.01). Если в будущем бухгалтер откроет и перепроведет старый документ, система либо выдаст ошибку несоответствия счетов типу склада, либо автоматически подставит новые счета, что изменит финансовые результаты в закрытых периодах. Поэтому после прямого программного изменения реквизита обязательно требуется аудит проводок по счету 41.

← На главную