ВЫПОЛНЕНИЕ ПРОГРАММЫ - Обоснование разработки и разработка проекта автоматизации учебного процесса в автошколе

Общие положения (дерево функций и сценарий диалога)

На рисунке 2.10 представлено дерево функций программы.

дерево функций

Рисунок. Дерево функций

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

главное окно программы

Рисунок. Главное окно программы

Такие пункты главного меню программы (и их подменю):

Файл;

Правка;

Операции;

Сервис;

Окна;

Справка

Являются стандартными для "1С:Предприятие 8.1" и подробное их описание можно прочитать в справочной системе программы.

Пункт главного меню "Справочники" включает в себя все справочники программы, разбитые по логическим признакам.

пункт главного меню

Рисунок. Пункт главного меню "Справочники"

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

У каждой кнопки на панели есть "горячая клавиша" с помощью которой можно быстро выполнить требуемое действие. Действия доступные на панели являются стандартными для "1С:Предприятие 8.1" и подробное их описание можно прочитать в справочной системе программы. Краткое описание возможных действий:

Добавить элемент справочника;

Добавить новую группу;

Добавить копированием существующего элемента;

Изменит текущий элемент;

Установить пометку удаления;

Иерархический просмотр справочника;

Найти местоположения текущей строки в дереве;

Переместить элемент в другую группу;

Отбор и сортировка в справочнике;

Отбор по значению в текущей колонке;

История отборов;

Отключить установленный отбор;

Обновить текущий список;

Перейти к подчиненным элементам;

Открыть справку.

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

Рисунок. Форма элемента справочника "Учащиеся" открытого на изменение

При наличие в справочнике табличных частей в верхней их части будет присутствовать меню табличной части со стандартными для "1С:Предприятие 8.1" элементами, подробное их описание можно прочитать в справочной системе программы. Обычно меню табличной части включает в себя:

Добавить элемент;

Добавить копированием;

Изменить текущий элемент;

Удалить текущий элемент;

Закончить редактирование строки;

Переместить текущий элемент вверх;

Переместить текущий элемент вниз;

Упорядочить по возрастанию;

Упорядочить по убыванию.

Пункт главного меню "Документы" включает в себя все документы программы, разбитые по логическим признакам.

При выборе пункта меню открывается форма "Ввод нового" выбранного документа.

При выборе пункта меню открывается форма журнала документов. При выборе необходимого журнала на экран будет выведен список документов соответствующего журнала.

В верхней части панели находятся панель с кнопками быстрого доступа. Действия доступные на панели можно выполнить с помощью "горячих клавиш". Действия доступные на панели являются стандартными для "1С:Предприятие 8.1" и подробное их описание можно прочитать в справочной системе программы. Краткое описание возможных действий:

Добавить новый документ;

Добавить копированием;

Изменить текущий документ;

Установить пометку удаления;

Установить интервал дат;

Поиск по номеру документа;

Отбор по виду документа;

Отбор и сортировка;

Отбор по значению в текущей колонке;

История отборов;

Отключить отбор;

Перейти к связанной информации;

Обновить текущий список;

Открыть справку.

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

форма документа

Рисунок. Форма документа "Прием учащегося" открытого на изменение

В верху табличной части документа будет присутствовать меню табличной части со стандартными для "1С:Предприятие 8.1" элементами, подробное их описание можно прочитать в справочной системе программы. Обычно меню табличной части включает в себя:

Добавить элемент;

Добавить копированием;

Изменить текущий элемент;

Удалить текущий элемент;

Закончить редактирование строки;

Переместить текущий элемент вверх;

Переместить текущий элемент вниз;

Упорядочить по возрастанию;

Упорядочить по убыванию.

Пункт главного меню "Отчеты" включает в себя все отчеты программы, разбитые по логическим признакам.

Для окончания работы с системой необходимо выбрать пункт меню "Файл Выход". При этом система выполнит закрытие открытых объектов и приложение будет закрыто.

Структурная схема пакета (дерево вызова программных модулей)

Для разработка информационно-справочной системы автоматизации предприятия используется система 1С:Предприятие 8.1. Эта система имеет модульную форму организации конфигурации. В глобальных модулях хранятся переменные, процедуры и функции доступные из любых других модулей. Также можно выделить другие группы модулей:

Справочники

Документы

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

Отчеты

Обработки

Регистры.

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

блок-схема основных модулей программы

Рисунок. Блок-схема основных модулей программы

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

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

Описание программных модулей

Модуль "Главный модуль" предназначен для запуска основных процедур и функций программы.

Модуль работы со справочниками включает справочники:

Сотрудники;

Организации;

Учащиеся;

Группы;

Здоровье.

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

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

Модуль включает следующие документы:

Прием в школу;

Отчисление из школы;

Приходный кассовый ордер;

Выписка банка;

Успеваемость;

Здоровье;

РКО;

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

Модуль "Регистры" включает в себя:

Остатки;

Касса;

Банк.

Модуль "Отчеты" влючает в себя:

Остатки;

Ведомость по кассе;

Ведомость по банку;

Здоровье;

Успеваемость.

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

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

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

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

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

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

Модуль формирование отчетов выполняет функции по формирования печатных форм. В модуле хранятся шаблоны для печати. Отчеты формируются, используя запросы, которые обрабатывают исходную информацию в соответствии с заданными параметрами пользователя. Отчеты выполнены при помощи механизма 1С 8.1 "Построитель отчетов". Схема работы построителя отчетов представлена на рисунке.

схема работы построителя отчетов

Рисунок. Схема работы построителя отчетов.

Система построения запросов в 1С 8.1 не имеет себе равных среди СУБД массового использования. Практически все виды запросов, которые можно построить программно, в 1С 8.1 можно построить визуально. В 1С 8.1 предоставляется возможность создавать самые разнообразные запросы выборки. Также представлена развитая система фильтров. Фильтры и система сортировки - одна из наиболее сильных сторон 1С 8.1. Фильтры строятся с помощью запросов или установкой критериев.

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

Тестирование программы

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

Пункт Документы предназначен для работы с новыми документами и журналами документов. При выборе Справочников становятся доступны все справочники программы для их просмотра и редактирования. Пункт Отчеты содержит все доступные отчеты.

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

Заполнение других справочников происходит в процессе работы.

Для ввода нового или изменения данных существующего учащегося нужно выбрать пункт меню "Справочники Учащиеся". В списке справочника могут быть выполнены стандартные, для 1С 8.1, действия: добавить, изменить, скопировать, удалить, отбор, сортировка, настройка списка, вывод списка на печать. Для ввода нового контрагента нужно выбрать группу в которой будет находится новый контрагент и нажать кнопку "Добавить", откроется форма для ввода данных. По бумажным документам вносится вся необходимая информация. В случае вызова данных из другого справочника, например "БанковскийСчет", в открывшейся для выбора форме можно редактировать данные этого справочника без входа в него через основное меню.

новый учащийся

Рисунок. Новый Учащийся.

Другие справочники заполняются аналогично.

Для ввода нового документа "Поступление в школу" необходимо выбрать пункт меню "Документы Поступление в школу" или "Журналы Контингент". В первом случае сразу откроется форма ввода нового документа, а во втором - журнал документов. В новом документе, при необходимости меняются номер и дата документа, указывается комментарий и заполняется табличная часть. Над табличной частью документа могут быть выполнены стандартные, для 1С 8.1, действия: добавить, изменить, скопировать, удалить, отбор, сортировка, настройка списка, вывод списка на печать.

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

построитель отчетов

Рисунок. Построитель отчетов

Для окончания работы с системой необходимо выбрать пункт меню "Файл Выход". При этом система выполнит закрытие открытых объектов и приложение будет закрыто.

Заключение

В результате выполнения дипломного проекта была всесторонне изучена деятельность ДЮСШ №5 , изучена ее организационная структура, особенности работы и особенности построения его системы автоматизации. Задача автоматизации рабочего места зам по УВР ДЮСШ №5 была всесторонне рассмотрена и изучена. Определено место этой задачи в комплексе задач автоматизации, обоснована необходимость автоматизации и необходимость использования вычислительной техники для решения этой задачи.

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

Далее были рассмотрены возможности применения системы 1С:Предприятие 8.1 с целью создания системы рабочего места зам по УВР ДЮСШ №5 . Система 1С:Предприятие, обладающая гибкой технологической платформой, была выбрана для реализации задачи дипломного проекта как имеющая наибольшие возможности подстройки под специфику задачи. Рассмотрены основные особенности архитектуры этой системы, ее функциональность и механизмы, при помощи которых строятся прикладные решения. Найдены способы использования основных механизмов системы 1С:Предприятие для целей дипломного проекта.

Далее в среде разработки 1С:Предприятие была разработана и реализована конфигурация, выполняющая поставленную задачу. Были созданы объекты конфигурации: справочники, документы, журналы документов, регистры, отчеты; определена их структура, реквизиты, формы, написаны программные модули, реализующие заданную функциональность этих объектов.

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

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

Список использованных источников

Митичкин С. А. Разработка в системе 1С:Предприятие 8.1, - М.: ООО "1С-Паблишинг", 2003. - 413 с.: ил.

Габец А. П., Гончаров Д. И., Козырев Д. В., Кухлевский Д. С., Радченко М. Г. Профессиональная разработка в системе 1С:Предприятие 8 (+CD) / Под ред. Радченко М. Г. - М.: "1С-Паблишинг"; СПб.: Питер, 2007. - 808 с.:ил.

Радченко М. Г. 1С:Предприятие 8.1 Практическое пособие разработчика

Митичкин С. А. Разработка в системе 1С:Предприятие 8.1, - М.: ООО "1С-Паблишинг", 2003. - 413 с.: ил.

    1С:Предприятие 8.1 Описание встроенного языка часть 1, - Москва, Фирма "1С", 2003 1С:Предприятие 8.1 Описание встроенного языка часть 2, - Москва, Фирма "1С", 2003 1С:Предприятие 8.1 Конфигурирование и администрирование, - Москва, Фирма "1С", 2003

Вендров А. М. CASE технологии Современные методы и средства проектирования информационных систем М.: Финансы и статистика, 1998. - 176 с.: ил.;

Методология функционального моделирования IDEF0, Руководящий документ, Госстандарт России.;

Диго С. М. Проектирование и использование баз данных Учебник. М.: Финансы и статистика. 1995 г;

