Тело цикла

Пока УсловиеЦикла Цикл

Тело цикла

Для Каждого ПеременнаяЦикла Из ИмяКоллекции Цикл

Тело цикла

Код

Иначе

Код

ИначеЕсли Условие Тогда

Код

КонецФункции

Тело функции

КонецПроцедуры

Тело процедуры

Текст комментария

Функция ИмяФункции(ИмяПараметра1,...)

Возврат (ВозвращаемоеЗначение);

Имя переменной, процедуры, функции может состоять из букв, цифр и символов подчеркивания. Начинаться имя должно либо с буквы, либо с символа подчеркивания.

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

Если Условие Тогда

КонецЕспи;

Для ПеременнаяСчетчик = НачальноЗначение По Конечное Цикл

КонецЦикла;

КонецЦикла;

КонецЦикла;

Очень часто (в основном) во встроенном языке придется иметь дело с некими объектными сущностями (с объектами, имеющими набор свойств, методов). Для обращения к свойству объекта можно использовать два подхода:

Наим = Спр.Наименование;

Наим = Спр["Наименование"];

Вызов методов объектов производиться «через точку»

Спр.Печать();

Допускаются следующие конструкции:

Док.Контрагент.ПолучитьОбъект().ПечатьКарточкиКлиента();

Платформа «1С:Предприятие 8» сочетает в себе визуальные и языковые средства конфигурирования. Использование встроенного языка в системе имеет событийно-зависимую ориентацию, то есть языковые модули используются в конкретных местах для отработки отдельных алгоритмов, настраиваемых в процессе конфигурации. Программный код всегда помещается в модули.

Место размещения конкретного программного модуля предоставляется конфигуратором в тех точках конфигурации, которые требуют описания специфических алгоритмов функционирования. Эти алгоритмы следует оформлять в виде процедур или функций, которые могут быть вызваны самой системой в заранее предусмотренных ситуациях.


3. Основные объекты

3.1. Постановка задачи

Изучать основы конфигурирования и программирования в программном комплексе «1С:Предприятие 8» будем на примере написания простой конфигурации, позволяющей автоматизировать учет в некоей фирме. Эта конфигурация позволит разобраться с основными принципами работы в системе.

Деятельность компании заключается в том, что она закупает у своих поставщиков диски (по ценам закупки), которые затем продает (сдает в аренду) своим покупателям (по ценам продажи).

Необходимо организовать хранение информации:

· номенклатуре товаров

· контрагентах нашей фирмы

· сотрудниках компании

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

Нам в любой момент времени необходимо иметь возможность получить следующую информацию:

· о покупках (у кого и сколько дисков мы купили)

· о продажах (в разрезе покупателей и проданных им дисков)

· о сотрудниках организации

Для простоты будем считать, что торговля ведется от имени одного юридического лица и всегда в одной валюте (цены и стоимость товаров учитываются в одной валюте). Но в рамках компании существует несколько складов.

3.2. Определение режима запуска

Приложение «1С:Предприятие» (версия 8.2) по мимо всего ранее перечисленного может работать в двух режимах:

· Обычное приложение (режим, в котором работали предыдущие версии «1С:Предприятие 8»)

· Управляемое приложение (новый режим)

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

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


3.3. Командный интерфейс

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

3.3.1. Подсистемы

Структура подсистем определяет структуру функциональности прикладного решения. Можно сказать, что структура подсистем определяет, каким образом пользователь будет осуществлять «навигацию» по функциональности предлагаемого решения.

Для создания подсистем нужно зайти внутрь ветви общие и выполнить команду «Добавить» контекстного меню ветви «Подсистемы» (можно воспользоваться кнопкой командной панели окна дерева объектов конфигурации).

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

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

Следует отметить, что структуру функциональности определяют подсистемы только первых трех уровней.

Определите подсистемы, таким же образом как на рисунке снизу:

Подсистемы первого уровня определяют структуру так называемой «панели разделов». Это можно увидеть запустив «1С:Предприятие».

Сразу же бросается в глаза, что порядок разделов в панели отличается от порядка подсистем, определенных при конфигурировании (они отсортированы по алфавиту).

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

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

В открывшемся окне можно «поправить» последовательность разделов.

3.3.2. Роли

Следует отметить, что мы следуем рекомендуемому порядку разработки командного интерфейса. Сам порядок следующий:

