# Форум 1С > Конфигурирование, программирование 1С - Предприятие >  внешние обработки печать ценника

## Naran

Здравствуйте, я в программировании еще пока не очень, подскажите редактировал с помощью внешней обработки ценник все сделал сохранил потом конфигуратор выдал что надо обновиться перед этим заменил встроенную обработку на внешнюю и обновил.Зашел в преприятие в номенклатура печать и выдает такую ошибку
{Обработка.ПечатьЦенников.  орма.Форма.Форма(153,44)}: Процедура или функция с указанным именем не определена (ПечатьЦенника)
УниверсальныеМеханизмы.На  ечататьДокумент(<<?>>Печать  енника(), , , "Ценники");
Примерно понимаю что надо в модуле прописать эскпорт или что то еще. Если кто знает пришлите скрин или как это прописать или исправить? Заранее благодарен!

----------


## alexandr_ll

> Здравствуйте, я в программировании еще пока не очень, подскажите редактировал с помощью внешней обработки ценник все сделал сохранил потом конфигуратор выдал что надо обновиться перед этим заменил встроенную обработку на внешнюю и обновил.Зашел в преприятие в номенклатура печать и выдает такую ошибку
> {Обработка.ПечатьЦенников.  орма.Форма.Форма(153,44)}: Процедура или функция с указанным именем не определена (ПечатьЦенника)
> УниверсальныеМеханизмы.На  ечататьДокумент(<<?>>Печать  енника(), , , "Ценники");
> Примерно понимаю что надо в модуле прописать эскпорт или что то еще. Если кто знает пришлите скрин или как это прописать или исправить? Заранее благодарен!


Следует указывать конфигурацию и релиз.
Вы в качестве первого параметра передаете функцию (?) "ПечатьЦенника()", обычно первый параметр - это табличный документ (переменная). Посмотрите в общем модуле "УниверсальныеМеханизмы"  ..

----------


## Naran

#Если Клиент Тогда