Основы построения баз данных под ред. А. Д. Хомоненко Санкт-Петербург, 2004;

ГОСТ Р ИСО/МЭК 12207-99, Руководящий документ, Госстандарт России, Москва, 2004;

Приложение А. Листинг программного кода

Документ. ПКО. МодульОбъекта

Процедура ОбработкаПроведения(Отказ, Режим)

Если Фирма. Пустая() Тогда

Предупреждение("Заполните фирму!", 60, "Проведение.");

Отказ = истина;

Возврат;

КонецЕсли;

Если Контрагент. Пустая() Тогда

Предупреждение("Заполните контрагента!", 60, "Проведение.");

Отказ = истина;

Возврат;

КонецЕсли;

Если Касса. Пустая() Тогда

Предупреждение("Заполните кассу!", 60, "Проведение.");

Отказ = истина;

Возврат;

КонецЕсли;

// регистр Взаиморасчеты Приход

Движение = Движения. Взаиморасчеты. Добавить();

Движение. ВидДвижения = ВидДвиженияНакопления. Расход;

Движение. Период = Дата;

Движение. Фирма = Фирма;

Движение. Контрагент = Контрагент;

Движение. Сделка = ЭтотОбъект. Ссылка;

Движение. Сумма = ЭтотОбъект. Сумма;

Движение = Движения. Касса. Добавить();

Движение. ВидДвижения= ВидДвиженияНакопления. Приход;

Движение. Период = Дата;

Движение. Фирма = Фирма;

Движение. Касса= Касса;

Движение. Сумма = ЭтотОбъект. Сумма;

Движение. КодОперации= Перечисления. КодыОпераций. ПКО;

// регистр Основной

//Движение = Движения. Основной. Добавить();

//Движение. СчетДт = ПланыСчетов. Основной. ТоварыНаСкладах;

//Движение. СчетКт = ПланыСчетов. Основной. РасчетыСПоставщикамиВРублях;

//Движение. Период = Дата;

//Движение. Сумма = ТекСтрокаНоменклатура. Сумма;

//Движение. КоличествоДт = ТекСтрокаНоменклатура. Количество;

//Движение. СубконтоДт[ПланыВидовХарактеристик. ВидыСубконтоХозрасчетные. Номенклатура] = ТекСтрокаНоменклатура. Номенклатура;

//Движение. СубконтоКт[ПланыВидовХарактеристик. ВидыСубконтоХозрасчетные. Контрагенты] = Контрагент;

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

Документ. ПКО. Форма. ФормаДокумента. Форма. Модуль

Процедура ПриОткрытии()

Если ЭтотОбъект. ЭтоНовый() Тогда

КодОперации = Перечисления. КодыОпераций. ПКО;

КонецЕсли;

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

Процедура Печать(Кнопка)

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

Макет = Документы. ПКО. ПолучитьМакет("МакетПКО");

// Заголовок

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

Область. Параметры. ПКОСтрока= "ПКО № " + ЭтотОбъект. Номер +

Формат(ЭтотОбъект. Дата, "ДФ='дд ММММ гггг'");

Область. Параметры. Фирма = ЭтотОбъект. Фирма. Наименование;

Область. Параметры. РеквизитыФирмы= "ИНН " + ЭтотОбъект. Фирма. ИНН +

" КПП " + ЭтотОбъект. Фирма. КПП +

" Юр. адрес " + ЭтотОбъект. Фирма. ЮридическийАдрес;

Область. Параметры. Касса = ЭтотОбъект. Касса. Наименование;

Область. Параметры. Контрагент= ЭтотОбъект. Контрагент. Наименование;

Область. Параметры. РеквизитыКонтрагента= "ИНН " + ЭтотОбъект. Контрагент. ИНН +

" КПП " + ЭтотОбъект. Контрагент. КПП;

Область. Параметры. Сумма = Формат(ЭтотОбъект. Сумма, "ЧЦ=15;ЧДЦ=2") + " ( "

+ ЧислоПрописью(ЭтотОбъект. Сумма, "L=ru_RU") + " ) руб.";;

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

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

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

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

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

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

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

Документ. ПриходПоБанку. Форма. ФормаДокумента. Форма. Модуль

Процедура ПриОткрытии()

Если ЭтотОбъект. ЭтоНовый() Тогда

КодОперации = Перечисления. КодыОпераций. ПриходПоБанку;

КонецЕсли;

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

Процедура Печать(Кнопка)

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

Макет = Документы. ПриходПоБанку. ПолучитьМакет("МакетПриходПоБанку");

// Заголовок

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

Область. Параметры. ПриходПоБанкуСтрока= "Приход по банку № " + ЭтотОбъект. Номер +

Формат(ЭтотОбъект. Дата, "ДФ='дд ММММ гггг'");

Область. Параметры. Фирма = ЭтотОбъект. Фирма. Наименование;

Область. Параметры. РеквизитыФирмы= "ИНН " + ЭтотОбъект. Фирма. ИНН +

" КПП " + ЭтотОбъект. Фирма. КПП +

" Юр. адрес " + ЭтотОбъект. Фирма. ЮридическийАдрес;

Область. Параметры. БСФирма = ЭтотОбъект. Фирма. БанковскийСчет;

Область. Параметры. Контрагент= ЭтотОбъект. Контрагент. Наименование;

Область. Параметры. РеквизитыКонтрагента= "ИНН " + ЭтотОбъект. Контрагент. ИНН + " КПП " + ЭтотОбъект. Контрагент. КПП;

Область. Параметры. БСКонтрагент = ЭтотОбъект. Контрагент. БанковскийСчет;

Область. Параметры. Сумма = Формат(ЭтотОбъект. Сумма, "ЧЦ=15;ЧДЦ=2") + " ( "

+ ЧислоПрописью(ЭтотОбъект. Сумма, "L=ru_RU") + " ) руб.";;

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

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

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

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

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

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

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

Конфигурация. МодульПриложения

Перем глТекущийПользователь Экспорт;

Процедура ПриНачалеРаботыСистемы()

ГлТекущийПользователь = ИмяПользователя()

КонецПроцедуры // ПриНачалеРаботыСистемы()

ОбщаяФорма. РедактированиеДокументаУдостоверяющегоЛичность. Форма. Модуль

Процедура ЗаписатьИзменения()

ЗаписьИзНабора = НаборЗаписей[0];

// Если что-то поменяли тогда запишем

Если ДокументВидПриОткрытии <> ДокументВид ИЛИ

ДокументДатаВыдачиПриОткрытии <> ДокументДатаВыдачи ИЛИ

ДокументКемВыданПриОткрытии <> ДокументКемВыдан ИЛИ

ДокументКодПодразделенияПриОткрытии <> ДокументКодПодразделения ИЛИ

ДокументНомерПриОткрытии <> ДокументНомер ИЛИ

ДатаРегистрацииПоМестуЖительства <> ДатаРегистрацииПоМестуЖительстваПриОткрытии ИЛИ

Период <> ПериодПриОткрытии ИЛИ

ДокументСерияПриОткрытии <> ДокументСерия Тогда

ЗаписьИзНабора. ДокументВид = ДокументВид;

ЗаписьИзНабора. ДокументДатаВыдачи = ДокументДатаВыдачи;

ЗаписьИзНабора. ДокументКемВыдан = ДокументКемВыдан;

ЗаписьИзНабора. ДокументКодПодразделения = ДокументКодПодразделения;

ЗаписьИзНабора. ДокументНомер = ДокументНомер;

ЗаписьИзНабора. ДокументСерия = ДокументСерия;

ЗаписьИзНабора. ДатаРегистрацииПоМестуЖительства = ДатаРегистрацииПоМестуЖительства;

ЗаписьИзНабора. Период = Период;

КонецЕсли;

Модифицированность = Ложь;

Оповестить("ОбновитьУдостоверениеЛичности");

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

Процедура ПодтвердитьИзменения(Кнопка)

ЗаписатьИзменения();

Закрыть();

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

Процедура ПриОткрытии()

Если НаборЗаписей. Количество() = 0 тогда

НаборЗаписей. Добавить();

ЗаписьИзНабора = НаборЗаписей[0];

ЗаписьИзНабора. ФизЛицо = ФизЛицоПриОткрытии;

ЗаписьИзНабора. Период = ПериодПриОткрытии;

КонецЕсли;

ЗаписьИзНабора = НаборЗаписей[0];

ДокументВид = ЗаписьИзНабора. ДокументВид;

ДокументДатаВыдачи = ЗаписьИзНабора. ДокументДатаВыдачи;

ДокументКемВыдан = ЗаписьИзНабора. ДокументКемВыдан;

ДокументКодПодразделения = ЗаписьИзНабора. ДокументКодПодразделения;

ДокументНомер = ЗаписьИзНабора. ДокументНомер;

ДокументСерия = ЗаписьИзНабора. ДокументСерия;

ДатаРегистрацииПоМестуЖительства = ЗаписьИзНабора. ДатаРегистрацииПоМестуЖительства;

Период = ?(НЕ ЗначениеЗаполнено(ЗаписьИзНабора. Период), '19000101', ЗаписьИзНабора. Период);

ФизЛицо = ЗаписьИзНабора. Физлицо;

Если НЕ ЗначениеЗаполнено(ФизЛицо) тогда

ИндКнопки = ЭлементыФормы. ОсновныеДействияФормы. Кнопки. Индекс(ЭлементыФормы. ОсновныеДействияФормы. Кнопки. КнопкаИстория);

ЭлементыФормы. ОсновныеДействияФормы. Кнопки. Удалить(ИндКнопки);

ИндКнопки = ЭлементыФормы. ОсновныеДействияФормы. Кнопки. Индекс(ЭлементыФормы. ОсновныеДействияФормы. Кнопки. РазделительИстория);

ЭлементыФормы. ОсновныеДействияФормы. Кнопки. Удалить(ИндКнопки);

КонецЕсли;

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

Процедура КнопкаИсторияНажатие(Элемент)

ФормаРегистра = РегистрыСведений. ПаспортныеДанныеФизЛиц. ПолучитьФормуСписка();

ФормаРегистра. РегистрСведенийСписок. Отбор. ФизЛицо. Значение = ФизЛицо;

ФормаРегистра. РегистрСведенийСписок. Отбор. ФизЛицо. ВидСравнения = ВидСравнения. Равно;

