Загрузка данных


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	СоздатьРеквизиты();
	СоздатьЭлементы();
	ЭтаФорма.НомерПрофиля = 1;
	ЗагрузитьНастройкиНаСервере();

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

#Область Команды

&НаКлиенте
Процедура НомерПрофиляПриИзменении(Элемент)
	ЗагрузитьНастройкиНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура СохранитьНастройки(Команда)
	СохранитьНаСервере();
	ПоказатьОповещениеПользователя("Настройки сохранены");
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьПредпросмотр(Команда)
	ПредпросмотрНаСервере();
	Элементы.ГруппаСтраниц.ТекущаяСтраница = Элементы.СтраницаПредпросмотр;
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьСейчас(Команда)
	СохранитьНаСервере();
	ОтправитьНаСервере();
	ПоказатьОповещениеПользователя("Прайс-лист отправлен");
КонецПроцедуры

&НаКлиенте
Процедура КолонкаВверх(Команда)
	СдвинутьКолонку(-1);
КонецПроцедуры

&НаКлиенте
Процедура КолонкаВниз(Команда)
	СдвинутьКолонку(1);
КонецПроцедуры

&НаКлиенте
Процедура СдвинутьКолонку(Смещение)

	Данные = Элементы.Колонки.ТекущиеДанные;
	Если Данные = Неопределено Тогда
		Возврат;
	КонецЕсли;

	КолонкиФормы = ЭтаФорма.Колонки;
	Индекс = КолонкиФормы.Индекс(Данные);
	НовыйИндекс = Индекс + Смещение;
	Если НовыйИндекс < 0 Или НовыйИндекс >= КолонкиФормы.Количество() Тогда
		Возврат;
	КонецЕсли;

	КолонкиФормы.Сдвинуть(Индекс, Смещение);
	Элементы.Колонки.ТекущаяСтрока = Данные.ПолучитьИдентификатор();

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

#КонецОбласти

#Область РаботаНаСервере

&НаСервере
Функция НастройкиИзФормы()

	Результат = Новый Структура;
	Результат.Вставить("ТипЦен", ЭтаФорма.ТипЦен);
	Результат.Вставить("ТолькоВНаличии", ЭтаФорма.ТолькоВНаличии);
	Результат.Вставить("ТолькоЗапасы", ЭтаФорма.ТолькоЗапасы);
	Результат.Вставить("ЗаголовкиГрупп", ЭтаФорма.ЗаголовкиГрупп);
	Результат.Вставить("ИсточникНаименования", ЭтаФорма.ИсточникНаименования);
	Результат.Вставить("СвойствоНаименования", ЭтаФорма.СвойствоНаименования);
	Результат.Вставить("УчетнаяЗапись", ЭтаФорма.УчетнаяЗапись);
	Результат.Вставить("Получатели", ЭтаФорма.Получатели);
	Результат.Вставить("Тема", ЭтаФорма.Тема);
	Результат.Вставить("ТекстПисьма", ЭтаФорма.ТекстПисьма);
	Результат.Вставить("Формат", ЭтаФорма.Формат);

	Склады = Новый Массив;
	Для Каждого Элемент Из ЭтаФорма.Склады Цикл
		Если Элемент.Пометка Тогда
			Склады.Добавить(Элемент.Значение);
		КонецЕсли;
	КонецЦикла;
	Результат.Вставить("Склады", Склады);

	Группы = Новый Массив;
	Для Каждого СтрокаГруппы Из ЭтаФорма.ГруппыОтбора Цикл
		Если ЗначениеЗаполнено(СтрокаГруппы.Группа) Тогда
			Группы.Добавить(СтрокаГруппы.Группа);
		КонецЕсли;
	КонецЦикла;
	Результат.Вставить("Группы", Группы);

	Колонки = Новый Массив;
	Для Каждого СтрокаКолонки Из ЭтаФорма.Колонки Цикл
		Колонка = Новый Структура;
		Колонка.Вставить("Поле", СтрокаКолонки.Поле);
		Колонка.Вставить("Использовать", СтрокаКолонки.Использовать);
		Колонка.Вставить("Заголовок", СтрокаКолонки.Заголовок);
		Колонка.Вставить("Свойство", СтрокаКолонки.Свойство);
		Колонки.Добавить(Колонка);
	КонецЦикла;
	Результат.Вставить("Колонки", Колонки);

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

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

