бесплатно без регистрации урок 2 из 18

Где лежат данные: таблицы 1С

Различать форму и таблицу, шапку и табличную часть, справочник, документ и регистр; находить нужную таблицу тремя способами и понимать, что такое ссылка и виртуальная таблица.

17 мин чтения · 4 главы ·4 задания ·домашняя работа

Форма, таблица и ссылка

Первый шаг любого запроса — выбрать таблицу. Шаг этот выглядит простым ровно до того момента, когда выясняется главное: то, что человек видит на экране, и то, к чему обращается запрос, — разные вещи. Экран показывает форму, форма собрана из таблиц, и таблиц этих обычно несколько.

Возьмём список реализаций. На экране одна таблица: дата, номер, контрагент, сумма, склад, ответственный. Кажется, что где-то в базе лежит ровно такая таблица — и её надо найти. На самом деле в базе лежит документ с реквизитами, а контрагент и склад в нём хранятся ссылками: в поле записано не название «ООО Ромашка», а указание на строку справочника контрагентов. Название на экране появилось потому, что форма сходила в справочник и подставила его.

Форма списка реализацийдата · номер · контрагентсумма · склад · ответственный«всё в одной таблице на экране»Документ.РеализацияСправочник.КонтрагентыСправочник.Складыодин экрантри таблицы
Форма собирает на экран то, что удобно человеку; запрос обращается к таблицам, из которых форма собрана.

Ссылка — центральное понятие хранения в 1С, и понять его лучше сразу. Ссылка — это адрес записи, а не её содержимое. У каждого элемента справочника и у каждого документа есть свой неповторимый адрес, который не меняется никогда: переименовали контрагента — ссылка та же, и все документы продолжают указывать на него. Именно поэтому в 1С можно переименовать товар и не сломать отчёты за прошлый год.

Второе, что стоит развести в голове, — имя и синоним. У каждого объекта конфигурации есть имя, которым он называется в коде и в запросах, и синоним — то, что видит пользователь. Справочник с именем Номенклатура на форме может называться «Товары и услуги», документ РеализацияТоваровУслуг — «Реализация (акты, накладные)». В запросе работает только имя, и пишется оно слитно, без пробелов.

Отсюда практический вывод, который экономит много времени: искать таблицу по названию с экрана бесполезно. Надо открыть конструктор запроса или дерево метаданных и смотреть там — по именам. Хорошая новость в том, что имена обычно похожи на синонимы и угадываются с одной-двух попыток.

Справочники и документы

Разберём два вида таблиц, с которых начинается любой курс по запросам, — справочники и документы. Устроены они по-разному, и разница эта видна в запросе.

Справочник — список того, что существует само по себе и меняется редко: номенклатура, контрагенты, склады, сотрудники, статьи затрат. У каждого элемента есть служебные поля — Ссылка, Код, Наименование, ПометкаУдаления — и реквизиты, которые придумал разработчик конфигурации: единица измерения, ставка НДС, вид контрагента.

У справочников есть три свойства, о которых полезно знать заранее. Иерархия: элементы могут лежать в группах, и у элемента есть поле Родитель; при этом сама группа — тоже строка той же таблицы, с признаком ЭтоГруппа. Владелец: некоторые справочники подчинены другим — договоры принадлежат контрагенту, и у договора есть поле Владелец. Предопределённые элементы: те, что созданы разработчиком и не могут быть удалены пользователем; на них ссылается код, и в запросе к ним обращаются по имени.

Документ — запись о том, что произошло: поступление, реализация, платёж, приказ. У него есть Ссылка, Номер, Дата, Проведён, ПометкаУдаления и реквизиты шапки — контрагент, склад, организация, сумма.

Документ.Реализациядата · номер · контрагент…Реализация.Товарыноменклатура · количество · цена…Реализация.Услугиуслуга · сумма«что продали» — это строки, а не документ
Общие реквизиты лежат в одной таблице, строки — в своих; в запросе это разные источники.