ФормаРегистра. РегистрСведенийСписок. Отбор. ФизЛицо. Использование = Истина;

ФормаРегистра. ЭлементыФормы. РегистрСведенийСписок. НачальноеОтображениеСписка = НачальноеОтображениеСписка. Конец;

ФормаРегистра. Открыть();

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

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)

Если Модифицированность Тогда

ОтветНаВопрос = Вопрос("Данные были изменены. Сохранить изменения?", РежимДиалогаВопрос. ДаНетОтмена);

Если ОтветНаВопрос = КодВозвратаДиалога. Да Тогда

ЗаписатьИзменения();

ИначеЕсли ОтветНаВопрос = КодВозвратаДиалога. Отмена Тогда

Отказ = Истина;

КонецЕсли;

КонецЕсли;

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

ОбщаяФорма. РедактированиеСемейногоПоложения. Форма. Модуль

Процедура ЗаписатьИзменения()

ЗаписьИзНабора = НаборЗаписей[0];

// Если что-то поменяли тогда запишем

Если СемейноеПоложениеПриОткрытии <> СемейноеПоложение ИЛИ

Период <> ПериодПриОткрытии Тогда

ЗаписьИзНабора. СемейноеПоложение= СемейноеПоложение;

ЗаписьИзНабора. Период = Период;

КонецЕсли;

Модифицированность = Ложь;

Оповестить("ОбновитьСемейноеПоложение");

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

Процедура ПодтвердитьИзменения(Кнопка)

ЗаписатьИзменения();

Закрыть();

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

Процедура ПриОткрытии()

Если НаборЗаписей. Количество() = 0 тогда

НаборЗаписей. Добавить();

ЗаписьИзНабора = НаборЗаписей[0];

ЗаписьИзНабора. ФизЛицо = ФизЛицоПриОткрытии;

ЗаписьИзНабора. Период = ПериодПриОткрытии;

КонецЕсли;

ЗаписьИзНабора= НаборЗаписей[0];

СемейноеПоложение = ЗаписьИзНабора. СемейноеПоложение;

Период = ?(НЕ ЗначениеЗаполнено(ЗаписьИзНабора. Период), '19000101', ЗаписьИзНабора. Период);

ФизЛицо = ЗаписьИзНабора. Физлицо;

Если НЕ ЗначениеЗаполнено(ФизЛицо) тогда

ИндКнопки = ЭлементыФормы. ОсновныеДействияФормы. Кнопки. Индекс(ЭлементыФормы. ОсновныеДействияФормы. Кнопки. КнопкаИстория);

ЭлементыФормы. ОсновныеДействияФормы. Кнопки. Удалить(ИндКнопки);

ИндКнопки = ЭлементыФормы. ОсновныеДействияФормы. Кнопки. Индекс(ЭлементыФормы. ОсновныеДействияФормы. Кнопки. РазделительИстория);

ЭлементыФормы. ОсновныеДействияФормы. Кнопки. Удалить(ИндКнопки);

КонецЕсли;

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

Процедура КнопкаИсторияНажатие(Элемент)

ФормаРегистра = РегистрыСведений. СемейноеПоложение. ПолучитьФормуСписка();

ФормаРегистра. РегистрСведенийСписок. Отбор. ФизЛицо. Значение = ФизЛицо;

ФормаРегистра. РегистрСведенийСписок. Отбор. ФизЛицо. ВидСравнения = ВидСравнения. Равно;

ФормаРегистра. РегистрСведенийСписок. Отбор. ФизЛицо. Использование = Истина;

ФормаРегистра. ЭлементыФормы. РегистрСведенийСписок. НачальноеОтображениеСписка = НачальноеОтображениеСписка. Конец;

ФормаРегистра. Открыть();

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

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)

Если Модифицированность Тогда

ОтветНаВопрос = Вопрос("Данные были изменены. Сохранить изменения?", РежимДиалогаВопрос. ДаНетОтмена);

Если ОтветНаВопрос = КодВозвратаДиалога. Да Тогда

ЗаписатьИзменения();

ИначеЕсли ОтветНаВопрос = КодВозвратаДиалога. Отмена Тогда

Отказ = Истина;

КонецЕсли;

КонецЕсли;

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

ОбщаяФорма. ФормаРедактированияТекста. Форма. Модуль

Процедура ОсновныеДействияФормыОК(Кнопка)

Закрыть(Истина);

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

Процедура УстановитьРедактируемыйТекст(ИсходныйТекст) Экспорт

Если ТипЗнч("ИсходныйТекст") = Тип("Строка") Тогда

ЭлементыФормы. ПолеТекстовогоДокументаДляРедактирования. УстановитьТекст(ИсходныйТекст);

Иначе

ЭлементыФормы. ПолеТекстовогоДокументаДляРедактирования. УстановитьТекст("");

КонецЕсли;

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

Функция ПолучитьРедактируемыйТекст() Экспорт

Возврат

ЭлементыФормы. ПолеТекстовогоДокументаДляРедактирования. ПолучитьТекст();

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

ОбщийМодуль. ОбщийМодуль1.Модуль

Функция обПолучитьСписокСотрудников(СписокСостояний, НаДату) Экспорт

// подготовить запрос на выботку тех которые по основному месту работы и временно не работающих

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

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

"ВЫБРАТЬ

Сотрудники. ФизЛицо КАК ФизЛицо,

Сотрудники. Состояние КАК Состояние

ИЗ

РегистрСведений. Сотрудники. СрезПоследних(&;ВыбДата) КАК Сотрудники

ГДЕ

Состояние В (&;СписокСостояний)

Запрос. УстановитьПараметр("СписокСостояний", СписокСостояний);

Запрос. УстановитьПараметр("ВыбДата", НаДату);

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

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

СзРаботающие = Новый СписокЗначений; // сформировать список значений работающих

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

СзРаботающие. Добавить(Выборка. ФизЛицо);

КонецЦикла;

Возврат сзРаботающие;

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

Процедура обУстановитьШиринуКолонокОтчета(Макет, ИскСтрока, Ширина, Формат = "") Экспорт

ТекущаяОбласть = Неопределено;

Пока Истина Цикл

ТекущаяОбласть = Макет. НайтиТекст(ИскСтрока, ТекущаяОбласть, Макет. Область(), Истина, Истина, Истина, Истина);

Если ТекущаяОбласть <> Неопределено Тогда

ТекущаяОбласть. ШиринаКолонки = Ширина;

Если ПустаяСтрока(Формат) = 0 Тогда

ТекущаяОбласть. Формат = Формат;

КонецЕсли;

Иначе

Прервать;

КонецЕсли;

КонецЦикла;

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

Процедура обПолучитьИзОтбораПериод(Построитель, ДатаС, ДатаПо) Экспорт

Для Й = 0 По Построитель. Отбор. Количество()-1 Цикл

ПолеОтбора = Построитель. Отбор[Й];

Если Не ПолеОтбора. Использование Тогда

Продолжить;

КонецЕсли;

Если ПолеОтбора. ПутьКДанным = "НачалоПериода" Тогда

ДатаС = ПолеОтбора. Значение;

КонецЕсли;

Если ПолеОтбора. ПутьКДанным = "КонецПериода" Тогда

ДатаПо = ПолеОтбора. Значение;

КонецЕсли;

КонецЦикла;

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

Функция обСохранитьНастройки(Настройки) Экспорт

ИмяФайла = "";

ИмяПути = КаталогВременныхФайлов();

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла. Сохранение);

Диалог. ПолноеИмяФайла = ИмяФайла;

Диалог. Каталог = ИмяПути;

Диалог. Заголовок = "Укажите файл для хранения настроек";

Диалог. Фильтр = "Файлы настроек (*.lst)|*.lst|Все файлы (*.*)|*.*";

Диалог. Расширение = "lst";

Если Диалог. Выбрать() Тогда

ИмяФайла = Диалог. ПолноеИмяФайла;

ИмяПути = Диалог. Каталог;

ЗначениеВФайл(ИмяФайла, Настройки);

КонецЕсли;

Возврат ИмяФайла;

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

// получить настройки построителя отчета из файла

Функция обВосстановитьНастройки() Экспорт

Перем Настройки;

Настройки = Неопределено;

ИмяФайла = "";

ИмяПути = КаталогВременныхФайлов();

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла. Открытие);

Диалог. ПроверятьСуществованиеФайла = Истина;

Диалог. ПолноеИмяФайла = ИмяФайла;

Диалог. Каталог = ИмяПути;

Диалог. Заголовок = "Укажите файл для хранения настроек";

Диалог. Фильтр = "Файлы настроек (*.lst)|*.lst|Все файлы (*.*)|*.*";

Диалог. Расширение = "lst";

Если Диалог. Выбрать() Тогда

ИмяФайла = Диалог. ПолноеИмяФайла;

ИмяПути = Диалог. Каталог;

Настройки = ЗначениеИзФайла(ИмяФайла);

КонецЕсли;

Возврат Настройки;

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

ОбщийМодуль. УниверсальныеМеханизмы. Модуль

// Выводит сообщение об ошибке и выставляет параметр Отказ в "Истина".

// В случае работы на клиенте или на сервере выводит в окно сообщений,

// в случае внешнего соединения вызывает исключение.

// Параметры:

// ТекстСообщения - строка, текст сообщения.

// Отказ - булево, признак отказа (необязательный).

Процедура СообщитьОбОшибке(ТекстСообщения, Отказ = Ложь, Заголовок = "", Статус = Неопределено) Экспорт

Если Статус = Неопределено Тогда

Статус = СтатусСообщения. Важное;

КонецЕсли;

НачалоСлужебногоСообщения = Найти(ТекстСообщения, "{");

ОкончаниеСлужебногоСообщения = Найти(ТекстСообщения, "}:");

Если ОкончаниеСлужебногоСообщения > 0 И НачалоСлужебногоСообщения > 0 Тогда

ТекстСообщения = Лев(ТекстСообщения, (НачалоСлужебногоСообщения - 1)) +

Сред(ТекстСообщения, (ОкончаниеСлужебногоСообщения + 2));

КонецЕсли;

Отказ = Истина;

#Если ВнешнееСоединение Тогда

Если ЗначениеЗаполнено(Заголовок) Тогда

ТекстСообщения = Заголовок + Символы. ПС + ТекстСообщения;

