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