· Первоначально определяется структура системы с точки зрения прикладной области (определяется структура подсистем)

· Определяется состав ролей

· При создании объектов конфигурации они относятся к нужным подсистемам, настраиваются права доступа

· При необходимости меняется расположение и видимость команд

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

Состав ролей следующий:

· ПолныеПрава (должны соответствовать своему наименованию)

· ОтделПродаж (предполагается, что у этой роли будет отсутствовать доступ к функциональности системы, связанной с проведением закупок).

· ОтделЗакупок (предполагается, что у этой роли будет отсутствовать доступ к функциональности системы, связанной с проведением продаж).

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

Следует отметить, что в реальной жизни нужно очень аккуратно относиться к такому элементу роли, как «Интерактивное удаление» (включение этого флага приводит к возможности удаления объектов без контроля ссылочной целостности)

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


3.4. Константы

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

3.4.1. Определение, настройка свойств

Создадим константу «НаименованиеКомпании». Для этого сделаем щелчок правой клавишей мыши на ветке «Константы» и выберем пункт контекстного меню «Добавить». В открывшемся окне свойств заполним их необходимыми значениями.

Создав таким образом константу, мы определили ВОЗМОЖНОСТЬ хранения в базе значения указанного типа.

Разработчик прикладного решения может работать с константой следующим образом:

// на чтение

МояПеременная=Константы. НаименованиеКомпании. Получить();

// установка значения

НовоеЗначение= “Новая компания”;

Константы.НаименованиеКомпании.Установить(НовоеЗначение);

Пользователь может посмотреть/установить значение константы, используя команду «Все функции» в режиме исполнения (как показано на рисунке далее)

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

Самостоятельная работа №1:

Создайте дополнительно две константы:

· Имя: «УчетПоСериям», тип: «Булево»

· Имя: УчетПоСкладам, тип «Булево»

3.4.2. Форма констант

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

Создадим форму констант. Для этого выполним команду «Создать форму констант» контекстного меню ветви «Константы».

Результатом выполнения команды будет запуск конструктора формы. Следует обратить внимание на то, что повторно запустить этот конструктор для уже созданной формы не получится.

Общие принципы работы с конструктором форм одинаковы и не зависят от того, для какого объекта вы создаете форму. Это несколько этапов:

· Выбор типа формы (один из ВАЖНЕЙШИХ моментов). Выбор типа напрямую влияет на функциональность формы, предоставляемой по умолчанию.

· Определение имени формы

· Определения значения флага «Использовать стандартные команды» (установка этого флага приводит к появлению стандартных команд в интерфейсе в тех подсистемах, к которым относится данный объект, в нашем случае это форма)

· После нажатия на кнопку «Далее» можно определить состав отображаемых (в нашем случае) констант.

После нажатия на кнопку готово, откроется окно настройки формы.

Сразу не будем пытаться «пробежаться» по всем существующим закладкам, с определенными возможностями будем знакомиться позже. Но первое знакомство проведем.

В правой верхней части окна определяется список реквизитов формы (того, что входит в понятие «Данные формы»). Реквизиты также можно назвать источниками функциональности формы.

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

В нижней части находится область предпросмотра (какой внешний вид имеет форма в результате всех ваших действий).

На закладке «Модуль» (ярлыки находятся в самом низу окна) можно прописывать код на встроенном языке системы.

3.4.3. Механизм работы формы.

Можно сказать, что так как форма является некоторым промежуточным объектом, в ней мой выделить две составляющие: реквизиты и элементы управления. Реквизиты «ближе» к базе данных, элементы управления «смотрят» на пользователя.

Хочется сделать акцент на том, что сейчас механизм формы рассматривает упрощенно, более подробное знакомство будет позже.

Как же работает сама форма. Когда пользователь хочет что-либо «посмотреть» (в нашем случае значения констант). Он дает команду на открытие этой формы. Система создает экземпляр формы и производит чтение значений констант. Прочитанные значения «копируются» в реквизит формы «НаборКонстант». Форма отправляется клиентскому приложению. Элементы управления отображают значения констант. Связь элемента управления со значением свойства реквизита осуществляется через свойство «Данные» элемента.

При настройке логики работы формы принят следующий подход: элементы управления выступают источниками событий. Программист описывает процедуры - обработчики событий. В обработчиках событий он работает с реквизитами формы. Измененные в обработчиках значения реквизитов автоматически отображаются элементами управления.

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