Заголовок = "";

КонецЕсли;

ВызватьИсключение (ТекстСообщения);

#Иначе

Если ЗначениеЗаполнено(Заголовок) Тогда

Сообщить(Заголовок);

Заголовок = "";

КонецЕсли;

Сообщить(ТекстСообщения, Статус);

#КонецЕсли

КонецПроцедуры // СообщитьОбОшибке()

// Формирует имя каталога для сохранения/чтения файлов. Для различных типов объектов возможны

// различные алгоритмы определения каталога.

//

// Параметры

// ОбъектФайла - Ссылка на объект данных, для которого прикрепляются файлы.

//

// Возвращаемое значение:

// Строка - каталог файлов для указанного объекта и пользователя.

Функция ПолучитьИмяКаталога() Экспорт

РабочийКаталог = КаталогВременныхФайлов();

// Так как при различных указаниях рабочего каталога возможно наличие или отсутствие

// последнего слеша, приведем строку каталога к унифицированному виду - без слеша на конце.

Если Прав(РабочийКаталог, 1) = "" Тогда

РабочийКаталог = Лев(РабочийКаталог, СтрДлина(РабочийКаталог) - 1);

КонецЕсли;

Возврат РабочийКаталог;

КонецФункции // ПолучитьИмяКаталога()

// Проверяет наличие каталога на диске и предлагает создать, если каталога не существует.

//

// Параметры

// ИмяКаталога - Строка, содержащая путь к каталогу файла на диске.

//

// Возвращаемое значение:

// Булево - Истина, если каталог существует или создан, Ложь, если каталога нет.

//

Функция ПроверитьСуществованиеКаталога(ИмяКаталога) Экспорт

КаталогНаДиске = Новый Файл(ИмяКаталога);

Если КаталогНаДиске. Существует() Тогда

Возврат Истина;

Иначе

Ответ = Вопрос("Указанный каталог не существует. Создать каталог?", РежимДиалогаВопрос. ДаНет);

Если Ответ = КодВозвратаДиалога. Да Тогда

СоздатьКаталог(ИмяКаталога);

Возврат Истина;

Иначе

Возврат Ложь;

КонецЕсли;

КонецЕсли;

КонецФункции // ПроверитьСуществованиеКаталога()

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

// Параметры

// Нет.

// Возвращаемое значение:

// Строка - фильтр по типам файлов для диалога выбора картинки.

// функция возвращает часть строки после последнего встреченного символа в строке

Функция ПолучитьЧастьСтрокиОтделеннойСимволом(Знач ИсходнаяСтрока, Знач СимволПоиска)

ПозицияСимвола = СтрДлина(ИсходнаяСтрока);

Пока ПозицияСимвола >= 1 Цикл

Если Сред(ИсходнаяСтрока, ПозицияСимвола, 1) = СимволПоиска Тогда

Возврат Сред(ИсходнаяСтрока, ПозицияСимвола + 1);

КонецЕсли;

ПозицияСимвола = ПозицияСимвола - 1;

КонецЦикла;

Возврат "";

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

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

//

// Параметры

// ИмяФайла - Строка, содержащая имя файла, неважно с именем каталога или без.

//

// Возвращаемое значение:

// Строка - расширение файла.

//

Функция ПолучитьРасширениеФайла(Знач ИмяФайла) Экспорт

Расширение = ПолучитьЧастьСтрокиОтделеннойСимволом(ИмяФайла, ".");

Возврат Расширение;

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

Функция ЗначениеНеЗаполнено(Значение) Экспорт

Результат = Ложь;

ТипЗначения = ТипЗнч(Значение);

// Сначала примитивные типы

Если Значение = Неопределено Тогда

Результат = Истина;

ИначеЕсли Значение = NULL Тогда

Результат = Истина;

ИначеЕсли ТипЗначения = Тип("Строка") Тогда

Если СокрЛП(Значение) = "" Тогда

Результат = Истина;

КонецЕсли;

ИначеЕсли ТипЗначения = Тип("Число") Тогда

Если Значение = 0 Тогда

Результат = Истина;

КонецЕсли;

ИначеЕсли ТипЗначения = Тип("Дата") Тогда

Если Значение = Дата('00010101') Тогда

Результат = Истина;

КонецЕсли;

ИначеЕсли ТипЗначения = Тип("Булево") Тогда

Результат = Ложь; // Булево будем считать не пустым

//Отдельное определение, так как конструкторов данного типа не существует

ИначеЕсли ТипЗначения = Тип("РежимПроведенияДокумента") Тогда

Если Значение = РежимПроведенияДокумента. Неоперативный или Значение = РежимПроведенияДокумента. Оперативный тогда

Результат = Ложь;

КонецЕсли;

// Для остальных будем считать значение пустым, если оно равно

// дефолтному значению своего типа

Иначе

Попытка

Если Значение = Новый(ТипЗначения) Тогда

Результат = Истина;

КонецЕсли;

Исключение

Результат = Ложь;

КонецПопытки;

КонецЕсли;

Возврат Результат;

КонецФункции // ЗначениеНеЗаполнено()

// Функция спрашивает пользователя записать ли объект, или нет, если он новый

// Параметры

// ФормаОбъекта - Форма объекта, из которой пытаются произвести действия

//

// Возвращаемое значение:

// Булево - Объект записан или нет

//

Функция ЗаписатьНовыйОбъектВФорме(ФормаОбъекта) Экспорт

Если ФормаОбъекта. ЭтоНовый() Тогда

Если Документы. ТипВсеСсылки().СодержитТип(ТипЗнч(ФормаОбъекта. ЭтотОбъект. Ссылка)) Тогда

ТекстВопроса = "Для выполнения данной операции необходимо записать документ. Записать?";

Иначе // Справочник

ТекстВопроса = "Для выполнения данной операции необходимо записать элемент. Записать?";

КонецЕсли;

Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос. ДаНет);

Если Ответ <> КодВозвратаДиалога. Да Тогда

Возврат Ложь;

Иначе

Попытка

Возврат ФормаОбъекта. ЗаписатьВФорме();

Исключение

Сообщить(СформироватьТекстСообщения(ОписаниеОшибки()));

Возврат Ложь;

КонецПопытки;

КонецЕсли;

Иначе

Возврат Истина;

КонецЕсли;

КонецФункции // ЗаписатьНовыйОбъектВФорме()

// Функция убирает из текста сообщения слущебную информацию

// Параметры

// ТекстСообщения, Строка, исходный текст сообщения//

// Возвращаемое значение:

// Строка

Функция СформироватьТекстСообщения(Знач ТекстСообщения) Экспорт

НачалоСлужебногоСообщения = Найти(ТекстСообщения, "{");

ОкончаниеСлужебногоСообщения = Найти(ТекстСообщения, "}:");

Если ОкончаниеСлужебногоСообщения > 0

И НачалоСлужебногоСообщения > 0

И НачалоСлужебногоСообщения < ОкончаниеСлужебногоСообщения Тогда

ТекстСообщения = Лев(ТекстСообщения, (НачалоСлужебногоСообщения - 1)) +

Сред(ТекстСообщения, (ОкончаниеСлужебногоСообщения + 2));

КонецЕсли;

Возврат СокрЛП(ТекстСообщения);

КонецФункции // ()

// Функция определяет, есть ли у объекта элементы в хранилище дополнительной информации

//

// Параметры

// Объект - СправочникСсылка, ДокументСсылка, объект для которого определяем наличие файлов

//

// Возвращаемое значение:

// Булево

//

Функция ЕстьДополнительнаяИнформация(Объект, ИмяСправочника = "ХранилищеДополнительнойИнформации") Экспорт

ЗначениеНайдено = Ложь;

Если ЗначениеЗаполнено(Объект) Тогда

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

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

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

ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1

ХранилищеДополнительнойИнформации. Ссылка,

ХранилищеДополнительнойИнформации. Объект

ИЗ

Справочник." + ИмяСправочника + " КАК ХранилищеДополнительнойИнформации

ГДЕ

ХранилищеДополнительнойИнформации. Объект = &;Объект

";

ЗначениеНайдено = НЕ Запрос. Выполнить().Пустой();

КонецЕсли;

Возврат ЗначениеНайдено;

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

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

//

// Параметры

// ОбъектФайла - Ссылка на объект данных, для которого прикрепляются файлы.

// КнопкаОткрытияФайлов - Кнопка тулбара, по нажатию которой открывается

// форма списка файлов и изображений.

//

Процедура ПолучитьКартинкуКнопкиОткрытияФайлов(ОбъектФайла, СписокКнопокОткрытияФайлов) Экспорт

КартинкаКнопки = ?(ЕстьДополнительнаяИнформация(ОбъектФайла), БиблиотекаКартинок. ТолькоСкрепка, БиблиотекаКартинок. НевидимаяСкрепка);

Для каждого КнопкаОткрытияФайлов Из СписокКнопокОткрытияФайлов Цикл

КнопкаОткрытияФайлов. Значение. Отображение = ОтображениеКнопкиКоманднойПанели. НадписьКартинка;

КнопкаОткрытияФайлов. Значение. Картинка = КартинкаКнопки;

КонецЦикла;

КонецПроцедуры // ПолучитьКартинкуКнопкиОткрытияФайлов()

// Процедура открывает форму файлов и изображений по объекту отбора

//

Процедура ОткрытьФормуСпискаФайловИИзображений(СтруктураДляСпискаИзображений, СтруктураДляСпискаДополнительныхФайлов, ОбязательныеОтборы, ФормаВладелец, ИмяСправочника = "ХранилищеДополнительнойИнформации") Экспорт

ФормаФайлов = Справочники[ИмяСправочника].ПолучитьФорму("ФормаСпискаФайловИИзображений", ФормаВладелец);

// Изображения

Если СтруктураДляСпискаИзображений. Свойство("ОтборОбъектИспользование") Тогда

ФормаФайлов. Изображения. Отбор. Объект. Использование = СтруктураДляСпискаИзображений. ОтборОбъектИспользование;

ФормаФайлов. Изображения. Отбор. Объект. Значение = СтруктураДляСпискаИзображений. ОтборОбъектЗначение;

КонецЕсли;

Если СтруктураДляСпискаИзображений. Свойство("ДоступностьОтбораОбъекта") Тогда

