Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
радна_1_июня_диплом_.docx
Скачиваний:
127
Добавлен:
11.04.2015
Размер:
1.99 Mб
Скачать

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

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

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

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

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

  5. 1С:Предприятие 8.1 Описание встроенного языка часть 1, - Москва, Фирма «1С», 2003

  6. 1С:Предприятие 8.1 Описание встроенного языка часть 2, - Москва, Фирма «1С», 2003

  7. 1С:Предприятие 8.1 Конфигурирование и администрирование, - Москва, Фирма «1С», 2003

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

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

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

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

  12. ГОСТ Р ИСО/МЭК 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);

СтрокаПодбора.МеждународноеСокращение = МеждународноеСокращение;

СтрокаПодбора.Видимость = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(КодЧисловой).Пустая();

СтрокаПодбора.Переносить = СтрокаПодбора.Видимость;

КонецЕсли;

КонецЦикла;

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

КонецЕсли;

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

Справочник.КлассификаторЕдиницИзмерения.Форма.ФормаСписка.Форма.Модуль

////////////////////////////////////////////////////////////////////////////////

// ОБРАБОТЧИКИ СОБЫТИЙ

// Обработчик события ОбработкаЗаписиНовогоОбъекта формы.

//

Процедура ОбработкаЗаписиНовогоОбъекта(Объект, Источник)

ЭлементыФормы.СписокКлассификаторЕдиницИзмерения.ТекущаяСтрока = Объект.Ссылка;

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

// Обработчик события Действие элемента КоменднаяПанель.ДействиеПодбор.

//

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

Справочники.КлассификаторЕдиницИзмерения.ПолучитьФорму("ФормаПодбораИзКлассификатора", ЭтаФорма, "ФормаПодбораИзКлассификатора").Открыть();

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]