// Процедура заполняет построитель отчета.
//
Процедура ЗаполнитьПостроительОтчет  а() Экспорт

	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	ИСТИНА КАК Печать,
	|	СпрНоменклатура.Номенклат  ра КАК Номенклатура,
	|	СпрНоменклатура.Характери  тикаНоменклатуры КАК ХарактеристикаНоменклатур  ы,
	|	СпрНоменклатура.Номенклат  ра.ЕдиницаХраненияОстатко  в КАК ЕдиницаИзмерения,
	|	0 КАК Цена,
	|	1 КАК Количество
	|ИЗ
	|	(ВЫБРАТЬ
	|		СпрНоменклатура.Ссылка КАК Номенклатура,
	|		ЗНАЧЕНИЕ(Справочник.Характ  еристикиНоменклатуры.Пуст  яСсылка) КАК ХарактеристикаНоменклатур  ы
	|	ИЗ
	|		Справочник.Номенклатура КАК СпрНоменклатура
	|	ГДЕ НЕ СпрНоменклатура.ЭтоГруппа
	|	{ГДЕ
	|		СпрНоменклатура.Ссылка.* КАК Номенклатура}
	|	ОБЪЕДИНИТЬ ВСЕ
	|	ВЫБРАТЬ
	|		СпрХарактеристики.Владеле  ,
	|		СпрХарактеристики.Ссылка
	|	ИЗ
	|		Справочник.Характеристики  оменклатуры КАК СпрХарактеристики
	|	{ГДЕ
	|		СпрХарактеристики.Владеле  .* КАК Номенклатура,
	|		СпрХарактеристики.Ссылка.* КАК ХарактеристикаНоменклатур  ы}
	|	) КАК СпрНоменклатура
	|";

	Если ТолькоИмеющиесяВНаличии Тогда
		ТекстЗапроса = ТекстЗапроса + "
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	(ВЫБРАТЬ
		|		НаСкладе.Номенклатура,
		|		НаСкладе.ХарактеристикаНо  енклатуры,
		|		СУММА(НаСкладе.Количество) КАК Количество
		|	ИЗ
		|		(ВЫБРАТЬ
		|			НаСкладе.Номенклатура,
		|			НаСкладе.ХарактеристикаНо  енклатуры,
		|			НаСкладе.КоличествоОстато   КАК Количество
		|		ИЗ
		|			РегистрНакопления.ТоварыН  Складах.Остатки(, {Номенклатура.* КАК Номенклатура,
		|			   ХарактеристикаНоменклатур  ы.* КАК ХарактеристикаНоменклатур  ы,
		|			   Склад.* КАК Склад}) КАК НаСкладе
		|		ОБЪЕДИНИТЬ ВСЕ
		|		ВЫБРАТЬ
		|			ВРознице.Номенклатура,
		|			ВРознице.ХарактеристикаНо  енклатуры,
		|			ВРознице.КоличествоОстато   КАК Количество
		|		ИЗ
		|			РегистрНакопления.ТоварыВ  ознице.Остатки(, {Номенклатура.* КАК Номенклатура,
		|			   ХарактеристикаНоменклатур  ы.* КАК ХарактеристикаНоменклатур  ы,
		|			   Склад.* КАК Склад}) КАК ВРознице
		|		ОБЪЕДИНИТЬ ВСЕ
		|		ВЫБРАТЬ
		|			ВНТТ.Номенклатура,
		|			ВНТТ.ХарактеристикаНоменк  атуры,
		|			ВНТТ.КоличествоОстаток КАК Количество
		|		ИЗ
		|			РегистрНакопления.ТоварыВ  ТТ.Остатки(, {Номенклатура.* КАК Номенклатура,
		|			   ХарактеристикаНоменклатур  ы.* КАК ХарактеристикаНоменклатур  ы,
		|			   Склад.* КАК Склад}) КАК ВНТТ
		|		) КАК НаСкладе
		|	СГРУППИРОВАТЬ ПО
		|		НаСкладе.Номенклатура,
		|		НаСкладе.ХарактеристикаНо  енклатуры
		|	) КАК НаСкладе
		|ПО
		|	СпрНоменклатура.Номенклат  ра = НаСкладе.Номенклатура
		|	И СпрНоменклатура.Характери  тикаНоменклатуры = НаСкладе.ХарактеристикаНо  енклатуры
		|ГДЕ
		|	ЕСТЬNULL(НаСкладе.Количество  , 0) > 0
		|";
	КонецЕсли;

	ТекстЗапроса = ТекстЗапроса + "
	|УПОРЯДОЧИТЬ ПО
	|	СпрНоменклатура.Номенклат  ра.Наименование,
	|	СпрНоменклатура.Характери  тикаНоменклатуры.Наименов  ание
	|";

	// Соответствие имен полей в запросе и их представлений в отчете.
	СтруктураПредставлениеПол  ей = Новый Структура(
	"Номенклатура,   ХарактеристикаНоменклатур  ы,    Склад",
	"Номенклатура", "Характеристика номенклатуры", "Склад");

	ПостроительОтчета.Текст = ТекстЗапроса;

	ПостроительОтчета.Заполни  ьНастройки();

	// Создадим список доступных отборов.
	СоответствиеДоступныхОтбо  ров = Новый Соответствие;
	СоответствиеДоступныхОтбо  ров.Вставить("Номенклатура"  , 0);
	СоответствиеДоступныхОтбо  ров.Вставить("Характеристи  аНоменклатуры", 0);
	СоответствиеДоступныхОтбо  ров.Вставить("Склад", 0);

	Для Каждого ДоступноеПоле Из ПостроительОтчета.Доступн  еПоля Цикл
		Если СоответствиеДоступныхОтбо  ров[ДоступноеПоле.Имя] =Неопределено Тогда
			ДоступноеПоле.Отбор = Ложь;
		Иначе
			ДоступноеПоле.Отбор = Истина;
		КонецЕсли;
	КонецЦикла;

	// Создадим массив отборов.
	МассивОтбора = Новый Массив;
	МассивОтбора.Добавить("Ном  нклатура");
	МассивОтбора.Добавить("Хар  ктеристикаНоменклатуры");

	Если ТолькоИмеющиесяВНаличии Тогда
		МассивОтбора.Добавить("Скл  д");
	КонецЕсли;

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

	// Вызовем стандартную процедуру заполнения представлений.
	УправлениеОтчетами.Заполн  тьПредставленияПолей(Стру  ктураПредставлениеПолей, ПостроительОтчета);