&НаСервере
Процедура ЗагрузитьНастройкиНаСервере()

	ОбъектОбработки = РеквизитФормыВЗначение("Объект");
	Настройки = ОбъектОбработки.ПолучитьНастройки(ЭтаФорма.НомерПрофиля);
	Каталог = ОбъектОбработки.КаталогПолей();

	ЭтаФорма.ТипЦен = Настройки.ТипЦен;
	ЭтаФорма.ТолькоВНаличии = Настройки.ТолькоВНаличии;
	ЭтаФорма.ТолькоЗапасы = Настройки.ТолькоЗапасы;
	ЭтаФорма.ЗаголовкиГрупп = Настройки.ЗаголовкиГрупп;
	ЭтаФорма.ИсточникНаименования = Настройки.ИсточникНаименования;
	ЭтаФорма.СвойствоНаименования = Настройки.СвойствоНаименования;
	ЭтаФорма.УчетнаяЗапись = Настройки.УчетнаяЗапись;
	ЭтаФорма.Получатели = Настройки.Получатели;
	ЭтаФорма.Тема = Настройки.Тема;
	ЭтаФорма.ТекстПисьма = Настройки.ТекстПисьма;
	ЭтаФорма.Формат = Настройки.Формат;

	// Склады: все склады списком, отмечены выбранные
	ЭтаФорма.Склады.Очистить();
	ЗапросСкладов = Новый Запрос;
	ЗапросСкладов.Текст = "ВЫБРАТЬ Ссылка КАК Склад ИЗ Справочник.СтруктурныеЕдиницы
		| ГДЕ НЕ ПометкаУдаления УПОРЯДОЧИТЬ ПО Наименование";
	Выборка = ЗапросСкладов.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Выбран = Настройки.Склады.Найти(Выборка.Склад) <> Неопределено;
		ЭтаФорма.Склады.Добавить(Выборка.Склад, Строка(Выборка.Склад), Выбран);
	КонецЦикла;

	ЭтаФорма.ГруппыОтбора.Очистить();
	Для Каждого Группа Из Настройки.Группы Цикл
		ЭтаФорма.ГруппыОтбора.Добавить().Группа = Группа;
	КонецЦикла;

	ЭтаФорма.Колонки.Очистить();
	Для Каждого Колонка Из Настройки.Колонки Цикл
		Новая = ЭтаФорма.Колонки.Добавить();
		Новая.Поле = Колонка.Поле;
		Новая.Использовать = Колонка.Использовать;
		Новая.Заголовок = Колонка.Заголовок;
		Новая.Свойство = Колонка.Свойство;
		Новая.Название = Каталог.Найти(Колонка.Поле, "Поле").Название;
	КонецЦикла;

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

&НаСервере
Процедура СохранитьНаСервере()
	РеквизитФормыВЗначение("Объект").СохранитьНастройки(ЭтаФорма.НомерПрофиля, НастройкиИзФормы());
КонецПроцедуры

&НаСервере
Процедура ОтправитьНаСервере()
	РеквизитФормыВЗначение("Объект").ОтправитьПрайс(НастройкиИзФормы());
КонецПроцедуры

&НаСервере
Процедура ПредпросмотрНаСервере()
	ТабДок = РеквизитФормыВЗначение("Объект").СформироватьПрайс(НастройкиИзФормы());
	ЗначениеВРеквизитФормы(ТабДок, "Предпросмотр");
КонецПроцедуры

#КонецОбласти

#Область ПостроениеФормы

