При работе с 1С:ERP Управление предприятием (начиная с версии 2.4 и выше) разработчики часто сталкиваются с задачей программного извлечения данных по основным средствам (ОС). Сложность заключается в том, что система поддерживает две разные архитектуры учета — версию 2.2 и версию 2.4. В зависимости от выбранной настройки в базе, данные будут храниться в разных регистрах. Разберем пошагово, как определить версию учета и какими запросами получить нужные данные.
Прежде чем приступать к написанию кода, нам необходимо выяснить, какой механизм учета используется в конкретной информационной базе. Если мы обратимся к регистрам версии 2.2, когда в системе включена версия 2.4, мы получим пустые результаты или некорректные данные.
Для проверки версии учета в интерфейсе программы пройдем по следующему пути: НСИ и администрирование — Настройка НСИ и разделов — Внеоборотные активы — Учет внеоборотных активов. Здесь расположен переключатель между версиями 2.2 и 2.4. Проанализируем ситуацию: если ваша база обновлена до ERP 2.4.6 и выше, скорее всего, используется версия 2.4, так как версия 2.2 считается устаревшей и поддерживается для совместимости.
Программно проверить эту настройку можно через чтение функциональных опций или констант, отвечающих за ведение учета ВА. Это важно для универсальных обработок, которые должны работать в разных базах.
Важно понимать различие между физическим объектом и финансовым активом. В 1С:ERP все основные средства как объекты эксплуатации хранятся в справочнике ОбъектыЭксплуатации. Однако сам по себе справочник не содержит информации о том, за какой организацией закреплен объект в данный момент. Информация о принадлежности к организации, подразделении и материально-ответственном лице (МОЛ) хранится исключительно в регистрах сведений.
Рассмотрим наиболее актуальный вариант для современных конфигураций. В версии 2.4 логика учета была переработана для сближения с бухгалтерским учетом. Основным источником данных здесь выступает регистр сведений МестонахождениеОСБухгалтерскийУчет.
Давайте разберем по шагам, как построить запрос к этому регистру. Нам понадобится виртуальная таблица СрезПоследних, чтобы получить актуальное состояние на текущую дату или на дату формирования отчета.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестонахождениеОС.ОсновноеСредство КАК ОсновноеСредство,
| МестонахождениеОС.Организация КАК Организация,
| МестонахождениеОС.Подразделение КАК Подразделение,
| МестонахождениеОС.МОЛ КАК МОЛ
|ИЗ
| РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&Период, Организация = &Организация) КАК МестонахождениеОС";
Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("Организация", СсылкаНаОрганизацию);
РезультатЗапроса = Запрос.Выполнить();
Почему мы используем именно этот регистр? В отличие от устаревших версий, МестонахождениеОСБухгалтерскийУчет четко фиксирует связь объекта с юридическим лицом. Если объект был списан или передан в другую организацию, СрезПоследних это отразит.
Просто числиться за организацией недостаточно, если нам нужно получить только те ОС, которые уже приняты к учету и не списаны. Для этого проанализируем регистр СостоянияОСБухгалтерскийУчет. В нем фиксируются такие события, как "Принято к учету", "Введено в эксплуатацию", "Списано".
Объединим данные о местонахождении и текущем состоянии. Рассмотрим пример сложного запроса:
Запрос.Текст =
"ВЫБРАТЬ
| Местонахождение.ОсновноеСредство КАК ОС,
| Состояния.Состояние КАК ТекущееСостояние
|ИЗ
| РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&Период, Организация = &Организация) КАК Местонахождение
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияОСБухгалтерскийУчет.СрезПоследних(&Период, ) КАК Состояния
| ПО Местонахождение.ОсновноеСредство = Состояния.ОсновноеСредство
|ГДЕ
| Состояния.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияОС.Списано)";
Если же ваша система все еще использует старую архитектуру (версия 2.2), названия регистров будут отличаться. В этом случае мы должны обращаться к регистру сведений СостоянияОСОрганизаций (или его версии с постфиксом 2.2). Проанализируем структуру этого регистра: в нем измерение Организация является ключевым для фильтрации.
Выясним причину, почему в версии 2.2 поиск может быть сложнее: информация часто размазана по регистрам ДанныеПервичногоУчетаОС и СчетаУчетаОС. Однако для получения простого списка по организации регистра СостоянияОСОрганизаций обычно достаточно.
При написании программного кода для получения ОС, всегда учитывайте следующие моменты:
&Период не указан, 1С берет данные на самую последнюю запись в будущем, что может быть некорректно при наличии документов, проведенных будущим числом.Организация = &Организация непосредственно в параметрах виртуальной таблицы (в скобках после имени регистра), а не в секции ГДЕ. Это значительно ускоряет выполнение запроса, так как СУБД отсекает лишние данные сразу.ПорядокУчетаОСБухгалтерскийУчет, где указан признак собственности.Таким образом, мы выяснили, что для решения задачи в 1С:ERP 2.4 необходимо сначала определить версию учета в настройках НСИ, а затем использовать запрос к регистру МестонахождениеОСБухгалтерскийУчет (для 2.4) или СостоянияОСОрганизаций (для 2.2). Помните, что справочник ОбъектыЭксплуатации является лишь реестром названий, а вся финансовая логика сосредоточена в регистрах сведений.