КонецПроцедуры // ЗаполнитьПостроительОтчет  а()

// Процедура перезаполняет цены в табличной части.
//
Процедура ПерезаполнитьЦены() Экспорт

	СтруктураЗначений = Новый Структура;
	СтруктураЗначений.Вставит  ("НовыйТипЦен", ТипЦен);

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

	ПустаяХарактеристика = Справочники.Характеристик  Номенклатуры.ПустаяСсылка  ();
	ТипЦенРассчитывается = ТипЦен.Рассчитывается;

	СтруктураКурса = МодульВалютногоУчета.Полу  итьКурсВалюты(Валюта, РабочаяДата);
	Курс = СтруктураКурса.Курс;
	Кратность = СтруктураКурса.Кратность;

	Для Каждого СтрокаТовара Из Товары Цикл
		ХарактеристикаНоменклатур  ы = СтрокаТовара.Характеристи  аНоменклатуры;

		СтруктураПоиска = Новый Структура("Номенклатура", СтрокаТовара.Номенклатура)  ;

		СтрокиЦен = ЗапросПоЦенам.НайтиСтроки(  СтруктураПоиска);

		СтрокаБезХарактеристики = Неопределено;
		СтрокаСХарактеристикой = Неопределено;

		Для Каждого СтрокаЦен Из СтрокиЦен Цикл
			Если СтрокаЦен.ХарактеристикаН  менклатуры = ПустаяХарактеристика Тогда
				СтрокаБезХарактеристики = СтрокаЦен;
			ИначеЕсли СтрокаЦен.ХарактеристикаН  менклатуры = ХарактеристикаНоменклатур  ы Тогда
				СтрокаСХарактеристикой = СтрокаЦен;
			КонецЕсли;
		КонецЦикла;

		Если СтрокаСХарактеристикой <> Неопределено Тогда
			НайденнаяСтрока = СтрокаСХарактеристикой;
		ИначеЕсли СтрокаБезХарактеристики <> Неопределено Тогда
			НайденнаяСтрока = СтрокаБезХарактеристики;
		Иначе
			НайденнаяСтрока = Неопределено;
		КонецЕсли;

		Если (НайденнаяСтрока <> Неопределено) И (НайденнаяСтрока.Цена <> 0) Тогда
			Цена = НайденнаяСтрока.Цена * (1 + ?(ТипЦенРассчитывается, НайденнаяСтрока.ПроцентСк  дкиНаценки / 100, 0));
			Цена = Ценообразование.Округлить  ену(Цена, ТипЦен.ПорядокОкругления, ТипЦен.ОкруглятьВБольшуюС  орону);
			Цена = Ценообразование.Пересчита  ьЦенуПриИзмененииВалюты(Ц  ена, НайденнаяСтрока.ВалютаЦен  , Валюта, Курс, Кратность);

			СтрокаТовара.ЕдиницаИзмер  ния = НайденнаяСтрока.ЕдиницаИз  еренияЦены;
		Иначе
			Цена = 0;
		КонецЕсли;

		СтрокаТовара.Цена = Цена;
	КонецЦикла;

КонецПроцедуры // ПерезаполнитьЦены()

  // Функция формирует табличный документ - печатная форма ценника.
//
// Возвращаемое значение:
//  ТабличныйДокумент - сформированный табличный документ или Неопределено, если есть ошибки.
//
Функция ПечатьЦенникаМаленького() Экспорт

	Если НЕ ЗначениеЗаполнено(Организ  ция) Тогда
		Предупреждение("Не выбрана организация!");
		Возврат Неопределено;
	КонецЕсли;

	ТабДокумент                     = Новый ТабличныйДокумент;
	ТабДокумент.ИмяПараметров  ечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Ценник"  ;
	Макет                           = ПолучитьМакет("Ценник");
	ОбластьЦенника                  = Макет.ПолучитьОбласть("Стр  ка|Столбец");

	ДатаПечати = РабочаяДата;

   	ТекСтолбец = 0;
	ТекСтрока  = 0;

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

