# Форум 1С > Общие вопросы по 1С - Предприятие > 1С - Предприятие 7.7 >  Вывод всей номенклатуры в виде прайса.

## diadora83

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

Вопрос следующий. Есть база 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")
ТаблицаМФ.НоваяКолонка("Пр  дставление",,,,"Вид фильтра:");
ТаблицаМФ.ВыводитьПиктогр  ммы("ФлВкл");

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

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

----------


## alexandr_ll

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


Воспользуйтесь стандартной внешней обработкой печати справочников REFPRINT.ERT с диска ИТС
https://cloud.mail.ru/public/2eGA/4cG35wCvn

----------

