Ответы к части 6

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

§ 6.1. Таблица: элемент, который показывает строки

К вопросу 1. Ответ. Поле показывает одно значение, таблица — набор строк. Внутри таблицы лежат колонки, и у неё своя командная панель.

К вопросу 2. Ответ. К табличному реквизиту: табличной части записи, таблице значений формы или динамическому списку.

К вопросу 3. Ответ. Табличная часть — строки живут в записи и записываются вместе с ней; таблица значений — строки живут в данных формы, пока открыто окно; динамический список — строки платформа получает запросом к базе.

К вопросу 4. Ответ. Колонка — обычное поле, только живущее внутри таблицы: с видом, путём, видимостью, заголовком.

К вопросу 5. Указание. Что меняется, когда курсор переходит на другую строку?

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

К вопросу 6. Ответ. Изменять состав строк, изменять порядок строк и только просмотр. Это удобство интерфейса, а не защита данных.

К вопросу 7. Ответ. Командная панель таблицы — своя группа внутри таблицы, её кнопки действуют на строки этой таблицы. Командная панель формы действует на всю запись.

К упражнению «По образцу». Ответ. Таблица — «Объект.Товары»; колонки — «Объект.Товары.Товар», «Объект.Товары.Количество», «Объект.Товары.Цена», «Объект.Товары.Сумма».

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

К упражнению «Ловушка: „удалил строку — значит, удалил товар"». Ответ. Строка поступления — не товар, а запись о нём внутри документа: в ней ссылка на товар, количество и цена. Удаление строки убирает эту запись из документа; товар в справочнике остаётся, как склад остаётся, когда очищают поле склада.

К упражнению «Обратный ход». Ответ. У таблицы запрещено изменение состава строк; командную панель таблицы скрыли или очистили; таблица только для просмотра — например, потому что её строки кладёт код.

К упражнению «На чтение». Ответ. В форме есть обработчик, отзывающийся на смену текущей строки, а надпись показывает что-то, относящееся к строке, где стоит курсор.

§ 6.2. Таблица из табличной части: товары в поступлении

К вопросу 1. Ответ. Внутри основного реквизита: путь «Объект.Товары».

К вопросу 2. Ответ. Перетаскиванием табличной части из реквизитов в элементы. Появляется таблица с колонками по реквизитам строки.

К вопросу 3. Ответ. Строки пришли копией вместе с шапкой, правятся в копии и попадают в базу только при записи документа.

К вопросу 4. Ответ. Нельзя: табличная часть — часть записи и записывается вместе с документом целиком.

К вопросу 5. Указание. Что именно складывает модуль объекта?

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

К вопросу 6. Ответ. Строки — исходные данные для проведения: код проведения обходит строки и по каждой увеличивает остаток товара на складе на её количество.

К вопросу 7. Ответ. Путь таблицы начинается с «Объект.»; пути колонок — «Объект.<Табличная часть>.<Реквизит>».

К упражнению «По образцу». Ответ. Как и с поступлением: после закрытия без записи строк столько же, сколько было.

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

К упражнению «Ловушка: „строку добавил — значит, товар уже на складе"». Ответ. Строка живёт в копии, пока документ не записан, а остатки меняются только при проведении. Пока документ не записан и не проведён, на складе ничего не изменилось.

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

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

§ 6.3. Колонки таблицы: поля, которые показывают каждую строку

К вопросу 1. Ответ. «Объект» — запись документа, «Товары» — её табличная часть, «Цена» — реквизит строки.

К вопросу 2. Ответ. Колонка показывает реквизит каждой строки таблицы, а строки — это то, на что указывает путь таблицы. Путь колонки продолжает его на одно звено.

К вопросу 3. Ответ. Вид, видимость, доступность, «только просмотр», заголовок. Заголовок становится надписью в шапке таблицы.

К вопросу 4. Ответ. «Отображать в шапке», «Отображать в подвале», текст и путь к данным подвала, «Фиксация в таблице».

К вопросу 5. Ответ. Ничего: колонка — способ показать, реквизиты строк на месте и хранятся по-прежнему.

К вопросу 6. Указание. Кто тогда будет вводить значение?