На закладке «Команды формы» окна настройки формы (закладка правой верхней части) создадим команду «ДанныеИзФормы».

Определим обработчик события следующим образом:

&НаКлиенте

Процедура ДанныеИзФормы(Команда)

ЗначениеКонстанты=НаборКонстант.НаименованиеКомпании;

ПоказатьОповещениеПользователя(ЗначениеКонстанты);

КонецПроцедуры

Подобным образом определим команду «ДанныеИзБазы». Текст обработчика команды ниже:

&НаКлиенте

Процедура ДанныеИзБазы(Команда)

ЗначениеКонстанты=ДанныеИзБазыСервер();

ПоказатьОповещениеПользователя(ЗначениеКонстанты);

КонецПроцедуры

& НаСервереБезКонтекста Функция ДанныеИзБазыСервер()

ЗначениеКонстанты=Константы.НаименованиеКомпании.Получить();

Возврат(ЗначениеКонстанты);

КонецФункции

Следует отметить, что каждая процедура, функция или объявление переменной модуля формы должны предваряться одной из следующих директив компиляции:

· &НаКлиенте - означает, что процедура/функция выполняется на стороне клиента, а переменная существует все время жизни клиентской части управляемой формы. Из клиентского метода допустимыми являются вызовы клиентских, серверных и серверных внеконтекстных методов.

· &НаСервере - означает, что процедура/функция выполняется на стороне сервера, а переменная существует только во время вызова выполнения серверного или серверного внеконтекстного вызова. Для серверных методов допустимыми являются вызовы серверных и серверных внеконтекстных методов.

· &НаСервереБезКонтекста означает, что процедура/функция исполняется на сервере вне контекста формы. Переменные не могут быть внеконтекстными. В таких методах недоступен контекст формы (включая данные формы). Допустимыми являются вызовы только других внеконтекстных методов. При вызове этих методов не выполняется передача данных формы на сервер и обратно. Применение внеконтекстных методов позволяет существенно уменьшить объем передаваемых данных при вызове серверной процедуры из среды клиентского приложения.

· &НаКлиентеНаСервереБезКонтекста - процедура/функция может исполняться в управляемом клиенте или на сервере, при этом контекст формы не доступен.

Отсутствие директивы компиляции перед процедурой означает использование директивы «&НаСервере».

Проверьте механизм на практике.

3.5. Справочники

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

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

3.5.1. Справочники. Знакомство

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

· Представление объекта: название одного объекта. Используется в представлении стандартной команды создание объекта.

· Расширенное представление объекта. Используется для формирования заголовка формы объекта.

· Представление списка: название списка объектов. Используется в представлении стандартной команды (команда открытия списка объектов).

· Расширенное представление списка. Используется для формирования заголовка формы списка.

Определим эти свойства в соответствии с рисунком.

Один из важных этапов: отнесение объекта конфигурации какой-

либо/каким-либо подсистемам.

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

На закладке «Данные» можно настроить длину кода и наименования, а также переопределить свойства стандартных реквизитов справочника.

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

3.5.2. Иерархия элементов

Иерархия это возможность связать между собой записи, находящиеся в рамках одной таблицы.

Разбираться с иерархией элементов будем параллельно с созданием справочника «Подразделения».

Справочник нужно отнести к той же подсистеме, что и «Единицы измерения».

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

Реализуем возможность создания элементов ранее определенных справочников не из командной панели списков, а напрямую с панели действий. Для этого нужно зайти в настройки командного интерфейса подсистемы «Справочники» (подчиненной «Общее»):

Проверьте работу системы на практике.

3.5.3. Перечисления

Иногда возникает необходимость задать в системе некий линейный и не изменяемый список. Это может быть список видов номенклатуры, операций того или иного документа, времен года, сторон света и т.п.

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

Создайте перечисление «Виды товаров». Перечень видов представлен на рисунке:

3.5.4. Иерархия групп

При установке вида иерархии в значение «иерархия групп» в таблице справочника появляется дополнительное поле «ЭтоГруппа» (тип «Булево»). Все записи в справочнике начинают делиться на две категории: группы и элементы. Группы и элементы могут характеризоваться разными свойствами. При таком виде иерархии в качестве родителей могут выбираться только группы.

