Загрузка данных
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СоздатьРеквизиты();
СоздатьЭлементы();
ЭтаФорма.НомерПрофиля = 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");
// ---------- Предпросмотр ----------
Страница = ДобавитьГруппу("СтраницаПредпросмотр", ГруппаСтраниц, ВидГруппыФормы.Страница, "Предпросмотр");
Поле = ДобавитьПоле("Предпросмотр", Страница, ВидПоляФормы.ПолеТабличногоДокумента);
Поле.ОтображатьЗаголовок = Ложь;
КонецПроцедуры
&НаСервере
Функция ДобавитьЭлемент(Имя, ТипЭлемента, Родитель)
Если Родитель = Неопределено Тогда
Возврат Элементы.Добавить(Имя, ТипЭлемента);
КонецЕсли;
Возврат Элементы.Добавить(Имя, ТипЭлемента, Родитель);
КонецФункции
&НаСервере
Функция ДобавитьГруппу(Имя, Родитель, Вид, Заголовок)
Группа = ДобавитьЭлемент(Имя, Тип("ГруппаФормы"), Родитель);
Группа.Вид = Вид;
Группа.Заголовок = Заголовок;
Возврат Группа;
КонецФункции
&НаСервере
Функция ДобавитьПоле(ИмяРеквизита, Родитель, Вид)
Поле = ДобавитьЭлемент(ИмяРеквизита, Тип("ПолеФормы"), Родитель);
Поле.Вид = Вид;
Поле.ПутьКДанным = ИмяРеквизита;
Возврат Поле;
КонецФункции
&НаСервере
Функция ДобавитьПолеТаблицы(ИмяЭлемента, Путь, Таблица, Вид)
Поле = ДобавитьЭлемент(ИмяЭлемента, Тип("ПолеФормы"), Таблица);
Поле.Вид = Вид;
Поле.ПутьКДанным = Путь;
Возврат Поле;
КонецФункции
&НаСервере
Функция ДобавитьТаблицу(ИмяРеквизита, Родитель)
Таблица = ДобавитьЭлемент(ИмяРеквизита, Тип("ТаблицаФормы"), Родитель);
Таблица.ПутьКДанным = ИмяРеквизита;
Возврат Таблица;
КонецФункции
&НаСервере
Процедура ДобавитьНадпись(Имя, Родитель, Текст)
Надпись = ДобавитьЭлемент(Имя, Тип("ДекорацияФормы"), Родитель);
Надпись.Вид = ВидДекорацииФормы.Надпись;
Надпись.Заголовок = Текст;
КонецПроцедуры
&НаСервере
Процедура ДобавитьКнопку(ИмяКнопки, ИмяКоманды, Заголовок, Родитель)
Команда = Команды.Добавить(ИмяКоманды);
Команда.Действие = ИмяКоманды;
Команда.Заголовок = Заголовок;
Кнопка = ДобавитьЭлемент(ИмяКнопки, Тип("КнопкаФормы"), Родитель);
Кнопка.ИмяКоманды = ИмяКоманды;
КонецПроцедуры
#КонецОбласти