При попытке изменить значение в поле Тип склада справочника Склады (например, переключить розничный склад на оптовый) пользователи и администраторы конфигурации «1С:Бухгалтерия 8» редакции 3.0 часто сталкиваются с системным предупреждением: Существуют документы, в которых выбран склад. Реквизит «Тип склада» не может быть изменен. Выясним причину такого поведения системы, разберем возможные последствия прямого изменения реквизита и подробно рассмотрим правильные и альтернативные способы решения этой задачи.
Проанализируем логику работы типовой конфигурации. Запрет на редактирование данного реквизита установлен не случайно: тип склада определяет ключевые правила бухгалтерского учета материально-производственных запасов:
41.01 («Товары на складах»).41.02 («Товары в розничной торговле (покупная стоимость)»), либо по продажным ценам с выделением торговой наценки на счетах 41.11, 41.12 и 42 («Торговая наценка»).Если склад уже использовался в хозяйственных операциях, то по нему сформированы проводки и записи в регистрах накопления. Простое принудительное изменение типа склада без корректировки уже существующих документов не пересчитывает проводки. Это приводит к расхождению аналитики, зависанию сальдо на счетах учета и критическим ошибкам при выполнении регламентных операций процедуры «Закрытие месяца» (в частности, при расчете торговой наценки и корректировке себестоимости).
Разберем самый безопасный подход, который исключает порчу данных закрытых периодов и не требует перепроведения старых документов. Если функциональное назначение места хранения изменилось, создадим новый склад и перенесем на него остатки:
Оптовый склад).42, если она применялась) и оприходует их на счет 41.01 по стоимости приобретения.Если склад был создан недавно по ошибке или база только начинает наполняться, рассмотрим вариант с полным перепроведением цепочки документов:
ТипыСкладов и запишем элемент.41.02 на 41.01) перед повторным проведением.В типовых конфигурациях на базе «Библиотеки стандартных подсистем» действует встроенный механизм защиты ключевых реквизитов. Пользователи с полными правами могут временно снять блокировку формы:
Склады.Если требуется скорректировать реквизит без доработки конфигурации и без открытия каждой формы вручную, воспользуемся штатным инструментом администратора:
Склады.Рассмотрим техническое решение для программистов, когда необходимо изменить реквизит в модуле внешней обработки. Чтобы обойти встроенные проверки модуля объекта СправочникОбъект.Склады в обработчиках ПередЗаписью и ПриЗаписи, применим системное свойство ОбменДанными.Загрузка = Истина.
Посмотрим на пример процедуры на встроенном языке 1С:
&НаСервере
Процедура ИзменитьТипСкладаНаСервере(СсылкаНаСклад, НовыйТипСклада)
// Получаем объект из ссылки для модификации
СкладОбъект = СсылкаНаСклад.ПолучитьОбъект();
Если СкладОбъект = Неопределено Тогда
ВызватьИсключение "Не удалось получить объект склада. Возможно, объект был удален.";
КонецЕсли;
// Устанавливаем новое значение реквизита
СкладОбъект.ТипСклада = НовыйТипСклада;
// Включаем режим загрузки данных для отключения типовых проверок и блокировок
СкладОбъект.ОбменДанными.Загрузка = Истина;
Попытка
СкладОбъект.Записать();
Сообщить("Тип склада """ + СокрЛП(СсылкаНаСклад) + """ успешно изменен на """ + Строка(НовыйТипСклада) + """.");
Исключение
ИнформацияОбОшибке = ОписаниеОшибки();
Сообщить("Ошибка при записи склада: " + ИнформацияОбОшибке);
КонецПопытки;
КонецПроцедуры
Проанализируем работу данного кода:
ПолучитьОбъект() считывает данные элемента справочника из базы данных в оперативную память для последующего изменения.ОбменДанными.Загрузка = Истина сообщает платформе 1С:Предприятие, что запись выполняется в режиме обмена или технологической загрузки. Это подавляет срабатывание подсистемы контроля неизменяемых реквизитов.Попытка ... Исключение гарантирует перехват возможных ошибок уровня СУБД или блокировок транзакций.Важное предостережение: применив способы 3, 4 или 5, мы меняем только значение реквизита в самом справочнике. Проведенные ранее документы сохранят старые счета учета (например, 41.02 вместо 41.01). Если в будущем бухгалтер откроет и перепроведет старый документ, система либо выдаст ошибку несоответствия счетов типу склада, либо автоматически подставит новые счета, что изменит финансовые результаты в закрытых периодах. Поэтому после прямого программного изменения реквизита обязательно требуется аудит проводок по счету 41.