Создайте справочник «Номенклатура» с таким видом иерархии.


На закладке «Данные» определите дополнительные реквизиты в соответствии с рисунком представленным ранее.

Обращайте внимание на правильное указание типов реквизитов.

Уделим внимание внешнему виду формы элемента справочника. Создадим ее предварительно. Затем в дереве элементов управления определим дополнительный элемент «Группа», для него определим настройки в соответствии с рисунком. После этого перенесем цены внутрь этой группы.

3.5.5. Подчиненные справочники

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

После подчинения в таблице справочника появляется поле «Владелец». Это поле содержит ссылку на запись из другой таблицы. С точки зрения пользователя на справочник накладывается дополнительное ограничение: нельзя записать элемент подчиненного справочника с не выбранным владельцем. В принципе заполнять подчиненный справочник рекомендуется начинать с объекта - владельца.

3.5.6. Табличные части

Создадим справочник «Физические лица». Состав реквизитов приведен рисунке. Справочник без иерархии, без подчинения.

Также нужно создать табличную часть «Трудовая деятельность», состав ее реквизитов также приведен на рисунке. При создании табличной части обратите внимание на то, что есть команда по созданию табличной части, а есть команда по созданию реквизита табличной части.

На закладке «Данные», воспользовавшись кнопкой «Стандартные реквизиты», переопределим синоним реквизита «Наименование» на «ФИО».

Создайте форму списка справочника, обратите внимание на тип и другие свойства основного реквизита формы

После этого явно создадим форму элемента справочника и приведем ее к желаемому виду.

А именно, требуется чтобы на форме было две странички. На первой располагались реквизиты справочника, на второй страничке табличная часть и командная панель этой табличной части. Добавим в форму новый элемент, тип элемента «Страницы» (как показано на рисунке).

Сделаем добавленную группу текущей и добавим два новых элемента управления с типом «Страница».

Остается «перетащить» элементы управления на нужные страницы

3.5.7. Расширение функциональности формы

Сразу хочется обратить внимание, на то, что рассматриваемый пример не имеет смысла с точки зрения реальных учетных задач. На этом примере рассматривается потенциальная возможность платформы (этот пример можно назвать «Знакомство с формой. Продолжение»).

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

После добавления реквизита его нужно «перетащить» в дерево элементов управления. На вопрос о добавлении колонок ответить положительно.

Таким же образом можно попытаться добавить еще один реквизит, с типом «СправочникОбъект.Номенклатура» и разобраться с тем как он «работает».

3.5.8. Работа с данными справочника

Разберемся, каким образом можно манипулировать данными справочника.

Следует отметить, что «1С:Предприятие» реализует две модели по работе с данными:

· Объектная модель

· Табличная модель

1. Начнем рассмотрение с объектной модели:

Для того, чтобы прочитать наименования всех элементов справочника «Номенклатура» потребуется написать следующий код:

// На чтение

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

Переменная = Выборка.Наименование;

// обработка полученного значения

КонецЦикла;

Это был пример на чтение данных, разберем пример на модификацию данных.

Для выборки и переноса всех элементов в предопределенную группу

// на запись

ПредопределеннаяГруппа=Справочники. Номенклатура. ДляПереноса;

Выборка = Справочники.Номенклатура.Выбрать();

Пока Выборка.Следующий() Цикл

Если Выборка.Ссылка = ПредопределеннаяГруппа Тогда

Продолжить;

КонецЕсли;

ПолученныйОбъект = Выборка.ПолучитьОбъект();

ПолученныйОбъект. Родитель = ПредопределеннаяГруппа;

ПолученныйОбъект.Записать();

КонецЦикла;

Самостоятельная работа №2:

Подумайте, к какому результату приведет попытка выполнения следующего фрагмента кода:

Пока Справочники.Номенклатура.Выбрать().Следующий() Цикл

// в теле цикла «что-то делаем» с наименованием...

КонецЦикла

2. Табличная модель

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

С составом таблиц (и некоторыми конструкциями языка запросов), с помощью которых можно работать с данными справочника познакомимся с помощью обработки «ТабличнаяМодель».

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

Создадим обработку в соответствующей ветви дерева объектов конфигурации. Создадим основную форму обработки.

В качестве типа формы установим значение «Обычная»:

В открывшемся окне настройки формы через команду главного меню «Форма / Вставить элемент управления» добавим «Поле текстового документа».