ФормаФайлов. ЭлементыФормы. Изображения. НастройкаОтбора. Объект. Доступность = СтруктураДляСпискаИзображений. ДоступностьОтбораОбъекта;

КонецЕсли;

Если СтруктураДляСпискаИзображений. Свойство("ВидимостьКолонкиОбъекта") Тогда

ФормаФайлов. ЭлементыФормы. Изображения. Колонки. Объект. Видимость = СтруктураДляСпискаИзображений. ВидимостьКолонкиОбъекта;

КонецЕсли;

// Дополнительные файлы

Если СтруктураДляСпискаДополнительныхФайлов. Свойство("ОтборОбъектИспользование") Тогда

ФормаФайлов. ДополнительныеФайлы. Отбор. Объект. Использование = СтруктураДляСпискаДополнительныхФайлов. ОтборОбъектИспользование;

ФормаФайлов. ДополнительныеФайлы. Отбор. Объект. Значение = СтруктураДляСпискаДополнительныхФайлов. ОтборОбъектЗначение;

КонецЕсли;

Если СтруктураДляСпискаДополнительныхФайлов. Свойство("ДоступностьОтбораОбъекта") Тогда

ФормаФайлов. ЭлементыФормы. ДополнительныеФайлы. НастройкаОтбора. Объект. Доступность = СтруктураДляСпискаДополнительныхФайлов. ДоступностьОтбораОбъекта;

КонецЕсли;

Если СтруктураДляСпискаДополнительныхФайлов. Свойство("ВидимостьКолонкиОбъекта") Тогда

ФормаФайлов. ЭлементыФормы. ДополнительныеФайлы. Колонки. Объект. Видимость = СтруктураДляСпискаДополнительныхФайлов. ВидимостьКолонкиОбъекта;

КонецЕсли;

ФормаФайлов. ОбязательныеОтборы = ОбязательныеОтборы;

Если СтруктураДляСпискаИзображений. Свойство("ОтборОбъектИспользование") И СтруктураДляСпискаИзображений. Свойство("ОтборОбъектИспользование") Тогда

Если СтруктураДляСпискаИзображений. ОтборОбъектЗначение = СтруктураДляСпискаДополнительныхФайлов. ОтборОбъектЗначение Тогда

ФормаФайлов. Заголовок = "Хранилище дополнительной информации (" + СокрЛП(СтруктураДляСпискаИзображений. ОтборОбъектЗначение) + ")";

КонецЕсли;

КонецЕсли;

ФормаФайлов. Открыть();

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

// Сохранение на диск отмеченных файлов объекта.

//

// Параметры

// ОбъектФайла - Ссылка на объект данных, для которого прикрепляются файлы.

// ВыделенныеСтроки - ВыделенныеСтроки табличного поля со справочником дополнительной

// информации.

//

Процедура СохранитьФайлы(ОбъектФайла, ВыделенныеСтроки, ИмяКаталога = Неопределено, ИмяСправочника = "ХранилищеДополнительнойИнформации") Экспорт

Если ВыделенныеСтроки. Количество() = 0 Тогда

Возврат;

КонецЕсли;

ФормаСохраненияФайлов = Справочники[ИмяСправочника].ПолучитьФорму("ФормаСохраненияФайлов");

ФормаСохраненияФайлов. ИмяКаталога = ИмяКаталога;

ФормаСохраненияФайлов. ТолькоЧтение = Ложь;

Если ИмяКаталога = Неопределено Тогда

ИмяКаталога = ПолучитьИмяКаталога();

ФормаСохраненияФайлов. ОткрытьКаталог = Истина;

Иначе

ФормаСохраненияФайлов. ОткрытьКаталог = Ложь;

КонецЕсли;

СтруктураПараметров = ФормаСохраненияФайлов. ОткрытьМодально();

Если СтруктураПараметров = Неопределено Тогда

Возврат;

КонецЕсли;

Если Не ПроверитьСуществованиеКаталога(СтруктураПараметров. ИмяКаталога) Тогда

Возврат;

КонецЕсли;

СпособПерезаписи = "";

Для каждого СсылкаФайл из ВыделенныеСтроки Цикл

Состояние("Сохраняется файл: " + СсылкаФайл. ИмяФайла);

ИмяФайла = ПолучитьИмяФайла(СтруктураПараметров. ИмяКаталога, СсылкаФайл. ИмяФайла);

СохранитьФайлНаДиске(СсылкаФайл. Хранилище, ИмяФайла, СтруктураПараметров. ТолькоЧтение, СпособПерезаписи);

Если СпособПерезаписи = Неопределено Тогда

Прервать;

КонецЕсли;

КонецЦикла;

Если СтруктураПараметров. ОткрытьКаталог Тогда

ЗапуститьПриложение(СтруктураПараметров. ИмяКаталога);

КонецЕсли;

КонецПроцедуры // СохранитьФайлы()

// Сохраняет файл на диске.

//

// Параметры

// Хранилище - ХранилищеЗначения, которое содержит объект типа

// ДвоичныеДанные с файлом для записи на диск.

// ИмяФайла - Строка, содержащая полное имя файла.

// ТолькоЧтение - Булево, признак установки записываемому файлу атрибута ТолькоЧтение.

// СпособПерезаписи - Строка. Параметр определеляет способ перезаписи существующих

// файлов на диске. В зависимости от пришедшего параметра выдается или

// не выдается запрос на перезапись файлов. Может устанавливаться в теле

// функции, если это необходимо. Принимаемые значения:

// "" (пустая строка) - это означает, что диалог еще ни разу не задавался

// и при наличии существующего файла будет выдан диалог запроса перезаписи.

// ДА - предыдущий файл был перезаписан, но перезапись текущего надо

// запросить снова

// НЕТ - предыдущий файл не был перезаписан, но перезапись текущего надо

// запросить снова

// ДАДЛЯВСЕХ - предыдущий файл был перезаписан, и все последующие тоже

// надо перезаписывать.

// НЕТДЛЯВСЕХ - предыдущий файл не был перезаписан, и все последующие тоже

// не надо перезаписывать.

//

// Возвращаемое значение:

// Булево - Истина, если каталог выбран, Ложь, если нет.

//

Функция СохранитьФайлНаДиске(Хранилище, ИмяФайла, ТолькоЧтение, СпособПерезаписи, ВопросОПерезаписи = Истина, ИмяСправочника = "ХранилищеДополнительнойИнформации") Экспорт

Попытка

ФайлНаДиске = Новый Файл(ИмяФайла);

КаталогНаДиске = Новый Файл(ФайлНаДиске. Путь);

Если Не КаталогНаДиске. Существует() Тогда

СоздатьКаталог(ФайлНаДиске. Путь);

КонецЕсли;

Если ФайлНаДиске. Существует() И ВопросОПерезаписи = Истина Тогда

Если СпособПерезаписи = ""

ИЛИ Врег(СпособПерезаписи) = "ДА"

ИЛИ Врег(СпособПерезаписи) = "НЕТ" Тогда

ФормаЗапросаПерезаписиФайлов = Справочники[ИмяСправочника].ПолучитьФорму("ФормаЗапросаПерезаписиФайлов");

ФормаЗапросаПерезаписиФайлов. ТекстПредупреждения =

"На локальном диске уже существует файл:

|" + ИмяФайла + "

|Перезаписать имеющийся файл?";

СпособПерезаписи = ФормаЗапросаПерезаписиФайлов. ОткрытьМодально();

Если СпособПерезаписи = Неопределено

ИЛИ Врег(СпособПерезаписи) = "НЕТ"

ИЛИ Врег(СпособПерезаписи) = "НЕТДЛЯВСЕХ" Тогда

Возврат Ложь;

КонецЕсли;

ИначеЕсли Врег(СпособПерезаписи) = "НЕТДЛЯВСЕХ" Тогда

Возврат Ложь;

КонецЕсли;

// Если существующему файлу установлено ТолькоЧтение, отменим эту установку.

Если ФайлНаДиске. ПолучитьТолькоЧтение() Тогда

ФайлНаДиске. УстановитьТолькоЧтение(Ложь);

КонецЕсли;

КонецЕсли;

// Остались случаи когда:

// - пользователь ответил Да или ДаДляВсех в текущем диалоге

// - способ перезаписи уже пришел со значением ДаДляВсех

Если ТипЗнч(Хранилище) <> Тип("ДвоичныеДанные") Тогда

ДвоичныеДанные = Хранилище. Получить();

Иначе

ДвоичныеДанные = Хранилище;

КонецЕсли;

ДвоичныеДанные. Записать(ИмяФайла);

ФайлНаДиске. УстановитьТолькоЧтение(ТолькоЧтение);

Исключение

Предупреждение(ОписаниеОшибки());

Возврат Ложь;

КонецПопытки;

Возврат Истина;

КонецФункции // СохранитьФайлНаДиске()

// Сохранение на диск отмеченных файлов объекта и их открытие.

//

// Параметры

// ОбъектФайла - Ссылка на объект данных, для которого прикрепляются файлы.

// ВыделенныеСтроки - ВыделенныеСтроки табличного поля со справочником дополнительной

// информации.

//

Процедура ОткрытьФайлы(ОбъектФайла, ТекущийПользователь, ВыделенныеСтроки = Неопределено, ВопросОПерезаписи = Истина) Экспорт

Если ВыделенныеСтроки = Неопределено Тогда

ИмяКаталога = ПолучитьИмяКаталога();

ТолькоЧтение = Ложь;

СпособПерезаписи = "";

Состояние("Сохраняется файл: " + ОбъектФайла. ИмяФайла);

ИмяФайла = ПолучитьИмяФайла(ИмяКаталога, ОбъектФайла. ИмяФайла);

СохранитьФайлНаДиске(ОбъектФайла. Хранилище, ИмяФайла, Ложь, СпособПерезаписи, ВопросОПерезаписи);

Если СпособПерезаписи = Неопределено Тогда

Возврат;

КонецЕсли;

ОткрытьФайлДополнительнойИнформации(ИмяКаталога, ОбъектФайла. ИмяФайла);

Иначе

Если ВыделенныеСтроки. Количество() = 0 Тогда

Возврат;

КонецЕсли;

ИмяКаталога = ПолучитьИмяКаталога();

ТолькоЧтение = Ложь;

СпособПерезаписи = "";

Для каждого СсылкаФайл из ВыделенныеСтроки Цикл