Полное решение. «Только для просмотра» уместно, когда значение считает код: пользователь его видит, а меняет форма. В наших формах кода нет, и сумма строки вводится руками. Закройте её для правки — и вводить её станет некому: сумма останется той, какой была, а модуль объекта сложит эти застывшие суммы в итог документа. Запрещать правку стоит, только если значение кто-то считает.

К вопросу 7. Ответ. Реквизит строки живёт в табличной части объекта и один на все формы; колонка — элемент конкретной формы. Убрали реквизит — значения исчезли; убрали колонку — значения на месте, их не показывают.

К упражнению «По образцу». Ответ. «Объект.Товары.Товар», «Объект.Товары.Количество», «Объект.Товары.Цена», «Объект.Товары.Сумма» — и, если выведена, колонка номера строки.

К упражнению «Своё: закрепите главное». Ответ. «Фиксацию в таблице» у колонки товара — прижать её к левому краю.

К упражнению «Ловушка: „убрал колонку — пропали цены"». Ответ. Вернуть колонке видимость или посмотреть сумму документа: она складывается из строк и осталась прежней. Колонка — способ показать; цены лежат в строках документа и никуда не делись.

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

К упражнению «На чтение». Ответ. Пересчитывает сумму строки из количества и цены: пользователь меняет количество, код считает сумму, поэтому колонку суммы и закрыли для правки.

§ 6.4. Динамический список: таблица, которая показывает базу

К вопросу 1. Ответ. В базе: список их не хранит, а получает запросом. Строки табличной части живут в записи, строки таблицы значений — в данных формы.

К вопросу 2. Ответ. Таблица, главная в запросе, — например, справочник «Товары». По ней платформа сама строит запрос.

К вопросу 3. Ответ. Задают, что показывать, — основную таблицу, — а как достать строки, решает платформа, пока запрос не взяли в свои руки.

К вопросу 4. Указание. Сколько строк на самом деле приходит на клиент?

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

К вопросу 5. Ответ. Записывать нечего: строки не лежат ни в записи, ни в форме. Правят записи, открывая их формы.

К вопросу 6. Ответ. Может: например, в карточке контрагента — дополнительный реквизит-список его поступлений.

К вопросу 7. Ответ. По типу реквизита формы, по пути таблицы — имени этого реквизита — и по путям колонок, начинающимся с него.

К упражнению «По образцу». Ответ. Новое наименование склада видно в списке после записи карточки; после возврата — снова «Основной».

К упражнению «Своё: где строки». Ответ. Товары в поступлении — в записи документа; список контрагентов — в базе, динамический список; остатки по складам — в данных формы; поступления в карточке контрагента — в базе, динамический список.

К упражнению «Ловушка: „отсортировал — испортил базу"». Ответ. Сортировка меняет только порядок показа строк в этом окне. Список ничего не хранит — товары в базе как лежали, так и лежат.

К упражнению «Обратный ход». Ответ. Динамический список. Строки в нём не правят — правят записи, открывая их формы двойным щелчком.

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

§ 6.5. Форма списка: где живёт динамический список

К вопросу 1. Ответ. В основном реквизите формы — том, что выделен полужирным и назван «Список».

К вопросу 2. Ответ. Типом: у формы элемента это объект справочника, у формы списка — динамический список. Отсюда и разница: одна форма об одной записи, другая о множестве.

К вопросу 3. Ответ. Сам реквизит-список, таблицу с путём к нему, колонки по полям запроса и командную панель таблицы.

К вопросу 4. Ответ. Конструктор берёт поля, которые описывают запись коротко, — для справочника это код и наименование. Остальные колонки добавляют руками.

К вопросу 5. Указание. Что вообще можно записать в форме, которая ничего не хранит?

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

К вопросу 6. Ответ. С вложенностью: группы и элементы вместе. Как именно — плоским списком, деревом или иерархическим списком — решает отображение таблицы.

К вопросу 7. Ответ. В окне редактирования объекта, в строках основных форм — там же, где форму элемента.

К упражнению «По образцу». Ответ. В форме появляются реквизит «Список», таблица и колонки кода и наименования; колонка ИНН добавляется перетаскиванием поля из раскрытого реквизита «Список».

К упражнению «Своё: предскажите состав». Ответ. Код и наименование: других реквизитов у складов нет, а эти два описывают запись коротко.