&НаСервере
Процедура СоздатьРеквизиты()

	ТБулево = Новый ОписаниеТипов("Булево");
	ТСтрока20 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(20));
	ТСтрока30 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(30));
	ТСтрока50 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50));
	ТСтрока100 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100));
	ТСтрока200 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200));
	ТСтрока500 = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(500));
	ТСтрокаБезОграничений = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0));
	ТСвойство = Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения");

	Реквизиты = Новый Массив;
	Реквизиты.Добавить(Новый РеквизитФормы("НомерПрофиля",
		Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(1, 0)), "", "Профиль рассылки"));
	Реквизиты.Добавить(Новый РеквизитФормы("ТипЦен",
		Новый ОписаниеТипов("СправочникСсылка.ВидыЦен"), "", "Вид цен"));
	Реквизиты.Добавить(Новый РеквизитФормы("ТолькоВНаличии", ТБулево, "", "Только то, что есть в наличии"));
	Реквизиты.Добавить(Новый РеквизитФормы("ТолькоЗапасы", ТБулево, "", "Только товары (без услуг и работ)"));
	Реквизиты.Добавить(Новый РеквизитФормы("ЗаголовкиГрупп", ТБулево, "", "Выводить названия групп"));
	Реквизиты.Добавить(Новый РеквизитФормы("ИсточникНаименования", ТСтрока20, "", "Откуда брать наименование"));
	Реквизиты.Добавить(Новый РеквизитФормы("СвойствоНаименования", ТСвойство, "", "Свойство с наименованием"));
	Реквизиты.Добавить(Новый РеквизитФормы("УчетнаяЗапись",
		Новый ОписаниеТипов("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты"), "", "Учетная запись почты"));
	Реквизиты.Добавить(Новый РеквизитФормы("Получатели", ТСтрока500, "", "Получатели (через ;)"));
	Реквизиты.Добавить(Новый РеквизитФормы("Тема", ТСтрока200, "", "Тема письма"));
	Реквизиты.Добавить(Новый РеквизитФормы("ТекстПисьма", ТСтрокаБезОграничений, "", "Текст письма"));
	Реквизиты.Добавить(Новый РеквизитФормы("Формат", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(4)),
		"", "Формат файла"));
	Реквизиты.Добавить(Новый РеквизитФормы("Склады", Новый ОписаниеТипов("СписокЗначений"), "", "Склады"));
	Реквизиты.Добавить(Новый РеквизитФормы("Предпросмотр", Новый ОписаниеТипов("ТабличныйДокумент"), "", "Предпросмотр"));

	Реквизиты.Добавить(Новый РеквизитФормы("ГруппыОтбора", Новый ОписаниеТипов("ТаблицаЗначений"), "", "Группы"));
	Реквизиты.Добавить(Новый РеквизитФормы("Группа",
		Новый ОписаниеТипов("СправочникСсылка.Номенклатура"), "ГруппыОтбора", "Группа"));

	Реквизиты.Добавить(Новый РеквизитФормы("Колонки", Новый ОписаниеТипов("ТаблицаЗначений"), "", "Колонки"));
	Реквизиты.Добавить(Новый РеквизитФормы("Использовать", ТБулево, "Колонки", "Выводить"));
	Реквизиты.Добавить(Новый РеквизитФормы("Поле", ТСтрока30, "Колонки", "Поле"));
	Реквизиты.Добавить(Новый РеквизитФормы("Название", ТСтрока50, "Колонки", "Что это"));
	Реквизиты.Добавить(Новый РеквизитФормы("Заголовок", ТСтрока100, "Колонки", "Заголовок в прайсе"));
	Реквизиты.Добавить(Новый РеквизитФормы("Свойство", ТСвойство, "Колонки", "Доп. свойство (для «Доп. свойство N»)"));

	ИзменитьРеквизиты(Реквизиты);

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