Состояние("Сохраняется файл: " + СсылкаФайл. ИмяФайла);

ИмяФайла = ПолучитьИмяФайла(ИмяКаталога, СсылкаФайл. ИмяФайла);

СохранитьФайлНаДиске(СсылкаФайл. Хранилище, ИмяФайла, Ложь, СпособПерезаписи, ВопросОПерезаписи);

Если СпособПерезаписи = Неопределено Тогда

Прервать;

КонецЕсли;

ОткрытьФайлДополнительнойИнформации(ИмяКаталога, СсылкаФайл. ИмяФайла);

КонецЦикла;

КонецЕсли;

КонецПроцедуры // ОткрытьФайлы()

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

//

// Параметры

// ОбъектФайла - Ссылка на объект данных, для которого прикрепляются файлы.

// ВидДанных - ПеречислениеСсылка. ВидыДополнительнойИнформацииОбъектов содержащая вид

// дополнительной информации объекта.

//

Процедура ДобавитьФайлы(ОбъектФайла, ТекущийПользователь, ВидДанных = Неопределено, ИмяСправочника = "ХранилищеДополнительнойИнформации") Экспорт

Если Не ОбъектФайла = Неопределено И ОбъектФайла. Пустая() Тогда

Предупреждение("Необходимо записать объект, которому принадлежит файл.");

Возврат;

КонецЕсли;

Диалог = ПолучитьДиалогВыбораФайлов(Истина);

Если Не Диалог. Выбрать() Тогда

Возврат;

КонецЕсли;

Для каждого ПолученноеИмяФайла Из Диалог. ВыбранныеФайлы Цикл

ПолученныйФайл = Новый Файл(ПолученноеИмяФайла);

Состояние("Добавляется файл: " + ПолученныйФайл. Имя);

НачатьТранзакцию();

Отказ = Ложь;

НовыйФайл = Справочники[ИмяСправочника].СоздатьЭлемент();

НовыйФайл. Объект = ОбъектФайла;

НовыйФайл. ИмяФайла = ПолученныйФайл. Имя;

Если ИмяСправочника = "ХранилищеДополнительнойИнформации" Тогда

НовыйФайл. ВидДанных = ВидДанных;

КонецЕсли;

Попытка

НовыйФайл. Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПолученныйФайл. ПолноеИмя), Новый СжатиеДанных());

НовыйФайл. Записать();

Исключение

Предупреждение("Файл: " + ПолученныйФайл. ПолноеИмя + Символы. ПС + ОписаниеОшибки() + Символы. ПС + "Файл не добавлен.");

Отказ = Истина;

КонецПопытки;

Если Отказ Тогда

ОтменитьТранзакцию();

Иначе

ЗафиксироватьТранзакцию();

КонецЕсли;

КонецЦикла;

КонецПроцедуры // ДобавитьФайлы()

// Открывает переданный файл на диске с учетом типа файлов. Файлы, с которыми

// может работать 1С:Предприятие открываются в 1С:Предприятии. Остальные файлы

// пытаются открыться зарегистрированным для них в системе приложением.

//

// Параметры

// ИмяКаталога - Строка, содержащая путь к каталогу файла на диске.

// ИмяФайла - Строка, содержащая имя файла, без имени каталога.

//

Процедура ОткрытьФайлДополнительнойИнформации(ИмяКаталога, ИмяФайла) Экспорт

ПолноеИмяФайла = ПолучитьИмяФайла(ИмяКаталога, ИмяФайла);

РасширениеФайла = Врег(ПолучитьРасширениеФайла(ИмяФайла));

Если РасширениеФайла = "MXL" Тогда

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

ТабличныйДокумент. Прочитать(ПолноеИмяФайла);

ТабличныйДокумент. Показать(ИмяФайла, Лев(ИмяФайла, СтрДлина(ИмяФайла) - 4));

ИначеЕсли РасширениеФайла = "TXT" Тогда

ТекстовыйДокумент = Новый ТекстовыйДокумент;

ТекстовыйДокумент. Прочитать(ПолноеИмяФайла);

ТекстовыйДокумент. Показать(ИмяФайла, Лев(ИмяФайла, СтрДлина(ИмяФайла) - 4));

ИначеЕсли РасширениеФайла = "EPF" Тогда

ВнешняяОбработка = ВнешниеОбработки. Создать(ПолноеИмяФайла);

ВнешняяОбработка. ПолучитьФорму().Открыть();

Иначе

ЗапуститьПриложение(ПолноеИмяФайла);

КонецЕсли;

КонецПроцедуры // ОткрытьФайлДополнительнойИнформации()

// Создает и устанавливает реквизиты диалога выбора фала.

//

// Параметры

// МножественныйВыбор - Булево, признак множественного выбора.

// НачальныйКаталог - Строка, содержащая начальный каталог выбора файла.

//

// Возвращаемое значение:

// ДиалогВыбораФайлов - созданный диалог.

//

Функция ПолучитьДиалогВыбораФайлов(МножественныйВыбор, НачальныйКаталог = "") Экспорт

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла. Открытие);

Диалог. Каталог = НачальныйКаталог;

Диалог. Заголовок = "Выберите файл...";

Диалог. Фильтр = ПолучитьФильтрФайлов();

Диалог. ПредварительныйПросмотр = Истина;

Диалог. ПроверятьСуществованиеФайла = Истина;

Диалог. МножественныйВыбор = МножественныйВыбор;

Возврат Диалог;

КонецФункции // ПолучитьДиалогВыбораФайлов()

// Формирует строку фильтра для диалога выбора файла с типами файлов.

//

// Параметры

// Нет.

//

// Возвращаемое значение:

// Строка - фильтр по типам файлов для диалога выбора файла.

//

Функция ПолучитьФильтрФайлов() Экспорт

Возврат "Все файлы (*.*)|*.*|"

+ "Документ Microsoft Word (*.doc)|*.doc|"

+ "Документ Microsoft Excell (*.xls)|*.xls|"

+ "Документ Microsoft PowerPoint (*.ppt)|*.ppt|"

+ "Документ Microsoft Visio (*.vsd)|*.vsd|"

+ "Письмо электронной почты (*.msg)|*.msg|"

+ "Картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|"

+ "Текстовый документ (*.txt)|*.txt|"

+ "Табличный документ (*.mxl)|*.mxl|";

КонецФункции // ПолучитьФильтрФайлов()

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

// на смену расширения.

//

// Параметры

// ТекущееРасширение - Строка, содержащая текущее расширение файла, до изменения.

// НовоеРасширение - Строка, содержащая новое расширение файла, после изменения.

//

// Возвращаемое значение:

// Булево - Истина, если пользователь запретил изменение расширения, Ложь, если разрешил.

//

Функция НельзяИзменятьРасширение(ТекущееРасширение, НовоеРасширение) Экспорт

Если Не ПустаяСтрока(ТекущееРасширение) И Не НовоеРасширение = ТекущееРасширение Тогда

Ответ = Вопрос("Вы действительно хотите измерить расширение", РежимДиалогаВопрос. ДаНет);

Если Ответ = КодВозвратаДиалога. Да Тогда

Возврат Ложь;

Иначе

Возврат Истина;

КонецЕсли;

Иначе

Возврат Ложь;

КонецЕсли;

КонецФункции // НельзяИзменятьРасширение()

// Получает индекс пиктограммы файла из коллекции пиктограмм в зависимости от расширения файла.

//

// Параметры

// РасширениеФайла - Строка, содержащая расширение файла.

//

// Возвращаемое значение:

// Число - индекс пиктограммы в коллекции.

//

Функция ПолучитьИндексПиктограммыФайла(РасширениеФайла) Экспорт

РасширениеФайла = Врег(РасширениеФайла);

Если Найти(",1CD, CF, CFU, DT,", "," + РасширениеФайла + ",") > 0 Тогда

Возврат 1;

ИначеЕсли "MXL" = РасширениеФайла Тогда

Возврат 2;

ИначеЕсли "TXT" = РасширениеФайла Тогда

Возврат 3;

ИначеЕсли "EPF" = РасширениеФайла Тогда

Возврат 4;

ИначеЕсли Найти(",BMP, DIB, RLE, JPG, JPEG, TIF, GIF, PNG, ICO, WMF, EMF,", "," + РасширениеФайла + ",") > 0 Тогда

Возврат 5;

ИначеЕсли Найти(",HTM, HTML, MHT,", "," + РасширениеФайла + ",") > 0 Тогда

Возврат 6;

ИначеЕсли "DOC" = РасширениеФайла Тогда

Возврат 7;

ИначеЕсли "XLS" = РасширениеФайла Тогда

Возврат 8;

ИначеЕсли "PPT" = РасширениеФайла Тогда

Возврат 9;

ИначеЕсли "VSD" = РасширениеФайла Тогда

Возврат 10;

ИначеЕсли "MPP" = РасширениеФайла Тогда

Возврат 11;

ИначеЕсли "MDB" = РасширениеФайла Тогда

Возврат 12;

ИначеЕсли "XML" = РасширениеФайла Тогда

Возврат 13;

ИначеЕсли "MSG" = РасширениеФайла Тогда

Возврат 14;

ИначеЕсли Найти(",RAR, ZIP, ARJ, CAB,", "," + РасширениеФайла + ",") > 0 Тогда

Возврат 15;

ИначеЕсли Найти(",EXE, COM,,", "," + РасширениеФайла + ",") > 0 Тогда

Возврат 16;

ИначеЕсли "BAT" = РасширениеФайла Тогда

Возврат 17;

Иначе

Возврат 0;

КонецЕсли;

КонецФункции // ПолучитьИндексПиктограммыФайла()

// Составляет полное имя файла из имени каталога и имени файла.

//

// Параметры

// ИмяКаталога - Строка, содержащая путь к каталогу файла на диске.

// ИмяФайла - Строка, содержащая имя файла, без имени каталога.

//

// Возвращаемое значение:

// Строка - полное имя файла с учетом каталога.

//

Функция ПолучитьИмяФайла(ИмяКаталога, ИмяФайла) Экспорт

Если Не ПустаяСтрока(ИмяФайла) Тогда

Возврат ИмяКаталога + ?(Прав(ИмяКаталога, 1) = "", "", "") + ИмяФайла;

Иначе

Возврат ИмяКаталога;

КонецЕсли;