К упражнению «Ловушка: „форму сделал, а список прежний"». Ответ. Либо не обновил конфигурацию базы данных, либо не назначил форму основной — и открывается по-прежнему автоформа.

К упражнению «Обратный ход». Ответ. Команду убрали из командной панели; или у пользователя нет права добавлять записи; или список показывает данные, которые не создают из этой формы.

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

§ 6.6. Настройки списка: поля, отбор, порядок

К вопросу 1. Ответ. Поля — что попадает из запроса в список и может стать колонкой; отбор — какие строки показывать; порядок — в каком порядке; условное оформление — как строки выглядят.

К вопросу 2. Ответ. Это правила показа: список по ним выбирает и сортирует строки, а содержимое базы остаётся прежним.

К вопросу 3. Ответ. Запрос, который разработчик пишет сам, включив соответствующий флажок. Нужен, когда стандартного запроса по основной таблице мало — например, требуются поля из других таблиц или расчёт.

К вопросу 4. Ответ. Из полей списка: запрос умеет доставать поля связанных записей. Если и там их нет — смотрите текст произвольного запроса.

К вопросу 5. Ответ. Настройки разработчика живут в форме и действуют на всех; настройки пользователя живут в его пользовательских настройках и действуют на него одного, только сужая уже отобранное.

К вопросу 6. Указание. Чья настройка сужает список последней?

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

К вопросу 7. Ответ. В карточке идут от записи, в списке — от запроса: почти все объяснения лежат не в дереве объекта, а в настройках списка.

К упражнению «По образцу». Ответ. После обновления конфигурации список контрагентов открывается упорядоченным по наименованию у всех пользователей.

К упражнению «Своё: сформулируйте отбор». Ответ. Отбор по родителю — группе товаров. В форме его задают, если так должно быть у всех; если это нужно одному кладовщику, пусть поставит себе сам в настройках списка.

К упражнению «Ловушка: „товар пропал из базы"». Ответ. Первым делом — настройки списка у этого пользователя: отбор и поиск. Потом отбор в форме. И только потом — пометка удаления и права.

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

К упражнению «На чтение». Ответ. Либо у списка включён произвольный запрос и условие стоит в его тексте, либо отбор задан пользователю в его настройках.

§ 6.7. Чужая форма: какие здесь таблицы и откуда у каждой строки

К вопросу 1. Ответ. Строки приходят из записи (табличная часть) — при закрытии без записи правки пропадают вместе с копией; из данных формы (таблица значений) — исчезают вместе с окном; из базы по запросу (динамический список) — не пропадает ничего, это чужие записи.

К вопросу 2. Ответ. Путь из двух частей — табличная часть записи, почти всегда основного реквизита: «Объект.Товары». Путь из одного имени — реквизит формы, и какой именно, скажет его тип.

К вопросу 3. Ответ. О типе таблицы — ни о чём. Так настраивают любую из трёх: таблице запретили менять состав строк или убрали панель.

К вопросу 4. Ответ. По путям колонок, которые начинаются с имени списка, и по настройкам — отбору, порядку, оформлению — у самого реквизита.

К вопросу 5. Ответ. Строки в ней есть, а взяться им неоткуда: пользователю ввести их негде, путь к записи не ведёт. Значит, их положил обработчик.

К вопросу 6. Указание. Что произойдёт при нажатии кнопки удаления в каждом случае?

Полное решение. В табличной части удаление убирает строку из копии документа, и до записи в базе ничего не меняется. В динамическом списке такой кнопки чаще всего нет, а где есть — это стандартная команда пометки на удаление, и действует она на запись базы. Перепутав одно с другим, легко думать, что правишь свой документ, а на деле тронуть чужую запись.

К вопросу 7. Ответ. У табличной части строки не вводили; у таблицы значений обработчик не отработал или не вызывался; у списка стоит отбор — свой или пользовательский.

К упражнению «По образцу». Ответ. В форме поступления таблица одна, путь «Объект.Товары» — табличная часть. В форме списка «Товаров» таблица с путём «Список», реквизит типа «динамический список» — строки из базы по запросу.

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

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

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

К упражнению «На чтение». Ответ. Либо таблица значений — тогда обработчик не заполнил её: не отработал или его не вызвали. Либо динамический список — тогда строки отсечены отбором, своим или пользовательским. Что именно, скажет тип реквизита «Долги».