//отличия от типовой здесь :)
				Попытка
					КомпонентШК = Новый COMОбъект("V8.Barcod.1");
					ОбластьЦенника.Рисунки.Штр  ихкод.Объект.ТипКода  = КомпонентШК.ТипКода;
					ОбластьЦенника.Рисунки.Штр  ихкод.Объект.Сообщение = "4600490615416";				
		        Исключение
					Сообщить("Компонента 1С:Печать штрих-кодов не установлена на данном компьютере!");
				Возврат "";
				КонецПопытки;

			    Запрос = Новый Запрос("
							|ВЫБРАТЬ 
							|	РегШтрихкоды.Владелец КАК Владелец,
							|	РегШтрихкоды.ШтрихКод КАК Штрихкод
							|ИЗ
							|	РегистрСведений.Штрихкоды КАК РегШтрихкоды
							|ГДЕ
							|	РегШтрихкоды.Владелец = &Владелец
							|");

				Запрос.УстановитьПараметр(  "Владелец", Строкатаблицы.Номенклатур  );
                РезультатЗапроса = Запрос.Выполнить();
	            Выборка = РезультатЗапроса.Выбрать();
				Выборка.следующий();

				Если РезультатЗапроса.Пустой() Тогда
					Выборка = РезультатЗапроса.Выбрать();
					Выборка.Следующий();
   					Сообщить("Штрихкод не найден! Сгенерируйте штрихкод для номенклатуры:  " + СокрЛП(СсылкаНаОбъект) + """.");
					Отказ = Истина;
				КонецЕсли;

				КомпонентШК.Сообщение = Выборка.ШтрихКод;

				ОбластьЦенника.Рисунки.Штр  ихкод.Объект.ТипКода 				= КомпонентШК.ТипКода;
				ОбластьЦенника.Рисунки.Штр  ихкод.Объект.Сообщение 			= КомпонентШК.Сообщение;
				ОбластьЦенника.Рисунки.Штр  ихкод.Объект.ОтображатьТек  ст 		= КомпонентШК.ОтображатьТек  т;

//конец отличий				


				Если ТекСтолбец = 0 Тогда
					ТабДокумент.Вывести(Област  ьЦенника);
				Иначе
					ТабДокумент.Присоединить(О  бластьЦенника);
				КонецЕсли;

				ТекСтолбец = ТекСтолбец + 1;

				Если ТекСтолбец = 4 Тогда
					ТекСтрока  = ТекСтрока + 1;
					ТекСтолбец = 0;
				КонецЕсли;

				Если ТекСтрока = 7 Тогда
					ТекСтрока = 0;
					ТабДокумент.ВывестиГоризо  тальныйРазделительСтрани  ();
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;

	ТабДокумент.ТолькоПросмот   = Истина;

	Возврат ТабДокумент;

КонецФункции // ПечатьЦенникаМаленького()



// Функция выполняет проверку параметров для заполнения цен.
//
// Возвращаемое значение:
//  Булево - Истина, если все параметры заданы.
//
Функция ПроверитьПараметрыЗаполне  нияЦен() Экспорт

	Если НЕ ЗначениеЗаполнено(ТипЦен) Тогда
		ОбщегоНазначения.Сообщить  бОшибке("Не выбран тип цен! Укажите тип цен и повторите перезаполнение цен.");
		Возврат Ложь;
	КонецЕсли;

	Если НЕ ЗначениеЗаполнено(Валюта) Тогда
		ОбщегоНазначения.Сообщить  бОшибке("Не выбрана валюта!  Укажите валюту и повторите перезаполнение цен.");
		Возврат Ложь;
	КонецЕсли;

	Возврат Истина;

КонецФункции // ПроверитьПараметрыЗаполне  нияЦен()

#КонецЕсли

вот такой код модуля обьекта я так понял там отсутствует та самая ошибка универсальные механизмы.Напечатать документ. в модуле формы(для чтения только) там есть есть эта универсальный механизм. Скрин не могу добавить поэтому так напишу 1С:Предприятие 8.3 (8.3.9.1850)  Комплексная автоматизация, редакция 1.1 (1.1.87.1)

----------

