Ответы к главе 7

§ 7.1. Команда: действие, которое форма предлагает сделать

К вопросу 1. Ответ. Одна сторона — данные и их показ: реквизиты и элементы. Другая — действия: команды формы. Оба списка живут в редакторе форм, рядом друг с другом.

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

К вопросу 3. Ответ. Команда — запись в списке команд, её не видно; кнопка — элемент формы в структуре элементов, её видно. Связывает их свойство кнопки с именем команды.

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

К вопросу 5. Ответ. Процедура-обработчик: платформа вызывает её, когда команду вызвали. Кода обработчиков эта книга не пишет — она учит читать форму, а не программировать её.

К вопросу 6. Указание. Кнопка отвечает за «где предложено», а не за «что произойдёт».

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

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

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

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

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

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

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

§ 7.2. Три источника команд: платформа, объект, форма

К вопросу 1. Ответ. Стандартные — что они делают, знает платформа; команды объекта — обработчик в модуле команды; команды формы — в модуле формы.

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

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

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

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

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

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

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

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

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

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

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

§ 7.3. Кнопка: элемент, который предлагает команду

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

К вопросу 2. Ответ. Свойством с именем команды.

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

К вопросу 4. Ответ. Кнопка командной панели и гиперссылка командной панели — для кнопок в командной панели; обычная кнопка и гиперссылка — для кнопок в любом другом месте. Решает место кнопки.

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

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

К вопросу 7. Указание. Что именно выключено — кнопка или команда?

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

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

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

К упражнению «Ловушка: „выключил кнопку — запретил"». Ответ. Выключена одна кнопка, а не команда. Если «Провести» предложена ещё где-то — в меню «Ещё» или второй кнопкой, — провести можно. Запрет задают правами.

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

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

§ 7.4. Командная панель: где собираются кнопки

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

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

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

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

К вопросу 5. Ответ. В меню «Ещё», в подменю этой панели и в контекстном меню — а если и там нет, проверить её видимость в структуре.

К вопросу 6. Ответ. Чтобы действие стояло рядом с данными, к которым относится: кнопка у итога понятнее, чем та же кнопка наверху среди общих.

К вопросу 7. Указание. Сколько кнопок может быть у одной команды и сколько панелей на форме?

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

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

К упражнению «Своё: соберите редкое». Ответ. Завести в панели подменю и перенести три редкие кнопки в него; или поставить им положение «только в „Ещё"».

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

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

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

§ 7.5. Своя команда формы: «Обновить цены»

К вопросу 1. Ответ. Когда действие нужно только в этой форме. Если оно нужно во многих формах, где встречается тот же объект, заводят команду объекта.

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

К вопросу 3. Ответ. Имя — слитное, для платформы и кода: «ОбновитьЦены». Заголовок — обычными словами, для пользователя: «Обновить цены», его видно на кнопке.

К вопросу 4. Ответ. Заводит в модуле формы пустую процедуру, записывает её имя в свойство «действие» и открывает модуль.

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

К вопросу 6. Указание. Что платформа делает при нажатии, шаг за шагом?

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

К вопросу 7. Ответ. «Изменяет сохраняемые данные»: после вызова такой команды форма считает себя изменённой и при закрытии предлагает записать.

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

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

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

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

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

§ 7.6. Чужая форма: каталог команд

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

К вопросу 2. Ответ. Команда, заголовок, источник, где предложена и что известно о действии.

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

К вопросу 4. Ответ. На панелях таблиц, в меню «Ещё», в подменю панелей и в контекстных меню таблиц и полей.

К вопросу 5. Ответ. Действие описано, но человеку не предложено. Если процедура пуста — это заготовка; если непуста, команду вызывает код.

К вопросу 6. Ответ. Что именно делает код и безопасно ли нажимать. Каталог доводит до имени процедуры и модуля — дальше язык 1С.

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

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

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

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

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

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