В процессе разработки конфигураций на платформе 1С часто возникают вопросы по оптимизации структуры регистров накопления. Один из таких популярных, но потенциально опасных вопросов: «Можно ли превратить измерение в ресурс?» Давайте подробно разберем, почему такая задача возникает, какие технические ограничения существуют и как правильно решать проблемы с учетом остатков.
Прежде чем приступать к изменению структуры данных, важно осознать базовый принцип архитектуры 1С: ресурсы регистра накопления всегда имеют тип «Число». Измерения же могут быть любого типа (ссылочного, строкового, даты). Если вы попытаетесь изменить тип измерения (например, Склад или МОЛ), имеющего ссылочный тип, на ресурс, вы столкнетесь с невозможностью сохранить конфигурацию, так как платформа не позволит хранить ссылки в числовых ресурсах.
Если же измерение само по себе является числовым, технически вы можете выполнить следующие шаги:
Чаще всего желание «перенести измерение в ресурс» возникает тогда, когда в отчетах или при подборе товара появляются некорректные остатки или «минуса». Однако важно понимать: изменение структуры метаданных не исправит логическую ошибку в алгоритме проведения документов. Если остатки считаются неверно, проблема кроется в цепочке движений, а не в количестве измерений или ресурсов.
Рассмотрим ситуацию, когда приход товара отражается без указания аналитики (например, без МОЛ), а расход — с указанием МОЛ. Регистр накопления в 1С представляет собой систему, где каждое движение должно быть сбалансировано. Если вы «приходуете» товар на склад вообще, а «расходуете» его с конкретного сотрудника, система видит два разных разреза учета. Для 1С это два разных состояния.
Чтобы исправить такую ситуацию, не нужно менять структуру регистра. Необходимо изменить модуль проведения документа. Мы должны обеспечить корректную цепочку движений:
Если нам нужно передать товар от «абстрактного» МОЛ к конкретному, мы должны выполнить два движения в рамках одного документа:
// Пример логики перемещения остатков в модуле проведения
Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.МОЛ = СкладскойМОЛ; // Списываем с основного МОЛ
Движение.Количество = Выборка.Количество;
Движение = Движения.ОстаткиТоваров.ДобавитьПриход();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.МОЛ = ЦелевойМОЛ; // Оприходуем на нового МОЛ
Движение.Количество = Выборка.Количество;
Если вы столкнулись с расхождением данных, предлагаем выполнить следующие шаги по отладке:
ТестированиеИИсправление, выбрав пункт Пересчет итогов. Это помогает, если произошел системный сбой на уровне SQL или серверной части платформы.В заключение: прежде чем менять структуру регистра, подумайте головой. Скорее всего, вам нужно не переименовывать измерения в ресурсы, а доработать логику проведения документов, чтобы каждое движение было четко привязано к правильному разрезу аналитики. Исправление структуры — это радикальный путь, который чаще создает новые проблемы, чем решает существующие.