Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1с8_Задачник.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
25.2 Mб
Скачать

10.7. Дбхсгрегбухзапрсубк2рудАскл

Этот запрос аналогичен предыдущему но работаем с двумя субконто – руды и склады.

10.8.Дбхсгрегбухзапрсубк1скл

Этот отчет аналогичен отчету по рудам , но в качестве субконто используется Субконто2-склад.

11.Задача.Справочная ж/д вокзала.

Задача состоит из двух частей .

Часть1.Формирование состава.

Часть2. Клиентская часть.

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

Введем три перечисления-тип вагона( в качестве значений –купе и плацкарт),полка(в качестве значений-верхняя и нижняя) и статус(в качестве значений –свободно и занято).

Создадим двухуровневый справочник.Вагоны. На первом уровне- будет группа, содержащая одно из двух значений купе или плацкарт. На втором уровне – уровне элемента будет номер места и полка(верхняя или нижняя). В целом в справочнике.Вагоны нужно определить два поля: полка и тип вагона (у меня названо пертв-перечислениеТВ).

В 1с8 можно для каждого реквизита заранее определить в форме группы или в форме элемента будет использоваться тот или иной реквизит. (смотри поле «использование» в свойствах реквизита). В примере «Полка» используется в форме элемента, а «пертв»- в форме группы.

Создадим две формы –форму элемента и форму группы.

Как видно, в форме элемента система поставила только «полку».

В форме группы поставлено только «пертв». Чтобы избежать ручного ввода поля «Наименование» а также возможных ошибок при вводе , создадим процедуру которая копирует в поле «Наименование» то значение перечисления, которое выбирается в поле «пертв».

Сама процедура нуждается в комментарии.

Поле «пертв» - тип «перчисление». Это необычный тип данных (не число или строка)- это особый внутрисистемный тип.Поле «наименование – это принципиально «строка». Необходимо обеспечить соответствие типов.

Метод «строка» любой тип данных преобразует к типу «строка».

Создадим документ «Поезд».

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

На форму Документа поместим кнопку «Заполнить», многократно нажимая которую сформируем состав поезда.

Рассмотрим Процедуру заполнения. В диалоге необходимо получить два параметра номер вагона(НВ), судьбу которого решаем тип вагона(ТВ). Для общения с внешним миром применяются операторы «Ввести…). Первым необходимым условием для реализации диалога является задание в явном виде переменных с помощью оператора «Перем», в которые система поместит информацию . «Ввестичисло» - во время работы откроет диалог с подсказкой «ввести номер вагона» и после ввода ,например,7- это число будет присвоено переменной НВ. Сложнее дело с полем ТВ. Необходимо сначала создать пустое значение типа нужного перечисления.

ТВ=перечисления.типв.ПустаяСсылка(); Тем самым сообщили какого типа перечисление будет участвовать в диалоге определения типа вагона.

Дальнейшее заполнение из справочника происходит аналогично задаче «Школа». Напомним ,что уровни считаются с 0. Следовательно в документ копируем только те места у которых родитель совпадает с принятым в ТВ типом вагона. Выполняя многократно эту процедуру сформируем состав.

Перейдем к клиентской части.

Создадим отчет «СправБюро» с очевидным из смысла задачи составом реквизитов. Поля «Типваг» (перечисления.типв) и полка(перчисления.полка) заполняем по просьбе клиента и по кнопке «найти» заполняем ТЗ только теми строками из документа «Поезд» , которые соответствуют критериям поиска.

.

В модуле формы построим 4 процедуры. Процедура «НайтиНажатие» связана с кнопкой «найти».

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

Процедура «Возврат» работает если возвращают билет и она нуждается только в номере вагона месте (это достаточно для однозначной идентификации места. Единственное что делает эта процедура – меняет статус с «Занято» на «свободно».

Прежде чем подробно рассматривать эти процедуры обсудим еще одну проблему общего характера. Если в какой-то процедуре есть создание ТЗ то в ней неизбежно применяются операторы «ТЗ.ДобавитьКолонку(…)» . Далее ,если по смыслу задачи необходимо многократно запускать процедуру , то выдается ошибка «неверное имя колонки…». Смысл в том ,что мы повторно пытаемся определить то что уже определено первым запуском. Чтобы этого избежать, обеспечим огибание операторов ТЗ.Добавить() при повторных запусках. Для этого поместим на форму поле флаг –это число , которое принимает всего два значения 0 или 1.

Процедура «ПриОткрытии()» ставит флаг=0.

В процедуре «найти..» при первом запуске отчета флаг=0 и как следствие определим колонки.В конце процедуры флаг=1 и при повторных нажатиях кнопки «найти» блок определения структуры ТЗ будет огибаться.

После копирования из ТЗ выбранной строки необходимо сменить статус на «Занято», то есть записать новую информацию в ранее записанный документ. Здесь есть проблема. Документ может открываться для чтения (выборки) или для записи. Для того чтобы что-то записать надо применить метод ПолучитьОбъект(). В процедуре это

Аа= поезд.ссылка.получитьОбъект(); и тогда можно применить метод «записать().

Посмотрим все сделанное в работе. При нажатии «Заполнить» идет диалог и

Сначала вводим номер вагона а затем

Тип вагона ,например «купе» и т.д. В результате получим сформированный поезд, в котором все места свободны.

Откроем отчет , зададим критерий поиска «купе» и «низ». По кнопке «Найти» заполняется ТЗ в соответствии с критерием.

Допустим клиент выбрал вагон 1 и место 3. Щелкнув мышью на этой строчке выбор копировался в поля номер и место для последующей печати билета или реализации возврата.ТЗ очистилась для

следующих клиентов.

При этом в документе поезд строка с номером вагона 1 и местом 3 сменила статус на «занято» и

Не будет участвовать при поиске мест с таким же критерием.

Если будет возврат, то статус снова меняем на «свободно».

л

Дальше можно повесить кнопку «билет» и введя ФИО напечатать билет. Можно ввести пункт прибытия (при этом сначала создать справочник пунктов по пути следования с указанием цен билетов). Можно ввести несколько поездов с одним номером но на разные даты. Можно ввести поезда с разными направлениями и на разные даты В общем все ближе и ближе к реалиям. Можно наводить статистику и проводить анализ всего и вся (заполняемость поездов, финансовая эффективность и т.д). Много можно. Основа создана.

Это целый класс задач справочного характера (например, гостиница или кинотеатр).