
- •Введение.
- •Анализ предметной области
- •Характеристика комплекса задач, задачи и обоснование необходимости автоматизации
- •Организация текущего документооборота в учебно-методическом автошколы.
- •Выбор комплекса задач автоматизации и характеристика существующих бизнес процессов
- •Определение места проектируемой задачи в комплексе задач и ее описание
- •Анализ системы обеспечения информационной безопасности и защиты информации
- •Анализ существующих разработок и выбор стратегии автоматизации «как должно быть»
- •Анализ существующих разработок для автоматизации задачи
- •Выбор и обоснование стратегии автоматизации задачи
- •Выбор и обоснование способа приобретения ис для автоматизации задачи
- •Обоснование проектных решений
- •Обоснование проектных решений по техническому обеспечению
- •Обоснование проектных решений по информационному обеспечению
- •Обоснование проектных решений по программному обеспечению
- •Проектная часть.
- •Разработка логической модели данных
- •Разработка физической модели данных
- •Этапы жизненного цикла проекта автоматизации
- •Ожидаемые риски на этапах жизненного цикла и их описание
- •Организационно-правовые и программно-аппаратные средства обеспечения информационной безопасности и защиты информации
- •Информационное обеспечение задачи. Информационная модель задачи и ее описание.
- •Инструкция пользователя
- •Характеристика результатной информации
- •Инструкция администратора
- •Структурная схема пакета (дерево вызова программных модулей)
- •Описание программных модулей
- •Контрольный пример реализации проекта и его описание
- •Заключение
- •Список использованных источников
- •Приложение а. Листинг программного кода
Список использованных источников
Митичкин С.А. Разработка в системе 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.Модуль
Функция обПолучитьСписокСотрудников(СписокСостояний, НаДату) Экспорт
// подготовить запрос на выботку тех которые по основному месту работы и временно не работающих
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.ФизЛицо КАК ФизЛицо,
| Сотрудники.Состояние КАК Состояние
|ИЗ
| РегистрСведений.Сотрудники.СрезПоследних(&ВыбДата) КАК Сотрудники
|ГДЕ
| Состояние В (&СписокСостояний)
|
|";
Запрос.УстановитьПараметр("СписокСостояний", СписокСостояний);
Запрос.УстановитьПараметр("ВыбДата", НаДату);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
сзРаботающие = Новый СписокЗначений; // сформировать список значений работающих
Пока Выборка.Следующий() Цикл
сзРаботающие.Добавить(Выборка.ФизЛицо);
КонецЦикла;
Возврат сзРаботающие;
КонецФункции
Процедура обЗаполнитьВариантыСтандартногоОформления(Список) Экспорт
Список.Добавить(СтандартноеОформление.БезОформления);
Список.Добавить(СтандартноеОформление.Апельсин);
Список.Добавить(СтандартноеОформление.Асфальт);
Список.Добавить(СтандартноеОформление.Бирюза);
Список.Добавить(СтандартноеОформление.Бронза);
Список.Добавить(СтандартноеОформление.Весна);
Список.Добавить(СтандартноеОформление.Дерево);
Список.Добавить(СтандартноеОформление.Зима);
Список.Добавить(СтандартноеОформление.Интерфейс);
Список.Добавить(СтандартноеОформление.Камень);
Список.Добавить(СтандартноеОформление.Классика);
Список.Добавить(СтандартноеОформление.Классика2);
Список.Добавить(СтандартноеОформление.Классика3);
Список.Добавить(СтандартноеОформление.Лед);
Список.Добавить(СтандартноеОформление.Лето);
Список.Добавить(СтандартноеОформление.Медь);
Список.Добавить(СтандартноеОформление.Осень);
Список.Добавить(СтандартноеОформление.Песок);
Список.Добавить(СтандартноеОформление.Платина);
Список.Добавить(СтандартноеОформление.Серебро);
Список.Добавить(СтандартноеОформление.Текстиль);
Список.Добавить(СтандартноеОформление.Трава);
КонецПроцедуры
Процедура обУстановитьШиринуКолонокОтчета(Макет, ИскСтрока, Ширина, Формат = "") Экспорт
ТекущаяОбласть = Неопределено;
Пока Истина Цикл
ТекущаяОбласть = Макет.НайтиТекст(ИскСтрока, ТекущаяОбласть, Макет.Область(), Истина, Истина, Истина, Истина);
Если ТекущаяОбласть <> Неопределено Тогда
ТекущаяОбласть.ШиринаКолонки = Ширина;
Если ПустаяСтрока(Формат) = 0 Тогда
ТекущаяОбласть.Формат = Формат;
КонецЕсли;
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура обПолучитьИзОтбораПериод(Построитель, ДатаС, ДатаПо) Экспорт
Для Й = 0 По Построитель.Отбор.Количество()-1 Цикл
ПолеОтбора = Построитель.Отбор[Й];
Если Не ПолеОтбора.Использование Тогда
Продолжить;
КонецЕсли;
Если ПолеОтбора.ПутьКДанным = "НачалоПериода" Тогда
ДатаС = ПолеОтбора.Значение;
КонецЕсли;
Если ПолеОтбора.ПутьКДанным = "КонецПериода" Тогда
ДатаПо = ПолеОтбора.Значение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция обСохранитьНастройки(Настройки) Экспорт
ИмяФайла = "";
ИмяПути = КаталогВременныхФайлов();
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.ПолноеИмяФайла = ИмяФайла;
Диалог.Каталог = ИмяПути;
Диалог.Заголовок = "Укажите файл для хранения настроек";
Диалог.Фильтр = "Файлы настроек (*.lst)|*.lst|Все файлы (*.*)|*.*";
Диалог.Расширение = "lst";
Если Диалог.Выбрать() Тогда
ИмяФайла = Диалог.ПолноеИмяФайла;
ИмяПути = Диалог.Каталог;
ЗначениеВФайл(ИмяФайла, Настройки);
КонецЕсли;
Возврат ИмяФайла;
КонецФункции
// получить настройки построителя отчета из файла
Функция обВосстановитьНастройки() Экспорт
Перем Настройки;
Настройки = Неопределено;
ИмяФайла = "";
ИмяПути = КаталогВременныхФайлов();
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.ПроверятьСуществованиеФайла = Истина;
Диалог.ПолноеИмяФайла = ИмяФайла;
Диалог.Каталог = ИмяПути;
Диалог.Заголовок = "Укажите файл для хранения настроек";
Диалог.Фильтр = "Файлы настроек (*.lst)|*.lst|Все файлы (*.*)|*.*";
Диалог.Расширение = "lst";
Если Диалог.Выбрать() Тогда
ИмяФайла = Диалог.ПолноеИмяФайла;
ИмяПути = Диалог.Каталог;
Настройки = ЗначениеИзФайла(ИмяФайла);
КонецЕсли;
Возврат Настройки;
КонецФункции
ОбщийМодуль.УниверсальныеМеханизмы.Модуль
// Выводит сообщение об ошибке и выставляет параметр Отказ в "Истина".
// В случае работы на клиенте или на сервере выводит в окно сообщений,
// в случае внешнего соединения вызывает исключение.
//
// Параметры:
// ТекстСообщения - строка, текст сообщения.
// Отказ - булево, признак отказа (необязательный).
//
Процедура СообщитьОбОшибке(ТекстСообщения, Отказ = Ложь, Заголовок = "", Статус = Неопределено) Экспорт
Если Статус = Неопределено Тогда
Статус = СтатусСообщения.Важное;
КонецЕсли;
НачалоСлужебногоСообщения = Найти(ТекстСообщения, "{");
ОкончаниеСлужебногоСообщения = Найти(ТекстСообщения, "}:");
Если ОкончаниеСлужебногоСообщения > 0 И НачалоСлужебногоСообщения > 0 Тогда
ТекстСообщения = Лев(ТекстСообщения, (НачалоСлужебногоСообщения - 1)) +
Сред(ТекстСообщения, (ОкончаниеСлужебногоСообщения + 2));
КонецЕсли;
Отказ = Истина;
#Если ВнешнееСоединение Тогда
Если ЗначениеЗаполнено(Заголовок) Тогда
ТекстСообщения = Заголовок + Символы.ПС + ТекстСообщения;
Заголовок = "";
КонецЕсли;
ВызватьИсключение (ТекстСообщения);
#Иначе
Если ЗначениеЗаполнено(Заголовок) Тогда
Сообщить(Заголовок);
Заголовок = "";
КонецЕсли;
Сообщить(ТекстСообщения, Статус);
#КонецЕсли
КонецПроцедуры // СообщитьОбОшибке()
// Формирует имя каталога для сохранения/чтения файлов. Для различных типов объектов возможны
// различные алгоритмы определения каталога.
//
// Параметры
// ОбъектФайла – Ссылка на объект данных, для которого прикрепляются файлы.
//
// Возвращаемое значение:
// Строка – каталог файлов для указанного объекта и пользователя.
//
Функция ПолучитьИмяКаталога() Экспорт
РабочийКаталог = КаталогВременныхФайлов();
// Так как при различных указаниях рабочего каталога возможно наличие или отсутствие
// последнего слеша, приведем строку каталога к унифицированному виду - без слеша на конце.
Если Прав(РабочийКаталог, 1) = "\" Тогда
РабочийКаталог = Лев(РабочийКаталог, СтрДлина(РабочийКаталог) - 1);
КонецЕсли;
Возврат РабочийКаталог;
КонецФункции // ПолучитьИмяКаталога()
// Проверяет наличие каталога на диске и предлагает создать, если каталога не существует.
//
// Параметры
// ИмяКаталога – Строка, содержащая путь к каталогу файла на диске.
//
// Возвращаемое значение:
// Булево – Истина, если каталог существует или создан, Ложь, если каталога нет.
//
Функция ПроверитьСуществованиеКаталога(ИмяКаталога) Экспорт
КаталогНаДиске = Новый Файл(ИмяКаталога);
Если КаталогНаДиске.Существует() Тогда
Возврат Истина;
Иначе
Ответ = Вопрос("Указанный каталог не существует. Создать каталог?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
СоздатьКаталог(ИмяКаталога);
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецФункции // ПроверитьСуществованиеКаталога()
// Формирует строку фильтра для диалога выбора картинки с типами файлов.
//
// Параметры
// Нет.
//
// Возвращаемое значение:
// Строка – фильтр по типам файлов для диалога выбора картинки.
//
Функция ПолучитьФильтрИзображений() Экспорт
Возврат "Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|"
+ "Формат bmp (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle|"
+ "Формат jpeg (*.jpg;*.jpeg)|*.jpg;*.jpeg|"
+ "Формат tiff (*.tif)|*.tif|"
+ "Формат gif (*.gif)|*.gif|"
+ "Формат png (*.png)|*.png|"
+ "Формат icon (*.ico)|*.ico|"
+ "Формат метафайл (*.wmf;*.emf)|*.wmf;*.emf|";
КонецФункции // ПолучитьФильтрИзображений()
// Открывает форму основного изображения объекта
//
// Параметры
// ФормаВладелец – Форма – определяет форму владельца открываемой формы
// ОсновноеИзображение – СправочникСсылка.ХранилищеДополнительнойИнформации – содержит
// ссылку на основное изображение объеата
//
Процедура ОткрытьФормуИзображения(ФормаВладелец, ОсновноеИзображение, ОбъектВладелец) Экспорт
Если ОсновноеИзображение = Неопределено ИЛИ ОсновноеИзображение.Пустая() Тогда
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Заголовок = "Выберите файл с изображением";
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
ДиалогОткрытияФайла.ПредварительныйПросмотр = Истина;
ДиалогОткрытияФайла.Фильтр = ПолучитьФильтрИзображений();
Если ДиалогОткрытияФайла.Выбрать() Тогда
ВыбранноеИзображение = Новый Картинка(ДиалогОткрытияФайла.ПолноеИмяФайла, Ложь);
Иначе
Возврат;
КонецЕсли;
НовыйОбъект = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
НовыйОбъект.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение;
НовыйОбъект.Хранилище = Новый ХранилищеЗначения(ВыбранноеИзображение, Новый СжатиеДанных);
НовыйОбъект.Объект = ОбъектВладелец;
ФормаИзображения = НовыйОбъект.ПолучитьФорму("ФормаИзображения");
Иначе
ФормаИзображения = ОсновноеИзображение.ПолучитьФорму("ФормаИзображения");
КонецЕсли;
ФормаИзображения.ВладелецФормы = ФормаВладелец;
ФормаИзображения.РежимВыбора = Истина;
ФормаИзображения.ЗакрыватьПриВыборе = Ложь;
ФормаИзображения.Открыть();
КонецПроцедуры // ОткрытьФормуИзображения()
// функция возвращает часть строки после последнего встреченного символа в строке
Функция ПолучитьЧастьСтрокиОтделеннойСимволом(Знач ИсходнаяСтрока, Знач СимволПоиска)
ПозицияСимвола = СтрДлина(ИсходнаяСтрока);
Пока ПозицияСимвола >= 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]; // открыть закладку с отчетом
КонецПроцедуры
Процедура ПриОткрытии()
СформироватьТекстПостроителя();
обЗаполнитьВариантыСтандартногоОформления(ЭлементыФормы.ПолеВыбораСтОформление.СписокВыбора); // заполнить варианты стандартного оформления
ПолеВыбораСтОформление = СтандартноеОформление.Камень; // стандартное оформление по умолчанию
КонецПроцедуры
Процедура СформироватьТекстПостроителя()
Текст =
"ВЫБРАТЬ
| КассаОстаткиИОбороты.Фирма КАК Фирма,
| КассаОстаткиИОбороты.Касса КАК Касса,
| КассаОстаткиИОбороты.Регистратор КАК Регистратор,
| НачалоПериода(Регистратор.Дата, Неделя) КАК Неделя,
| НачалоПериода(Регистратор.Дата, Месяц) КАК Месяц,
| НачалоПериода(Регистратор.Дата, Квартал) КАК Квартал,
| НачалоПериода(Регистратор.Дата, Год) КАК Год,
| КассаОстаткиИОбороты.СуммаНачальныйОстаток КАК НачОст,
| КассаОстаткиИОбороты.СуммаПриход КАК Приход,
| КассаОстаткиИОбороты.СуммаРасход КАК Расход,
| КассаОстаткиИОбороты.СуммаКонечныйОстаток КАК КонОст
|ИЗ
| РегистрНакопления.Касса.ОстаткиИОбороты(,,Регистратор) КАК КассаОстаткиИОбороты
|
|{ИТОГИ ПО Фирма, Касса, Регистратор, Неделя, Месяц, Квартал, Год}
|
|ИТОГИ
| СУММА(СуммаНачальныйОстаток),
| СУММА(СуммаПриход),
| СУММА(СуммаРасход),
| СУММА(СуммаКонечныйОстаток)
|ПО
| ОБЩИЕ
|";
Построитель.Текст = Текст;
Построитель.ЗаполнитьНастройки(); // автоматически заполнить настройки
// заполняем отбор
Отбор = Построитель.Отбор;
ДоступноеПоле = Построитель.ДоступныеПоля.Найти("НачалоПериода");
Если ДоступноеПоле <> Неопределено Тогда
Если Отбор.Найти(ДоступноеПоле.Имя) = Неопределено Тогда
Отбор.Добавить(ДоступноеПоле.Имя);
КонецЕсли;
Отбор[ДоступноеПоле.Имя].Использование = Истина;
Отбор[ДоступноеПоле.Имя].Значение = НачалоМесяца(ТекущаяДата());
Отбор[ДоступноеПоле.Имя].ВидСравнения = ВидСравнения.Равно;
КонецЕсли;
ДоступноеПоле = Построитель.ДоступныеПоля.Найти("КонецПериода");
Если ДоступноеПоле <> Неопределено Тогда
Если Отбор.Найти(ДоступноеПоле.Имя) = Неопределено Тогда
Отбор.Добавить(ДоступноеПоле.Имя);
КонецЕсли;
Отбор[ДоступноеПоле.Имя].Использование = Истина;
Отбор[ДоступноеПоле.Имя].Значение = КонецМесяца(ТекущаяДата());
Отбор[ДоступноеПоле.Имя].ВидСравнения = ВидСравнения.Равно;
КонецЕсли;
КонецПроцедуры
Процедура ОсновныеДействияФормыСохранить(Кнопка)
Настройки = Построитель.ПолучитьНастройки(Истина,Истина,Истина,Истина);
обСохранитьНастройки(Настройки);
КонецПроцедуры
Процедура ОсновныеДействияФормыВосстановить(Кнопка)
Настройки = обВосстановитьНастройки();
Если Настройки <> Неопределено Тогда
Построитель.УстановитьНастройки(Настройки);
КонецЕсли;
КонецПроцедуры
Отчет.Взаиморасчеты.Форма.ФормаОтчета.Форма.Модуль
Процедура ОформитьОтчет()
// установить выбранное пользователет стандартное оформление
Если ЭлементыФормы.ПолеВыбораСтОформление.Значение <> Неопределено Тогда
Построитель.МакетОформления = ПолучитьМакетОформления(ЭлементыФормы.ПолеВыбораСтОформление.Значение);
КонецЕсли;
// получить макет по умолчанию
Построитель.Макет = Неопределено;
Макет = Построитель.Макет;
ОбластьЗаголовка = Макет.Область("Заголовок");
Макет.Область("R"+Строка(ОбластьЗаголовка.Верх+0)+"C1").Текст = "Дата и время печати:" + ТекущаяДата();
// вывести в заголовок период
ДатаС = 0; ДатаПо = 0;
обПолучитьИзОтбораПериод(Построитель, ДатаС, ДатаПо);
Макет.Область("R"+Строка(ОбластьЗаголовка.Верх+1)+"C2").Текст = "Взаиморасчтеы с контрагентами с " + Строка(ДатаС) + " по " + Строка(ДатаПо);
Настройки = "";
Для Й = 0 По Построитель.Отбор.Количество()-1 Цикл
ПолеОтбора = Построитель.Отбор[Й];
Если Не ПолеОтбора.Использование Тогда
Продолжить;
КонецЕсли;
Если ПолеОтбора.ПутьКДанным = "НачалоПериода" Тогда
Продолжить;
КонецЕсли;
Если ПолеОтбора.ПутьКДанным = "КонецПериода" Тогда
Продолжить
КонецЕсли;
Настройка = ПолеОтбора.Представление + " " + ПолеОтбора.ВидСравнения + " " + ПолеОтбора.Значение;
Настройки = Настройки + Настройка + "; ";
КонецЦикла;
Если Не ПустаяСтрока(Настройки) Тогда
Макет.Область("R"+Строка(ОбластьЗаголовка.Верх+2)+"C2").Текст = "Настройки: "+Настройки;
КонецЕсли;
// установить ширину колонок
обУстановитьШиринуКолонокОтчета(Макет, "НачОст", 12);
обУстановитьШиринуКолонокОтчета(Макет, "НачИхДолг", 12);
обУстановитьШиринуКолонокОтчета(Макет, "Увеличение", 12);
обУстановитьШиринуКолонокОтчета(Макет, "Уменьшение", 12);
обУстановитьШиринуКолонокОтчета(Макет, "КонОст", 12);
обУстановитьШиринуКолонокОтчета(Макет, "Фирма", 20);
обУстановитьШиринуКолонокОтчета(Макет, "Контрагент", 20);
обУстановитьШиринуКолонокОтчета(Макет, "Регистратор", 30);
// установить макет
Построитель.Макет = Макет;
// тип расмещения измерений-строк
Если ТипРпазмещенияСтрок = 0 Тогда
Построитель.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Отдельно;
ИначеЕсли ТипРпазмещенияСтрок = 1 Тогда
Построитель.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.Вместе;
ИначеЕсли ТипРпазмещенияСтрок = 2 Тогда
Построитель.РазмещениеИзмеренийВСтроках = ТипРазмещенияИзмерений.ОтдельноИТолькоВИтогах;
КонецЕсли;
// тип размещения измерений-колонок
Если ТипРпазмещенияКолонок = 0 Тогда
Построитель.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.Отдельно;
ИначеЕсли ТипРпазмещенияКолонок = 1 Тогда
Построитель.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.Вместе;
ИначеЕсли ТипРпазмещенияКолонок = 2 Тогда
Построитель.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.ОтдельноИТолькоВИтогах;
КонецЕсли;
КонецПроцедуры
Процедура КнопкаСформироватьНажатие(Кнопка)
Построитель.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
ОформитьОтчет(); // все оформление построителя
Построитель.Выполнить(); // выполнить запрос
// выводим в ТАБ.ДОКУМЕНТ
ТабДок = ЭлементыФормы.ПолеТабличногоДокументаРезультат;
ТабДок.Очистить();
Построитель.Вывести(ТабДок);
ТабДок.ТолькоПросмотр = Истина;
// выводим в ТАБ.ДОКУМЕНТ
Элементыформы.Панель1.ТекущаяСтраница = Элементыформы.Панель1.Страницы[1]; // открыть закладку с отчетом
//Построитель.Выполнить(); // выполнить запрос
//РезультатЗапроса = Построитель.Результат;
//
//ТабДок = Новый ТабличныйДокумент;
//Макет = Отчеты.Взаиморасчеты.ПолучитьМакет("Печать");
//
//ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
//ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
//ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
//
//ТабДок.Вывести(ОбластьЗаголовок);
//ТабДок.Вывести(ОбластьШапка);
//
//ТабДок.НачатьАвтогруппировкуСтрок();
//ВыборкаИтоги = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
//ВыборкаИтоги.Следующий();
//Выборка = ВыборкаИтоги.Выбрать(ОбходРезультатаЗапроса.Прямой);
//Пока Выборка.Следующий() Цикл
// // заполнение параметров строки отчета
// ОбластьСтрока.Параметры.Номенклатура = Выборка.НоменклатураПредставление;
// ОбластьСтрока.Параметры.НачДолгИх = Выборка.НачОст;
// ОбластьСтрока.Параметры.НачДолгНаш = Выборка.НачОст;
// ОбластьСтрока.Параметры.Приход = Выборка.Увеличение;
// ОбластьСтрока.Параметры.Расход = Выборка.Уменьшение;
// ОбластьСтрока.Параметры.КонДолгИх = Выборка.КонОст;
// ОбластьСтрока.Параметры.КонДолгНаш = Выборка.КонОст;
// ТабДок.Вывести(ОбластьСтрока, Выборка.Уровень());
//КонецЦикла;
//
//ТабДок.ЗакончитьАвтогруппировкуСтрок();
//
//ТабДок.Показать(ЭтотОбъект);
КонецПроцедуры
Процедура ПриОткрытии()
СформироватьТекстПостроителя();
обЗаполнитьВариантыСтандартногоОформления(ЭлементыФормы.ПолеВыбораСтОформление.СписокВыбора); // заполнить варианты стандартного оформления
ПолеВыбораСтОформление = СтандартноеОформление.Камень; // стандартное оформление по умолчанию
КонецПроцедуры
Процедура СформироватьТекстПостроителя()
Текст =
"ВЫБРАТЬ
| ВзаиморасчетыОстаткиИОбороты.Фирма КАК Фирма,
| ВзаиморасчетыОстаткиИОбороты.Контрагент КАК Контрагент,
| ВзаиморасчетыОстаткиИОбороты.Регистратор КАК Регистратор,
| НачалоПериода(Регистратор.Дата, Неделя) КАК Неделя,
| НачалоПериода(Регистратор.Дата, Месяц) КАК Месяц,
| НачалоПериода(Регистратор.Дата, Квартал) КАК Квартал,
| НачалоПериода(Регистратор.Дата, Год) КАК Год,
| ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток КАК НачОст,
//| Выбор Когда ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток >=0 ТОГДА ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток Иначе 0 КОНЕЦ КАК НачИхДолг,
//| Выбор Когда ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток < 0 ТОГДА ВзаиморасчетыОстаткиИОбороты.СуммаНачальныйОстаток Иначе 0 КОНЕЦ КАК НачНашДолг,
| ВзаиморасчетыОстаткиИОбороты.СуммаПриход КАК Увеличение,
| ВзаиморасчетыОстаткиИОбороты.СуммаРасход КАК Уменьшение,
| ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток КАК КонОст
//| Выбор Когда ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток >=0 ТОГДА ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток Иначе 0 КОНЕЦ КАК КонИхДолг,
//| Выбор Когда ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток < 0 ТОГДА ВзаиморасчетыОстаткиИОбороты.СуммаКонечныйОстаток Иначе 0 КОНЕЦ КАК КонНашДолг
|ИЗ
| РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты(,,Регистратор) КАК ВзаиморасчетыОстаткиИОбороты
|
|{ИТОГИ ПО Фирма, Контрагент, Регистратор, Неделя, Месяц, Квартал, Год}
|
|ИТОГИ
| СУММА(НачОст),
//| СУММА(НачИхДолг),
//| СУММА(НачНашДолг),
| СУММА(СуммаПриход),
| СУММА(СуммаРасход),
| СУММА(КонОст)
//| СУММА(КонИхДолг),
//| СУММА(КонНашДолг)
|ПО
| ОБЩИЕ
|";
Построитель.Текст = Текст;
Построитель.ЗаполнитьНастройки(); // автоматически заполнить настройки
// заполняем отбор
Отбор = Построитель.Отбор;
ДоступноеПоле = Построитель.ДоступныеПоля.Найти("НачалоПериода");
Если ДоступноеПоле <> Неопределено Тогда
Если Отбор.Найти(ДоступноеПоле.Имя) = Неопределено Тогда
Отбор.Добавить(ДоступноеПоле.Имя);
КонецЕсли;
Отбор[ДоступноеПоле.Имя].Использование = Истина;
Отбор[ДоступноеПоле.Имя].Значение = НачалоМесяца(ТекущаяДата());
Отбор[ДоступноеПоле.Имя].ВидСравнения = ВидСравнения.Равно;
КонецЕсли;
ДоступноеПоле = Построитель.ДоступныеПоля.Найти("КонецПериода");
Если ДоступноеПоле <> Неопределено Тогда
Если Отбор.Найти(ДоступноеПоле.Имя) = Неопределено Тогда
Отбор.Добавить(ДоступноеПоле.Имя);
КонецЕсли;
Отбор[ДоступноеПоле.Имя].Использование = Истина;
Отбор[ДоступноеПоле.Имя].Значение = КонецМесяца(ТекущаяДата());
Отбор[ДоступноеПоле.Имя].ВидСравнения = ВидСравнения.Равно;
КонецЕсли;
КонецПроцедуры
Процедура ОсновныеДействияФормыСохранить(Кнопка)
Настройки = Построитель.ПолучитьНастройки(Истина,Истина,Истина,Истина);
обСохранитьНастройки(Настройки);
КонецПроцедуры
Процедура ОсновныеДействияФормыВосстановить(Кнопка)
Настройки = обВосстановитьНастройки();
Если Настройки <> Неопределено Тогда
Построитель.УстановитьНастройки(Настройки);
КонецЕсли;
КонецПроцедуры
Отчет.Остатки.Форма.ФормаОтчета.Форма.Модуль
Процедура ОформитьОтчет()
// установить выбранное пользователет стандартное оформление
Если ЭлементыФормы.ПолеВыбораСтОформление.Значение <> Неопределено Тогда
Построитель.МакетОформления = ПолучитьМакетОформления(ЭлементыФормы.ПолеВыбораСтОформление.Значение);
КонецЕсли;
// получить макет по умолчанию
Построитель.Макет = Неопределено;
Макет = Построитель.Макет;
ОбластьЗаголовка = Макет.Область("Заголовок");
Макет.Область("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 Тогда
Построитель.РазмещениеИзмеренийВКолонках = ТипРазмещенияИзмерений.ОтдельноИТолькоВИтогах;
КонецЕсли;
КонецПроцедуры
Процедура КнопкаСформироватьНажатие(Кнопка)
Построитель.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
ОформитьОтчет(); // все оформление построителя
Построитель.Выполнить(); // выполнить запрос
// выводим в ТАБ.ДОКУМЕНТ
ТабДок = ЭлементыФормы.ПолеТабличногоДокументаРезультат;
ТабДок.Очистить();
Построитель.Вывести(ТабДок);
ТабДок.ТолькоПросмотр = Истина;
// выводим в ТАБ.ДОКУМЕНТ
Процедура ПриОткрытии()
СформироватьТекстПостроителя();
обЗаполнитьВариантыСтандартногоОформления(ЭлементыФормы.ПолеВыбораСтОформление.СписокВыбора); // заполнить варианты стандартного оформления
ПолеВыбораСтОформление = СтандартноеОформление.Камень; // стандартное оформление по умолчанию
КонецПроцедуры
Процедура ОсновныеДействияФормыСохранить(Кнопка)
Настройки = Построитель.ПолучитьНастройки(Истина,Истина,Истина,Истина);
обСохранитьНастройки(Настройки);
КонецПроцедуры
Процедура ОсновныеДействияФормыВосстановить(Кнопка)
Настройки = обВосстановитьНастройки();
Если Настройки <> Неопределено Тогда
Построитель.УстановитьНастройки(Настройки);
КонецЕсли;
КонецПроцедуры
ПланСчетов.Основной.МодульОбъекта
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Забалансовый = 0 Тогда
Забалансовый = 1;
КонецЕсли;
Порядок = ПолучитьПорядокКода();
КонецПроцедуры
ПланСчетов.Основной.Форма.ФормаВыбора.Форма.Модуль
Процедура ПриОткрытии()
СписокСчетов = Новый Массив;
Счет = ПараметрСчет;
Пока Счет <> Планысчетов.Основной.ПустаяСсылка() Цикл
СписокСчетов.Добавить(Счет);
Счет = Счет.Родитель;
КонецЦикла;
Если СписокСчетов.Количество() <> 0 Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);
Если ПараметрКорреспонденция = ВидДвиженияБухгалтерии.Дебет Тогда
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| КорректныеКорреспонденцииСчетов.СчетКт КАК Ссылка
|ИЗ
| РегистрСведений.КорректныеКорреспонденцииСчетов КАК КорректныеКорреспонденцииСчетов
|
|ГДЕ
| КорректныеКорреспонденцииСчетов.СчетДт В (&СписокСчетов)";
Иначе
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| КорректныеКорреспонденцииСчетов.СчетДт КАК Ссылка
|ИЗ
| РегистрСведений.КорректныеКорреспонденцииСчетов КАК КорректныеКорреспонденцииСчетов
|
|ГДЕ
| КорректныеКорреспонденцииСчетов.СчетКт В (&СписокСчетов)";
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
СписокСчетов = Новый Массив;
ПустойСчет = Ложь;
Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка = Планысчетов.Налоговый.ПустаяСсылка() Тогда
ПустойСчет = Истина;
Прервать;
КонецЕсли;
СписокСчетов.Добавить(Выборка.Ссылка);
КонецЦикла;
Если Не ПустойСчет Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов);
Запрос.Текст = "
|ВЫБРАТЬ
| Налоговый.Ссылка
|ИЗ
| ПланСчетов.Налоговый КАК Налоговый
|
|ГДЕ
| Налоговый.Ссылка В ИЕРАРХИИ (&СписокСчетов)";
Выборка = Запрос.Выполнить().Выбрать();
СписокЗначений = Новый СписокЗначений;
Пока Выборка.Следующий() Цикл
СписокЗначений.Добавить(Выборка.Ссылка);
КонецЦикла;
ЭлементОтбора = ПланСчетовСписок.Отбор.Ссылка;
ЭлементОтбора.ВидСравнения = ВидСравнения.ВСписке;
ЭлементОтбора.Значение = СписокЗначений;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецЕсли;
ЭлементыФормы.ДействияФормы.Кнопки.КорректныеСчета.Пометка = ПланСчетовСписок.Отбор.Ссылка.Использование;
КонецПроцедуры
Процедура ДействияФормыКорректныеСчета(Кнопка)
ПланСчетовСписок.Отбор.Ссылка.Использование = Не ПланСчетовСписок.Отбор.Ссылка.Использование;
Кнопка.Пометка = ПланСчетовСписок.Отбор.Ссылка.Использование;
КонецПроцедуры
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Колонка = ОформлениеСтроки.Ячейки;
Если ДанныеСтроки.ЗапретитьИспользоватьВПроводках Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.СветлоЖелтый;
КонецЕсли;
Вид = ДанныеСтроки.Вид;
Если Вид = ВидСчета.Активный Тогда
Колонка.Вид.Текст = "А";
ИначеЕсли Вид = ВидСчета.Пассивный Тогда
Колонка.Вид.Текст = "П";
Иначе
Колонка.Вид.Текст = "АП";
КонецЕсли;
Колонка.Вид.ОтображатьТекст = Истина;
КонецПроцедуры
ПланСчетовСписок.Колонки.Добавить("ЗапретитьИспользоватьВПроводках", Ложь);
ПланСчетовСписок.Колонки.Добавить("Вид", Ложь);
ПланСчетов.Основной.Форма.ФормаСписка.Форма.Модуль
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Колонка = ОформлениеСтроки.Ячейки;
Субконто = ДанныеСтроки.ВидыСубконто;
Если Субконто.Количество() >= 1 Тогда
Колонка.Субконто1.Текст = ?(Субконто[0].ТолькоОбороты, "(об) ", "") + Субконто[0].ВидСубконто;
Колонка.Субконто1.ОтображатьТекст = Истина;
КонецЕсли;
Если Субконто.Количество() >= 2 Тогда
Колонка.Субконто2.Текст = ?(Субконто[1].ТолькоОбороты, "(об) ", "") + Субконто[1].ВидСубконто;
Колонка.Субконто2.ОтображатьТекст = Истина;
КонецЕсли;
Если Субконто.Количество() = 3 Тогда
Колонка.Субконто3.Текст = ?(Субконто[2].ТолькоОбороты, "(об) ", "") + Субконто[2].ВидСубконто;
Колонка.Субконто3.ОтображатьТекст = Истина;
КонецЕсли;
Если ДанныеСтроки.ЗапретитьИспользоватьВПроводках Тогда
ОформлениеСтроки.ЦветФона = WebЦвета.СветлоЖелтый;
КонецЕсли;
Вид = ДанныеСтроки.Вид;
Если Вид = ВидСчета.Активный Тогда
Колонка.Вид.Текст = "А";
ИначеЕсли Вид = ВидСчета.Пассивный Тогда
Колонка.Вид.Текст = "П";
Иначе
Колонка.Вид.Текст = "АП";
КонецЕсли;
Колонка.Вид.ОтображатьТекст = Истина;
КонецПроцедуры
Процедура ДействияФормыОборотноСальдоваяВедомость(Кнопка)
ФормаОтчета = Отчеты.ОборотноСальдоваяВедомостьНалоговый.ПолучитьФорму();
ФормаОтчета.Открыть();
ФормаОтчета.ОбновитьОтчет();
КонецПроцедуры
Процедура ДействияФормыОборотноСальдоваяВедомостьПоСчету(Кнопка)
Если ЭлементыФормы.Список.ТекущаяСтрока <> Неопределено Тогда
ФормаОтчета = Отчеты.ОборотноСальдоваяВедомостьПоСчетуНалоговый.ПолучитьФорму();
ФормаОтчета.Открыть();
ФормаОтчета.Счет = ЭлементыФормы.Список.ТекущаяСтрока;
ФормаОтчета.ОбновитьОтчет();
КонецЕсли;
КонецПроцедуры
Процедура ДействияФормыКарточкаСчета(Кнопка)
Если ЭлементыФормы.Список.ТекущаяСтрока <> Неопределено Тогда
ФормаОтчета = Отчеты.КарточкаСчетаНалоговый.ПолучитьФорму();
ФормаОтчета.Открыть();
ФормаОтчета.Счет = ЭлементыФормы.Список.ТекущаяСтрока;
ФормаОтчета.ОбновитьОтчет();
КонецЕсли;
КонецПроцедуры
Процедура ДействияФормыПерейтиВЖурналПроводок(Кнопка)
ФормаЖурналаПроводок = РегистрыБухгалтерии.Налоговый.ПолучитьФорму("ФормаСписка");
ФормаЖурналаПроводок.Отбор.Счет.Значение = ЭлементыФормы.Список.ТекущаяСтрока;
ФормаЖурналаПроводок.Отбор.Счет.Использование = Истина;
ФормаЖурналаПроводок.ЭлементыФормы.ОтборСчет.Значение = ЭлементыФормы.Список.ТекущаяСтрока;
ФормаЖурналаПроводок.ЭлементыФормы.ИспользованиеОтбораСчет.Значение = Истина;
ФормаЖурналаПроводок.Открыть();
КонецПроцедуры
ПланСчетовСписок.Колонки.Добавить("ВидыСубконто", Ложь);
ПланСчетовСписок.Колонки.Добавить("ЗапретитьИспользоватьВПроводках", Ложь);
ПланСчетовСписок.Колонки.Добавить("Вид", Ложь);
ПланСчетов.Основной.Форма.ФормаЭлемента.Форма.Модуль
Процедура КодПриИзменении(Элемент)
Если НЕ ЭтоНовый() Тогда
Возврат;
КонецЕсли;
// Если задан субсчет, то в его коде должна быть точка
Если Найти(Код, ".") > 0 Тогда
//Найдем код родителя, для этого найдем последнюю точку в коде счета
ПозицияТочки = СтрДлина(Код);
Пока Сред(Код, ПозицияТочки, 1) <> "." Цикл
ПозицияТочки = ПозицияТочки - 1;
КонецЦикла;
КодРодителя = Лев(Код, ПозицияТочки - 1);
РодительПоКоду = ПланыСчетов.Налоговый.НайтиПоКоду(КодРодителя);
Если ЗначениеНеЗаполнено(РодительПоКоду) Тогда
Предупреждение("План счетов не содержит счета с кодом "+ КодРодителя);
ИначеЕсли РодительПоКоду <> Ссылка Тогда
Родитель = РодительПоКоду;
Вид = Родитель.Вид;
Забалансовый = Родитель.Забалансовый;
Количественный = Родитель.Количественный;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Справочник.Банки.МодульОбъекта
Процедура ПередЗаписью(Отказ)
Если НЕ ЭтоГруппа И НЕ ОбменДанными.Загрузка Тогда
СтрокаОшибки = "Элемент справочника ""Банки"" " + Наименование + " не записан!";
Если НЕ ТолькоЦифрыВСтроке(КоррСчет) Тогда
СообщитьОбОшибке("В составе Корр.счета банка должны быть только цифры без пробелов.",, СтрокаОшибки);
Отказ = Истина;
КонецЕсли;
Если НЕ ТолькоЦифрыВСтроке(Код) Тогда
СообщитьОбОшибке("В составе БИК банка должны быть только цифры без пробелов.",, СтрокаОшибки);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Справочник.Банки.Форма.ФормаВыбора.Форма.Модуль
Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
ЭлементыФормы.СправочникДерево.ТекущаяСтрока = ЭлементыФормы.СправочникСписок.ТекущийРодитель;
КонецПроцедуры
Справочник.Банки.Форма.ФормаСписка.Форма.Модуль
// Обработчик события "ПередОткрытием" формы
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
СправочникСписок.Колонки.Добавить("Телефоны");
СправочникСписок.Колонки.Добавить("Адрес");
КонецПроцедуры // ПередОткрытием()
// Обработчик события "ПриАктивизации" реквизита "Список"
Процедура СправочникСписокПриАктивизацииСтроки(Элемент)
ИнформационнаяНадписьТелефоны="Телефоны: ";
ИнформационнаяНадписьАдрес="Адрес: ";
Если Элемент.ТекущиеДанные <> Неопределено И НЕ Элемент.ТекущиеДанные.ЭтоГруппа Тогда
ИнформационнаяНадписьТелефоны="Телефоны: "+Элемент.ТекущиеДанные.Телефоны;
ИнформационнаяНадписьАдрес="Адрес: "+Элемент.ТекущиеДанные.Адрес;
КонецЕсли;
ЭлементыФормы.СправочникДерево.ТекущаяСтрока = ЭлементыФормы.СправочникСписок.ТекущийРодитель;
КонецПроцедуры // СправочникСписокПриАктивизацииСтроки()
Справочник.БанковскиеСчета.МодульОбъекта
// Обработчик события ПередЗаписью формы.
//
Процедура ПередЗаписью(Отказ)
#Если Клиент Тогда
Если НЕ ОбменДанными.Загрузка Тогда
Если ЕстьНеЦифры(НомерСчета) И Вопрос("В составе номера банковского счета присутствуют не только цифры.
|Возможно, номер указан неправильно. Записать?",РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Нет Тогда
Отказ=Истина;
КонецЕсли;
КонецЕсли;
#КонецЕсли
КонецПроцедуры
Справочник.БанковскиеСчета.Форма.ФормаЭлемента.Форма.Модуль
// Заполняет реквизит "ТекстКорреспондента"
//
// Параметры:
// Нет.
//
Процедура ЗаполнитьТекстКорреспондента()
//мВладелец = ЭтотОбъект.Владелец;
//Если ЗначениеНеЗаполнено(мВладелец) Тогда
// Возврат;
//КонецЕсли;
//ТипВладельца = ТипЗнч(мВладелец);
//Если ТипВладельца = Тип("СправочникСсылка.Контрагенты") Тогда
// СтрКорреспондента = СокрЛП(мВладелец.НаименованиеПолное);
//КонецЕсли;
Если НЕ БанкДляРасчетов.Пустая() Тогда
СтрКорреспондента = СтрКорреспондента + " р/с " + НомерСчета
+ " в " + Банк + " " + Банк.Город;
КонецЕсли;
ТекстКорреспондента = СтрКорреспондента;
КонецПроцедуры // ЗаполнитьТекстКорреспондента()
Процедура ПриОткрытии()
Если ЭтоНовый() Тогда
Если ЗначениеНеЗаполнено(ВидСчета) Тогда
ВидСчета = ЭлементыФормы.ВидСчета.СписокВыбора[0];
КонецЕсли;
ЗаполнитьТекстКорреспондента();
КонецЕсли;
ЗакрыватьПриВыборе = Ложь;
КонецПроцедуры
// Обработчик события "ПриИзменении" реквизита "БанкДляРасчетов"
//
Процедура БанкДляРасчетовПриИзменении(Элемент)
ЗаполнитьТекстКорреспондента();
КонецПроцедуры
// Обработчик события "ПриИзменении" реквизита "НомерСчета"
//
Процедура НомерСчетаПриИзменении(Элемент)
ЗаполнитьТекстКорреспондента();
КонецПроцедуры
// Обработчик события "ПриИзменении" реквизита "Банк"
//
Процедура БанкПриИзменении(Элемент)
ЗаполнитьТекстКорреспондента();
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
//Если ЭтаФорма.ВладелецФормы <> Неопределено Тогда
//
// ОповеститьОВыборе(Ссылка);
//
//КонецЕсли;
КонецПроцедуры
СписокВидСчета = ЭлементыФормы.ВидСчета.СписокВыбора;
СписокВидСчета.Добавить("Расчетный");
СписокВидСчета.Добавить("Депозитный");
СписокВидСчета.Добавить("Аккредитивный");
СписокВидСчета.Добавить("Ссудный");
СписокВидСчета.Добавить("Иной");
Справочник.ВидыНоменклатуры.Форма.ФормаВыбора.Форма.Модуль
// Процедура - обработчик события "ПриНачалеРедактирования" табличного поля "СправочникСписок".
//
Процедура СправочникСписокПриНачалеРедактирования(Элемент, НоваяСтрока)
СтрокаСправочника = Элемент.ТекущиеДанные;
Если НоваяСтрока И ЗначениеНеЗаполнено(СтрокаСправочника.ТипНоменклатуры) Тогда
ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
КонецЕсли;
КонецПроцедуры // СправочникСписокПриНачалеРедактирования()
Справочник.ВидыНоменклатуры.Форма.ФормаСписка.Форма.Модуль
// Процедура - обработчик события "ПриНачалеРедактирования" табличного поля "СправочникСписок".
//
Процедура СправочникСписокПриНачалеРедактирования(Элемент, НоваяСтрока)
СтрокаСправочника = Элемент.ТекущиеДанные;
Если НоваяСтрока И ЗначениеНеЗаполнено(СтрокаСправочника.ТипНоменклатуры) Тогда
СтрокаСправочника.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
КонецЕсли;
КонецПроцедуры // СправочникСписокПриНачалеРедактирования()
Справочник.КлассификаторЕдиницИзмерения.Форма.ФормаПодбораИзКлассификатора.Форма.Модуль
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Обработчик события ПриОткрытии формы.
//
Процедура ПриОткрытии()
Макет = Справочники.КлассификаторЕдиницИзмерения.ПолучитьМакет("КлассификаторЕдиницИзмерения");
Макет.Параметры.Расшифровка = Истина; // чтобы работала расшифровка
ТабличныйДокумент = ЭлементыФормы.ПолеТабличногоДокумента;
ТабличныйДокумент.Очистить();
ТабличныйДокумент.Вывести(Макет);
// пользователю не показываем весовая это или нет единица измерения
ТабличныйДокумент.Области.ВесоваяЕдиница.Очистить();
ТабличныйДокумент.ФиксацияСверху = ТабличныйДокумент.Области.ОбластьРасшифровки.Верх - 1;
ТабличныйДокумент.ОтображатьЗаголовки = Ложь;
ТабличныйДокумент.ОтображатьСетку = Ложь;
ТабличныйДокумент.ТолькоПросмотр = Истина;
КонецПроцедуры
// Обработчик события ОбработкаРасшифровки элемента ПолеТабличногоДокумента.
//
Процедура ПолеТабличногоДокументаОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Получение значений полей выбранной строки.
ТабличныйДокумент = ЭлементыФормы.ПолеТабличногоДокумента;
ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть;
ОбластьКодЧисловой = ТабличныйДокумент.Области.КодЧисловой;
ОбластьНаименованиеКраткое = ТабличныйДокумент.Области.НаименованиеКраткое;
ОбластьНаименованиеПолное = ТабличныйДокумент.Области.НаименованиеПолное;
ОбластьМеждународноеСокращение = ТабличныйДокумент.Области.МеждународноеСокращение;
Если ТекущаяОбласть.Низ = ТекущаяОбласть.Верх Тогда
КодЧисловой = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, ОбластьКодЧисловой. Лево, ТекущаяОбласть.Низ, ОбластьКодЧисловой. Право).Текст;
НаименованиеКраткое = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, ОбластьНаименованиеКраткое.Лево, ТекущаяОбласть.Низ, ОбластьНаименованиеКраткое.Право).Текст;
НаименованиеПолное = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, ОбластьНаименованиеПолное. Лево, ТекущаяОбласть.Низ, ОбластьНаименованиеПолное. Право).Текст;
МеждународноеСокращение = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, ОбластьМеждународноеСокращение.Лево, ТекущаяОбласть.Низ, ОбластьМеждународноеСокращение.Право).Текст;
// Проверка наличия выбранной единицы измерения.
Ссылка = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(КодЧисловой);
Если НЕ Ссылка.Пустая() Тогда
Вопрос = "В справочнике ""Классификатор единиц измерения"" уже существует элемент с кодом """ + КодЧисловой + """! Открыть существующий?";
Ответ = Вопрос(Вопрос, РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Отмена, );
Если Ответ = КодВозвратаДиалога.Да Тогда
Ссылка.ПолучитьФорму( , ВладелецФормы, ).Открыть();
Возврат;
ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
КонецЕсли;
// Создание новой единицы измерения.
ФормаНовогоЭлемента = Справочники.КлассификаторЕдиницИзмерения.ПолучитьФормуНовогоЭлемента(, ВладелецФормы, );
ФормаНовогоЭлемента.Код = КодЧисловой;
ФормаНовогоЭлемента.Наименование = СтрПолучитьСтроку(НаименованиеКраткое, 1);
ФормаНовогоЭлемента.НаименованиеПолное = СтрПолучитьСтроку(НаименованиеПолное, 1);
ФормаНовогоЭлемента.МеждународноеСокращение = Лев(МеждународноеСокращение, 3);
ФормаНовогоЭлемента.Открыть();
Иначе
Форма = ПолучитьОбщуюФорму("ФормаПодбораИзКлассификатора", ЭтаФорма);
Если Форма.Открыта() Тогда
Форма.СписокВыбора.Очистить();
Иначе
СтуктураКолонок = Новый Структура();
СтуктураКолонок.Вставить("Код", Новый Структура("Заголовок, Ширина", "Код", 5));
СтуктураКолонок.Вставить("Наименование", Новый Структура("Заголовок, Ширина", "Наименование"));
СтуктураКолонок.Вставить("НаименованиеПолное", Новый Структура("Заголовок, Ширина", "Полное наименование"));
СтуктураКолонок.Вставить("МеждународноеСокращение", Новый Структура("Заголовок, Ширина", "Международное сокращение", 5));
СтуктураКолонок.Вставить("Видимость", Новый Структура("Заголовок, Ширина", ""));
Форма.ТипСправочника = "КлассификаторЕдиницИзмерения";
Форма.НастроитьФорму(СтуктураКолонок);
КонецЕсли;
СписокВыбора = Форма.СписокВыбора;
Для ТекущаяСтрока = ТекущаяОбласть.Верх по ТекущаяОбласть.Низ Цикл
КодЧисловой = ТабличныйДокумент.Область(ТекущаяСтрока, ОбластьКодЧисловой. Лево, ТекущаяСтрока, ОбластьКодЧисловой. Право).Текст;
НаименованиеКраткое = ТабличныйДокумент.Область(ТекущаяСтрока, ОбластьНаименованиеКраткое.Лево, ТекущаяСтрока, ОбластьНаименованиеКраткое.Право).Текст;
НаименованиеПолное = ТабличныйДокумент.Область(ТекущаяСтрока, ОбластьНаименованиеПолное. Лево, ТекущаяСтрока, ОбластьНаименованиеПолное. Право).Текст;
МеждународноеСокращение = ТабличныйДокумент.Область(ТекущаяСтрока, ОбластьМеждународноеСокращение.Лево, ТекущаяСтрока, ОбластьМеждународноеСокращение.Право).Текст;
ЭтоЧисло = Истина;
Попытка
КодКакЧисло = Число(КодЧисловой);
Исключение
ЭтоЧисло = Ложь;
КонецПопытки;
ЕСли ЭтоЧисло Тогда
СтрокаПодбора = СписокВыбора.Добавить();
СтрокаПодбора.Код = КодЧисловой;
СтрокаПодбора.Наименование = СтрПолучитьСтроку(НаименованиеКраткое, 1);
СтрокаПодбора.НаименованиеПолное = СтрПолучитьСтроку(НаименованиеПолное, 1);
СтрокаПодбора.МеждународноеСокращение = МеждународноеСокращение;
СтрокаПодбора.Видимость = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(КодЧисловой).Пустая();
СтрокаПодбора.Переносить = СтрокаПодбора.Видимость;
КонецЕсли;
КонецЦикла;
Форма.Открыть();
КонецЕсли;
КонецПроцедуры
Справочник.КлассификаторЕдиницИзмерения.Форма.ФормаСписка.Форма.Модуль
////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ
// Обработчик события ОбработкаЗаписиНовогоОбъекта формы.
//
Процедура ОбработкаЗаписиНовогоОбъекта(Объект, Источник)
ЭлементыФормы.СписокКлассификаторЕдиницИзмерения.ТекущаяСтрока = Объект.Ссылка;
КонецПроцедуры
// Обработчик события Действие элемента КоменднаяПанель.ДействиеПодбор.
//
Процедура ДействияФормыДействиеПодбор(Кнопка)
Справочники.КлассификаторЕдиницИзмерения.ПолучитьФорму("ФормаПодбораИзКлассификатора", ЭтаФорма, "ФормаПодбораИзКлассификатора").Открыть();
КонецПроцедуры