WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

Pages:     || 2 |

«Средства конструирования приложений в среде программы Акцент Версия 1.0. © 2005-2008, ООО Импакт, г. Донецк стр. 2 из 2 25.04.2008 Автор программы : А.А. Кухтин Разработчик документации : А.Г. Гринев © 2008 ООО Импакт, ...»

-- [ Страница 1 ] --

стр. 1 из 1

25.04.2008

Средства конструирования

приложений в среде программы

Акцент

Версия 1.0.

© 2005-2008, ООО «Импакт», г. Донецк

стр. 2 из 2

25.04.2008

Автор программы : А.А. Кухтин

Разработчик документации : А.Г. Гринев

© 2008 ООО «Импакт», г. Донецк

Версия 1.0

83017, Украина, г. Донецк, ул. Белинского, 24а ООО «Импакт»

тел. +380-3898141, +380-3898142 служба поддержки +380-3898140 E-mail: [email protected] URL: http://www.accent.ua стр. 3 из 3 25.04.2008 Средства конструирования приложений в среде программы Акцент

Учет на основе двойной записи

Архитектура Акцента

Ввод информации

Анализ информации

Отражение архитектуры в объектной модели

Объект Application («Приложение»)

Объект WorkArea («База данных»)

Элементы и коллекции базы данных

Модуль рабочей области (WorkArea.avb)

Средства конструирования

Проект базы данных

Формы первичных документов

Диалоги

Таблицы

Модули

Первые шаги. Создаем «Расходный кассовый ордер»................ Работа с метками (FrmLabel)

Редактор (FrmEdit)

Выбор даты (FrmDate)

Таблица (FrmGrid)

Селектор (FrmSelector)

Bind-объекты

Оканчиваем создание внешнего вида формы

Сохранение документа

Панель управления документом (FrmToolBar)

Шаг второй. Разрабатываем счет на оплату товара

Заголовок таблицы

Таблица с прокруткой (FrmScrollGrid)

Доступ к строкам проводки

Управление количеством строк в таблице

Работа с параметрами проводки

Что такое «Параметр» ?

Добавление параметров

Работа с параметрами проводки

Параметры хозяйственной операции

Использование в форме картинок (FrmPicture)

Использование прайс-листов

Комбинированный список (FrmComboBox)

стр. 4 из 25.04. Последний штрих к «Счету на оплату» - печать таблицы с прокруткой

Шаг третий. Прочие элементы интерфейса формы первичного документа

Командная кнопка (FrmButton)

Флажок (FrmCheck)

Переключатель (FrmRadio)

Элементы ActiveX

Шаг четвертый. Работа со страницами формы

Программное переключение между страницами

Управление видимостью страниц

Печать всех страниц

Система построения отчетов

Работа с объектом «Мастер отчетов»

Алгоритм построения отчета

Программируем отчет

Работа с объектом SITE или «Где мы находимся ?».......... Программируем мастер отчетов

Структура информации в «Мастере отчетов»

Формируем «шапку» отчета

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

Работа с объектом «Общий отчет»

Шаг 1. Постановка задачи

Шаг 2. Программирование отчета

Шаг 3. Проверяем работоспособность отчета.................. Шаг 4. Некоторые особенности отчета

Объекты-аналоги встроенных отчетов

Шаг 1. Алгоритм построения отчета

Шаг 2. Программируем отчет

Шаг 3. Проверяем работоспособность отчета.................. Система «Налоговые отчеты»

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

Шаг 2. Объект для работы с механизмом налоговых отчетов RepTax

Шаг 3. Программируем отчет

Шаг 5. Тестируем отчет

Отчет для работы с прайс-листами (RepPriceList)................ Шаг 1. Алгоритм построения отчета

25.04. Шаг 2. Формирование остатков товара

Шаг 3. Формирование цен из прайс-листа

Шаг 4. Вывод информации в отчет

Управление периодом построения отчета

Управление кнопками на панели инструментов

Диалоги

Замена стандартного диалога свойств

Шаг 1. Создаем диалог

Шаг 2. «Ловим» событие вызова свойств объекта учета. Шаг 3. Отображение стандартного диалога

Работа с древовидными списками

Использование «Закладок»

Диалоги с изменяемыми размерами

25.04. Средства конструирования приложений в среде программы Акцент Программа Акцент являет собой класс программ, которые могут выступать одновременно в двух ипостасях. В качестве программы для ведения бухгалтерского учета и в качестве конструктора, воспользовавшись которым, можно создавать системы для учета любого вида. Что позволяет ей быть таковой ?

Учет на основе двойной записи На наш взгляд, двойная бухгалтерская запись, придуманная 500 лет назад Пачолли, наиболее универсальный и надежный способ хранения информации о событии, происшедшем в учете. Именно поэтому в качестве минимального «кирпичика», на котором базируется учет в Акценте, выбрана проводка, состоящая из двух счетов : по дебету – счет, на котором отражается приход суммы, и счет по кредиту – с которого осуществляется списание суммы, собственно, самой суммы, движение которой отражается и даты, когда это событие произошло.

В отличии от средневекового Пачолли, нынешние его коллеги ведут более расширенный аналитический учет. Для этого каждая проводка Акцента оснащена набором стандартных аналитических признаков : корреспондент-получатель денежных средств, корреспондент-отправитель денежных средств и объект учета – материальный или денежный объект, над или с которым осуществлялось событие в учете.



25.04. Иногда такого количества аналитических признаков недостаточно.

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

Еще один момент, на котором хотелось бы заострить внимание.

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

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

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

Ввод информации В журнал хозяйственных операций информация может попадать :

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

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

25.04. Первичные (DAO для файл-серверной версии, MS SQL-server для клиент-серверной) 25.04. Анализ информации Организация удобного и, по возможности, универсального способа анализа информации – вторая не менее, а может и более, важная задача после организации оперативного и удобного ее ввода в журнал хозяйственных операций.

Для решения задач, связанных с построением отчетов, в Акценте предусмотрен следующий механизм.

Прямой доступ к СУБД со стороны других программ Стандартные отчеты – это отчеты, правила построения и внешний вид которых предопределен и изменить их нельзя.

Мастера отчетов – это инструмент для создания отчетов произвольной выборки и группировки информации без программирования. Создание такого инструмента потребовало пойти на некоторые революционные шаги.

Первый шаг – отказ от обязательной связи между аналитикой и счетами. Эта связь практикуется подавляющим количеством разработчиков учетных программ. Говоря программистским языком, аналитические признаки в Акценте есть свойства проводки, а не счета. Что дает такое, казалось бы простое, решение На рисунке отображена упрощенная схема элементов проводки.

Дата проводки 25.04. Сумма является результатом указанных : даты, счетов и аналитики проводки. Теперь попробуем точно также отобразить несколько проводок.

Что можно представить немного по-другому.

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

Например, чтобы построить остатки товара по счету, достаточно зафиксировать этот счет по Дт и Кт, исключить корреспондентов и дату.

25.04. Если потребуется видоизменить отчет, чтобы отобразить его в разрезе материально-ответственных лиц, то потребуется добавить корреспондента «Кому».

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

Естественно, представленная выше схема немного упрощена для более легкого восприятия. Но, вместе с этим, она достаточно точно описывает работу механизма для построения отчетов «Мастера отчетов» в программе «Акцент».

Отражение архитектуры в объектной модели применительно к описанной выше архитектуре.

25.04. Объект Application («Приложение») Представляет собой саму программу. Обычно используется :

- для управления приложением (загрузка базы данных, управление свойствами приложения и пр.) - для запуска или создания элементов конструирования :

форм, диалогов, электронных таблиц и модулей.

- для доступа к свойствам приложения (версия, шаблоны отображения и пр.) - для доступа к модулям расширения системы AddIn Объект WorkArea («База данных») Объект представляет собой базу данных программы. Он включает в себя все ее элементы (хозяйственные операции, план счетов, аналитику и др.), систему формирования отчетности, объекты для прямого доступа к СУБД и пр.

Элементы и коллекции базы данных В Акценте все элементы базы данных объединены в коллекции и имеют наименование, соответствующие их наименованиям на английском языке.

Семейство Елемент Назначение Operations Operation Templates Templates Доступ к элементу осуществляется либо по порядковому номеру в списке, либо по его внутреннему идентификатору.

WorkArea.Agents.Item(1) WorkArea.Agent(1) Модуль рабочей области (WorkArea.avb) В программе предусмотрен модуль, который отвечает за обработку системных событий в программе. Список системных событий достаточно широк и есть в документации. Например, можно 25.04. заменить стандартный диалог свойств корреспондента-работника на пользовательский.

Средства конструирования Состав средств конструирования Акцента достаточно широкий. В него входят : формы первичных документов, диалоги и электронная таблица. В их основе лежит язык программирования MS VB Script™, опирающийся на объектную модель программы.

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

По видам элементов они собраны в папки. Каждый элемент имеет внутренний код, используя который, можно получить к нему доступ на уровне объектной модели или СУБД. Из объектной модели доступ к элементу проекта можно получить с использованием коллекции ProjectItems объекта WorkArea.

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

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

Для обработки событий, возникающих в процессе работы формы первичного документа, предназначен модуль на Visual Basic Script™ (VBS).

Например, вот так выглядит форма «Платежное поручение» в режиме конструктора.

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

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

Внешний вид диалога в режиме конструктора Внешний вид диалога в режиме ввода данных 25.04. Таблицы В программу встроена электронная таблица. Ее возможности не стоит сравнивать с MS Excel, но для решения задач построения и отображения отчетов она отлично подходит.

Электронную таблицу используют, как правило, в двух случаях :

- для построения отчетов фиксированного внешнего вида и по фиксированным правилам построения ;

- электронную таблицу используют все встроенные отчеты и отчеты, созданные с использованием «Мастера отчетов» ;

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

Работать с электронной таблицей можно из интерфейса пользователя или из программы на VBS.

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

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

25.04. Модули Модули – это программы на VBS. Они могут быть самостоятельными или выполняться из другого кода на VBS, расположенного в любом другом элементе средств конструирования.

