- •Введение.
- •Анализ предметной области
- •Характеристика комплекса задач, задачи и обоснование необходимости автоматизации
- •Организация текущего документооборота в учебно-методическом дюсш №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;
ТабличныйДокумент.ОтображатьЗаголовки = Ложь;
ТабличныйДокумент.ОтображатьСетку = Ложь;
ТабличныйДокумент.ТолькоПросмотр = Истина;
КонецПроцедуры