Главная особенность документа — табличные части. Строки документа хранятся не в нём самом, а в отдельных таблицах: Документ.РеализацияТоваровУслуг.Товары, …Услуги. У каждой такой таблицы свой набор колонок — номенклатура, количество, цена, сумма — и служебное поле Ссылка, которым строка привязана к своему документу. Плюс НомерСтроки, если важен порядок.

Ещё одно поле шапки заслуживает отдельного слова — Проведён. Документ может быть записан, но не проведён: он существует, у него есть номер и строки, а в учёт он не попал. Движений в регистрах у такого документа нет. Отсюда правило, которое избавляет от половины расхождений: запрос к документам почти всегда должен отбирать проведённые. Забытое условие даёт сумму больше, чем показывает любой типовой отчёт, — и объяснить эту разницу бухгалтерии нечем.

Рядом стоит ПометкаУдаления: документ или элемент справочника, помеченный на удаление, физически ещё в базе и в запрос попадёт. Пометка — это не удаление, а заявка на него; убирают такие строки условием НЕ ПометкаУдаления.

Отсюда правило, на котором спотыкаются все: «что продали» лежит в табличной части, а «кому и когда продали» — в шапке. Если нужно и то и другое сразу, таблицы придётся соединить, и этому отведён седьмой урок. Пока достаточно помнить, что это две разные таблицы и в ВЫБРАТЬ их поля вперемешку не возьмёшь.

нужнотаблица
Список контрагентовСправочник.Контрагенты
Договоры этого контрагентаСправочник.ДоговорыКонтрагентов
Когда и кому отгрузилиДокумент.РеализацияТоваровУслуг
Что именно отгрузили и сколькоДокумент.РеализацияТоваровУслуг.Товары

Регистры: где лежит посчитанное

Регистры — то, ради чего в 1С вообще стоит писать запросы, а не выгружать документы. Устроены они непривычно, и именно эта непривычность экономит часы работы.

Регистр накопления хранит движения: этот документ прибавил на склад 10 штук, тот списал 3, возврат вернул 1. Каждое движение принадлежит своему документу — он называется регистратором. Сами по себе движения не так интересны; интересно то, что платформа умеет их складывать и отдавать результат мгновенно.

Поступление+10Реализация−3Возврат+1Регистр накоплениядвиженияи посчитанные итогиОстаток8запрос спрашивает остаток, а не складывает документы
Документы пишут движения; остаток платформа складывает сама и хранит заранее посчитанным.

Регистры накопления бывают двух видов, и различать их нужно до того, как писать запрос. Регистр остатков ведёт приход и расход, и у него есть остаток: товары на складах, взаиморасчёты, денежные средства. Регистр оборотов только накапливает, и остатка у него не бывает: продажи, выручка, затраты. Спрашивать остаток у оборотного регистра бессмысленно — виртуальной таблицы «Остатки» у него просто нет, и конструктор её не покажет. Понять вид можно по смыслу вопроса: «сколько есть сейчас» — остаточный, «сколько было за период» — оборотный.

Складывает она не на лету. У регистра есть заранее посчитанные итоги: платформа хранит остатки на конец каждого месяца и, когда у неё спрашивают остаток на 15 марта, берёт итог на конец февраля и досчитывает движения за половину марта. Поэтому запрос к остаткам отвечает быстро и на миллионе движений.

Поля регистра делятся на три вида, и деление это определяет всё остальное. Измерения — в каком разрезе ведётся учёт: склад, номенклатура, характеристика. Ресурсы — то, что считается: количество, сумма. Реквизиты — сведения, которые ни в каком разрезе не нужны, но полезны: комментарий, ответственный. Остаток платформа считает по измерениям: «сколько этой номенклатуры на этом складе». Добавить в отчёт разрез, которого нет среди измерений, невозможно — его просто нет в данных, и это ограничение стоит проверять до того, как обещать отчёт заказчику.

