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

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

§ 2.1. Форма как объект конфигурации: где она живёт в дереве

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

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

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

К вопросу 4. Указание. Что изменится, если форму переименовать?

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

К вопросу 5. Ответ. Реквизит объекта задан в дереве объекта и хранится в базе; реквизит формы задан внутри формы и живёт, пока открыто окно.

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

К вопросу 7. Ответ. Потому что окна для объектов платформа строит сама, пока своя форма не задана. Заданная форма нужна не для работы, а для того, чтобы разговор шёл иначе, чем по умолчанию. В типовых конфигурациях картина обратная: там формы заданы почти везде.

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

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

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

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

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

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

§ 2.2. Конструктор формы: первое знакомство

К вопросу 1. Ответ. Конструктор вызывается автоматически при создании формы: его не выбирают в меню, он открывается сам, как только объекту добавляют форму.

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

К вопросу 3. Ответ. О том, про что будет разговор: одна запись, список записей, выбор одной записи, папка. Внешность здесь ни при чём.

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

К вопросу 5. Указание. Что происходит с автоформой при каждом открытии и чего не происходит с сохранённой формой?

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

К вопросу 6. Ответ. Ставит ссылку из свойств объекта на созданную форму — то самое назначение. Мы её сняли, чтобы увидеть: создать форму и назначить её объекту — два разных действия.

К вопросу 7. Ответ. Ничего. Для списка, выбора и группы платформа по-прежнему строит окна сама; своя форма занимает одно место, и только то, на которое её поставят.

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

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

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

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

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

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

§ 2.3. Редактор формы: три области и предпросмотр

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

К вопросу 2. Ответ. Реквизиты — о чём говорим; элементы — что видно; команды — что можно сделать.

К вопросу 3. Ответ. Данные первичны: элемент, которому нечего показывать, бессмыслен, а команда, которой нечего делать, бесполезна.

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

К вопросу 5. Ответ. Элемент «Форма». Его свойства в палитре — свойства всей формы, а не отдельного поля.

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

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

К вопросу 7. Ответ. В палитре свойств — у самого элемента, у реквизита или у формы целиком.

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

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

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

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

К упражнению «Обратный ход». Ответ. За кнопкой стандартная команда, которую форма не объявляла, а получила от объекта. Либо действие пришло через редактор командного интерфейса формы, а не через структуру элементов.

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

§ 2.4. Назначение формы объекту

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

К вопросу 2. Ответ. Основная — та, которую платформа откроет, если при вызове не сказано, какую именно открывать.

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

К вопросу 4. Ответ. Из двух: назначена ли основная форма этого вида; если нет — платформа строит форму сама. У справочников и документов вторая ступень срабатывает в любом случае, поэтому окно открывается.

К вопросу 5. Ответ. Не меняет саму форму, не запрещает остальные формы того же вида, не отменяет автоформы других видов.

К вопросу 6. Указание. Где мы меняли строку и с чем работает пользователь?

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

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

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

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

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

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

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

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

§ 2.5. Запуск в Предприятии: видим то, что собрали

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

К вопросу 2. Ответ. Источник окна. Раньше его строила платформа, теперь оно берётся из формы, лежащей в дереве.

К вопросу 3. Ответ. Форма не следует за объектом: новый реквизит в ней сам не появится, его придётся вывести руками.

К вопросу 4. Ответ. Нет. Нетронутая форма выглядит как автоформа. Ответ даёт строка основных форм объекта.

К вопросу 5. Ответ. Что форму правил человек: автоформа раскладывает поля в порядке дерева.

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

К вопросу 7. Ответ. Ничего. Список строится платформой, и правка формы элемента его не касается.

К упражнению «По образцу». Ответ. Порядок тот же: правка в редакторе, обновление конфигурации базы данных, проверка. Если изменение не видно, шаг с обновлением пропущен.

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

К упражнению «Ловушка: „форма сломалась"». Ответ. Ничего не сломалось. Форма хранится и не пересобирается; поле нужно вывести в ней руками.

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

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

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

§ 2.6. Чужая форма: разбор по трём областям

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

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

К вопросу 3. Ответ. Реквизиты, элементы, команды. В этом порядке элемент читается сразу вместе с источником значения.

К вопросу 4. Ответ. Невыведенный реквизит — чей-то отказ показывать его пользователю, то есть тоже решение.

К вопросу 5. Ответ. Что происходит при нажатии, что при открытии и откуда берутся вычисляемые значения.

К вопросу 6. Ответ. Что форму правил человек: автоформа раскладывает поля в порядке дерева.

К вопросу 7. Ответ. Считать, что всё на форме пришло от объекта; считать любую кнопку командой формы; судить об объекте по одному окну.

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

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

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

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

К упражнению «На чтение». Ответ. Что открывается не она: двойной щелчок приведёт к форме, построенной платформой. Эту форму зовут явно — из команды, из кода или из другой формы.