Перем ТекСтрокаВТаблице; // текущая строка в таблице значений МФ
// используются для стандартного механизма кнопок "Обновить" и "Настройка"
Перем ИсхТабл;
Перем Обновить;
Перем Расшифровка;
Перем ТипЦены;
//******************************************************************************
// ВыбратьПоФильтру()
//
// Параметры:
// Нет
//
// Описание:
// Открывает обработку отбора элементов по произвольному фильтру
//
Процедура ВыбратьПоФильтру()
Перем ВидЗначенияПодбора;
ВидЗначенияПодбора=СокрЛП(ТаблицаМФ.Вид);
Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда
Возврат;
КонецЕсли;
СписокПараметров=СоздатьОбъект("СписокЗначений");
СписокПараметров.ДобавитьЗначение("", "ИмяВызвавшейФормы");
СписокПараметров.ДобавитьЗначение(ТаблицаМФ.Тип, "Тип");
СписокПараметров.ДобавитьЗначение(ВидЗначенияПодбора,"Вид");
СписокПараметров.ДобавитьЗначение(СписокЭлементовМФ, "Объекты");
ТаблицаМФ.ФлВкл=2;
ОткрытьФорму("Обработка.ПодборОбъектов#",СписокПараметров);
КонецПроцедуры // ВыбратьПоФильтру
//******************************************************************************
// ПерерисовкаНазванийЗакладок
//
// Параметры:
// Нет
//
// Описание:
// Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан
//
Функция ПерерисовкаНазванийЗакладок()
Врем = Форма.Закладки.ПолучитьЗначение(2);
Форма.Закладки.УстановитьЗначение(2, Врем,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр");
КонецФункции // ПерерисовкаНазванийЗакладок
//******************************************************************************
// СформироватьСписокПомеченных()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Список значений, состоящий из помеченных значений из списка значений ТипыЦен
//
// Описание:
// Формирует список значений, состоящий только из помеченных значений из списка
// значений ТипыЦен.
//
Функция СформироватьСписокПомеченных()
РезСписок = СоздатьОбъект("СписокЗначений");
Для Счетчик = 1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
РезСписок.ДобавитьЗначение(ТипыЦен.ПолучитьЗначение(Счетчик));
КонецЕсли;
КонецЦикла;
Возврат РезСписок;
КонецФункции // СформироватьСписокПомеченных()
//******************************************************************************
// ОбработкаСпискаТиповЦен(Пометки)
//
// Параметры:
// ВклТипы - список значений, содержащий типы цен, которые нужно пометить.
//
// Возвращаемое значение:
// Нет
//
// Описание:
// Зполняет из справочника ТипыЦен список значений ТипыЦен и устанавливает
// пометки у тех типов, которые находятся в списке значений ВклТипы.
//
Процедура ОбработкаСпискаТиповЦен(ВклТипы)
// очистим список
ТипыЦен.УдалитьВсе();
// перезаполним список из справочника
СпрТипыЦен = СоздатьОбъект("Справочник.ТипыЦен");
СпрТипыЦен.ВыбратьЭлементы();
Пока СпрТипыЦен.ПолучитьЭлемент() = 1 Цикл
ТипыЦен.ДобавитьЗначение(СпрТипыЦен.ТекущийЭлемент());
КонецЦикла;
// проставим пометки
Для Счетчик = 1 По ВклТипы.РазмерСписка() Цикл
Поз = ТипыЦен.НайтиЗначение(ВклТипы.ПолучитьЗначение(Счетчик));
Если Поз > 0 Тогда
ТипыЦен.Пометка(Поз, 1);
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ОбработкаСпискаТиповЦен()
//******************************************************************************
// РасшифровкаОбновить(Обновить)
//
// Параметры:
// Обновить = 1 - нажата кнопка "Обновить"
// 2 - нажата кнопка "Настройка"
//
// Возвращаемое значение:
// Расшифровка (список значений)
//
// Вызывается из формул элементов диалога:
// из таблицы, кнопки "Обновить" и "Настройка"
//
// Описание:
// функция для стандартного механизма кнопок ""Обновить" и "Настройка""
// помещает значение параметра в список Расшифровка и возвращает этот список
//
Функция РасшифровкаОбновить(Обновить)
Расшифровка.Установить("Обновить", Обновить);
Возврат Расшифровка;
КонецФункции //РасшифровкаОбновить()
//******************************************************************************
// Процедура Сформировать(ЗакрытьДиалог=0)
//
// Параметры:
// ЗакрытьДиалог - флаг того, что после формирования отчета надо закрыть диалог
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул элементов диалога:
// кнопки "Сформировать" и "ОК"
//
// Описание:
// Запускает печать прайс-листа.
//
Процедура Сформировать(ЗакрытьДиалог=0)
// хоть одна цена в списке цен должна быть выбрана
ЕстьПомеченые = 0;
Для СчетчикЦикла = 1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(СчетчикЦикла) = 1 Тогда
ЕстьПомеченые = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьПомеченые = 0 Тогда
Предупреждение("Не выбрано ни одного типа цены", 60);
Возврат;
КонецЕсли;
Если (ТипЗначенияСтр(ИсхТабл) <> "Таблица") ИЛИ (Обновить = 0) Тогда
ИсхТабл = СоздатьОбъект("Таблица");
Иначе
ИсхТабл.Очистить();
КонецЕсли;
ИсхТабл.ИсходнаяТаблица( "Таблица" );
Расшифровка = СоздатьОбъект("СписокЗначений");
Путь = "";
ИмяФайла = "";
РасположениеФайла(Путь,ИмяФайла);
ФайлОтчета = Путь + ИмяФайла;
Расшифровка.Установить("Отчет", ?(ПустоеЗначение(ФайлОтчета) = 1,"ПечатьПрайса", ФайлОтчета));
// Все настройки помещаем в список
Расшифровка.Установить("ДатаОтчета", ДатаОтчета);
Расшифровка.Установить("ВыбТМЦ", ВыбТМЦ);
Расшифровка.Установить("ПоНаличию" , ПоНаличию);
Расшифровка.Установить("ВидРазделителя", ВидРазделителя);
Расшифровка.Установить("ВыбРазделитель1", ВыбРазделитель1);
Расшифровка.Установить("ВыбРазделитель2", ВыбРазделитель2);
Расшифровка.Установить("ВыбРазделитель3", ВыбРазделитель3);
Расшифровка.Установить("Склад", Склад);
Расшифровка.Установить("ВариантВключенияВпрайс", ВариантВключенияВпрайс);
Расшифровка.Установить("ТипыЦен", СформироватьСписокПомеченных());
глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были
// Запомним МФ только если он задан
Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);
КонецЕсли;
// Заголовок отчета
ИсхТабл.ВывестиСекцию("Кнопки");
НачПовтСекц = ИсхТабл.ВысотаСекции("Кнопки");
ОсновнаяФирма = глЗначениеПоУмолчанию("ОсновнаяФирма");
НаименованиеФирмы = СокрЛП(ОсновнаяФирма.ЮрЛицо.ПолнНаименование);
ИсхТабл.ВывестиСекцию("Заголовок");
НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("Заголовок");
ДопЗаголовок = "";
Если ПустоеЗначение(ОсновнаяФирма.ЮрЛицо.ЮрАдрес) = 0 Тогда
ДопЗаголовок = "Адрес: "+ СокрЛП(ОсновнаяФирма.ЮрЛицо.ЮрАдрес);
КонецЕсли;
Если ПустоеЗначение(ОсновнаяФирма.ЮрЛицо.Телефоны) = 0 Тогда
ДопЗаголовок = ДопЗаголовок + РазделительСтрок + "Телефоны: "+ СокрЛП(ОсновнаяФирма.ЮрЛицо.Телефоны);
КонецЕсли;
Если ПустоеЗначение(ОсновнаяФирма.ЭлПочта) = 0 Тогда
ДопЗаголовок = ДопЗаголовок + РазделительСтрок + "E-mail: " + СокрЛП(ОсновнаяФирма.ЭлПочта);
КонецЕсли;
Если ПустоеЗначение(ДопЗаголовок) = 0 Тогда
ИсхТабл.ВывестиСекцию("ДопЗаголовок");
НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("ДопЗаголовок");
КонецЕсли;
ИсхТабл.ВывестиСекцию("ДатаПрайса");
НачПовтСекц = НачПовтСекц + ИсхТабл.ВысотаСекции("ДатаПрайса");
ИсхТабл.ВывестиСекцию("ШапкаТаблицы|Название");
КонПовтСекции = НачПовтСекц + ИсхТабл.ВысотаСекции("ШапкаТаблицы");
ИсхТабл.ПовторятьПриПечатиСтроки(НачПовтСекц + 1, КонПовтСекции);
// Присоединим заголовку названия цен
Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ТекТипЦены = ТипыЦен.ПолучитьЗначение(Счетчик);
ШапкаЦены = СокрЛП(ТекТипЦены.Наименование);
Если ТекТипЦены.Рассчитывается = 0 Тогда
ОсновнойТип = ТекТипЦены;
Иначе
ОсновнойТип = ТекТипЦены.БазовыйТипЦен;
КонецЕсли;
Если ОсновнойТип.ЦенаВклНДС = ОсновнойТип.ЦенаВклНП Тогда
Если ОсновнойТип.ЦенаВклНДС = 1 Тогда
НалогиЦены = "(включая НДС и НП)"
Иначе
НалогиЦены = "(без учета НДС и НП)";
КонецЕсли;
Иначе
Если ОсновнойТип.ЦенаВклНДС = 1 Тогда
НалогиЦены = "(включая НДС," + РазделительСтрок;
Иначе
НалогиЦены = "(без учета НДС," + РазделительСтрок;
КонецЕсли;
Если ОсновнойТип.ЦенаВклНП = 1 Тогда
НалогиЦены = НалогиЦены + " включая НП)";
Иначе
НалогиЦены = НалогиЦены + " без учета НП)";
КонецЕсли;
КонецЕсли;
ИсхТабл.ПрисоединитьСекцию("ШапкаТаблицы|Цена");
КонецЕсли;
КонецЦикла;
// текст запроса по выбранным ценам
ТекстЗапроса = "//{{ЗАПРОС(ОтборЦен)
|Период с ДатаОтчета по ДатаОтчета;
|Номенклатура = Справочник.Цены.Владелец;
|Тип = Справочник.Цены.ТипЦен;
|Цена = Справочник.Цены.Цена;
|Единица = Справочник.Цены.Единица;
|Валюта = Справочник.Цены.Валюта;
|Функция ЦенаСумма = Сумма(Цена);
|Группировка Номенклатура Упорядочить по Номенклатура.Наименование;
|Группировка Тип;
|"//}}ЗАПРОС
;
Если ПоНаличию = 1 Тогда
ТекстЗапросаОстатков = "
|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|
|Функция КоличествоКонОст = КонОст(Количество);
|
|Группировка Номенклатура без групп;";
Если ВидРазделителя = 2 Тогда
Если ПустоеЗначение(ВыбРазделитель1) = 0 Тогда
// нужен фильтр по фирме
ТекстЗапросаОстатков = "Фирма = Регистр.ОстаткиТМЦ.Фирма;" +
ТекстЗапросаОстатков +
"Условие(Фирма = ВыбРазделитель1);";
КонецЕсли;
ИначеЕсли ВидРазделителя = 3 Тогда
Если ПустоеЗначение(ВыбРазделитель2) = 0 Тогда
// нужен фильтр по ЮрЛицу фирмы
ТекстЗапросаОстатков = "ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо;" +
ТекстЗапросаОстатков +
"Условие(ЮрЛицо = ВыбРазделитель2);";
КонецЕсли;
ИначеЕсли ВидРазделителя = 4 Тогда
Если ПустоеЗначение(ВыбРазделитель3) = 0 Тогда
// нужен фильтр по УпрАналитике фирмы
ТекстЗапросаОстатков = "УпрАналитика = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика;" +
ТекстЗапросаОстатков +
"Условие(УпрАналитика = ВыбРазделитель3);";
КонецЕсли;
КонецЕсли;
Если ПустоеЗначение(Склад) = 0 Тогда
// нужен фильтр по складу
ТекстЗапросаОстатков = "Скл = Регистр.ОстаткиТМЦ.Склад;" +
ТекстЗапросаОстатков +
"Условие(Скл = Склад);";
КонецЕсли;
ЗапросПоОстаткам = СоздатьОбъект("Запрос");
Если ЗапросПоОстаткам.Выполнить(ТекстЗапросаОстатков) = 0 Тогда
Возврат;
КонецЕсли;
СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
Пока ЗапросПоОстаткам.Группировка(1) = 1 Цикл
Если ЗапросПоОстаткам.КоличествоКонОст > 0 Тогда
СписокНоменклатуры.ДобавитьЗначение(ЗапросПоОстаткам.Номенклатура);
КонецЕсли;
КонецЦикла;
// Добавим услуги и работы в список номенклатуры
ВидыУслуг = СоздатьОбъект("СписокЗначений");
ВидыУслуг.ДобавитьЗначение(Перечисление.ВидыНоменклатуры.Услуга);
ВидыУслуг.ДобавитьЗначение(Перечисление.ВидыНоменклатуры.Работа);
ТекстЗапросаУслуг = "
|Номенклатура = Справочник.Цены.Владелец;
|Группировка Номенклатура без групп;
|Условие (Номенклатура.ВидНоменклатуры в ВидыУслуг);";
ЗапросПоУслугам = СоздатьОбъект("Запрос");
Если ЗапросПоУслугам.Выполнить(ТекстЗапросаУслуг) = 0 Тогда
Возврат;
КонецЕсли;
Пока ЗапросПоУслугам.Группировка(1) = 1 Цикл
СписокНоменклатуры.ДобавитьЗначение(ЗапросПоУслугам.Номенклатура);
КонецЦикла;
Если СписокНоменклатуры.РазмерСписка() = 0 Тогда
Предупреждение("Заданным условиям фильтра не удовлетворяет ни одна позиция номенклатуры.",60);
Возврат;
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "Условие(Номенклатура в СписокНоменклатуры);"
КонецЕсли;
// Добавим отбор по флагу включения в прайс
Если ВариантВключенияВпрайс > 1 Тогда
Если ВариантВключенияВпрайс = 2 Тогда
ТекстЗапроса = ТекстЗапроса + "Условие ( Номенклатура.НеВключатьВпрайс = 0);";
Иначе
ТекстЗапроса = ТекстЗапроса + "Условие ( Номенклатура.НеВключатьВпрайс = 1);";
КонецЕсли;
КонецЕсли;
НетОш = 1; // нет ошибок при наложении фильтров
НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура", ВыбТМЦ, "ВыбТМЦ", ТекстЗапроса, , "СвойстваНоменклатуры");
Если НетОш = 0 Тогда
Возврат;
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
ТаблицаЦен = СоздатьОбъект("ТаблицаЗначений");
ТаблицаЦен.НоваяКолонка("Тип");
ТаблицаЦен.НоваяКолонка("Цена");
ТаблицаЦен.НоваяКолонка("Единица");
ТаблицаЦен.НоваяКолонка("Валюта");
ТаблицаЦен.НоваяКолонка("Код");
ТекущаяГруппа= ПолучитьПустоеЗначение("Справочник.Номенклатура");
Пока Запрос.Группировка("Номенклатура") = 1 Цикл
ТекЭлем = Запрос.Номенклатура;
Уровень = ТекЭлем.Уровень();
Если Уровень > 4 Тогда
Уровень = 4;
КонецЕсли;
Если ТекЭлем.ЭтоГруппа() = 0 Тогда
ТаблицаЦен.УдалитьСтроки();
Пока Запрос.Группировка("Тип") = 1 Цикл
Если Запрос.ЦенаСумма = 0 Тогда
Продолжить;
КонецЕсли;
ТаблицаЦен.НоваяСтрока();
ТаблицаЦен.Тип = Запрос.Тип;
ТаблицаЦен.Цена = Запрос.ЦенаСумма;
ТаблицаЦен.Единица = Запрос.Единица;
ТаблицаЦен.Валюта = Запрос.Валюта;
КонецЦикла;
Если ТаблицаЦен.КоличествоСтрок() = 0 Тогда
Продолжить;
КонецЕсли;
// Отделяем товары группы от товаров ее подгрупп
Если ПустоеЗначение(ТекущаяГруппа) = 0 Тогда
Если ТекЭлем.ПринадлежитГруппе(ТекущаяГруппа)= 0 Тогда
ТекущаяГруппа = ТекЭлем.Родитель;
// В качестве разделителя выводим название той-же группы более мелким уровнем
Наименование = ТекущаяГруппа.Наименование;
ИсхТабл.ВывестиСекцию("Группа" + Уровень + "|Название");
Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ИсхТабл.ПрисоединитьСекцию("Группа" + Уровень + "|Цена");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Наименование = ТекЭлем.ПолнНаименование + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(ТекЭлем.Артикул), "");
ИсхТабл.ВывестиСекцию("Номенклатура|Название");
Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ТекТип = ТипыЦен.ПолучитьЗначение(Счетчик);
Если ТекТип.Рассчитывается = 1 Тогда
ИспТип = ТекТип.БазовыйТипЦен;
Иначе
ИспТип = ТекТип;
КонецЕсли;
// поищем тип в таблице
Поз = 0;
Если ТаблицаЦен.НайтиЗначение(ИспТип, Поз, "Тип") = 1 Тогда
ТаблицаЦен.ПолучитьСтрокуПоНомеру(Поз);
Цена = ТаблицаЦен.Цена;
Единица = ТаблицаЦен.Единица;
Если ТекТип.Рассчитывается = 1 Тогда
// нужно пересчитать цену
Цена = глПересчет(Цена, ТаблицаЦен.Валюта, ДатаОтчета, ТекТип.Валюта, ДатаОтчета);
Цена = глОкруглить(Цена * (100 + ТекТип.Процент) / 100, ТекТип.ПорядокОкругления);
ПечЦена = глФРМ(Цена, ТекТип.Валюта);
Иначе
ПечЦена = глФРМ(Цена, ТаблицаЦен.Валюта);
КонецЕсли;
ПечЕдиница = Единица;
Иначе
ПечЦена = "";
КонецЕсли;
ИсхТабл.ПрисоединитьСекцию("Номенклатура|Цена");
КонецЕсли;
КонецЦикла;
Иначе // ЭтоГруппа() = 1
// Запоминаем текущую группу
ТекущаяГруппа = ТекЭлем;
Наименование = ТекЭлем.Наименование;
ИсхТабл.ВывестиСекцию("Группа" + Уровень + "|Название");
Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ИсхТабл.ПрисоединитьСекцию("Группа" + Уровень + "|Цена");
КонецЕсли;
КонецЦикла;
ИсхТабл.ПрисоединитьСекцию("Группа" + Уровень + "|ПравГраница");
КонецЕсли; // ТекЭлем.ЭтоГруппа() = 0
КонецЦикла;
// подвал отчета
ИсхТабл.ВывестиСекцию("Подвал|Название");
Для Счетчик=1 По ТипыЦен.РазмерСписка() Цикл
Если ТипыЦен.Пометка(Счетчик) = 1 Тогда
ИсхТабл.ПрисоединитьСекцию("Подвал|Цена");
КонецЕсли;
КонецЦикла;
// покажем таблицу
ИсхТабл.ОбластьПечати(3);
ИсхТабл.Опции(0,0,0,0,"ПечатьПрайса", "ПечатьПрайса");
ИсхТабл.ТолькоПросмотр(1);
ИсхТабл.Показать("Печать прайс-листа","");
Если (Обновить = 2) или (ЗакрытьДиалог=1) Тогда
СтрокаДействийФормы = "#Закрыть";
КонецЕсли;
КонецПроцедуры // Сформировать()
//******************************************************************************
// Сдвиг(Направление)
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул диалога:
// по кнопкам со стрелочками "вверх" или "Вниз"
//
// Описание:
// Сдвигает текущую строку списка цен в заданном направлении.
//
Процедура Сдвиг(Направление)
ТекСтрока = ТипыЦен.ТекущаяСтрока();
Если ТекСтрока > 0 Тогда
ТипыЦен.СдвинутьЗначение(Направление, ТекСтрока);
КонецЕсли;
КонецПроцедуры // Сдвиг()
//******************************************************************************
// УправлениеДиалогом()
//
// Параметры:
// Нет
//
// Возвращаемое значение:
// Нет
//
// Вызывается из формул диалога:
// Флаг "ПоНаличию", переключатель "ВидРазделителя"
//
// Описание:
// Управление видимостью и доступностью элементов форм
//
Процедура УправлениеДиалогом()
ТекСтрока = Форма.Закладки.ТекущаяСтрока();
Если ТекСтрока = 1 Тогда
Если ПустоеЗначение(ВидРазделителя) = 1 Тогда
ВидРазделителя =1;
КонецЕсли;
Форма.ИспользоватьСлой(Форма.Закладки.ПолучитьЗначение(ТекСтрока) +
?(ВидРазделителя > 1, ",Разделитель"+СокрЛП(ВидРазделителя - 1),""));
Если ПоНаличию = 0 Тогда
// все связанное с фирмами недоступно
Форма.ВидРазделителя. Доступность(0);
Форма.ВыбРазделитель1.Доступность(0);
Форма.ВидРазделителя1.Доступность(0);
Форма.кнХРазделитель1.Доступность(0);
Форма.ВыбРазделитель2.Доступность(0);
Форма.ВидРазделителя2.Доступность(0);
Форма.кнХРазделитель2.Доступность(0);
Форма.ВыбРазделитель3.Доступность(0);
Форма.ВидРазделителя3.Доступность(0);
Форма.кнХРазделитель3.Доступность(0);
Форма.Склад.Доступность(0);
Форма.ТекстСклад.Доступность(0);
Форма.кнХСклад.Доступность(0);
Иначе
Форма.ВидРазделителя. Доступность(1);
Форма.ВыбРазделитель1.Доступность(1);
Форма.ВидРазделителя1.Доступность(1);
Форма.кнХРазделитель1.Доступность(1);
Форма.ВыбРазделитель2.Доступность(1);
Форма.ВидРазделителя2.Доступность(1);
Форма.кнХРазделитель2.Доступность(1);
Форма.ВыбРазделитель3.Доступность(1);
Форма.ВидРазделителя3.Доступность(1);
Форма.кнХРазделитель3.Доступность(1);
Форма.Склад.Доступность(1);
Форма.ТекстСклад.Доступность(1);
Форма.кнХСклад.Доступность(1);
КонецЕсли;
Иначе
Форма.ИспользоватьСлой(Форма.Закладки.ПолучитьЗначение(ТекСтрока));
КонецЕсли;
КонецПроцедуры // УправлениеДиалогом()
//******************************************************************************
// Предопределенная процедура
//
Процедура ВводНового()
УправлениеДиалогом();
ПерерисовкаНазванийЗакладок();
ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");
// восстановим из настройки пометки у типов цен
ОбработкаСпискаТиповЦен(СформироватьСписокПомеченных());
КонецПроцедуры // ВводНового()
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриОткрытии(ФлагЧтенияНастройки)
Перем СписокПомеченных;
Если глФлагРасшифровки = 1 Тогда
Обновить = глОбновить;
// Восстанавливаем настройки из списка
ДатаОтчета = глРасшифровка.Получить("ДатаОтчета");
ВыбТМЦ = глРасшифровка.Получить("ВыбТМЦ");
ПоНаличию = глРасшифровка.Получить("ПоНаличию");
ВидРазделителя = глРасшифровка.Получить("ВидРазделителя");
ВыбРазделитель1 = глРасшифровка.Получить("ВыбРазделитель1");
ВыбРазделитель2 = глРасшифровка.Получить("ВыбРазделитель2");
ВыбРазделитель3 = глРасшифровка.Получить("ВыбРазделитель3");
Склад = глРасшифровка.Получить("Склад");
ВариантВключенияВпрайс = глРасшифровка.Получить("ВариантВключенияВпрайс");
ВремТипыЦен = глРасшифровка.Получить("ТипыЦен");
ОбработкаСпискаТиповЦен(ВремТипыЦен);
Если ТипЗначенияСтр(глРасшифровка.Получить("ТаблицаМФ"))="ТаблицаЗначений" Тогда
ТаблицаМФ.Загрузить(глРасшифровка.Получить("ТаблицаМФ"));
КонецЕсли;
Если Обновить <> 0 Тогда
ИсхТабл = глТаблица;
КонецЕсли;
Если Обновить <> 2 Тогда
Сформировать();
СтатусВозврата(0);
Возврат;
КонецЕсли;
Иначе
Обновить = 0;
ВремТипыЦен = СоздатьОбъект("СписокЗначений");
Если ФлагЧтенияНастройки = 1 Тогда
// формируем список, содержащий типы цен с пометками
ВремТипыЦен = СформироватьСписокПомеченных();
КонецЕсли;
Если ПустоеЗначение(ДатаОтчета) = 1 Тогда
ДатаОтчета = РабочаяДата();
КонецЕсли;
Если ПустоеЗначение(ВариантВключенияВпрайс) = 1 Тогда
ВариантВключенияВпрайс = 1;
КонецЕсли;
КонецЕсли;
// установка видимости колонок ТЗ множественного фильтра
ТаблицаМФ.ВидимостьКолонки("Тип",0);
ТаблицаМФ.ВидимостьКолонки("Вид",0);
ТаблицаМФ.ВидимостьКолонки("СписокЭлементов",0);
ТаблицаМФ.ВидимостьКолонки("ТипМФ",0);
ТаблицаМФ.ВидимостьКолонки("ИмяПеременной",0);
ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");
УправлениеДиалогом();
ПерерисовкаНазванийЗакладок();
КонецПроцедуры // ПриОткрытии()
//******************************************************************************
// Предопределенная процедура
//
Процедура ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки)
УправлениеДиалогом();
ПерерисовкаНазванийЗакладок();
КонецПроцедуры // ПриВыбореЗнакладки()
//******************************************************************************
// Предопределенная процедура
//
Процедура ОбработкаПодбора(Значение)
Если (СписокЭлементовМФ.НайтиЗначение(Значение)=0) Тогда
Представление=""+Значение;
Если ТипЗначенияСтр(Значение)="Справочник" Тогда
Если СокрЛП(Метаданные.Справочник(Значение.Вид()).Владелец) <> "Метаданные" Тогда
Представление=Представление+" ("+Значение.Владелец+")";
КонецЕсли;
КонецЕсли;
СписокЭлементовМФ.ДобавитьЗначение(Значение,Представление);
ТаблицаМФ.ФлВкл=2;
КонецЕсли;
КонецПроцедуры // ОбработкаПодбора
//******************************************************************************
// добавим закладки
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.ДобавитьЗначение("Общий,Основной,Кнопки","Основная");
Форма.Закладки.ДобавитьЗначение("Общий,МФ,Кнопки","Множественный фильтр");
Форма.Закладки.ТекущаяСтрока(1);
// инициализация переменных множественного фильтра
ТипМФ.УдалитьВсе();
ТипМФ.ДобавитьЗначение("одно из");
ТипМФ.ДобавитьЗначение("все кроме");
ТаблицаМФ.УдалитьСтроки();
Пока ТаблицаМФ.КоличествоКолонок()>0 Цикл
ТаблицаМФ.УдалитьКолонку(1);
КонецЦикла;
ТаблицаМФ.НоваяКолонка("Тип");
ТаблицаМФ.НоваяКолонка("Вид");
ТаблицаМФ.НоваяКолонка("ИмяПеременной");
ТаблицаМФ.НоваяКолонка("СписокЭлементов"); // список элементов, по которым производим фильтрацию
ТаблицаМФ.НоваяКолонка("ТипМФ"); // текущая строка списка ТипМФ
ТаблицаМФ.НоваяКолонка("ФлВкл","Число",1,,"Вкл",5,,); // фильтр включен ("1" или "0")
ТаблицаМФ.НоваяКолонка("Представление",,,,"Вид фильтра:");
ТаблицаМФ.ВыводитьПиктограммы("ФлВкл");
// тип вид переменная название
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","Номенклатура", "Номенклатура", "По номенклатуре");
глДобавитьВТаблицуМФ(ТаблицаМФ,"Справочник","ЗначенияСвойств", "Номенклатура", "По свойствам номенклатуры");
ТекСтрокаВТаблице="";