Спрашивают остаток не у самого регистра, а у его виртуальной таблицы. Виртуальная таблица — это таблица, которой физически нет: РегистрНакопления.ТоварыНаСкладах.Остатки платформа строит на лету по вашим параметрам. Виртуальных таблиц у регистра накопления три: Остатки (сколько на момент), Обороты (сколько пришло и ушло за период) и ОстаткиИОбороты (и то и другое сразу). Им отведены уроки 12 и 13.

Регистр сведений отвечает на другой вопрос: какое значение было в такой-то момент. Цена товара с 1 марта, курс валюты на дату, ответственный менеджер контрагента, ставка НДС для номенклатуры. У него два важных свойства. Периодичность: регистр может быть непериодическим (просто соответствие: товару — штрихкод) или периодическим (значение с датой). У периодического есть своя виртуальная таблица — СрезПоследних: значение, действовавшее на указанный момент. Подчинение регистратору: независимый регистр люди правят руками, подчинённый заполняется документом.

Регистр бухгалтерии хранит проводки: дебет, кредит, сумма, субконто. Запросы к нему устроены сложнее — там свои виртуальные таблицы оборотов и остатков по счетам, — и разбираются они на втором уровне. Здесь достаточно знать, что бухгалтерские остатки живут именно там, а не в регистрах накопления.

вопросгде искать
Сколько лежит на складе сейчасВиртуальная таблица Остатки
Сколько пришло и ушло за мартВиртуальная таблица Обороты
Какая цена действовала 1 мартаСрезПоследних регистра сведений
Какое сальдо по счёту 62Регистр бухгалтерии

Как найти нужную таблицу

Теперь практический вопрос: как в незнакомой конфигурации найти нужную таблицу за пять минут, а не за час. Способов три, и пользоваться стоит всеми тремя по очереди.

Первый — конструктор запроса. Он показывает дерево всех таблиц базы: справочники, документы, регистры, планы видов характеристик. По дереву можно ходить, разворачивать ветки и смотреть состав полей. Это самый прямой путь, и он же самый медленный в большой конфигурации: справочников там бывает больше трёхсот.

Второй — движения документа. Если известно, каким документом оформляется нужное событие, достаточно провести такой документ и посмотреть его движения: платформа покажет, в какие регистры он записал и какими значениями. Способ безошибочный: он отвечает не на вопрос «как называется регистр», а на вопрос «куда попадают именно эти данные».

Третий — чужой отчёт. Открыть типовой отчёт, который показывает похожие цифры, и посмотреть его схему компоновки: там уже выбраны источники, и выбраны они человеком, который решал ту же задачу. Это законный и самый быстрый путь в незнакомой конфигурации.

Отдельно стоит сказать о том, чего в дереве таблиц нет, но что постоянно нужно. Виртуальные таблицы в конструкторе видны как ветки регистра — «Остатки», «Обороты», «СрезПоследних», — и у каждой есть свои параметры: период, условие отбора. Параметры эти задаются в скобках при таблице, а не в ГДЕ. Разница огромная и невидимая глазами: в скобках отбор применяется, когда платформа только строит итоги, а в ГДЕ — когда она уже всё построила.

И последнее о таблицах, что пригодится уже в следующем уроке. У любой таблицы можно узнать состав полей, не заглядывая в конфигуратор: в конструкторе они перечислены рядом с таблицей, и там же видно, какого типа каждое поле. Тип важен: строку нельзя сравнить с числом, ссылку — со строкой, а дату — с текстом. Ошибки такого рода платформа ловит сразу, при попытке выполнить запрос, и сообщает о них понятно.

Задания урока

Каждое проверяется сразу: ответ сверяется с эталоном, и на неверный вариант приходит разбор.

  1. Поле «Контрагент» в документе хранит название контрагента текстом.средне
  2. Соотнесите, что нужно достать, и таблицу.средне
  3. Что верно про регистр накопления?средне
  4. Найдите строку с ошибкой.средне
Пройти урок с проверкой заданий Курс «1С: запросы и отчёты» открыт и бесплатен, прогресс сохраняется.
Открыть курс