&НаСервере
Процедура СоздатьЭлементы()

	// Кнопки сверху
	ГруппаКнопок = ДобавитьГруппу("ГруппаКнопок", Неопределено, ВидГруппыФормы.ОбычнаяГруппа, "Действия");
	ГруппаКнопок.Группировка = ГруппировкаГруппыФормы.Горизонтальная;
	ГруппаКнопок.ОтображатьЗаголовок = Ложь;
	ДобавитьКнопку("КнопкаСохранить", "СохранитьНастройки", "Сохранить настройки", ГруппаКнопок);
	ДобавитьКнопку("КнопкаПредпросмотр", "ПоказатьПредпросмотр", "Предпросмотр", ГруппаКнопок);
	ДобавитьКнопку("КнопкаОтправить", "ОтправитьСейчас", "Отправить сейчас", ГруппаКнопок);

	ГруппаСтраниц = ДобавитьГруппу("ГруппаСтраниц", Неопределено, ВидГруппыФормы.Страницы, "Страницы");

	// ---------- Основное ----------
	Страница = ДобавитьГруппу("СтраницаОсновное", ГруппаСтраниц, ВидГруппыФормы.Страница, "Основное");

	Поле = ДобавитьПоле("НомерПрофиля", Страница, ВидПоляФормы.ПолеВвода);
	Поле.РежимВыбораИзСписка = Истина;
	Для Номер = 1 По 3 Цикл
		Поле.СписокВыбора.Добавить(Номер);
	КонецЦикла;
	Поле.УстановитьДействие("ПриИзменении", "НомерПрофиляПриИзменении");

	ДобавитьПоле("ТипЦен", Страница, ВидПоляФормы.ПолеВвода);
	ДобавитьПоле("ТолькоВНаличии", Страница, ВидПоляФормы.ПолеФлажка);
	ДобавитьПоле("ТолькоЗапасы", Страница, ВидПоляФормы.ПолеФлажка);
	ДобавитьПоле("ЗаголовкиГрупп", Страница, ВидПоляФормы.ПолеФлажка);

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

	ДобавитьПоле("СвойствоНаименования", Страница, ВидПоляФормы.ПолеВвода);

	// ---------- Колонки ----------
	Страница = ДобавитьГруппу("СтраницаКолонки", ГруппаСтраниц, ВидГруппыФормы.Страница, "Колонки");
	ДобавитьНадпись("НадписьКолонки", Страница,
		"Отметьте нужные колонки, порядок меняйте стрелками. Строки «Доп. свойство N» — выберите справа нужное свойство.");

	ГруппаСтрелок = ДобавитьГруппу("ГруппаСтрелок", Страница, ВидГруппыФормы.ОбычнаяГруппа, "Порядок");
	ГруппаСтрелок.Группировка = ГруппировкаГруппыФормы.Горизонтальная;
	ГруппаСтрелок.ОтображатьЗаголовок = Ложь;
	ДобавитьКнопку("КнопкаВверх", "КолонкаВверх", "Вверх", ГруппаСтрелок);
	ДобавитьКнопку("КнопкаВниз", "КолонкаВниз", "Вниз", ГруппаСтрелок);

	Таблица = ДобавитьТаблицу("Колонки", Страница);
	Таблица.ИзменятьСоставСтрок = Ложь;
	Поле = ДобавитьПолеТаблицы("КолонкиИспользовать", "Колонки.Использовать", Таблица, ВидПоляФормы.ПолеФлажка);
	Поле = ДобавитьПолеТаблицы("КолонкиНазвание", "Колонки.Название", Таблица, ВидПоляФормы.ПолеВвода);
	Поле.ТолькоПросмотр = Истина;
	ДобавитьПолеТаблицы("КолонкиЗаголовок", "Колонки.Заголовок", Таблица, ВидПоляФормы.ПолеВвода);
	ДобавитьПолеТаблицы("КолонкиСвойство", "Колонки.Свойство", Таблица, ВидПоляФормы.ПолеВвода);

	// ---------- Отбор ----------
	Страница = ДобавитьГруппу("СтраницаОтбор", ГруппаСтраниц, ВидГруппыФормы.Страница, "Отбор");

	ДобавитьНадпись("НадписьСклады", Страница,
		"Склады, по которым считается остаток (если ничего не отмечено — по всем):");
	Таблица = ДобавитьТаблицу("Склады", Страница);
	Таблица.ИзменятьСоставСтрок = Ложь;
	Таблица.Высота = 6;
	ДобавитьПолеТаблицы("СкладыПометка", "Склады.Пометка", Таблица, ВидПоляФормы.ПолеФлажка);
	Поле = ДобавитьПолеТаблицы("СкладыПредставление", "Склады.Представление", Таблица, ВидПоляФормы.ПолеВвода);
	Поле.ТолькоПросмотр = Истина;

	ДобавитьНадпись("НадписьГруппы", Страница,
		"Показывать только эти группы номенклатуры (пусто — весь каталог):");
	Таблица = ДобавитьТаблицу("ГруппыОтбора", Страница);
	Таблица.Высота = 6;
	Поле = ДобавитьПолеТаблицы("ГруппыОтбораГруппа", "ГруппыОтбора.Группа", Таблица, ВидПоляФормы.ПолеВвода);
	Поле.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы;

	// ---------- Письмо ----------
	Страница = ДобавитьГруппу("СтраницаПисьмо", ГруппаСтраниц, ВидГруппыФормы.Страница, "Письмо");
	ДобавитьПоле("УчетнаяЗапись", Страница, ВидПоляФормы.ПолеВвода);
	ДобавитьПоле("Получатели", Страница, ВидПоляФормы.ПолеВвода);
	ДобавитьПоле("Тема", Страница, ВидПоляФормы.ПолеВвода);
	Поле = ДобавитьПоле("ТекстПисьма", Страница, ВидПоляФормы.ПолеВвода);
	Поле.МногострочныйРежим = Истина;
	Поле.Высота = 4;
	Поле = ДобавитьПоле("Формат", Страница, ВидПоляФормы.ПолеВвода);
	Поле.РежимВыбораИзСписка = Истина;
	Поле.СписокВыбора.Добавить("xlsx");
	Поле.СписокВыбора.Добавить("pdf");

	// ---------- Предпросмотр ----------
	Страница = ДобавитьГруппу("СтраницаПредпросмотр", ГруппаСтраниц, ВидГруппыФормы.Страница, "Предпросмотр");
	Поле = ДобавитьПоле("Предпросмотр", Страница, ВидПоляФормы.ПолеТабличногоДокумента);
	Поле.ОтображатьЗаголовок = Ложь;

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