25.04. Первые шаги. Создаем «Расходный кассовый ордер»

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

Создайте новую форму первичного документа в окне проекта базы данных. На экране будет отображена пустая форма.

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

Для размещения метки достаточно выбрать ее на панели инструментов конструктора (см. рисунок выше) и указать где она будет расположена.

25.04. Информацию, которая будет отображаться в поле метки, можно определить несколькими способами. Если предполагается, что она не будет изменяться в процессе работы с документом, то текст можно просто ввести с клавиатуры, предварительно щелкнув курсором мышки на метке два раза.

После чего можно вводить текст.

Другой способ ввода статического текста – использование свойств элемента. Для этого потребуется отобразить окно его свойств (F4) и ввести текст в поле Caption.

Автоматически устанавливает размеры поля по содержимому Отображаемый текст Это же поле доступно в объектной модели, что позволяет изменять отображаемый в метке текст в процессе работы с документом.

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

25.04. Поле, результат вычисления Смысл динамического связывания в упрощении процесса связи между кодом на VBS и элементами интерфейса и, как следствие, упрощение создания форм. Для того, чтобы связать поле элемента интерфейса с данными, в свойстве DataSource необходимо указать выражение, результат вычисления которого определяет текст, выводимый в поле метки. Выражение вычисляется каждый раз в процессе пересчета формы.

Для нашего примера, метка будет выводить значение переменной MyCoName, которое должно соответствовать наименованию предприятия, от лица которого создается документ «Расходный кассовый ордер». В принципе, вместо переменной можно указать выражение WorkArea.MyCompany.Name, но, в случае, если используется версия Акцент 6.0 и свойство базы данных «Моя фирма» не определено, будет возникать ошибка выполнения.

'--------------------------------------------------Вызывается после загрузки формы '--------------------------------------------------Sub Form_OnLoad Set MyCo = WorkArea.MyCompany If MyCo Is Nothing Then MyCoName = "" Else MyCoName = MyCo.Name End If End Sub 25.04. Чтобы проверить, как работает форма, выключите режим конструктора. Если в процессе выполнения программы не произошло ошибок, то на экране будет следующее изображение документа.

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

Редактор (FrmEdit) Элемент «Редактор» отличается от элемента «Метка» тем, что дает возможность пользователю изменять информацию непосредственно в самом поле.

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

Размещается элемент на странице формы аналогично полю «Метка».

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

25.04. Переменная Op, которая использована в описании источника данных, создается в модуле обработки событий и представляет собой текущую хозяйственную операцию. Если это только что созданный документ, то это будет новая хозяйственная операция, если открывается существующий документ, то загрузится хозяйственная операция, соответствующая документу.

'--------------------------------------------------Вызывается после загрузки формы '--------------------------------------------------Sub Form_OnLoad Set MyCo = WorkArea.MyCompany Set Op = CurrentOperation ' текущая хозяйственная операция If MyCo Is Nothing Then MyCoName = "" Else MyCoName = MyCo.Name End If End Sub Запустите форму документа, чтобы проверить работоспособность добавленного поля. Щелкните курсором мышки в этом поле и попробуйте ввести значение поля.

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

25.04. Связывание даты документа и элемента формы осуществим обычным способом через свойство DataSource поля для ввода даты.

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

25.04. Обратите внимание на то, что после установки фокуса ввода на поле даты, справа у поля появляется кнопка для выбора даты в календаре.

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

Нарисуем с использованием таблицы заголовок даты документа.

Он представляет собой таблицу, состоящую из одной строки и двух столбцов.

По умолчанию всегда создается таблица 5х5. Изменить количество строк и столбцов можно в диалоге свойств. Для нашего документа количество строк 1, столбцов 2.

Количество столбцов 25.04. Установите эти значения и разместите таблицу над полем «Дата».

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

Селектор (FrmSelector) Этот элемент интерфейса используется для выбора корреспондентов, счетов, объектов учета и других элементов базы данных, которые имеют древовидную структуру.

Используем этот элемент для организации поля для ввода имени материально-ответственного лица.

Выключите режим конструктора и посмотрите как выглядит элемент на экране.

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

Для обеспечения работы с элементом предусмотрено два события:

OnClick OnTextChanged 25.04. В качестве примера, иллюстрирующего работу элемента «Селектор», разместите следующий код в модуле обработки событий.

Sub slAgTo_OnClick MsgBox "Нажата кнопка селектора" End Sub Sub slAgTo_OnTextChanged MsgBox "Текст селектора изменился" End Sub Запустите форму первичного документа и попробуйте ввести значение в поле селектора и (или) нажать на его кнопку. Визуально видно как написанные процедуры отрабатывают возникающие события.

Полная обработка событий работы селектора позволяет «выжать»

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

Bind-объекты специализированные Bind-объекты, например, AgentBind – для работы с корреспондентами, EntityBind – для работы с объектами учета и пр. Присвоение значений таким объектам приводит к автоматическому поиску введенного значения в списке возможных, а нажатие кнопки (или присвоение значение VoidValue) приведет к отображению диалога выбора элемента базы данных из списка.

Обратите внимание, что при этом возникает только одно событие OnBound.

Вернемся к нашему примеру и укажем в поле DataSource объекта «Селектор» корреспондента – получателя денежных средств Op.Trans(1).AgToBind. Правильнее было бы указать Op.Trans(1).AgToBind.Name, чтобы было видно, что поиск будет осуществляться по наименованию. Но свойство.Name является свойством «по умолчанию» и может быть опущено.

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

Sub slAgTo_OnBound(ByRef Lock) MsgBox "Селектор OnBound" End Sub Выключите режим конструктора для проверки работоспособности формы.

Попробуйте ввести значение в поле наименования корреспондентаполучателя. Если ввести несуществующее наименование, то на экране вначале появится сообщение о том, что корреспондент не найден, а потом возникнет событие OnBound.

Если же нажать на кнопку селектора, то на экране отобразится диалог для выбора корреспондента из списка.

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

25.04. «Селектор»

Источник данных Op.Trans(1).AccDbBind Источник данных SpellMoney2(Op.Sum,"0|грн |грн|грн|0|коп|коп|коп",1) Обратите внимание на функцию SpellMoney2, которая используется для отображения суммы документа прописью. Она может возвращать сумму прописью на трех языках : украинском, русском и английском.

«Редактор»

Источник данных Op.String 25.04. Стоит обратить внимание на использованное свойство Op.String для ввода и отображения информации в поле «Додаток». В хозяйственной операции для произвольного использования зарезервировано по три свойства для каждого из типов данных :

Op.String1, Op.String2, Op.String3 для данных типа «Строка»

Op.Long1, Op.Long2, OpLong3 для данных типа «Целое число»

Op.Date1, Op.Date2, Op.Date3 для данных типа «Дата»

«Денежный»

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

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

Запустите форму первичного документа в режиме ввода информации для того, чтобы проверить отсутствие ошибок.

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

Sub Form_CanClose(ByRef Cancel) If Op.Modified Then If MsgBox("Сохранить документ ?",vbQuestion + vbYesNo) = vbYes Then Op.Save End If End Sub Для этого можно использовать событие Form_CanClose, которое возникает, если пользователь пытается закрыть форму. Выше приведен пример кода, который обеспечивает сохранение документа, если в него были внесены изменения. Для контроля за тем, были ли внесены изменения в хозяйственную операцию, используется свойство Modified, которое устанавливается в True, если хозяйственная операция изменялась и False, если нет.

Обратите внимание, что в процедуру обработки события CanClose передается параметр Cancel. С его помощью можно разрешить или запретить процесс закрытия формы первичного документа. False – разрешает закрытие документа (по умолчанию), а False – запрещает.

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

25.04. На экране появится сообщение с предложением сохранить документ, что свидетельствует о том, что сработало событие CanClose. Нажмите на кнопку Yes, для того, чтобы проверить сохранится ли документ в базе данных.

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

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

25.04. В режиме конструктора формы, она отображается только после нажатия на специальную кнопку «Настройка панели управления».

Панель управления документом состоит из набора кнопок. Их количество ограничено только размерами окна первичного документа.

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

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

Код команды, которую нужно выполнить Команда, которую нужно выполнить Чтобы отработать нажатие кнопки на панели управления формой первичного документа, в форме предусмотрено событие OnBarClick в котором передается код команды, которую нужно выполнить.

25.04. В коде обработки событий можно использовать инструкцию Select Case и писать обработчик для каждой команды. Этот способ хотя и правильный, но не рациональный. Гораздо проще использовать возможность косвенного выполнения команды, текст которой указан в поле «Признак» (Tag), а в код обработки события добавить текст, приведенный ниже.

'--------------------------------------------------Вызывается при нажатии кнопки на панели инструментов '--------------------------------------------------Sub Form_OnBarClick(Command) ExecBarTag Command End Sub Чтобы проверить как работает кнопка, вместо команды сохранения документа, добавьте вызов на экран окна с текстовым сообщением.

Выключите режим конструктора для тестирования формы первичного документа.

Если подвести курсор к кнопке, то отобразится сопроводительная надпись на кнопке.

Если на нее нажать, то появится текстовое сообщение.

25.04. Замените команду в поле «Признак» кнопки на панели управления на Op.Save, чтобы при нажатии на кнопку происходило сохранение документа.

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

Добавим кнопку для печати документа на принтере с учетом следующих условий :

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

Добавьте новую кнопку на панели управления и установите ее свойства в соответствии с теми, что указаны на рисунке.

25.04. Обратите внимание на то, что после того, как был отмечен флажок «Выпадающая кнопка», стала активной кнопка «Меню…».

Нажмите ее, чтобы сформировать выпадающее меню.

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

Sub Form_OnPopup(Command) Select Case Command Form.Preview Form.Print True End Select End Sub Проверьте как работает форма, выключив режим конструктора.

25.04. Выберите команду из выпадающего меню для проверки ее работоспособности.

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

Например, добавление такого пункта в наше меню :

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

Шаг второй. Разрабатываем счет на оплату товара Теперь попробуем разработать более сложный документ – счет на оплату товара. На мой взгляд, его разработка требует большей сложности из-за присутствия в нем перечня товара и работы с прайс-листами.

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

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