В свойстве элемента управления «Расширение» необходимо установить значение «Язык запросов».

Это даст возможность в режиме исполнения открывать конструктор запросов.

Следует отметить, что теперь доступ к созданным объектам конфигурации осуществляется через элемент главного меню «Операции».

В контекстном меню поля текстового документа нужно выбрать команду «Конструктор запроса».

В качестве исходной таблицы можно выбрать таблицу справочника «Номенклатура». Состав полей выборки приведен на рисунке.

На любом этапе создания запроса нажав на кнопку «Запрос» можно получить сформированный текст запроса:

Там же (в окне с текстом запроса) можно выполнить текст запроса (кнопка «Выполнить»).

На закладке «Группировка» можно определить поля, по которым выполняется группировка (свертка) и поля по которым считаются агрегатные функции.

Текст запроса следующий:

На закладке «Условие» можно определить условие, накладываемое на выбираемые данные.

Самостоятельная работа №3:

Выполните запросы к другим справочникам, определенным на данный момент в системе.

3.5.9. Создание печатных форм

Начнем с того, что вернемся к основному режиму запуска «Управляемое приложение». Для этого нужно откорректировать одноименное свойство конфигурации.

При создании печатных форм придется работать с такими объектами как макет и табличный документ. Суть алгоритма печати:

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

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

Один из важных моментов при создании группы это определение категории.

В окне объекта конфигурации «Номенклатура» на закладке «Макеты» по кнопке «Конструктор печати» откроем одноименный конструктор.

В открывшейся форме указываем, что создается новая команда. На этом же этапе можно переопределить имя создаваемой команды:

На следующем этапе из реквизитов справочника выбирает те, которые хотим видеть в печатной форме:

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

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

В результате работы конструктора у объекта конфигурации была создана команда. Ее свойства приведены на рисунке ниже:

В модуле команды определен следующий код:

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)

ТабДок = Новый ТабличныйДокумент;

Печать(ТабДок, ПараметрКоманды);

ТабДок. ОтображатьСетку = Ложь;

ТабДок. Защита = Ложь;

ТабДок.ТолькоПросмотр = Ложь;

ТабДок.ОтображатьЗаголовки = Ложь;

ТабДок.Показать();

//))

КонецПроцедуры

&НаСервере

Процедура Печать(ТабДок, ПараметрКоманды)

Справочники.Номенклатура.Печать(ТабДок, ПараметрКоманды); КонецПроцедуры

В модуле менеджера справочника:

Процедура Печать(ТабДок, Ссылка) Экспорт

//{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)

Макет = Справочники.Номенклатура.ПолучитьМакет("Печать");

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура. Код,

| Номенклатура.Наименование,

| Номенклатура.ОснЕдиницаИзмерения,

| Номенклатура.ЦенаПродажи

|ИЗ

| Справочник.Номенклатура КАК Номенклатура

|ГДЕ

| Номенклатура.Ссылка В (&Ссылка)";

Запрос.Параметры.Вставить("Ссылка", Ссылка);

Выборка = Запрос.Выполнить().Выбрать();

ОбластьЗаголовок = Макет. ПолучитьОбласть(”Заголовок”);

Шапка = Макет. ПолучитьОбласть("Шапка");

ТабДок.Очистить();

ВставлятьРазделительСтраниц = Ложь;

Пока Выборка.Следующий() Цикл

Если ВставлятьРазделительСтраниц Тогда

ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

ТабДок.Вывести(ОбластьЗаголовок);

Шапка. Параметры.Заполнить(Выборка);

ТабДок.Вывести(Шапка, Выборка.Уровень());

ВставлятьРазделительСтраниц = Истина;

КонецЦикла;

//}}

КонецПроцедуры

Проверьте механизм на практике.

В принципе на этом этапе пришло время познакомиться с классификацией команд.

Команды подразделяются на:

· Независимые команды

· Параметризуемые глобальные команды

· Команды формы

По способу создания они делятся на:

· Стандартные

· Созданные в конфигурации

По выполняемому действию:

· Навигационные

· Команды действия

Для независимых команд существенную роль играет отнесение ее к той или иной подсистеме. Это будет определять, в каких разделах/подразделах появится команда в интерфейсе управляемого приложения.

Для параметризованных команд, очень важную роль играет свойство «Тип параметра».