&НаСервере
Функция ДобавитьЭлемент(Имя, ТипЭлемента, Родитель)
	Если Родитель = Неопределено Тогда
		Возврат Элементы.Добавить(Имя, ТипЭлемента);
	КонецЕсли;
	Возврат Элементы.Добавить(Имя, ТипЭлемента, Родитель);
КонецФункции

&НаСервере
Функция ДобавитьГруппу(Имя, Родитель, Вид, Заголовок)
	Группа = ДобавитьЭлемент(Имя, Тип("ГруппаФормы"), Родитель);
	Группа.Вид = Вид;
	Группа.Заголовок = Заголовок;
	Возврат Группа;
КонецФункции

&НаСервере
Функция ДобавитьПоле(ИмяРеквизита, Родитель, Вид)
	Поле = ДобавитьЭлемент(ИмяРеквизита, Тип("ПолеФормы"), Родитель);
	Поле.Вид = Вид;
	Поле.ПутьКДанным = ИмяРеквизита;
	Возврат Поле;
КонецФункции

&НаСервере
Функция ДобавитьПолеТаблицы(ИмяЭлемента, Путь, Таблица, Вид)
	Поле = ДобавитьЭлемент(ИмяЭлемента, Тип("ПолеФормы"), Таблица);
	Поле.Вид = Вид;
	Поле.ПутьКДанным = Путь;
	Возврат Поле;
КонецФункции

&НаСервере
Функция ДобавитьТаблицу(ИмяРеквизита, Родитель)
	Таблица = ДобавитьЭлемент(ИмяРеквизита, Тип("ТаблицаФормы"), Родитель);
	Таблица.ПутьКДанным = ИмяРеквизита;
	Возврат Таблица;
КонецФункции

&НаСервере
Процедура ДобавитьНадпись(Имя, Родитель, Текст)
	Надпись = ДобавитьЭлемент(Имя, Тип("ДекорацияФормы"), Родитель);
	Надпись.Вид = ВидДекорацииФормы.Надпись;
	Надпись.Заголовок = Текст;
КонецПроцедуры

&НаСервере
Процедура ДобавитьКнопку(ИмяКнопки, ИмяКоманды, Заголовок, Родитель)
	Команда = Команды.Добавить(ИмяКоманды);
	Команда.Действие = ИмяКоманды;
	Команда.Заголовок = Заголовок;
	Кнопка = ДобавитьЭлемент(ИмяКнопки, Тип("КнопкаФормы"), Родитель);
	Кнопка.ИмяКоманды = ИмяКоманды;
КонецПроцедуры

#КонецОбласти