КонецФункции // ПолучитьИмяФайла()

// Процедура полное имя файла разбивает на путь в файлу и имя самого файла

//

// Параметры

// ПолноеИмяФайла - Строка, содержащая полное имя файла на диске.

// ИмяКаталога - Строка, содержащая путь к каталогу файла на диске.

// ИмяФайла - Строка, содержащая имя файла, без имени каталога.

//

Процедура ПолучитьКаталогИИмяФайла(Знач ПолноеИмяФайла, ИмяКаталога, ИмяФайла) Экспорт

// находим последний с конца "" все что до него - это путь, после - имя

НомерПозиции = СтрДлина(ПолноеИмяФайла);

Пока НомерПозиции <> 0 Цикл

Если Сред(ПолноеИмяФайла, НомерПозиции, 1) = "" Тогда

ИмяКаталога = Сред(ПолноеИмяФайла, 1, НомерПозиции - 1);

ИмяФайла = Сред(ПолноеИмяФайла, НомерПозиции + 1);

Возврат;

КонецЕсли;

НомерПозиции = НомерПозиции - 1;

КонецЦикла;

// так и не нашли слешей, значит все - это имя файла

ИмяФайла = ПолноеИмяФайла;

ИмяКаталога = "";

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

// Функция проверяет наличие в строке только цифр

//

// Параметры

// СтрокаПроверки - Строка для проверки только цифр

//

// Возвращаемое значение:

// Булево

Функция ЕстьНеЦифры(Знач СтрокаПроверки) Экспорт

СписокКодовЧисел = Новый СписокЗначений;

Для а = 48 По 57 Цикл

СписокКодовЧисел. Добавить(а);

КонецЦикла;

СтрокаПроверки = СокрЛП(СтрокаПроверки);

Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда

Возврат Истина;

Иначе

Для а = 1 По СтрДлина(СтрокаПроверки) Цикл

Если СписокКодовЧисел. НайтиПоЗначению(КодСимвола(Сред(СтрокаПроверки, а, 1))) = Неопределено Тогда

Возврат Истина;

КонецЕсли;

КонецЦикла;

КонецЕсли;

Возврат Ложь;

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

// Функция проверяет наличие в строке только цифр

//

// Параметры

// СтрокаПроверки - Строка для проверки только цифр

//

// Возвращаемое значение:

// Булево

Функция ТолькоЦифрыВСтроке(Знач СтрокаПроверки, УчитыватьЛидирующиеНули = Истина, УчитыватьПробелы = Истина) Экспорт

Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда

Возврат Ложь;

КонецЕсли;

Если ЗначениеНеЗаполнено(СтрокаПроверки) Тогда

Возврат Истина;

КонецЕсли;

Если НЕ УчитыватьПробелы Тогда

СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", "");

КонецЕсли;

Если НЕ УчитыватьЛидирующиеНули Тогда

НомерПервойЦифры = 0;

Для а = 1 По СтрДлина(СтрокаПроверки) Цикл

НомерПервойЦифры = НомерПервойЦифры + 1;

КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1));

Если КодСимвола <> 48 Тогда

Прервать;

КонецЕсли;

КонецЦикла;

СтрокаПроверки = Сред(СтрокаПроверки, НомерПервойЦифры);

КонецЕсли;

Для а = 1 По СтрДлина(СтрокаПроверки) Цикл

КодСимвола = КодСимвола(Сред(СтрокаПроверки, а, 1));

Если НЕ (КодСимвола >= 48 И КодСимвола <= 57) Тогда

Возврат Ложь;

КонецЕсли;

КонецЦикла;

Возврат Истина;

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

Отчет. ВедомостьПоБанку. Форма. ФормаОтчета. Форма. Модуль

Процедура ОформитьОтчет()

// установить выбранное пользователет стандартное оформление

Если ЭлементыФормы. ПолеВыбораСтОформление. Значение <> Неопределено Тогда

Построитель. МакетОформления = ПолучитьМакетОформления(ЭлементыФормы. ПолеВыбораСтОформление. Значение);

КонецЕсли;

// получить макет по умолчанию

Построитель. Макет = Неопределено;

Макет = Построитель. Макет;

ОбластьЗаголовка = Макет. Область("Заголовок");

Макет. Область("R"+Строка(ОбластьЗаголовка. Верх+0)+"C1").Текст = "Дата и время печати:" + ТекущаяДата();

// вывести в заголовок период

ДатаС = 0; ДатаПо = 0;

ОбПолучитьИзОтбораПериод(Построитель, ДатаС, ДатаПо);

Макет. Область("R"+Строка(ОбластьЗаголовка. Верх+1)+"C2").Текст = "Ведомость по банку с " + Строка(ДатаС) + " по " + Строка(ДатаПо);

Настройки = "";

Для Й = 0 По Построитель. Отбор. Количество()-1 Цикл

ПолеОтбора = Построитель. Отбор[Й];

Если Не ПолеОтбора. Использование Тогда

Продолжить;

КонецЕсли;

Если ПолеОтбора. ПутьКДанным = "НачалоПериода" Тогда

Продолжить;

КонецЕсли;

Если ПолеОтбора. ПутьКДанным = "КонецПериода" Тогда

Продолжить

КонецЕсли;

Настройка = ПолеОтбора. Представление + " " + ПолеОтбора. ВидСравнения + " " + ПолеОтбора. Значение;

Настройки = Настройки + Настройка + "; ";

КонецЦикла;

Если Не ПустаяСтрока(Настройки) Тогда

Макет. Область("R"+Строка(ОбластьЗаголовка. Верх+2)+"C2").Текст = "Настройки: "+Настройки;

КонецЕсли;

// установить ширину колонок

ОбУстановитьШиринуКолонокОтчета(Макет, "НачОст", 12);

ОбУстановитьШиринуКолонокОтчета(Макет, "Приход", 12);

ОбУстановитьШиринуКолонокОтчета(Макет, "Расход", 12);

ОбУстановитьШиринуКолонокОтчета(Макет, "КонОст", 12);

ОбУстановитьШиринуКолонокОтчета(Макет, "Фирма", 20);

ОбУстановитьШиринуКолонокОтчета(Макет, "Склад", 20);

ОбУстановитьШиринуКолонокОтчета(Макет, "Номенклатура", 25);

ОбУстановитьШиринуКолонокОтчета(Макет, "Регистратор", 30);

// установить макет

Построитель. Макет = Макет;

// тип расмещения измерений-строк

Если ТипРпазмещенияСтрок = 0 Тогда

Построитель. РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений. Отдельно;

ИначеЕсли ТипРпазмещенияСтрок = 1 Тогда

Построитель. РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений. Вместе;

ИначеЕсли ТипРпазмещенияСтрок = 2 Тогда

Построитель. РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений. ОтдельноИТолькоВИтогах;

КонецЕсли;

// тип размещения измерений-колонок

Если ТипРпазмещенияКолонок = 0 Тогда

Построитель. РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений. Отдельно;

ИначеЕсли ТипРпазмещенияКолонок = 1 Тогда

Построитель. РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений. Вместе;

ИначеЕсли ТипРпазмещенияКолонок = 2 Тогда

Построитель. РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений. ОтдельноИТолькоВИтогах;

КонецЕсли;

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

Процедура КнопкаСформироватьНажатие(Кнопка)

Построитель. ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета. ЗначенияГруппировок;

ОформитьОтчет();// все оформление построителя

Построитель. Выполнить();// выполнить запрос

// выводим в ТАБ. ДОКУМЕНТ

ТабДок = ЭлементыФормы. ПолеТабличногоДокументаРезультат;

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

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

ТабДок. ТолькоПросмотр = Истина;

// выводим в ТАБ. ДОКУМЕНТ

Элементыформы. Панель1.ТекущаяСтраница = Элементыформы. Панель1.Страницы[1]; // открыть закладку с отчетом

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

Процедура ПриОткрытии()

СформироватьТекстПостроителя();

ОбЗаполнитьВариантыСтандартногоОформления(ЭлементыФормы. ПолеВыбораСтОформление. СписокВыбора); // заполнить варианты стандартного оформления

ПолеВыбораСтОформление = СтандартноеОформление. Камень; // стандартное оформление по умолчанию

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

Процедура СформироватьТекстПостроителя()

Текст =

"ВЫБРАТЬ

БанкОстаткиИОбороты. Фирма КАК Фирма,

БанкОстаткиИОбороты. БанковскийСчет КАК Счет,

БанкОстаткиИОбороты. Регистратор КАК Регистратор,

НачалоПериода(Регистратор. Дата, Неделя)КАК Неделя,

НачалоПериода(Регистратор. Дата, Месяц)КАК Месяц,

НачалоПериода(Регистратор. Дата, Квартал)КАК Квартал,

НачалоПериода(Регистратор. Дата, Год)КАК Год,

БанкОстаткиИОбороты. СуммаНачальныйОстаток КАК НачОст,

БанкОстаткиИОбороты. СуммаПриход КАК Приход,

БанкОстаткиИОбороты. СуммаРасход КАК Расход,

БанкОстаткиИОбороты. СуммаКонечныйОстаток КАК КонОст

ИЗ

РегистрНакопления. Банк. ОстаткиИОбороты(,,Регистратор) КАК БанкОстаткиИОбороты

{ИТОГИ ПО Фирма, Счет, Регистратор, Неделя, Месяц, Квартал, Год}

|ИТОГИ

СУММА(СуммаНачальныйОстаток),

СУММА(СуммаПриход),

СУММА(СуммаКонечныйОстаток)

ПО

ОБЩИЕ

";

Построитель. Текст = Текст;

Построитель. ЗаполнитьНастройки(); // автоматически заполнить настройки

// заполняем отбор

Отбор = Построитель. Отбор;

ДоступноеПоле = Построитель. ДоступныеПоля. Найти("НачалоПериода");

Если ДоступноеПоле <> Неопределено Тогда

Если Отбор. Найти(ДоступноеПоле. Имя) = Неопределено Тогда

Отбор. Добавить(ДоступноеПоле. Имя);

КонецЕсли;

Отбор[ДоступноеПоле. Имя].Использование = Истина;

Отбор[ДоступноеПоле. Имя].Значение = НачалоМесяца(ТекущаяДата());

Отбор[ДоступноеПоле. Имя].ВидСравнения = ВидСравнения. Равно;