Стандартные команды предоставляются системой для ряда объектов конфигурации, их представление формируется только на основе свойств соответствующего объекта метаданных. Изменить поведение стандартных команд «штатными» средствами нельзя.

Команды, созданные в контексте каких-либо объектов конфигурации, относятся к тем же подсистемам, к которым отнесен сам объект конфигурации.

Самостоятельная работа №4:

Создайте следующие справочники:

· «Склады». Справочник без иерархии, без подчинения. Реквизитов и табличных частей нет.

· «Контрагенты». Справочник иерархический (иерархия групп и элементов), без подчинения. Дополнительный реквизит «НаименованиеПолное», тип «Строка» 300 символов.

· «КонтактныеЛица». Справочник без иерархии, подчинен справочнику «Контрагенты». Дополнительный реквизит «Телефон», тип «Строка» 15 символов.

· «Должности». Справочник без иерархии, без подчинения. Реквизитов и табличных частей нет. В нем определены 3 предопределенных элементы с именами «Бухгалтер», «ГлавныйБухгалтер», «Кассир».

3.6. Документы

Документ - одно из основных понятий системы «1С:Предприятие». При помощи документов организуется ввод в систему первичной информации о совершаемых хозяйственных операциях.

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

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

3.6.1. Создание документов

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

· «Контрагент» (тип <СправочникСсылка.Контрагенты>)

· «КонтактноеЛицо» (тип <СправочникСсылка.КонтактныеЛица>)

· «Сотрудник» (тип <СправочникСсылка.ФизическиеЛица>)

· «Склад» (тип <СправочникСсылка.Склады>)

· «СуммаДокумента» (тип <Число> длина 15, точность 2)

Определим одну табличную часть «Товары», ее состав:

· Номенклатура (тип <СправочникСсылка.Номенклатура>)

· Количество (тип <Число> длина 10, точность 0)

· Цена (тип <Число> длина 10, точность 2)

· Сумма (тип <Число> длина 10, точность 2)

· Серия (тип <СправочникСсылка.Серии>)

Для реквизита документа «КонтактноеЛицо» настроим связи параметров выбора.

Такую же связь настроим для реквизита табличной части «Серии».

Создайте форму документа, форму списка документа.

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

&НаКлиенте

Процедура КоличествоПриИзменении(Элемент)

Стр = Элементы.Товары.ТекущиеДанные;

Стр.Сумма = Стр.Количество * Стр.Цена;

КонецПроцедуры

&НаСервереБезКонтекста

Функция ПолучитьЦенуНоменклатуры(Номенклатура)

Возврат Номенклатура.ЦенаПокупки;

КонецФункции

&НаКлиенте

Процедура НоменклатураПриИзменении(Элемент)

Стр = Элементы.Товары.ТекущиеДанные;

Стр.Цена=ПолучитьЦенуНоменклатуры(Стр.Номенклатура);

КоличествоПриИзменении(Элемент);

КонецПроцедуры

3.6.2. Доступ к данным документа

1. Объектная модель:

// выборка документов

Выборка=Документы.ПоступлениеТоваров.Выбрать();

Пока Выборка.Следующий() Цикл

ТекКонтрагент=Выборка. Контрагент;

// перебор табличной части документа

Для Каждого ТекСтрока Из Выборка.Товары Цикл

ТекНоменклатура=ТекСтрока.Номенклатура;

КонецЦикла;

КонецЦикла;


2. Табличная модель

Запрос=Новый Запрос;

Запрос.Текст= "ВЫБРАТЬ

|ПоступлениеТоваров. Контрагент,

| ПоступлениеТоваров.Товары.(

| Номенклатура,

| Количество

| )

|ИЗ

| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров

|ГДЕ

| ПоступлениеТоваров.Ссылка =&Ссылка”;

Запрос.УстановитьПараметр("Ссылка",Объект.Ссылка);

Результат=3апрос. Выполнить();

Выборка=Результат.Выбрать();

Пока Выборка.Следующий() Цикл

ВыбКонтрагент=Выборка. Контрагент;

//…

ВыборкаТЧ=Выборка.Товары.Выбрать();

Пока ВыборкаТЧ.Следующий() Цикл

ТекНоменкпатура=ВыборкаТЧ.Номенклатура;

//

КонецЦикла;

КонецЦикла;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow