Ссылка на эту мою статью в Дзене: https://dzen.ru/media/elvinto/programmirovanie-1s-urok-4-6516c84576af33463687c6f4
В этой теме приступим делать отчеты для нашей конфигурации. Однако, если вы где-то скажете программисту 1С, мол покажи как запрограммировать самый простой отчет, то он снисходительно улыбнется и скажет, что это невозможно, хотя будет понимать, что лично для него это действительно простая задача. Современные отчеты на 1С основаны на специальной технологии, которая в тысячу раз увеличила производительность при их написании, в сравнении с тем, что было лет 10-20 назад. При этом отчеты эти невероятно гибкие и универсальные. Время на создание отчетов зависит только он специфики связей отображаемых данных, но не от рутинной работы написания кода. Однако, чтобы это стало действительно таким мощным инструментом помогающим и программисту и конечному пользователю, нужно принять конкретную ложку дёгтя по освоению сразу целой группы различных технологий. Но и тут бояться не стоит, потому что осваивать мы всё это будем постепенно, проверяя практически на каком мы этапе продвигаемся в освоении.
Есть в 1С такая технология, как система компоновки данных, называемая СКД. Кстати, тут ещё есть путаница, иногда СКД в 1С называют систему конвертации данных, по этому когда в объявлении вакансий пишут требование “Знание СКД”, я волей-неволей хихикаю, т.к. это совершенно разные технологии не имеющие между собой ничего общего, кроме самой 1С, и хорошо если сам работодатель знает, что он требует от будущего программиста в своём штате)). Так вот, эта технология и даёт возможность создавать отчеты. Конечно, есть ещё другие технологии, но с появлением СКД, они морально сразу очень сильно устарели, и их использование должно быть существенно обосновано. Старые системы отчетов негибкие и медленные, для их написание нужно очень много времени, и поддерживаются они платформой поскольку-постольку. Не удивлюсь, если новые платформы вообще перестанут их поддерживать. Говорить о старых видах отчетов можно только факультативно, но не в рамках основного изучения.
Итак, все домашние задания вы выполнили успешно, по этому у нас есть теперь и документы прихода и документы расхода, пора бы нам позаботиться формировании остатков. Сначала я ввёл пример прошлого урока с чайниками:
и ещё расход:
Посмотрим движения по регистру ТоварыНаСкладах и убеждаемся, что всё нормально (поступление – зеленый, реализация – красный):
Идём в дереве метаданных, что характерно, в отчёты, добавляем новый:
Даём ему имя “ОстаткиНаСкладах”, такое имя тоже принято давать в данном типе отчетов, после этого кликнем по увеличительному стеклу напротив основной схемы компоновки данных, после чего нажмите “Готово”:
Появится окно, где много вкладок:
Кликните правой кнопкой мыши (ПКМ) по наборам данных и выберите пункт связанный с запросом:
Окно станет таким:
Тут видим – сверху какая-то таблица, снизу какое-то поле с текстом. Всё просто, – нет текста – нет таблицы…))…Сделаем, что просит 1С. т.е. сделаем самый простой запрос, а после этого просто кликните по этой пустой таблице сверху. Произойдет само собой вот такое:
Давайте разбираться что к чему. Внизу мы написали запрос на каком-то языке вроде похожем на 1С, но и не совсем похожем. Да, верно, в 1С есть совершенно отдельный ещё один язык, называется он язык запросов. Этот язык появился ещё до появления 1С и назывался он тогда SQL. Компания 1С взяла за основу этот язык SQL, русифицировала его, доработала под специфику платформы 1С и получился язык запросов 1С. Так для чего же нужен этот язык? Всё просто. Некогда компания 1С поняла, что для оптимизации и ускорения работы с большими объёмами данных, крайне выгодно использовать уже передовые мировые решения работы с этими базами данных. Зачем изобретать велосипед на квадратных колёсах, если ты хочешь быстро ехать? И это было правильным решением, в том смысле, что 1С не стала изобретать велосипед, а усовершенствовала его под свою тучную неповоротливую фигуру и произошло чудо! Действительно, обширные возможности 1С в сочетании с передовым мировым опытом хранения данных, дали свой результат, осталось только адаптироваться к нему. И компания 1С ничего не нашла лучше, как придумать язык запросов, сделать так, чтобы он начал понимать слова вроде “РегистрНакопления”, “ТоварыНаСкладах” и т.п., и потом просто сделать из этого непонятного для SQL лексикона, понятный, и потом просто подкинуть такой запрос в базу данных тип PostgreSQL или MS SQL. По этому часто, встречая вакансии программиста 1С, можно увидеть требование “Хорошее знание языка запросов”. Если программист этот язык не знает, но хорошо знает SQL, то проблем с освоение не будет почти совсем. Однако, что делать если нет опыта даже в SQL, тогда сейчас всё написанное примем на веру, а подробно начнём рассматривать на следующем уроке. Сейчас важно запустить отчет и познакомиться просто с самим принципом его формирования. Как я ранее говорил, мы к сложному будем не идти постепенно, скромно поглядывая со стороны, а будем пробираться к нему изнутри, как в Троянском коне)).
Перейдите во вкладку “Настройки” и добавьте новую группировку:
Теперь просто нажмите “ОК”:
Должно получиться так:
Поставьте два флажка начала и окончания периода:
Теперь на том и другой кликните ПКМ:
Установите флажок “Включать в пользовательские настройки”:
Теперь перейдите во вкладку “Выбранные поля” и перетащите слева вправо следующие:
Теперь перезапустите 1С. Теперь появилось меню касаемое отчетов. Кликните по отчету “Остатки на складах”:
Выберите данные периода таким, чтобы в него попадали наши созданные ранее документы и сформируйте отчет:
Укажите теперь определенную группировку по регистратору:
Получится так:
Теперь перетащите “Детальные записи” внутрь “Регистратор”:
Вернёмся в конфигуратор и немного изменим группировку. Для этого кликните снова по “Отчет” и добавьте ещё группировку. Получится так::
Измените поле остатка на оборот:
Теперь перезайдите в 1С и сформируйте отчет заново:
Видим, что теперь выглядит многоуровневым – сначала идут документы, а затем внутри – товары. В данном случае Регистратор – это группировка верхнего уровня, а группировка “Детальные записи” – это группировка нижнего уровня.
Теперь давайте разберёмся что собственно произошло.
Мы сделали запрос, который, забегая вперед состоит сейчас из двух частей:
ВЫБРАТЬ ТутСписокПолейИлиЕщёЧегото ИЗ ТутТаблицаОткудаВыбирать
ТутСписокПолейИлиЕщёЧегото – Здесь мы указали как звёздочка, которая является служебным символов и говорит от том, что нужно взять все существующие в таблице поля.
ТутТаблицаОткудаВыбирать – Это таблица, откуда брать данные. По называнию можно понять, что это регистр накопления (куда мы складываем данные проведения документов), это не просто какой-то непонятный регистр, а регистр “ТоварыНаСкладах”, из этого регистра нужно взять не просто его данные, а взять данные только за период с “ДатаН” по “ДатаК” (помните реквизит периода при проведении документов по регистру), взять не просто записи, а ещё найти остатки и обороты по данные этого же периода, взять всё вышеперечисленного с точной до записи (ключевое слово “ЗАПИСЬ”).
В результате программа поняла что от неё хотят и заполнена таблицу полей (по этому их появилось так много, ведь ещё есть служебные поля и поля созданные с привлечением дополнительной служебной таблицы “ОстаткиИОбороты”.
Далее мы перешли в настройки и указали многоуровневые группировки. Здесь мы объяснили по каким данным эти самые уровни строить. “Детальные записи” – это некая виртуальная группировка, которая означает собрать все имеющиеся данные внутри этого уровня (конечно же с учетом всех вышестоящих уровней).
После этого указали какие поля вывести в отчет. Заметьте, до этого мы указывали в запросе поля которые просто взять из таблицы. Это не одно и тоже, т.е. мы одни поля берём запросом из таблицы, а в настройках указываем, которые из взятых по запросу полей, мы хотим показать в отчете.
Таким образом мы получили наверно самый простой отчет на СКД.
Задание по уроку:
1. Добавьте в отчет, аналогично сказанному, поле количества для получения по нему остатка
2. Добавьте ещё 2-3 документ с другими данными по домочадцам (покупки и продажи бытовой техники другими домочадцами).
3. Добавьте группировку верхнего уровня отчета по домочадцам.
Если всё получилось как нужно – молодцы! Если нет, давайте разберёмся что не так.