Ответы к части 0
Ответы собраны здесь, а не под вопросами: подсказка, увиденная сразу после вопроса, отменяет попытку вспомнить. У каждого ответа до трёх ступеней: сам ответ, указание — если ответ не дался сразу — и полное решение там, где рассуждение важнее вывода.
§ 0.1. Платформа в двух режимах: Конфигуратор и Предприятие
К вопросу 1. Ответ. Конфигуратор и 1С:Предприятие — или просто Предприятие.
К вопросу 2. Ответ. Разработчик — в Конфигураторе, бухгалтер и кладовщик — в Предприятии.
К вопросу 3. Ответ. Оба подключаются к одной информационной базе, в которой лежат и конфигурация, и данные. Одна база — две двери.
К вопросу 4. Ответ. В Конфигураторе видно устройство программы: дерево конфигурации, формы в редакторе, код; товары и документы здесь не вводят. В Предприятии видна работа программы: разделы, списки, документы, отчёты, а устройство скрыто.
К вопросу 5. Указание. Должны случиться две вещи: одна — в Конфигураторе, другая — у пользователя.
Полное решение. Сначала разработчик обновляет конфигурацию базы данных: до этого изменение лежит в Конфигураторе и в работу не пошло. Затем пользователь перезапускает программу: сеанс, открытый раньше, работает с прежней конфигурацией и нового поля не покажет. Обе вещи нужны — не хватит любой, и пользователь поля не увидит.
К вопросу 6. Ответ. Чтобы видеть форму глазами того, для кого она сделана. В редакторе всё кажется понятным, потому что мы сами это собирали и помним, что куда положили; пользователь видит только то, что ему показали.
К упражнению «Первый взгляд». Ответ. Свободный. Типичные наблюдения: «сверху — заголовок и меню», «сбоку — раздел со списком всего, что есть», «в центре — пустая область или начальная страница». Хорошо, если описано своими словами: в этом и задача.
К упражнению «Вторая дверь». Ответ. Свободный. Типичные отличия: вместо раздела — дерево с ветками «Справочники», «Документы», «Отчёты»; товаров и документов не видно, видны только объекты, из которых программа устроена; названия объектов пишутся слитно — «ПоступлениеТоваров», а не «Поступление товаров».
К упражнению «Схема по памяти». Ответ. Одна база, подписанная «конфигурация + данные», и две стрелки к ней — от Конфигуратора и от Предприятия. У Конфигуратора подпись «разработчик; видит устройство», у Предприятия — «пользователь; видит работу».
К упражнению «Ловушка: поле, которого нет». Указание. Вспомните таблицу из четырёх шагов: какие из них разработчик мог счесть сделанными раньше, чем они случились?
Полное решение. Первая причина — разработчик изменил конфигурацию, но не обновил конфигурацию базы данных: изменение осталось в Конфигураторе. Вторая — у кладовщика открыта программа, запущенная до обновления: ей нужен перезапуск. Ловушка в слове «добавил»: для разработчика поле добавлено, как только оно появилось в редакторе, а для пользователя — только когда оно дошло до его экрана. Бывает и третья причина — поле добавили не на ту форму, которую открывает кладовщик: у одного товара окон несколько, и об этом — в следующей главе.
К упражнению «По одной фразе». Ответ. Бухгалтер — в Предприятии, стажёр — в Конфигураторе.
Полное решение. Разделы «Закупки», «Продажи», «Зарплата» названы деловыми словами, и так они выглядят только в Предприятии; в Конфигураторе их следы лежат в ветке «Подсистемы» внутри «Общих». У стажёра признаков два: «ветка» — это слово дерева конфигурации, а имя «ПоступлениеТоваров» написано слитно, как пишут имя объекта. В Предприятии пользователь увидел бы «Поступление товаров».
§ 0.2. Что такое интерфейс пользователя: всё, что видно и трогается
К вопросу 1. Ответ. Всё, через что человек общается с системой: сообщает ей, чего хочет, и получает ответ. Примеры: руль, педали и приборы автомобиля; ручка и табло микроволновки; экран и клавиши банкомата.
К вопросу 2. Ответ. Разделы, списки, карточки, поля, кнопки, сообщения и вопросы — любые пять.
К вопросу 3. Ответ. В режиме Предприятия. Конфигуратор показывает устройство программы, а не её интерфейс.
К вопросу 4. Ответ. Потому что они отвечают на разные вопросы. Список — «какие товары у нас бывают»: ему нужно показать много товаров сразу. Карточка — «каков этот товар»: ей нужно показать один товар целиком.
К вопросу 5. Ответ. Данные в информационной базе, правила, по которым программа считает и проверяет, код, написанный разработчиком, и устройство объектов в дереве конфигурации.
К вопросу 6. Указание. Можно ли назвать интерфейсом одно окно? А можно ли назвать формой всё, что видит пользователь?
Полное решение. Интерфейс шире. Это всё видимое и доступное для действия в программе: разделы, меню, списки, карточки, сообщения. Форма — одно отдельное окно: список товаров, карточка поступления, окно отчёта. Раздел программы или главное меню — часть интерфейса, но не форма; как они устроены, книга разберёт ближе к концу. Помогает сравнение с квартирой: интерфейс — вся обстановка, форма — одна комната, и каждая комната устроена по-своему, потому что служит своему делу.
К упражнению «Четыре окна». Ответ. Свободный. Опорные наблюдения: список товаров — таблица, по строке на товар; карточка товара — отдельные поля одного товара; карточка поступления — поля сверху и таблица товаров ниже, кнопки записи и проведения; отчёт — настройки и область результата, которая заполняется после «Сформировать».
К упражнению «Своё устройство». Ответ. Свободный. Пример для лифта: человек сообщает кнопками этажей и кнопкой вызова; лифт отвечает табло с номером этажа, звонком, открывающимися дверями; под поверхностью — мотор, тросы и управляющее устройство, которое решает, куда ехать сначала.
К упражнению «Ловушка: „программа меня не понимает"». Ответ. Возможны оба места.
Полное решение. На поверхности: нажата не та кнопка; кнопка недоступна; программа показала сообщение, которого пользователь не заметил. Под поверхностью: правило или код, который должен сработать, работает не так; у пользователя нет права на это действие. Ловушка в том, что «ничего не происходит» — наблюдение с поверхности, а причина может быть на любой глубине. Поэтому разбор начинают с поверхности — та ли кнопка, доступна ли, не было ли сообщения — и только потом ищут глубже.
К упражнению «Где это живёт». Ответ. Первое — о том, что под поверхностью: значение превращается кодом. Второе — о поверхности.
Полное решение. Когда число переводят в строку и приписывают знак рубля, меняется само значение — это работа кода. Когда сумму «показывают с двумя знаками», значение в базе остаётся тем же, меняется только то, как поле его выводит. Это свойство того, как показано, а не того, что лежит, — то есть интерфейса. Ловушка в том, что обе фразы звучат как «про деньги на экране», а живут на разных этажах.
К упражнению «Окно не из четырёх». Ответ. Свободный. Подойдут окно настроек, окно со списком всех функций программы, маленькое окно выбора, которое открывается, когда в документе выбирают контрагента из списка. Последнее особенно интересно: это тоже форма, но с другой задачей — не показать и не принять данные, а помочь выбрать одно значение.
§ 0.3. Форма как единица интерфейса: разговор о чём-то одном
К вопросу 1. Ответ. Почти каждое окно говорит с пользователем о чём-то одном: об одном товаре, одном документе, о справочнике целиком или об одном вопросе.
К вопросу 2. Ответ. Карточка — об одном товаре, например о ручке шариковой. Список — о справочнике «Товары» целиком: какие товары у нас бывают.
К вопросу 3. Ответ. Форма — объект конфигурации, который описывает одно окно: из каких частей оно состоит, что показывает и что позволяет сделать. Живёт она в ветке «Формы» внутри своего объекта — справочника, документа, отчёта, — а если её сделали общей, то среди общих форм в ветке «Общие». Такую форму задаёт разработчик; окно может обойтись и без неё, и кто его тогда строит — вопрос следующей главы.
К вопросу 4. Ответ. Реплика — форма; предмет реплики — реквизит формы; видимая часть реплики — элемент формы; глагол — команда; оглавление — командный интерфейс.
К вопросу 5. Указание. Посмотрите на окно сверху, раньше, чем на поля.
Полное решение. По заголовку окна. Платформа пишет в нём имя предмета, а у карточки — ещё и вид предмета в скобках: «Ручка шариковая (Товары)». Заголовок без скобок, «Товары», говорит, что предмет — справочник целиком. Но это подсказка, а не гарантия: автор формы может задать свой заголовок, и тогда предмет придётся искать по содержимому окна.
К вопросу 6. Ответ. Не похоже тем, что говорит не об одном объекте, а о задаче — обслужить покупателя: в нём сразу товары, оплата и чек. Похоже тем, что собрано из тех же деталей — полей, таблиц, кнопок — и тоже является формой.
К упражнению «Назовите предмет». Ответ. Карточка товара — об одном товаре; список товаров — о справочнике «Товары» целиком; карточка поступления — об одном документе, поступлении № 12; отчёт — об одном вопросе, сколько товара на складах; окно выбора — отдельная форма о справочнике «Контрагенты» целиком, с задачей выбрать одного.
К упражнению «Бланк из жизни». Ответ. Свободный. Пример: квитанция за квартиру — об одном платеже за одну квартиру за один месяц. Напечатаны заранее получатель, адрес, строки услуг; заполняет человек показания счётчиков, сумму, дату. Хорошо, если вы заметили, что бланк, как и форма, собран вокруг одного предмета.
К упражнению «Ловушка: список — это много разговоров?». Ответ. Не прав.
Полное решение. У списка один предмет — справочник «Товары» целиком, а строки — его содержимое, как строки в оглавлении книги не делают из неё много книг. Проверить можно глаголами списка. Кнопка «Создать» добавляет товар в справочник — это действие над целым, а не над строкой. А отдельный разговор о каждом товаре начинается там, где открывается его собственное окно, — в карточке, по двойному щелчку на строке.
К упражнению «Предмет по заголовку». Ответ. «Контрагенты» — справочник целиком. «ООО «Ромашка» (Контрагенты)» — один контрагент. «Поступление товаров (создание)» — один документ, которого ещё нет в базе: он появится, когда его запишут. «Рабочее место кассира» не укладывается в разговор об одном объекте: это задача — обслужить покупателя, — а не предмет. Это форма того рода, в центре которого дело, как у рабочего места кассира.
§ 0.4. Командный интерфейс: оглавление прикладной программы
К вопросу 1. Ответ. Командный интерфейс: разделы программы и команды в них, через которые открывают формы: списки, карточки, отчёты.
К вопросу 2. Ответ. Оглавление держат панель разделов и функции текущего раздела. Формы открываются в рабочей области.
К вопросу 3. Ответ. «Главное» платформа показывает всегда, в любой программе. Остальные разделы — это подсистемы первого уровня из ветки «Общие»: одна подсистема первого уровня — один раздел, а вложенные в неё подсистемы становятся группами команд внутри него.
К вопросу 4. Указание. Что разработчик делает с подсистемой, а что платформа делает сама?
Полное решение. Разработчик включает объект в состав подсистемы — например, документ «ПоступлениеТоваров» в «Закупки». Команды объекта — открыть список, создать новый — платформа сама ставит в раздел этой подсистемы. Разработчик задаёт правило «поступления относятся к закупкам», а кнопок по одной не рисует.
К вопросу 5. Ответ. Потому что подсистем в конфигурации нет: по «Дереву метаданных» их не заводили. Остаётся только раздел, который есть всегда, — «Главное».
К вопросу 6. Ответ. Командный интерфейс — оглавление всей программы: его команды открывают формы. Командная панель — полоса кнопок одной формы: её команды что-то делают с тем, что уже открыто. Проверка: открывает команда новую форму — это оглавление; действует над открытой — это глагол формы.
К упражнению «Оглавление „Канцтоваров"». Ответ. Ожидаемо: списки — товары, контрагенты, склады, поступления товаров; создание — новое поступление, новый товар; отчёт — остатки товаров на складе. Точный состав сверьте с экраном: что платформа кладёт в «Главное», зависит от настроек объектов.
К упражнению «Своё оглавление». Ответ. Свободный. Пример: «Закупки» — поступления, контрагенты; «Склад» — товары, склады, отчёт об остатках; «Справочники» — всё, что заводят один раз. Контрагентов хочется положить и в закупки, и в продажи: у них покупают и им продают. Так и делают — объект входит в две подсистемы, и у его списка появляются два входа.
К упражнению «Ловушка: две панели». Ответ. Кнопка «Провести» — глагол формы документа, она живёт в командной панели его формы, а не в оглавлении.
Полное решение. Командный интерфейс открывает формы; провести же можно только документ, который уже открыт, — значит, это действие над открытой репликой. Если пользователи кнопку не находят, искать нужно в командной панели формы: возможно, кнопка убрана в меню «Ещё». Добавлять её в разделы программы бессмысленно — там нечего проводить.
К упражнению «Чужое оглавление». Ответ. Поступления — в «Закупках». Справочник товаров — в «Складе», а скорее всего ещё и в «Продажах» и «Закупках».
Полное решение. Раздел — не дом формы, а вход в неё. Справочник товаров нужен и тому, кто закупает, и тому, кто продаёт, и тому, кто считает остатки, поэтому разработчик включает его в несколько подсистем. Форма списка при этом одна и та же — у неё просто несколько входов.
§ 0.5. Клиент и сервер: пользователь здесь, данные там
К вопросу 1. Ответ. На клиенте — окна, формы, поля, кнопки: всё, что видит и трогает пользователь. На сервере — база с данными и всё, что с ними делают: чтение, проверка, запись.
К вопросу 2. Ответ. Потому что это разделение обязанностей, а не устройств. В файловой базе обе роли выполняет одна запущенная программа на одном компьютере; на предприятии сервер — отдельная машина. Обязанности при этом те же.
К вопросу 3. Ответ. Клиент — по описанию формы и с данными, которые прислал сервер, прочитав объект из базы.
К вопросу 4. Ответ. На клиенте, в данных формы. В базе его ещё нет, и другие пользователи его не видят.
К вопросу 5. Указание. Сколько пользователей и сколько баз?
Полное решение. Клиентов много, база одна. Если бы каждый клиент считал правдой своё, два пользователя видели бы разные остатки одного товара. Сервер принимает записи от всех и держит одну версию данных для всех.
К вопросу 6. Ответ. Окно формы никуда не уходит — его строит и держит клиент. К серверу уходит обращение с данными формы, а обратно приходят описание формы и данные.
К упражнению «Два клиента». Ответ. Шаг 2: «РУЧ-01-Т» только в данных формы первого клиента. Шаг 3: второй клиент получил с сервера прежний артикул — на сервере нового значения нет. Шаг 4: после «Записать и закрыть» новое значение на сервере, в базе; второй клиент видит его, когда снова запрашивает карточку. Шаг 5: прежний артикул возвращён в базу.
К упражнению «Своё окошко». Ответ. Свободный. Пример: банкомат — клиент, банк — сервер. Между ними ходят обращения («снять пять тысяч») и ответы («разрешено, остаток такой-то»). Правда о деньгах — в банке: банкомат ничего не решает сам и не хранит.
К упражнению «Ловушка: „у нас нет сервера“». Ответ. Первая ошибка: сервер есть — это роль, и в файловой базе её выполняет та же программа на том же компьютере. Вторая: введённое не сохраняется сразу — оно остаётся в данных формы, пока не нажата «Записать».
Полное решение. Ловушка в том, что «сервер» представляется отдельным железным ящиком. Бухгалтер его не видит и делает вывод, что нет и разделения. Но окно, в котором он вводит число, и база, где число будет храниться, остаются разными сторонами и в файловой базе, — и между ними по-прежнему нужен шаг записи.
К упражнению «Где это происходит». Ответ. Окно стало шире — клиент. Строки прочитаны из базы — сервер. Буква появилась в поле — клиент. Документ записан в базу — сервер. Переключение на другое окно — клиент.
§ 0.6. Декларативность платформы: не написать действие, а задать правило
К вопросу 1. Ответ. Действием задают, что делать и когда: «в двадцать градусов включи обогреватель». Правилом — каким должен быть результат: «пусть будет двадцать два», а как этого добиться, решает устройство. Бытовой пример — термостат, свет с датчиком движения.
К вопросу 2. Ответ. Описание свойствами: что есть и как связано, без последовательности действий; способ получить результат выбирает платформа. Правила живут в палитре свойств Конфигуратора — у объектов, реквизитов, форм и их элементов.
К вопросу 3. Ответ. Любые три из: карточка товара построилась без формы в дереве — у объекта нет своих форм, платформа строит сама; кнопка выбора у поля «Контрагент» — тип реквизита, ссылка на справочник; номер поступления — свойство документа «Автонумерация»; команды в разделе — состав подсистемы; раздел «Главное» — первый раздел платформа показывает всегда.
К вопросу 4. Указание. Что тип реквизита сообщает платформе о поле?
Полное решение. Поле «Склад» из строки для ввода станет полем с кнопкой выбора и окном со списком складов, а в списке поступлений склад будет показан по имени. Форму трогать не нужно, потому что всё это — следствия одного свойства, типа реквизита: платформа строит поле по правилу, а правило поменялось.
К вопросу 5. Ответ. В свойствах реквизита, с которым поле связано: тип, проверка заполнения и другие.
К вопросу 6. Ответ. Потому что это поведение — «когда изменили одно, пересчитай другое», — а не свойство результата. Такого свойства у реквизита нет, и разработчик дописывает пересчёт в обработчике события.
К упражнению «Найдите правило». Ответ. Номер — свойство документа «Автонумерация». Поле «Артикул» — реквизит справочника: платформа строит карточку из реквизитов, когда своей формы нет. Кнопка выбора у «Склада» — тип реквизита, ссылка на справочник «Склады».
К упражнению «Своё: правила вокруг». Ответ. Свободный. Примеры: термостат — задаёте температуру, он решает, когда греть; свет с датчиком движения — задаёте «гореть, когда кто-то есть», он решает, когда включиться; стиральная машина — задаёте программу, она решает, сколько набрать воды и когда отжимать.
К упражнению «Ловушка: где спрятан код?». Ответ. Не найдёт: обработчика нет. Найдёт тип реквизита — «СправочникСсылка.Контрагенты».
Полное решение. Привычка «раз что-то происходит, значит, это кто-то запрограммировал» в 1С часто ведёт мимо. Кнопка «…» и окно выбора — следствия одного свойства, и искать их нужно в палитре свойств реквизита, а не в модуле формы. Правило «сначала ищите правило» экономит здесь часы.
К упражнению «Правило или код». Ответ. Подсветка пустого поля — правило: проверка заполнения реквизита. Подстановка цены при выборе товара — код: это поведение «при изменении товара найди цену». Поступление в разделе «Закупки» — правило: состав подсистемы. Отказ записать без склада — правило: проверка заполнения.
§ 0.7. Два режима форм: управляемые и обычные
К вопросу 1. Ответ. Обычная нарисована: элементы стоят по координатам, куда их положил разработчик. Управляемая описана свойствами — что на ней есть и с чем связано, — а раскладку считает платформа при открытии.
К вопросу 2. Ответ. Потому что её раскладкой управляет платформа, а не потому, что ею управляет пользователь.
К вопросу 3. Ответ. Обычная — только толстым клиентом. Управляемая — тонким, веб-клиентом, мобильным и толстым.
К вопросу 4. Ответ. По редактору: у обычной холст, элементы двигаются мышью; у управляемой дерево элементов и никаких координат. Ещё по свойству конфигурации «Основной режим запуска».
К вопросу 5. Ответ. В старых конфигурациях, начатых до 8.2 и не переведённых; при режиме совместимости с версией 8.1, когда управляемое приложение запрещено; при включённом свойстве «Использовать обычные формы в управляемом режиме» — тогда приложение управляемое, но в толстом клиенте работают обычные формы.
К упражнению «Найдите режим». Ответ. В «Канцтоварах» стоит «Управляемое приложение»: формы, которые мы будем делать, — управляемые, и всё, что книга говорит о правилах и раскладке, к ним относится.
К упражнению «Два описания». Ответ. Свободный. Ожидаемо: в обычной форме разработчик сам ставит поле «Артикул» в нужное место, задаёт его размер и следит, чтобы при другом размере окна ничего не наехало друг на друга. В управляемой он говорит, что на форме есть поля наименования, артикула и единицы и в каком они порядке, а размеры и расположение платформа рассчитает сама — под окно, клиент и настройки пользователя.
К упражнению «Ловушка: кто управляет». Указание. Кто в слове «управляемая» управляет — человек или программа?
Полное решение. Перепутано, кто управляет: раскладкой управляет платформа, и название про неё. Но вывод отчасти верен по другой причине: раз расположение считает платформа, она же умеет учесть настройки пользователя — скрытые колонки, их порядок и ширину. У обычной формы, нарисованной по координатам, такой свободы нет. То есть пользователь действительно получает больше власти над управляемой формой, но не потому, что она так названа.
К упражнению «Чужая форма из описания». Ответ. Это обычная форма. Сохраниться она могла в конфигурации, начатой до версии 8.2 и не переведённой на управляемые формы, или в конфигурации с режимом совместимости с 8.1.
§ 0.8. Связь с метаданными и с кодом: где здесь дерево, где здесь язык
К вопросу 1. Ответ. Дерево конфигурации — чертёж прикладной программы. Его ветки — виды объектов: справочники, документы, регистры, отчёты, обработки; внутри веток лежит то, что завёл разработчик.
К вопросу 2. Ответ. Объект конфигурации описывает целый вид: справочник «Товары» — это все товары, какие есть и будут. «Ручка шариковая» — одна запись в нём, один элемент справочника.
К вопросу 3. Ответ. Реквизит объекта — его свойство, которое хранится в базе: артикул товара, контрагент поступления. Табличная часть — таблица внутри объекта: строки товаров в поступлении.
К вопросу 4. Ответ. Реквизит — в поле, табличная часть — в таблицу со строками, стандартные команды — в кнопки вроде «Записать» и «Провести и закрыть».
К вопросу 5. Ответ. Правила — в свойствах объектов, реквизитов и форм. Код — в модулях: модуле формы, модуле объекта, общих модулях.
К вопросу 6. Указание. С чего начинается чтение любой формы?
Полное решение. Сначала заголовок формы: он называет предмет разговора — товар, поступление, справочник целиком. По предмету находят объект в дереве: справочник «Товары», документ «ПоступлениеТоваров». Внутри объекта лежит ветка «Формы», а поля формы возводятся к его реквизитам.
К упражнению «Прочитайте чертёж». Ответ. По ветке документа ожидаемо: поля «Контрагент» и «Склад» с кнопками выбора, таблица товаров с колонками «Товар», «Количество», «Цена», «Сумма», кнопки записи и проведения. Плюс то, чего в ветке реквизитов не видно: номер и дата — они есть у каждого документа.
К упражнению «Обратный путь». Ответ. В заголовке окна искали имя предмета — «Склады». Отсюда объект: справочник «Склады» в ветке «Справочники».
К упражнению «Ловушка: реквизит и поле». Ответ. Реквизит — то, что хранится; поле — то, чем это показывают. Это разные вещи, и одно бывает без другого.
Полное решение. Реквизит объекта живёт в базе и существует, даже когда его никто не смотрит. Поле — элемент формы, через который реквизит показывают пользователю. Реквизит без поля — обычное дело: разработчик может не выводить служебное значение на форму, и оно всё равно хранится и участвует в отчётах. Обратный случай — поле без реквизита — тоже бывает, но о нём книга скажет позже, когда дойдёт до элементов формы.
К упражнению «Где искать код». Ответ. Кнопка выбора у поля «Контрагент» — свойства: тип реквизита. Изменение остатка при проведении — код: процедура проведения в модуле объекта. Артикул в списке товаров — свойства: реквизит справочника и состав колонок списка. Сумма не пересчиталась — код, которого в «Канцтоварах» нет.