Заголовок таблицы Заголовок таблицы построим точно также, как было рассказано в предыдущем документе – с использованием таблицы с фиксированным количеством строк.

Таблица с прокруткой (FrmScrollGrid) Для работы со списком товара, когда неизвестно количество строк и (или) их количество может быть больше, чем помещается на экране, лучше использовать таблицу с прокруткой (неограниченным количеством строк).

Разместите на экране таблицу с прокруткой также, как и любой другой элемент интерфейса.

25.04. По умолчанию создается таблица размером 5х20. Изменить количество столбцов можно в диалоге свойств этого элемента.

Введите имя элемента, оно нам потребуется для доступа к свойствам таблицы. Пусть она будет называться sgrdEnts.

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

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

Для того, чтобы сетка таблицы была видна, выделите все ее столбцы и укажите границы разметки.

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

Доступ к строкам проводки Предположим, что перечень товара будет храниться в первой проводке. Тогда для отображения этого перечня в таблице будем использовать доступ к строкам первой проводки с использованием функции Trans(i, j), где I номер строки в проводке I, который будет Теперь можно определить свойства ячеек таблицы с прокруткой.

Диалог свойств колонки отображается на экране, если щелкнуть мышкой на ней и выбрать пункт меню «Настройка таблицы», появляющегося после нажатия на правую клавишу мышки.

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

Для того, чтобы программа автоматически проставляла требуемое значение, в свойстве DataSource этой ячейки написано выражение, показанное на рисунке Op.Trans(1, sgrdEnts.BindRow).RowNo, где прокруткой»

RowNo номер строки в проводке Во второй колонке отображается каталожный номер товара. Это поле может использоваться для ввода и быстрого поиска товара.

25.04. Наименование товара вводится в третьей колонке, оно тоже может использоваться для поиска товара.

Свойства столбца «Наименование товара»

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

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

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

25.04. Обратите внимание на то, что количество строк в таблице не изменилось и добавить 6-ю позицию товара просто невозможно.

Управление количеством строк в таблице Есть два способа «заставить» таблицу увеличивать количество строк автоматически. Первый способ основан на свойствах самого элемента и не требует программного кода. Для этого нужно в свойствах самой таблицы с прокруткой установить в поле AutoGrow значение True.

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

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

25.04. Недостаток такого способа работы со строками таблицы в том, что, при удалении информации, пустые строки не убираются.

Смысл альтернативного способа состоит в том, что программа обработки событий сама проверяет необходимость добавления новой строки в таблицу. Для этого необходимо отключить автоматическое управление количеством строк, т.е. установить значение свойства AutoGrow таблицы в False. И необходимо добавить программный код в модуль обработки событий формы первичного документа.

Sub Form_OnLoad Set Op = Form.CurrentOperation cmbPriceLists.ComboContents2 = WorkArea.PriceLists.ComboString If cmbPriceLists.Value 0 Then cmbPrices.ComboContents2 = WorkArea.PriceList(cmbPriceLists.Value).PriceKinds.ComboString End If Set pctLogo.Picture = LoadPicture("Logo.bmp") ' установить правильное кол-во строк в таблице StabilizeGrid End Sub Обратите внимание на вызов процедуры для установки строк в таблице после загрузки формы StabilizeGrid. Ее нужно вызывать и в процессе ввода информации в таблицу, поскольку эта информация может влиять на количество строк.

Sub sgrdEnts_OnBound(ByRef Lock) ' после внесения изменений в таблицу небходимо ' установить в ней правильное кол-во строк StabilizeGrid End Sub Текст процедуры установки строк в таблице приведен ниже Sub StabilizeGrid 25.04. Dim TrRows TrRows = Op.TransList(1).Rows ' удаляем пустые проводки из хозяйственной операции If TrRows > 1 Then Op.TransList(1).Pack ' добавляем строку, если в последней строке ' не установлен объект учета If Op.Trans(1, TrRows).EntID 0 Then TrRows = TrRows + ' устанавливаем количество строк в таблице sgrdEnts.Rows = TrRows End Sub Запустите форму, чтобы посмотреть как теперь работает таблица.

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

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

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

Что такое «Параметр» ?

Параметры – это дополнительные свойства проводки из хозяйственной операции. Они могут быть различного типа : строка, целое число, денежного типа, типа дата/время и ссылкой на другой элемент базы данных. Доступ к значениям параметров 25.04. осуществляется по их наименованиям. Создавать параметры можно программно или с использованием интерфейса пользователя.

В нашем документе используется два дополнительных параметра :

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

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

созданную хозяйственную операцию сохранять не Работа с параметрами проводки Для работы с параметрами в объектной модели предусмотрена коллекция Params. Чтобы получить значение параметра, необходимо обратиться к нему по имени и использовать свойства Value или Value2. Отличаются они друг от друга только тогда, когда параметр не имеет установленного значения. В этом случае, Value возвращает Null, а Value2 «нулевое» значение с типом, соответствующем типу параметра. Из-за этого Value2 удобнее использовать в качестве источника данных для форм первичных документов.

Заполним недостающие поля нашей таблицы.

Первоначальная цена товара хранится в параметре «Price»".

Соответственно, доступ к ее значению будет выглядеть как Op.Trans(1, sgrdEnts.BindRow).Params("Price").Value2.

Поле может использоваться для ввода информации.

25.04. Сумму товара без скидки нам не нужно хранить. Поэтому мы ее sgrdEnts.BindRow).Params("Price").Value2 * Op.Trans(1, sgrdEnts.BindRow).Qty. Поле же делаем только для чтения.

Сумму скидки храним в отдельном параметре «Discount».

25.04. И доступ к полю осуществляем по аналогии с полем «Price», т.е.

Op.Trans(1, sgrdEnts.BindRow).Params("Discount").Value Разрешаем пользователю вводить информацию в него.

Итоговая сумма по строке соответствует сумме по строке проводки Op.Trans(1, sgrdEnts.BindRow).Sum. Это поле тоже используется для ввода информации.

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

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

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

Sub sgrdEnts_OnBound(ByRef Lock) Dim Summa ' начало кода, отвечающего за подстановку цены With sgrdEnts If.BindRow 0 Then With op.Trans(1,.BindRow) If sgrdEnts.BindCol = 9 Then ' если ввели конечную сумму, то нужно изменить скидку.Params("Discount").Value = Summa -.Sum ' иначе рассчитываем конечную сумму.Sum = Summa -.Params("Discount").Value End With End If End With ' конец кода, отвечающего за подстановку цены ' после внесения изменений в таблицу небходимо ' установить в ней правильное кол-во строк StabilizeGrid End Sub Добавьте код в программу и запустите форму для проверки.

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

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

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

Свойство «Stretch» позволяет сохранять масштаб картинки или подгонять его под размеры выделенной для рисунка области.

Масштабирование отключено 25.04. Масштабирование включено Кроме того, свойства картинки позволяют управлять видимостью картинки в процессе печати.

Посмотреть как будет выглядеть документ с картинкой можно, выключив режим конструирования.

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

Для загрузки рисунка используется встроенная функция LoadPicture(), которой нужно указать имя файла с изображением. Допускается использовать изображения форматов BMP, JPG, GIF.

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

Но предварительно, объекту «Картинка» следует присвоить имя.

Добавим в модуль обработки событий формы следующий текст.

Sub Form_OnLoad Set Op = Form.CurrentOperation ' загрузка картинки программным способом Set pctLogo.Picture = LoadPicture("Logo.bmp") ' установить правильное кол-во строк в таблице StabilizeGrid End Sub Проверьте, как работает форма. Попробуйте подставить вместо старой картинки другую с тем же именем и посмотрите поменялось ли изображение в форме.

25.04. Картинка может использоваться как гиперссылка. Т.е. при щелчке на ней курсором мышки, будет создаваться событие.

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

Sub pctLogo_OnClick MsgBox "Logo Click !" End Sub Запустите форму и щелкните курсором на картинке.

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

Использование прайс-листов Для быстрого доступа к информации о ценах непосредственно в процессе ввода информации, в Акценте предусмотрена система прайс-листов. Она состоит из списка видов цен, из которых можно формировать список прайс-листов. Для каждой единицы товара в прайс-листе можно определить несколько видов цен. При этом, для товара одного и того же наименования, один и тот же вид цены в разном прайс-листе может иметь разное значение. Поддерживается история цен, т.е. можно посмотреть какая цена была в прошлом периоде.

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

25.04. Комбинированный список (FrmComboBox) Комбинированный список представляет собой поле для вывода текста и кнопки для появления списка вариантов возможного текста.

Создайте этот элемент в форме счета и подпишите его с использованием метки.

Список вариантов текста для выбора устанавливается в свойстве «ComboContents» элемента. Текстовые строки разделяются между собой символом «|» (вертикальная черта).

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

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

Sub Form_OnLoad Set Op = Form.CurrentOperation ' код загрузки прайс-листов cmbPriceLists.ComboContents2 = WorkArea.PriceLists.ComboString ' код загрузки видов цен If cmbPriceLists.Value 0 Then cmbPrices.ComboContents2 = WorkArea.PriceList(cmbPriceLists.Value).PriceKinds.ComboString End If Set pctLogo.Picture = LoadPicture("Logo.bmp") ' установить правильное кол-во строк в таблице StabilizeGrid End Sub Вы наверняка заметили, что у объекта «Комбинированный список»

есть два схожих свойства ComboContents и ComboContents2.

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

Запустите форму, чтобы посмотреть, как она работает.

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

If cmbPriceLists.Value 0 Then _ cmbPrices.ComboContents2 = _ WorkArea.PriceList(cmbPriceLists.Value).PriceKinds.ComboString End If Или после выбора прайс-листа пользователем с использованием возникающего при этом события OnSelChanged.

Sub cmbPriceLists_OnSelChanged cmbPrices.ComboContents2 = WorkArea.PriceList(cmbPriceLists.Value).PriceKinds.ComboString End Sub Проверьте как работает форма первичного документа и как зависит содержимое списка видов цен от выбранного прайс-листа.

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

