Доброго вечера.

Вопрос следующий. Есть база 1С 7.7 Торговля и склад. Для наполнения интернет каталога потребовалось вывести всю номенклатуру и сохранить в эксель. Прайс формирует только те позиции у которых есть цены. А мне нужно вывести номенклатуру и с ценами и без. В программировании силен не очень, метод тыка и поиск решения в интернете ничего не дал. Может кто-нибудь знает, что нужно подправить в обработке price.ert или посоветует другую подходящую обработку.





Перем ТекСтрокаВТаблице; // текущая строка в таблице значений МФ

// используются для стандартного механизма кнопок "Обновить" и "Настройка"
Перем ИсхТабл;
Перем Обновить;
Перем Расшифровка;

Перем ТипЦены;

//************************************************** ****************************
// ВыбратьПоФильтру()
//
// Параметры:
// Нет
//
// Описание:
// Открывает обработку отбора элементов по произвольному фильтру
//
Процедура ВыбратьПоФильтру()

Перем ВидЗначенияПодбора;

ВидЗначенияПодбора=СокрЛП( ТаблицаМФ.Вид);

Если ПустоеЗначение(ВидЗначени� �Подбора)=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 Тогда
ИсхТабл.ПрисоединитьСекци� �("Группа" + Уровень + "|Цена");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;

Наименование = ТекЭлем.ПолнНаименование + ?(Константа.ПоказыватьАрти� �ул = 0, " " + СокрЛП(ТекЭлем.Артикул), "");
Код=ТекЭлем.Код;

ПечШтрихкод=ТекЭлем.Базова яЕдиница.Штрихкод;
ИсхТабл.ВывестиСекцию("Ном� �нклатура|Название");

Для Счетчик=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")
ТаблицаМФ.НоваяКолонка("Пр� �дставление",,,,"Вид фильтра:");
ТаблицаМФ.ВыводитьПиктогр� �ммы("ФлВкл");

// тип вид переменная название
глДобавитьВТаблицуМФ(Табл� �цаМФ,"Справочник","Номенкла тура", "Номенклатура", "По номенклатуре");
глДобавитьВТаблицуМФ(Табл� �цаМФ,"Справочник","Значения Свойств", "Номенклатура", "По свойствам номенклатуры");

ТекСтрокаВТаблице="";