КонецЕсли;

ДоступноеПоле = Построитель. ДоступныеПоля. Найти("КонецПериода");

Если ДоступноеПоле <> Неопределено Тогда

Если Отбор. Найти(ДоступноеПоле. Имя) = Неопределено Тогда

Отбор. Добавить(ДоступноеПоле. Имя);

КонецЕсли;

Отбор[ДоступноеПоле. Имя].Использование = Истина;

Отбор[ДоступноеПоле. Имя].Значение = КонецМесяца(ТекущаяДата());

Отбор[ДоступноеПоле. Имя].ВидСравнения = ВидСравнения. Равно;

КонецЕсли;

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

Процедура ОсновныеДействияФормыСохранить(Кнопка)

Настройки = Построитель. ПолучитьНастройки(Истина, Истина, Истина, Истина);

ОбСохранитьНастройки(Настройки);

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

Процедура ОсновныеДействияФормыВосстановить(Кнопка)

Настройки = обВосстановитьНастройки();

Если Настройки <> Неопределено Тогда

Построитель. УстановитьНастройки(Настройки);

КонецЕсли;

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

Отчет. ВедомостьПоКассе. Форма. ФормаОтчета. Форма. Модуль

Процедура ОформитьОтчет()

// установить выбранное пользователет стандартное оформление

Если ЭлементыФормы. ПолеВыбораСтОформление. Значение <> Неопределено Тогда

Построитель. МакетОформления = ПолучитьМакетОформления(ЭлементыФормы. ПолеВыбораСтОформление. Значение);

КонецЕсли;

// получить макет по умолчанию

Построитель. Макет = Неопределено;

Макет = Построитель. Макет;

ОбластьЗаголовка = Макет. Область("Заголовок");

Макет. Область("R"+Строка(ОбластьЗаголовка. Верх+0)+"C1").Текст = "Дата и время печати:" + ТекущаяДата();

// вывести в заголовок период

ДатаС = 0; ДатаПо = 0;

ОбПолучитьИзОтбораПериод(Построитель, ДатаС, ДатаПо);

Макет. Область("R"+Строка(ОбластьЗаголовка. Верх+1)+"C2").Текст = "Ведомость по кассе с " + Строка(ДатаС) + " по " + Строка(ДатаПо);

Настройки = "";

Для Й = 0 По Построитель. Отбор. Количество()-1 Цикл

ПолеОтбора = Построитель. Отбор[Й];

Если Не ПолеОтбора. Использование Тогда

Продолжить;

КонецЕсли;

Если ПолеОтбора. ПутьКДанным = "НачалоПериода" Тогда

Продолжить;

КонецЕсли;

Если ПолеОтбора. ПутьКДанным = "КонецПериода" Тогда

Продолжить

КонецЕсли;

Настройка = ПолеОтбора. Представление + " " + ПолеОтбора. ВидСравнения + " " + ПолеОтбора. Значение;

Настройки = Настройки + Настройка + "; ";

КонецЦикла;

Если Не ПустаяСтрока(Настройки) Тогда

Макет. Область("R"+Строка(ОбластьЗаголовка. Верх+2)+"C2").Текст = "Настройки: "+Настройки;

КонецЕсли;

// установить ширину колонок

ОбУстановитьШиринуКолонокОтчета(Макет, "НачОст", 12);

ОбУстановитьШиринуКолонокОтчета(Макет, "Приход", 12);

ОбУстановитьШиринуКолонокОтчета(Макет, "Расход", 12);

ОбУстановитьШиринуКолонокОтчета(Макет, "КонОст", 12);

ОбУстановитьШиринуКолонокОтчета(Макет, "Фирма", 20);

ОбУстановитьШиринуКолонокОтчета(Макет, "Склад", 20);

ОбУстановитьШиринуКолонокОтчета(Макет, "Номенклатура", 25);

ОбУстановитьШиринуКолонокОтчета(Макет, "Регистратор", 30);

// установить макет

Построитель. Макет = Макет;

// тип расмещения измерений-строк

Если ТипРпазмещенияСтрок = 0 Тогда

Построитель. РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений. Отдельно;

ИначеЕсли ТипРпазмещенияСтрок = 1 Тогда

Построитель. РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений. Вместе;

ИначеЕсли ТипРпазмещенияСтрок = 2 Тогда

Построитель. РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений. ОтдельноИТолькоВИтогах;

КонецЕсли;

// тип размещения измерений-колонок

Если ТипРпазмещенияКолонок = 0 Тогда

Построитель. РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений. Отдельно;

ИначеЕсли ТипРпазмещенияКолонок = 1 Тогда

Построитель. РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений. Вместе;

ИначеЕсли ТипРпазмещенияКолонок = 2 Тогда

Построитель. РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений. ОтдельноИТолькоВИтогах;

КонецЕсли;

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

Процедура КнопкаСформироватьНажатие(Кнопка)

Построитель. ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета. ЗначенияГруппировок;

ОформитьОтчет();// все оформление построителя

Построитель. Выполнить();// выполнить запрос

// выводим в ТАБ. ДОКУМЕНТ

ТабДок = ЭлементыФормы. ПолеТабличногоДокументаРезультат;

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

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

ТабДок. ТолькоПросмотр = Истина;

// выводим в ТАБ. ДОКУМЕНТ

Элементыформы. Панель1.ТекущаяСтраница = Элементыформы. Панель1.Страницы[1]; // открыть закладку с отчетом

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

Процедура ПриОткрытии()

СформироватьТекстПостроителя();

ОбЗаполнитьВариантыСтандартногоОформления(ЭлементыФормы. ПолеВыбораСтОформление. СписокВыбора); // заполнить варианты стандартного оформления

ПолеВыбораСтОформление = СтандартноеОформление. Камень; // стандартное оформление по умолчанию

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

Процедура СформироватьТекстПостроителя()

Текст =

"ВЫБРАТЬ

КассаОстаткиИОбороты. Фирма КАК Фирма,

КассаОстаткиИОбороты. Касса КАК Касса,

КассаОстаткиИОбороты. Регистратор КАК Регистратор,

НачалоПериода(Регистратор. Дата, Неделя)КАК Неделя,

НачалоПериода(Регистратор. Дата, Месяц)КАК Месяц,

НачалоПериода(Регистратор. Дата, Квартал)КАК Квартал,

НачалоПериода(Регистратор. Дата, Год)КАК Год,

КассаОстаткиИОбороты. СуммаНачальныйОстаток КАК НачОст,

КассаОстаткиИОбороты. СуммаПриход КАК Приход,

КассаОстаткиИОбороты. СуммаРасход КАК Расход,

КассаОстаткиИОбороты. СуммаКонечныйОстаток КАК КонОст

ИЗ

РегистрНакопления. Касса. ОстаткиИОбороты(,,Регистратор) КАК КассаОстаткиИОбороты

{ИТОГИ ПО Фирма, Касса, Регистратор, Неделя, Месяц, Квартал, Год}

ИТОГИ

СУММА(СуммаНачальныйОстаток),

СУММА(СуммаПриход),

СУММА(СуммаРасход),

СУММА(СуммаКонечныйОстаток)

ПО

ОБЩИЕ

";

Построитель. Текст = Текст;

Построитель. ЗаполнитьНастройки(); // автоматически заполнить настройки

// заполняем отбор

Отбор = Построитель. Отбор;

ДоступноеПоле = Построитель. ДоступныеПоля. Найти("НачалоПериода");

Если ДоступноеПоле <> Неопределено Тогда

Если Отбор. Найти(ДоступноеПоле. Имя) = Неопределено Тогда

Отбор. Добавить(ДоступноеПоле. Имя);

КонецЕсли;

Отбор[ДоступноеПоле. Имя].Использование = Истина;

Отбор[ДоступноеПоле. Имя].Значение = НачалоМесяца(ТекущаяДата());

Отбор[ДоступноеПоле. Имя].ВидСравнения = ВидСравнения. Равно;

КонецЕсли;

ДоступноеПоле = Построитель. ДоступныеПоля. Найти("КонецПериода");

Если ДоступноеПоле <> Неопределено Тогда

Если Отбор. Найти(ДоступноеПоле. Имя) = Неопределено Тогда

Отбор. Добавить(ДоступноеПоле. Имя);

КонецЕсли;

Отбор[ДоступноеПоле. Имя].Использование = Истина;

Отбор[ДоступноеПоле. Имя].Значение = КонецМесяца(ТекущаяДата());

Отбор[ДоступноеПоле. Имя].ВидСравнения = ВидСравнения. Равно;

КонецЕсли;

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

Процедура ОсновныеДействияФормыСохранить(Кнопка)

Настройки = Построитель. ПолучитьНастройки(Истина, Истина, Истина, Истина);

ОбСохранитьНастройки(Настройки);

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

Процедура ОсновныеДействияФормыВосстановить(Кнопка)

Настройки = обВосстановитьНастройки();

Если Настройки <> Неопределено Тогда

Построитель. УстановитьНастройки(Настройки);

КонецЕсли;

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

////////////////////////////////////////////////////////////////////////////////

// ОБРАБОТЧИКИ СОБЫТИЙ

// Обработчик события ПриОткрытии формы.

//

Процедура ПриОткрытии()

Макет = Справочники. КлассификаторЕдиницИзмерения. ПолучитьМакет("КлассификаторЕдиницИзмерения");

Макет. Параметры. Расшифровка = Истина; // чтобы работала расшифровка

ТабличныйДокумент = ЭлементыФормы. ПолеТабличногоДокумента;

ТабличныйДокумент. Очистить();

ТабличныйДокумент. Вывести(Макет);

// пользователю не показываем весовая это или нет единица измерения

ТабличныйДокумент. Области. ВесоваяЕдиница. Очистить();

ТабличныйДокумент. ФиксацияСверху = ТабличныйДокумент. Области. ОбластьРасшифровки. Верх - 1;

ТабличныйДокумент. ОтображатьЗаголовки = Ложь;

ТабличныйДокумент. ОтображатьСетку = Ложь;

ТабличныйДокумент. ТолькоПросмотр = Истина;

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

Похожие статьи




ВЫПОЛНЕНИЕ ПРОГРАММЫ - Обоснование разработки и разработка проекта автоматизации учебного процесса в автошколе

Предыдущая | Следующая