If.Params("Price").Value2 = 0 And _ cmbPriceLists.Value 0 And _ cmbPrices.Value 0 Then.Params("Price").Value2 = _ WorkArea.PriceKind(cmbPrices.Value).GetEntPrice(.EntID,_ End If Summa = Round(.Qty *.Params("Price").Value2, 2) 25.04. Чтобы проверить работоспособность формы, необходимо выключить режим конструирования, выбрать прайс-лист, установить вид цены и выбрать товар. Если для него цена установлена, то она будет автоматически проставлена.

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

Документ должен иметь внешний вид, представленный ниже.

Последний штрих к «Счету на оплату» печать таблицы с прокруткой Использование таблицы с прокруткой накладывает определенные обязательства на остальные элементы формы. Они связаны с тем, что в процессе печати документа, печататься будет весь список 25.04. товара в таблице. И элементы формы, которые помещены ниже таблицы с прокруткой, должны автоматически сместиться вниз.

Для управления положениями элементов в процессе печати используется свойство Layout (см. рисунок выше). Оно может принимать следующие значения :

Nothing Разместить элемент только на первой странице First page Each page Разместить элемент только на последней странице Last Page Чтобы форма первичного документа правильно печаталась, необходимо установить свойство Layout всем элементам, размещенным ниже таблицы с прокруткой, в состояние Last Page.

Есть еще одна шероховатость. Поскольку мы автоматически добавляем одну пустую строку в таблицу с прокруткой, то при печати она будет печататься тоже. Чтобы документ выглядел красиво, ее нужно убрать. Для этого необходимо написать программный код, который будет удалять пустые строки перед печатью и добавлять строку после печати. Используем события BeforePrint и AfterPrint, возникающие, соответственно, до и после процесса печати.

' код, удаляющий пустую строку в таблице перед печатью Sub Form_BeforePrint sgrdEnts.Rows = Op.TransList(1).Rows End Sub ' код, восстанавливающий строки в таблице после печати Sub Form_AfterPrint 25.04. StabilizeGrid End Sub Для проверки работоспособности кода, запустите форму в режиме ввода данных, добавьте одну или несколько позиций товара и посмотрите как будет выглядеть документ в окне предварительного просмотра перед печатью.

Внешний вид документа перед печатью После закрытия окна предварительного просмотра количество строк должно восстановиться до первоначального количества.

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

Командная кнопка (FrmButton) Командная кнопка - не часто используемый элемент интерфейса.

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

Нарисуйте кнопку на форме документа и заполните в диалоге ее свойств поле Name. Наименование кнопки можно ввести в поле 25.04. Caption или непосредственно в самой кнопке, щелкнув на ней курсором мышки.

Обработку нажатия кнопки нужно проводить в модуле обработки событий формы.

Sub btnTest_OnClick MsgBox "Button Click !" End Sub Выключите режим конструктора и нажмите на кнопку.

25.04. Флажок (FrmCheck) Этот элемент предназначен для того, чтобы включать/выключать какие-либо режимы работы формы. Визуально, включение соответствует установленной «птичке», выключение – ее отсутствию. В нашем примере с использованием флажка будем управлять доступностью кнопки «Проверка».

Нарисуйте флажок и подпишите его соответственно тому, как показано на рисунке.

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

Запустите форму, чтобы посмотреть как она работает.

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

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

Элемент «переключатель»

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

' код обработки для первого переключателя Sub rdButtonVisible_OnClick rdButtonNotVisible.Checked = Not rdButtonVisible.Checked btnTest.Visible = rdButtonVisible.Checked End Sub ' код обработки для второго переключателя Sub rdButtonNotVisible_OnClick rdButtonVisible.Checked = Not rdButtonNotVisible.Checked btnTest.Visible = rdButtonVisible.Checked End Sub Запустите форму, чтобы проверить ее работоспособность.

25.04. Переключатель в первом Переключатель во втором положении Элементы ActiveX ActiveX-элементы открывают еще один, практически не ограниченный по разнообразию и функциональным возможностям, класс элементов интерфейса, которые можно использовать при конструировании формы первичного документа.

Мы рассмотрим пример только для одного элемента. Он называется Microsoft ProgressBar Control. Разместите ActiveX элемент на форме, после чего выберите из списка возможных вариантов элемент Microsoft ProgressBar Control.

Добавим в модуле обработки событий код, который позволит наглядно продемонстрировать работу ActiveX элемента.

Sub prgBar_Click Dim i, j MsgBox "ProgressBar Click !" prgBar.Min = prgBar.Max = For i = 1 To For j = 1 To prgBar.Value = i Next Next 25.04. End Sub Запустите форму на выполнение и щелкните курсором мышки на ActiveX элементе.

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

Шаг четвертый. Работа со страницами формы Форма первичного документа – многостраничный документ.

Управление страницами сделано по аналогии с листами электронной таблицы MS Excel. Страницы имеют независимые свойства и элементы управления. Общим является только модуль обработки событий.

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

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

Создайте новую форму первичного документа.

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

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

Добавьте две кнопки. Первая – для переключения на первую страницу, вторую – для переключения на вторую страницу.

Кнопка для перехода на 1-ю страницу 25.04. Кнопка для перехода на 2-ю страницу В модуль обработки событий потребуется добавить код, обрабатывающий нажатие кнопки на панели управления формой первичного документа.

Sub Form_OnBarClick(Command) Form.ExecBarTag Command End Sub Запустите форму и проверьте, как работает управление страницами.

Щелкните курсором мышки на 1-й кнопке 25.04. Щелкните курсором мышки на 2-й кнопке Управление видимостью страниц Страницы формы первичного документа можно включать или выключать. Как с использованием интерфейса конструирования, так и программно. Для демонстрации этих возможностей добавим еще две кнопки на панели управления.

Кнопка включает/выключает 1-ю страницу Кнопка включает/выключает 2-ю страницу 25.04. Выключите режим редактирования формы первичного документа для демонстрации.

1-я страница выключена 2-я страница выключена Обратите внимание, что не возможно выключить все страницы.

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

Добавим еще одну кнопку для демонстрации печати всех страниц.

25.04. Добавим код для печати всех страниц сразу.

' глобальная переменная - текущая страница для печати Dim CurrentNo Sub Form_OnBarClick(Command) Form.ExecBarTag Command End Sub ' Процедура обработки события до печати Sub Form_BeforePrint Form.Page(CurrentNo).Activate End Sub ' Процедура обработки события после печати Sub Form_AfterPrint If CurrentNo = Form.PageCount Then Form.Page(1).Activate Else CurrentNo = CurrentNo + Form.Preview End If End Sub Смысл добавленного кода состоит в том, чтобы печатать по очереди все страницы, но каждая последующая страница будет печататься только после того, как напечатана предыдущая. За это отвечает код программы в событиях, создаваемых формой до (BeforePrive) и после (AfterPrint) печати.

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

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

25.04. Система построения отчетов Обратимся теперь к решению задач, связанных с построением отчетов. Акцент имеет стройную и доступную на всех уровнях систему построения отчетности. Доступны следующие виды отчетов :

Встроенные отчеты Отчеты по папкам документов, Реестр документов учета, произвольной аналитике, Отчеты, которые можно построить с использованием Мастера отчетов Отчеты по папкам документов, Ведомости и журналы-ордера с корреспондентам, объектам произвольной выборкой и учета, произвольной аналитике, группировкой по определенному Отчеты, созданные с использованием встроенной электронной таблицы Каким способом строить отчет зависит только от самого отчета.

Естественно, что идти нужно путем наименьшего сопротивления.

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

Работа с объектом «Мастер отчетов»

Рассмотрим работу с объектом «Мастера отчетов» на примере популярного отчета «Акт сверки». Смыл его в том, что выбираются данные по корреспонденту и, буквально, подсчитывается, кто и сколько заплатил, кому и на какую сумму оказано услуг. И подводится итог – кто кому должен.

Алгоритм построения отчета Отчет строится по одному корреспонденту и затрагивает данные сразу по нескольким бухгалтерским счетам, которые между собой не корреспондируются. Поэтому, - создадим забалансовый счет с наименованием «Акт o Включите режим работы со счетами.

o Установите курсор на «корень» основного плана o Создайте новый счет с наименованием «Акт o Отобразите диалог свойств счета и установите тип - в качестве субсчетов этого счета будем использовать ярлыки счетов, по которым будем собирать информацию;

o Отобразите на экране счет, который будет o Установите на него курсор и нажмите левую o Не отпуская кнопку, переместите курсор мышки o Выберите в появившемся меню команду «Создать o Аналогичную процедуру необходимо проделать со - создадим отчет с использованием электронной таблицы ;

25.04. o Откройте окно проекта базы данных (Alt+F11) в коде, который будет формировать данные, используем Мастер отчетов» с доступом через объектную модель.

o Включите работу с модулем обработки событий в Программируем отчет Точно так же, как и другие элементы конструирования, электронная таблица снабжена модулем, в котором содержится программный код на VBScript для обработки событий, возникающих в процессе работы пользователя с таблицей.

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

Sub PrepareReport(AgID, dStart, dEnd) MsgBox "Фомрирование отчета."

End Sub Sub ShtBook_OnLoad PrepareReport WorkArea.Site.ID, WorkArea.Period.Start, WorkArea.Period.End End Sub В примере, после возникновения события OnLoad будет вызываться процедура формирования отчета. Для индикации работы программы, в этой процедуре пока размещен только код окна с сообщением.

Проверьте работоспособность отчета, запустив его на выполнение.

Если все нормально, то на экране будет отображен отчет и сообщение.

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

- включите режим работы с корреспондентами ;

25.04. установите курсор на одного из корреспондентов, для которого допустимо строить наш отчет ;

- включите в информационном окне режим работы с отчетами (закладка «Отчеты») ;

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

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

После этих манипуляций отчет «Акт сверки» появится у всех корреспондентов. Как передать в отчет информацию о том, по какому корреспонденту его строить ?

Работа с объектом SITE или «Где мы находимся ?»

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

Все свойства этого объекта рассчитаны только для чтения.

Основными востребованными свойствами являются :

Установленный режим работы : папки документов, счета, Kind Код элемента, на котором установлен курсор на информационной панели: папки документов, счета, Наименование элемента, на котором установлен курсор на Name информационной панели: папки документов, счета, Код родительского элемента для элемента, на котором ParentID Коллекция хозяйственных операций, соответствующих элементу Operations базы данных, на котором установлен курсор Коллекция выделенных хозяйственных операций из общего их Selected набора, соответствующих элементу базы данных, на котором Признак того, является ли элемент базы данных, на котором IsShortCut 25.04. В нашем примере «Акт сверки» должен :

- проверять, указывает ли курсор на корреспондента - если «да», то получить его код. Если «нет», то выдать соответствующее сообщение на экран.

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

Sub ShtBook_OnLoad Set WR = WorkArea.CreateReport("RepWizard") If WorkArea.Site.Kind = acAgent And WorkArea.Site.ID 0 Then PrepareReport WorkArea.Site.ID, WorkArea.Period.Start, WorkArea.Period.End End If End Sub Вначале мы проверяем, является ли корреспондент текущим элементом и код этого элемента должен быть отличным от нуля, т.е. не «корень» дерева корреспондентов. Если условие выполняется, то отчет будет рассчитан. Если нет, то он будет «пустым».

Запустите отчет, установив курсор на корреспондента. Его внешний вид должен быть таким.

А теперь уставите курсор, например, на папку документов и запустите отчет снова. Теперь на экране должно отобразиться другое сообщение.

25.04. Переключение между основным окном программы и окном отчета можно осуществить стандартным для Windows способом – сочетанием клавиш Alt + Tab.

Программируем мастер отчетов Для формирования непосредственно отчета, воспользуемся объектом, который полностью повторяет возможности «Мастера отчетов», но управляется не через интерфейс пользователя, а программно. Этот объект называется RepWizard и создается с помощью свойства CreateReport объекта WorkArea.

Dim WR Sub ShtBook_OnLoad Set WR = WorkArea.CreateReport("RepWizard") If WorkArea.Site.Kind = acAgent And WorkArea.Site.ID 0 Then PrepareReport WorkArea.Site.ID, WorkArea.Period.Start, WorkArea.Period.End Else MsgBox "Отчет должен запускаться для корреспондента" End If End Sub Соответствие свойств этого объекта и элементов управления «Мастерами отчетов» из пользовательского интерфейса приведены ниже. В качестве примера используется отчет для «Акта сверки»

Отчет создается по корреспонденту и специальному счету «Акт сверки»

Смысл свойства Доступ к Значение свойства 25.04. Учитывать субсчета True (учитывать субсчета). По умолчанию Показатели Смысл свойства Доступ к свойству Значение свойства общее сальдо 25.04. Остатки Смысл свойства Доступ к свойству Значение свойства В соответствии с приведенной выше информацией, код для формирования условий построения отчета будет выглядеть следующим образом.

Sub PrepareReport(AgID, dStart, dEnd) WR.Kind = acAgent ' константа acAgent является системной и равна 25.04. WR.KindID = AgID ' код корреспондента, по которому строится отчет WR.AccID = AccID ' счет "Акт сверки" WR.SubAcc = True ' включили учет двнных по субсчетам основного счета WR.ReduceTotal = True ' включили режим "свертки" информации по отчету WR.SetRemMode False, 3 ' включили отображение итоговой суммы на начало периода WR.SetTurnMode False, 1 ' включили отображение только суммы по дебетовым оборотам WR.SetTurnMode True, 1 ' включили отображение только суммы по кредитовым оборотам WR.SetRemMode True, 3 ' включили отображение итоговой суммы на конец периода WR.Period.Start = dStart ' установили начало периода WR.Period.End = dEnd ' установили конец периода End Sub Код счета «Акт сверки» пока определим в константе. Ее значение, как и значение любого внутреннего идентификатора элемента базы данных, можно посмотреть в окне свойств.

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

Чтобы посмотреть внешний вид отчета, условия построения которого мы запрограммировали, и убедиться в том, что в него попадают правильные данные, можно использовать метод MakeSheet, который заполняет данными объекта RepWizard встроенную электронную таблицу и отображает ее на экране.

Const AccID = 482 ' код счета "Акт сверки" Sub PrepareReport(AgID, dStart, dEnd) 25.04. WR.Kind = acAgent ' константа acAgent является системной и равна WR.KindID = AgID ' код корреспондента, по которому строится отчет WR.AccID = AccID ' счет "Акт сверки" WR.SubAcc = True ' включили учет двнных по субсчетам основного счета WR.ReduceTotal = True ' включили режим "свертки" информации по отчету WR.SetRemMode False, 3 ' включили отображение итоговой суммы на начало периода WR.SetTurnMode False, 1 ' включили отображение только суммы по дебетовым оборотам WR.SetTurnMode True, 1 ' включили отображение только суммы по кредитовым оборотам WR.SetRemMode True, 3 ' включили отображение итоговой суммы на конец периода WR.Period.Start = dStart ' установили начало периода WR.Period.End = dEnd ' установили конец периода If WR.Build Then MakeSheet Else MsgBox "Ошибки в процессе построения отчета.", vbCritical End If End Sub Проверьте работоспособность отчета, выключив режим конструктора.

Обратите внимание на то, что в программе должен быть установлен режим работы с корреспондентами (Alt+3) и курсор должен быть установлен на корреспондента – предприятие.

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

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

Обратите внимание на то, что отчет строился за период, установленный в программе. Период, отличный от системного, 25.04. можно установить, использовав свойство Period «Мастера отчетов»

RepWizard.

Const AccID = 482 ' код счета "Акт сверки" Sub PrepareReport(AgID, dStart, dEnd) WR.Kind = acAgent ' константа acAgent является системной и равна WR.KindID = AgID ' код корреспондента, по которому строится отчет WR.AccID = AccID ' счет "Акт сверки" WR.SubAcc = True ' включили учет двнных по субсчетам основного счета WR.ReduceTotal = True ' включили режим "свертки" информации по отчету WR.SetRemMode False, 3 ' включили отображение итоговой суммы на начало периода WR.SetTurnMode False, 1 ' включили отображение только суммы по дебетовым оборотам WR.SetTurnMode True, 1 ' включили отображение только суммы по кредитовым оборотам WR.SetRemMode True, 3 ' включили отображение итоговой суммы на конец периода WR.Period.Start = dStart ' установили начало периода WR.Period.End = dEnd ' установили конец периода If WR.Build Then MakeSheet Else MsgBox "Ошибки в процессе построения отчета.", vbCritical End If End Sub Структура информации в «Мастере отчетов»

Объект, который представляет собой результат обработки информации Мастером отчетов, как и другие элементы архитектуры Акцента имеет древовидную структуру. Рассмотрим ее организацию на примере нашего отчета.

Он строится по четырем показателям. Напомним его внешний вид.

Каждый последующий показатель является подчиненным предыдущему. Древовидная структура отчета будет соответствовать изображению на рисунке.

25.04. Юнол Каждая строка отчета является отдельным объектом, называемым RepWizardItem. Этот объект содержит значение текущего показателя, собственную информацию о движении по текущему показателю и может содержать в себе строки с подчиненными показателями.

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

Set WR_Root = WR.Root Set WR_Level1 = WR_Root.Children Значение свойства Count определяет количества элементов на текущем уровне. В нашем случае это всего одна строка, и, соответственно, один элемент в коллекции.

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

Set WR_Level1_Child = WR_Level1.Child(1) Set WR_Level2 = Set WR_Level1_Child.Children Юнол Каждая из этих строк содержит собственную коллекцию третьего уровня. Причем в них содержится более одного элемента только в третьем элементе.

Юнол 25.04. По аналогии, каждый элемент третьего уровня имеет дочерние элементы четвертого уровня. В нашем примере по одному в каждом.

Для доступа к значениям строк элементов отчета будем использовать следующие свойства.

Значение элемента текущего уровня. Тип и смысл значения этого Value свойства зависит от вида аналитического показателя, который Если отчет строится по элементам аналитике (корреспонденту, объекту учета и пр.), показателю «Документ» или «Партия», то значением будет является внутренний код (ID) этого элемента в базе данных.

Для всех остальных значений показателей, свойство будет соответствовать типу показателя.

Дебетовая сумма по строке на начало периода StartDb Кредитовая сумма по строке на начало периода StartCr Сумма дебетовых оборотов по строке TurnDb, Сумма кредитовых оборотов по строке TurnCr Кредитовая сумма по строке на конец периода EndDb Дебетовая сумма по строке на конец периода EndCr Формируем «шапку» отчета Электронная таблица Акцента является сильно упрощенным вариантом MS Excel. В ее ячейках можно вводить просто текст или формулы для вычисления отображаемого результата. Формулы должны начинаться со знака «=» (равно).

Используем эту возможность, чтобы сформировать «шапку»

отчета, заполнив ячейки информацией так, как показано на рисунке.

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

MyCoName = GetMyCoName() AgCompareName = WorkArea.Agent(WorkArea.Site.ID).Name Код функции GetMyCoName приведен ниже.

Function GetMyCoName() Dim MyCo Set MyCo = WorkArea.MyCompany If Not MyCo Is Nothing Then GetMyCoName = MyCo.Name Else GetMyCoName = "" End If End Function Если Вы не допустили ошибок в процессе ввода информации в таблице и написании кода, то, после запуска внешний вид таблицы будет такой.

Заполняем электронную таблицу информацией Для заполнения электронной таблицы данными из отчета, добавим в модуль обработки событий процедуру PrepareSheet, которая будет вызываться, если процесс формирования отчета прошел успешно.

If WR.Build Then PrepareSheet Else 25.04. MsgBox "Ошибки в процессе построения отчета.", vbCritical End If Вначале, необходимо получить доступ к электронной таблице из программного кода. Поскольку программа выполняется на этапе загрузки, то сама электронная таблица уже создана и получить доступ к ее первому листу можно сразу.

Sub PrepareSheet() Dim Sh ' получили доступ к листу электронной таблицы Set Sh = ShtBook.Sheet(1) End Sub Обратите внимание на то, что доступ к странице электронной таблицы можно осуществлять как по индексу, так и по имени. Имя листу присваивается автоматически после его создания. Для первой страницы имя будет соответствовать Sheet1, для второй Sheet2 и так далее. При перестановке листов внутри таблицы или их удалении индекс листа меняется, но имя остается постоянным.

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

Const nStartRow = If WR.Root.Children > 0 Then Sh.Cell(nStartRow,4).Value = IIF(WR.Root.Child(1).StartDB = 0,_ Sh.Cell(nStartRow,5).Value = IIF(WR.Root.Child(1).StartCR = 0,_ End If Константа nStartRow используется для указания последней строки «шапки» таблицы. Вот пример внешнего вида отчета.

25.04. Теперь перейдем к заполнению данными по документам из отчета, для чего добавим вызов процедуры PrepareBodyReport, после чего процедура PrepareSheet примет следующий вид.

Sub PrepareSheet() Dim Sh Dim nStartRow Dim TotalSumCr Dim TotalSumDb ' получили доступ к листу электронной таблицы Set Sh = ShtBook.Sheet(1) nStartRow = If WR.Root.Children > 0 Then Sh.Cell(nStartRow,4).Value = IIF(WR.Root.Child(1).StartDB = 0, "", WR.Root.Child(1).StartDB) Sh.Cell(nStartRow,5).Value = IIF(WR.Root.Child(1).StartCR = 0, "", WR.Root.Child(1).StartCR) PrepareBodyReport Sh, nStartRow, TotalSumDb, TotalSumCr End If ShtBook.Recalc End Sub Обратите внимание на вызов метода ShtBook.Recalc, который пересчитывает формулы в ячейках и обновляет изображение электронной таблицы на экране.

В качестве параметров процедура PrepareBodyReport получает такую информацию:

Объект «электронная таблица», в которую будет выводиться Текущая строка в электронной таблице nStartRow TotalSumDb TotalSumCr Обратите внимание на то, что параметры nStartRow, TotalSubDb и TotalSubCr передаются по ссылке для того, чтобы их значение использовать в дальнейшем для вывода итоговых сумм.

Текст кода процедуры вывода информации в электронную таблицу приведен ниже.

Sub PrepareBodyReport(Sh, ByRef nRow, ByRef TotalSumDb, ByRef TotalSumCr) Dim WR_Agent, WR_Date, WR_DocNo Dim i, j, k Set WR_Agent = WR.Root.Child(1) ' получили доступ к строкам с датами 25.04. For i = 1 To WR_Agent.Children ' по всем датам Set WR_Date = WR_Agent.Child(i) ' получили доступ ко всем документам за день For j = 1 To WR_Date.Children ' по всем номерам документов Set WR_DocNo = WR_Date.Child(j) ' получили доступ к наименованиям документов For k = 1 To WR_DocNo.Children ' по всем наименованиям документов Sh.Rows = nRow ' добавили строку в таблицу Sh.Cell(nRow, 1).Value = CStr(WR_Date.Value) ' записали в таблицу дату Sh.Cell(nRow, 2).Value = WR_DocNo.Value ' записали в таблицу номер документа ' записали в таблицу наименование документа Sh.Cell(nRow, 3).Value = WR_DocNo.Child(k).Value ' записали в таблицу сумму If WR_DocNo.Child(k).TurnDb 0 Then _ Sh.Cell(nRow, 4).Value = WR_DocNo.Child(k).TurnDb If WR_DocNo.Child(k).TurnCr 0 Then _ Sh.Cell(nRow, 5).Value = WR_DocNo.Child(k).TurnCr ' установили размер шрифта Sh.Range(1, nRow, 5, nRow).Font.Size = ' установили выравнивание для сумм Sh.Range(4, nRow, 5, nRow).Alignment = acRight ' установили рамки Sh.Range(1, nRow, 7, nRow).SetBorder acBrdGrid ' рассчитали итоговые суммы TotalSumCr = TotalSumCr + WR_DocNo.Child(k).TurnCr TotalSumDb = TotalSumDb + WR_DocNo.Child(k).TurnDb Next Next Next End Sub В коде четко видно как в процессе вывода информации происходит обход по каждому аналитическому уровню отчета. В результате получится отчет такой, как показано на рисунке ниже.

25.04. Для окончания работы над отчетом «Акт сверки» требуется только сформировать итоговые суммы и подписи внизу отчета. Для этого добавим процедуру PrepareTotals в процедуру вывода информации в электронную таблицу PrepareSheet, после чего ее код примет следующий вид.

Sub PrepareSheet() Dim Sh Dim nStartRow Dim TotalSumCr Dim TotalSumDb 'получили доступ к листу электронной таблицы Set Sh = ShtBook.Sheet(1) nStartRow = Sh.Rows = nStartRow If WR.Root.Children > 0 Then Sh.Cell(nStartRow,4).Value = IIF(WR.Root.Child(1).StartDB = 0, _ Sh.Cell(nStartRow,5).Value = IIF(WR.Root.Child(1).StartCR = 0, _ PrepareBodyReport Sh, nStartRow, TotalSumDb, TotalSumCr PrepareTotals Sh, nStartRow, TotalSumDb, TotalSumCr End If ShtBook.Recalc End Sub Код процедуры PrepareTotals приведен ниже. Он не имеет каких либо особенностей и не нуждается в дополнительном комментарии.

25.04. Sub PrepareTotals(Sh, nStartRow, TotalSumDb, TotalSumCr) Dim TotalSum Sh.Rows = Sh.Rows + 10 ' добавляем строки для вывода итогов ' объединили ячейки для итогов по оборотам Sh.Range(1, nStartRow, 3, nStartRow).MergeCells = True ' отобразили информацию по оборотам Sh.Cell(nStartRow, 1).Value = "Оборот за период" Sh.Cell(nStartRow, 4).Value = TotalSumDb Sh.Cell(nStartRow, 5).Value = TotalSumCr nStartRow = nStartRow + ' объединили ячейки для итогов по отчету Sh.Range(1, nStartRow, 3, nStartRow).MergeCells = True Sh.Cell(nStartRow, 1).Value = "Сальдо конечное" ' отобразили итоги TotalSum = IIf(Sh.Cell(10, 4).Value = "", 0, Sh.Cell(10, 4).Value) TotalSum = TotalSum - IIf(Sh.Cell(10, 5).Value = "", 0, Sh.Cell(10, 5).Value) TotalSum = TotalSum + TotalSumDb - TotalSumCr If TotalSum >= 0 Then Sh.Cell(nStartRow, 4).Value = TotalSum Else Sh.Cell(nStartRow, 5).Value = TotalSum End If If TotalSum 0 Then nStartRow = nStartRow + Sh.Range(1, nStartRow, 7, nStartRow + 2).MergeCells = True Sh.Cell(nStartRow, 1).Value = "Итого, в пользу " & _ Sh.Cell(nStartRow, 1).Value = Sh.Cell(nStartRow, 1).Value & _ Sh.Cell(nStartRow, 1).Multiline = True End If nStartRow = nStartRow + Sh.Range(1, nStartRow, 2, nStartRow).MergeCells = True Sh.Cell(nStartRow - 1, 1).Value = "От имени :" Sh.Cell(nStartRow, 1).Font.Bold = True Sh.Cell(nStartRow, 1).Value = MyCoName Sh.Cell(nStartRow - 1, 6).Value = "От имени :" Sh.Cell(nStartRow, 6).Font.Bold = True Sh.Cell(nStartRow, 6).Value = AgCompareName Sh.Range(1, nStartRow + 2, 2, nStartRow + 2).SetBorder Sh.Range(6, nStartRow + 2, 7, nStartRow + 2).SetBorder End Sub Попробуйте построить отчет. Результат его работы должен быть представлен на экране в виде, приведенном на рисунке ниже.

25.04. Использование созданных пользователем правил Объектная модель Акцент позволяет не только использовать механизм Мастеров отчетов в коде, написанном на VBS, но и использовать уже созданные пользователем правила построения отчетов.

Например, наш отчет «Акт сверки» можно немного упростить, если не программировать объект RepWizard внутри программы, а взять готовый.

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

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

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

Вот как она выглядит сейчас.

Sub PrepareReport(AgID, dStart, dEnd) If WR.Load(REPORT_ID) Then WR.Period.Start = dStart ' установили начало периода WR.Period.End = dEnd ' установили конец периода If WR.Build Then PrepareSheet Else MsgBox "Ошибки в процессе построения отчета.", vbCritical End If Else MsgBox "Ошибки в процессе загрузки отчета.", vbCritical End If End Sub Обратите внимание на то, что всю нагрузку по установке условий построения отчета взял на себя метод WR.Load(REPORT_ID), 25.04. который возвращает True, если загрузка отчета прошла успешно и False, в случае каких либо ошибок.

Использование формул в электронной таблице По аналогии с Excel, электронную таблицу Акцента тоже можно «научить» работать с формулами. Для этого в ней можно использовать специальный объект Parser.

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

Sub ShtBook_OnLoad ' разрешить редактирование ShtBook.ReadOnly = False End Sub Пробуйте теперь ввести информацию в ячейку. Включить режим ввода можно двойным щелчком мышки на ячейке.

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

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

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

В формуле можно использовать арифметические выражения и функции, встроенные в Visual Basic Scripting Edition. Например, функцию вычисления квадратного корня Sqr.

Проверьте, как работает функция.

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

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

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

Sub ShtBook_OnLoad ' разрешить редактирование ShtBook.ReadOnly = False ' включим трансляцию формул ShtBook.PreTranslate = True End Sub Sub ShtBook_OnTranslate(Formula, ByRef Result, ByRef Skip) MsgBox "OnTranslate !" End Sub Свойство PreTranslate, установленное в True, включает обработку формул. А событие ShtBook_OnTranslate позволяет обработать формулу.

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

25.04. Обратите внимание на то, что ShtBook_OnTranslate будет вызываться столько раз, сколько есть вызовов функций в электронной таблице.

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

Посмотрите каким образом это сделано в отчете «Баланс (форма №1)».

Работа с объектом «Общий отчет»

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

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

Шаг 1. Постановка задачи Пусть наш отчет «обходит» все счета из плана счетов и для каждого выводит информацию о движении, полученную с использованием объекта RepCommon.

Шаг 2. Программирование отчета Ниже приведен текст рекурсивной процедуры, которая «обходит»

дерево плана счетов с указанной точки.

'-----------------Sub GetAccSum(Acc, Pos) Dim CurrentAcc For Each CurrentAcc In Acc 25.04. With CurrentAcc If.type < 3 Then AddOneRow Pos,.ID If.HasSub Then GetAccSum.Children, Pos End If End With Next End Sub Обратите внимание на использование метода свойства HasSub вместо стандартного HasChildren. Это свойство позволяет избежать дублирования счетов из-за возможных ярлыков и оно работает напрямую с базой данных, минуя программные кэши.

Далее приводится текст процедуры, которая выводит в отчет одну строку.

'-----------------Sub AddOneRow(ByRef RowNo, AccID) Dim StartDb, StartCr Dim TurnDb, TurnCr Dim EndDb, EndCr Dim Acc ' получили информацию о движении по счету With Rep StartDb =.StartDb(AccID) StartCr =.StartCr(AccID) TurnDb =.TurnDb(AccID) TurnCr =.TurnCr(AccID) EndDb =.EndDb(AccID) EndCr =.EndCr(AccID) End With ' если есть движение, то отоборажаем строку в отчете If StartDb 0 Or StartCr 0 Or TurnDb 0 Or TurnCr 0 Or EndDb 0 Or EndCr 0 Then Set Acc = WorkArea.Account(AccID) RowNo = RowNo + With Sheet.Cell(RowNo, 1).Value = Acc.Code.Cell(RowNo, 2).Value = Acc.Name.Cell(RowNo, 3).Value = StartDb.Cell(RowNo, 4).Value = StartCr.Cell(RowNo, 5).Value = TurnDb.Cell(RowNo, 6).Value = TurnCr.Cell(RowNo, 7).Value = EndDb.Cell(RowNo, 8).Value = EndCr.Cell(6, 3).Value =.Cell(6, 3).Value + StartDb.Cell(6, 4).Value =.Cell(6, 4).Value + StartCr.Cell(6, 5).Value =.Cell(6, 5).Value + TurnDb.Cell(6, 6).Value =.Cell(6, 6).Value + TurnCr.Cell(6, 7).Value =.Cell(6, 7).Value + EndDb.Cell(6, 8).Value =.Cell(6, 8).Value + EndCr End With End If End Sub 25.04. Осталось написать вспомогательный код, который будет нарисует заголовок электронной таблицы и инициирует начало работы процедуры обхода плана счетов.

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

'-----------------Sub ShtBook_OnLoad Dim CurrentAcc Dim RowNo With WorkArea.Site ' проверили место, из которого был запущен отчет If.Kind = acAccount And.ID 0 Then Set CurrentAcc = WorkArea.Account(.ID) If CurrentAcc.Type = -1 Then ' создали объект для получениюя информации по счетам Set Rep = WorkArea.CreateReport("RepCommon") ' установили план счетов Rep.PlanID = CurrentAcc.PlanID Rep.Clear ' очистили таблицу With Sheet.Range(1, 1,.Rows,.Columns).Clear ' номер строки, с которой будут отображаться данные ' сформировали заголовок отчета PrepareHeader CurrentAcc ' сформировали отчет GetAccSum CurrentAcc.Children, RowNo ' сформировали внешний вид отчета PrepareFooter RowNo Else MsgBox "Отчет должен запускаться из плана счетов.", vbExclamation End If End With End Sub Обратите внимание на то, что отчет может запускаться с любого счета плана счетов.

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

'-----------------Sub PrepareFooter(RowNo) With Sheet ' установили необходимое количество строк в отчете.Rows = RowNo ' установили сетку.Range(1, 6, 8, RowNo).SetBorder acBrdGrid ' выровняли столбцы 25.04..Range(1, 4, 8, RowNo).AutoFit ' установили выравнивание для цифр.Range(3, 6, 8, RowNo).Alignment = acRight ' выключили отображение заголовков и сетки.DisplayHeadings = False.DisplayGrid = False End With End Sub '-----------------Sub PrepareHeader(AccPlan) With Sheet.Columns =.Cell(1, 1).value = AccPlan.Name.cell(2, 1).value = "Оборотно-сальдовая ведомость".Cell(3, 1).value = "за " & Rep.Period.Name.Cell(4, 1).value = "Счет".Range(1, 4, 1, 5).MergeCells = True.Cell(4, 2).value = "Наименование".Range(2, 4, 2, 5).MergeCells = True.Cell(4, 3).value = "На " & Rep.Period.Start.Range(3, 4, 4, 4).MergeCells = True.Cell(4, 5).value = "Обороты за " & Rep.Period.Name.Range(5, 4, 6, 4).MergeCells = True.Cell(4, 7).value = "На " & Rep.Period.End.Range(7, 4, 8, 4).MergeCells = True.Cell(5, 3).value = "Дебет".Cell(5, 4).value = "Кредит".Cell(5, 5).value = "Дебет".Cell(5, 6).value = "Кредит".Cell(5, 7).value = "Дебет".Cell(5, 8).value = "Кредит" With.range(1, 4, 8, 6).SetBorder acBrdGrid.BackColor = RGB(225, 225, 225) End With.Cell(6, 1).Value = "Итого".Range(1, 6, 8, 6).BackColor = RGB(225, 225, 0) End With End Sub Шаг 3. Проверяем работоспособность отчета Запустите отчет, чтобы проверить его работоспособность. Если текущий режим работы с программой не является допустимым, например, такой, как показано на рисунке ниже 25.04. Программа выдаст на экране следующее сообщение.

Если установить курсор на план счетов и заново открыть отчет, он должен иметь внешний вид такой, как показано на рисунке ниже.

Шаг 4. Некоторые особенности отчета У получившегося отчета есть две особенности: первая хорошая и вторая плохая. Начнем с плохой – отчет работает медленно. Это связано с тем, что для каждого счета происходит расчет движения.

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

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

' условие закомментировано для того, чтобы дать возможность работать отчету с любого счета ' If CurrentAcc.Type = -1 Then Теперь можно установить курсор на любой счет, например, « Основные средства» и запустить отчет. Результат его работы должен соответствовать рисунку, представленному ниже.

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

В таблице ниже приведена таблица соответствие между объектами встроенного языка и встроенными в программу отчетами.

Наименование Наименование отчета объекта RepBalance RepBankList RepCashBook RepChess RepDocList RepGLedger RepJournal RepSubList RepSynth RepTurn 25.04. Для примера можно рассмотреть реализацию задачи об оборотносальдовой ведомости с наименованием счетов, рассмотренную в предыдущей главе, но на основе объекта RepBalance.

Шаг 1. Алгоритм построения отчета Алгоритм построения отчета изменился в корне. Теперь мы просто строим отчет «Оборотно-сальдовая ведомость» и для каждого счета, попавшего в него, выводим в отчет его наименование.

Шаг 2. Программируем отчет Процедура, выполняющаяся после загрузки отчета практически не изменилась.

'-----------------Sub ShtBook_OnLoad Dim CurrentAcc Dim RowNo With WorkArea.Site ' проверили место, из которого был запущен отчет If.Kind = acAccount And.ID 0 Then Set CurrentAcc = WorkArea.Account(.ID) ' создали объект для получениюя информации по счетам Set Rep = WorkArea.CreateReport("RepBalance") If CurrentAcc.Type = -1 Then ' очистили таблицу With Sheet.Range(1, 1,.Rows,.Columns).Clear End With ' номер строки, с которой будут отображаться данные ' сформировали заголовок отчета PrepareHeader CurrentAcc ' сформировали отчет GetAccSum CurrentAcc, RowNo ' сформировали внешний вид отчета PrepareFooter RowNo End If Else MsgBox "Отчет должен запускаться из плана счетов.", vbExclamation End If End With End Sub А вот процедура работы со счетами изменилась в корне. Теперь она не рекурсивная и работает со строками оборотно-сальдовой ведомости из объекта RepBalance.

25.04. '-----------------Sub GetAccSum(Acc, RowNo) Dim i ' установили план счетов Rep.PlanID = Acc.PlanID If Rep.Build Then ' выводим итоги With Sheet.Cell(6, 3).Value = Rep.StartDb.Cell(6, 4).Value = Rep.StartCr.Cell(6, 5).Value = Rep.TurnDb.Cell(6, 6).Value = Rep.TurnCr.Cell(6, 7).Value = Rep.EndDb.Cell(6, 8).Value = Rep.EndCr End With For i = 1 To Rep.Count AddOneRow RowNo, Rep.Item(i) Next End If End Sub Процедура вывода одной строки в отчет тоже претерпела коренные изменения. Из нее был удален, ставшим ненужным, код, проверяющий движение по счету, поскольку в отчете уже есть только те счета, по которым было движение. И убран код, отвечающий за подведение итогов по всему отчету. Итоги уже посчитаны и хранятся в объекту RepBalance.

'-----------------Sub AddOneRow(ByRef RowNo, OneRow) RowNo = RowNo + With Sheet.Cell(RowNo, 1).Value = OneRow.Account.Code.Cell(RowNo, 2).Value = OneRow.Account.Name.Cell(RowNo, 3).Value = OneRow.StartDb.Cell(RowNo, 4).Value = OneRow.StartCr.Cell(RowNo, 5).Value = OneRow.TurnDb.Cell(RowNo, 6).Value = OneRow.TurnCr.Cell(RowNo, 7).Value = OneRow.EndDb.Cell(RowNo, 8).Value = OneRow.EndCr End With End Sub Шаг 3. Проверяем работоспособность отчета Как всегда, проверяем работоспособность отчета посредством его запуска. Внешний вид отчета должен соответствовать рисунку ниже.

25.04. Обратите внимание, на сколько возросла скорость построения отчета.

Система «Налоговые отчеты»



Pages:     || 2 |


Похожие работы:

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ НАЦИОНАЛЬНЫЙ ФОНД ПОДГОТОВКИ КАДРОВ ИННОВАЦИОННЫЙ ПРОЕКТ РАЗВИТИЯ ОБРАЗОВАНИЯ Субпроект Создание центра повышения квалификации преподавателей по экономике Государственный Университет – Высшая Школа Экономики Программа дисциплины Макроэкономика Москва 2004 2 Программа дисциплины Макроэкономика составлена в соответствии с требованиями (федеральный компонент) к обязательному минимуму содержания и уровню подготовки дипломированного специалиста...»

«1 Министерство культуры и массовых коммуникаций Российской Федерации Федеральное государственное образовательное учреждение Государственный музыкальный колледж имени Гнесиных Е.Кадашевич, Ю.Кривицкая Семестровые требования по гармонии (специальности: 0501.03 Оркестровые духовые и ударные инструменты и 0501.04 Инструменты народного оркестра) От авторов. Содержание курса Гармония является общим для всех инструментальных специализаций, а музыкальным материалом для практического освоения предмета...»

«ПОЯСНИТЕЛЬНАЯ ЗАПИСКА Программа государственного экзамена по теории и методике обучения химии составлена в соответствии с требованиями Государственного образовательного стандарта высшего профессионального образования по направлению Естественнонаучное образование, степень 050100 (квалификация) – магистр естественнонаучного образования и учебным планом по направлению 050100 Естественнонаучное образование, магистерской программой Химическое образование. Настоящая программа включает в себя перечень...»

«Областное государственное бюджетное образовательное учреждение Томский базовый медицинский колледж УТВЕРЖДЕНЫ на заседании Методического совета ОГБОУ ТБМК 3 октября 2013г Председатель О.С.Бобина РЕКОМЕНДАЦИИ ДЛЯ СТУДЕНТОВ ПО ПОДГОТОВКЕ И НАПИСАНИЮ ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЫ Составлены: Бобиной О.С., Повх И.В., Дмитриевой А.О., Лебедевой И.Ю., Гуркиной Г.В., Поповой С.В. Томск, 2013 Уважаемые студенты! Данные рекомендации помогут Вам подготовиться к написанию и защите выпускной...»

«Аннотация дисциплины Динамика, прочность машин, приборов и аппаратуры специальность 01.02.06 – Динамика, прочность машин, приборов и аппаратуры Общая трудоемкость изучения дисциплины составляет 10 ЗЕД (360 час). Форма обучения: очная и заочная. Рабочая программа дисциплины Динамика и прочность машин, приборов и аппаратуры составлена на основании федеральных государственных требований к структуре основной профессиональной образовательной программы послевузовского профессионального образования...»

«Девятнадцатое заседание Общемосковского семинара Научного Совета РАН по ВМС ”Новейшие достижения в области науки о полимерах” Руководители семинара: Академик В.А. Кабанов Академик А.Р. Хохлов состоится 28.01.03 в 15.00 в Конференц-зале ИНЭОС РАН Программа девятнадцатого семинара: 1.А.Р.Хохлов – Информационный блок для участников семинара. 2.И.Я.Ерухимович – Научный доклад: Новости и теории тернарных блоксополимерных систем, или созрела ли физика полимерных наноструктур для прорыва в...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования Кемеровский государственный университет В г.Анжеро - Судженске Рабочая программа дисциплины Б3.Б.7 Педагогика Направление подготовки 040400.62 Социальная работа Квалификация (степень) выпускника Бакалавр Форма обучения заочная Анжеро-Судженск 2013 1. Цели освоения дисциплины Целями освоения дисциплины Педагогика являются: –...»

«2007 год • Министерство здравоохранения и социального развития РФ 1. Федеральная целевая программа предупреждение и борьба с социально значимыми заболеваниями (2007-2009), подпрограмма Туберкулез. Руководитель: Морозова Т.И., зав. каф. фтизиатрии ФПК ППС, профессор, д.м.н. Тема НИР: Разработка комплекса мероприятий по повышению эффективности лечения социально неблагополучных групп населения. Гос. контракт № 06/1041. Объем финансирования: 1000 тыс. руб. Тема НИР: Разработка программ по...»

«Программа по предотвращению риска стихийных бедствий в Кыргызстане в 2007-2011 гг. Обзор Фото на обложке: Мобилизация местного сообщества для берегоукрепительных мероприятий на реке Зергер (фото CAMP Alatoo) Программа по предотвращению риска стихийных бедствий в Кыргызстане в 2007-2011 гг. Обзор Сентябрь 2011 Содержание Предисловие Информированность и наращивание потенциала в сфере интегрированного управления местными рисками в Кыргызстане.9 Повышение степени готовности и способности к...»

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

«Руководство кандидата Черновая версия, апрель 2011 г.Рекомендованная итоговая версия Модуль 2 Обратите внимание, что это только рекомендованная Руководства кандидата, которая не была одобрена Советом директоров как итоговачерновая версия. Потенциальные кандидаты не должны основываться исключительно на изложенных здесь положениях новой программы gTLD, поскольку программа все еще находится на рассмотрении и не утверждена. 152 апреля ноября 20110 г. Модуль 2 Процедуры оценки В этом модуле...»

«Отчёт о посещениях страниц сайта юридического факультета (http://urfak.petrsu.ru/) За период с 1 января по 31 декабря 2012 года.   При анализе лог-файлов:    1) На компьютере был прописан только один университетский DNS-сервер 192.168.30.249 (DNS сервер компании СвязьСервис 194.85.172.133 был временно убран из настроек для однозначности разрешения имён сети ПетрГУ).   2) Поисковые роботы не считались за посетителей.   3) База данных по распределению IP-адресов по организациям мира не...»

«План работы библиотеки ГСГ на 2013-2014 учебный год Библиотека гимназии – это неотъемлемая часть образовательного процесса. Цель работы библиотеки: Повышение уровня информационной культуры участников образовательного процесса. Основные задачи библиотеки: 1.Поддержание и обеспечение образовательных целей гимназии. 2.Формирование качественного библиотечного фонда. 3.Расширение кругозора участников образовательного процесса: • развитие навыков литературного чтения; • развитие общеучебных навыков;...»

«5 Истоки и перспективы глобальной истории Т. Л. Шестова Глобальная история является одним из наиболее перспективных направлений исторических исследований рубежа ХХ–XXI вв. Об этом свидетельствуют материалы последних Всемирных исторических конгрессов: XIХ (2000, Осло), ХХ (2005, Сидней), ХХI (2010, Амстердам), в программах которых обсуждение проблем глобальной истории заняло видное место (Хачатурян 2002; Proceedings. 2000; Бибиков и др. 2006), а также программные выступления лидеров мировой и...»

«УТВЕРЖДЕНО ФФиСН, профессор факультета А. В.РУБАНОВ (подпись) (И.О.Фамилия) 2013 (дата утверждения) Регистрационный № УД-/р. ФИЛОСОФИЯ ЦИВИЛИЗАЦИЙ (II часть курса Социальная философия) Учебная программа для специальности: 1-21 02 01 философия Факультет философии и социальных наук Кафедра философии и методологии науки Курс: Семестр: Лекции: 16 часов КСР: 4 часа Зачет: 6 семестр Самостоятельная работа: 139 часов Всего аудиторных часов по дисциплине: Всего часов по дисциплине: 159 Форма получения...»

«ОКРУЖАЮЩИЙ МИР Пояснительная записка Учебный курс Окружающий мир занимает особое место среди учебных предметов начальной школы. Образно говоря, это то, что всегда с тобой, поскольку познание детьми окружающего мира не ограничивается рамками урока. Оно продолжается постоянно в школе и за её стенами. Нормативно-правовые документы, на основании которых разработана рабочая программа Программа разработана на основе: 1. Федерального Закона Об образовании в Российской Федерации от 29.12.2012г. № 273...»

«Время платить налоги. профессионально Палаты налоговых консультантов № 8, август 2009 В этом выпуске: Департамент по обучению консультантов по налогам и сборам принимает гостей Представитель Палаты налоговых консультантов Чешской Республики С. Краточвилова изучила опыт организации процесса подготовки налоговых консультантов в России. Состоялось заседание Президентского совета Палаты налоговых консультантов, на котором были подведены итоги деятельности в 2008–2009 гг. 28–29 сентября 2009 г. г....»

«Содержание 1. Целевой раздел Пояснительная записка 1.1.Ценностные приоритеты среднего (полного) общего образования 1.2. Планируемые результаты освоения обучающимися основной образовательной программы полного общего образования 1.2.1. Общие положения 1.2.2. Общие учебные умения, навыки и способы деятельности 1.2.3.Требования к уровню подготовки по учебным предметам 1.2.3.1. Русский язык 1.2.3.2.Литература 1.2.3.3. Иностранный язык 1.2.3.3.1. Английский язык 1.2.3.3.2....»

«Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Уральский государственный педагогический университет Институт физики и технологии Кафедра технологии РАБОЧАЯ УЧЕБНАЯ ПРОГРАММА по дисциплине Основы промышленной безопасности для специальности 050502.65 –Технология и предпринимательство по циклу ДПП.В.1(2) – Дисциплины предметной подготовки (Дисциплины и курсы по выбору студента) Очная форма...»

«ОТЧЕТ О САМООБСЛЕДОВАНИИ УЧИЛИЩА (ТЕХНИКУМА) ОЛИМПИЙСКОГО РЕЗЕРВА ФЕДЕРАЛЬНОГО ГОСУДАРСТВЕННОГО БЮДЖЕТНОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ФИЗИЧЕСКОЙ КУЛЬТУРЫ, СПОРТА И ТУРИЗМА Краснодар 2014 1.ОРГАНИЗАЦИОННО - ПРАВОВОЕ ОБЕСПЕЧЕНИЕ ОБРАЗОВАТЕЛЬНОЙ ДЕЯТЕЛЬНОСТИ Училище (техникум) олимпийского резерва (далее - Училище) является структурным подразделением Федерального государственного бюджетного образовательного учреждения...»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.