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