8.х Печать ценников через внешнюю форму

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем alexander.p, 9 сен 2011.

  1. TopicStarter Overlay
    alexander.p
    Offline

    alexander.p

    Регистрация:
    9 сен 2011
    Сообщения:
    45
    Симпатии:
    1
    Баллы:
    1
    Подскажите, пожалуйста, я сохранил файл стандартной обработки печать ценников, изменил его, сменил размеры букв там, и другое. Открываю эту обработку через файл открыть, все нормально работает. Пытаюсь привязать ее через внешние печатные формы, к установке цен номенклатуры, чтобы печатать ценники на вновь поступившие товары, но когда запускаю ее из установки цен номенклатуры пишет:
    Не удалось сформировать внешнюю печатную форму!
    Поле объекта не обнаружено (СсылкаНаОбъект)
    Посмотреть вложение 8503

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      302,1 КБ
      Просмотров:
      198
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.756
    Симпатии:
    509
    Баллы:
    204
    А вы читали как создавать ВПФ ?
  3. TopicStarter Overlay
    alexander.p
    Offline

    alexander.p

    Регистрация:
    9 сен 2011
    Сообщения:
    45
    Симпатии:
    1
    Баллы:
    1
  4. TopicStarter Overlay
    alexander.p
    Offline

    alexander.p

    Регистрация:
    9 сен 2011
    Сообщения:
    45
    Симпатии:
    1
    Баллы:
    1
    Пытаюсь сделать по http://1c-pro.ru/index.php?act=announce&f=18&id=4, добавляю новый реквизит СсылкаНаОбъект туда прописываю СправочникОбъект.ТипыЦенНоменклатуры, потом действия сравнить, объединить с обработкой, выбираю свою и в итоге получаю
    Не удалось сформировать внешнюю печатную форму!
    Метод объекта не обнаружен (Печать)
  5. рамиль
    Offline

    рамиль Опытный в 1С

    Регистрация:
    12 мар 2006
    Сообщения:
    595
    Симпатии:
    0
    Баллы:
    26
    А вы эту функцию прописали с словом "Экспорт"?
  6. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    Печать() экспортная ?
  7. TopicStarter Overlay
    alexander.p
    Offline

    alexander.p

    Регистрация:
    9 сен 2011
    Сообщения:
    45
    Симпатии:
    1
    Баллы:
    1
    Код:
     #Если Клиент Тогда
    
    // Процедура заполняет построитель отчета.
    //
    Процедура ЗаполнитьПостроительОтчета() Экспорт
    
    ТекстЗапроса = "
    |ВЫБРАТЬ
    |	ИСТИНА КАК Печать,
    |	СпрНоменклатура.Номенклатура КАК Номенклатура,
    |	СпрНоменклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |	СпрНоменклатура.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения,
    |	0 КАК Цена,
    |	1 КАК Количество
    |ИЗ
    |	(ВЫБРАТЬ
    |		СпрНоменклатура.Ссылка КАК Номенклатура,
    |		ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК ХарактеристикаНоменклатуры
    |	ИЗ
    |		Справочник.Номенклатура КАК СпрНоменклатура
    |	ГДЕ НЕ СпрНоменклатура.ЭтоГруппа
    |	{ГДЕ
    |		СпрНоменклатура.Ссылка.* КАК Номенклатура}
    |	ОБЪЕДИНИТЬ ВСЕ
    |	ВЫБРАТЬ
    |		СпрХарактеристики.Владелец,
    |		СпрХарактеристики.Ссылка
    |	ИЗ
    |		Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики
    |	{ГДЕ
    |		СпрХарактеристики.Владелец.* КАК Номенклатура,
    |		СпрХарактеристики.Ссылка.* КАК ХарактеристикаНоменклатуры}
    |	) КАК СпрНоменклатура
    |";
    
    Если ТолькоИмеющиесяВНаличии Тогда
    ТекстЗапроса = ТекстЗапроса + "
    |ЛЕВОЕ СОЕДИНЕНИЕ
    |	(ВЫБРАТЬ
    |		НаСкладе.Номенклатура,
    |		НаСкладе.ХарактеристикаНоменклатуры,
    |		СУММА(НаСкладе.Количество) КАК Количество
    |	ИЗ
    |		(ВЫБРАТЬ
    |			НаСкладе.Номенклатура,
    |			НаСкладе.ХарактеристикаНоменклатуры,
    |			НаСкладе.КоличествоОстаток КАК Количество
    |		ИЗ
    |			РегистрНакопления.ТоварыНаСкладах.Остатки(, {Номенклатура.* КАК Номенклатура,
    |			   ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
    |			   Склад.* КАК Склад}) КАК НаСкладе
    |		ОБЪЕДИНИТЬ ВСЕ
    |		ВЫБРАТЬ
    |			ВРознице.Номенклатура,
    |			ВРознице.ХарактеристикаНоменклатуры,
    |			ВРознице.КоличествоОстаток КАК Количество
    |		ИЗ
    |			РегистрНакопления.ТоварыВРознице.Остатки(, {Номенклатура.* КАК Номенклатура,
    |			   ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
    |			   Склад.* КАК Склад}) КАК ВРознице
    |		ОБЪЕДИНИТЬ ВСЕ
    |		ВЫБРАТЬ
    |			ВНТТ.Номенклатура,
    |			ВНТТ.ХарактеристикаНоменклатуры,
    |			ВНТТ.КоличествоОстаток КАК Количество
    |		ИЗ
    |			РегистрНакопления.ТоварыВНТТ.Остатки(, {Номенклатура.* КАК Номенклатура,
    |			   ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры,
    |			   Склад.* КАК Склад}) КАК ВНТТ
    |		) КАК НаСкладе
    |	СГРУППИРОВАТЬ ПО
    |		НаСкладе.Номенклатура,
    |		НаСкладе.ХарактеристикаНоменклатуры
    |	) КАК НаСкладе
    |ПО
    |	СпрНоменклатура.Номенклатура = НаСкладе.Номенклатура
    |	И СпрНоменклатура.ХарактеристикаНоменклатуры = НаСкладе.ХарактеристикаНоменклатуры
    |ГДЕ
    |	ЕСТЬNULL(НаСкладе.Количество, 0) > 0
    |";
    КонецЕсли;
    
    ТекстЗапроса = ТекстЗапроса + "
    |УПОРЯДОЧИТЬ ПО
    |	СпрНоменклатура.Номенклатура.Наименование,
    |	СпрНоменклатура.ХарактеристикаНоменклатуры.Наименование
    |";
    
    // Соответствие имен полей в запросе и их представлений в отчете.
    СтруктураПредставлениеПолей = Новый Структура(
    "Номенклатура,   ХарактеристикаНоменклатуры,    Склад",
    "Номенклатура", "Характеристика номенклатуры", "Склад");
    
    ПостроительОтчета.Текст = ТекстЗапроса;
    
    ПостроительОтчета.ЗаполнитьНастройки();
    
    // Создадим список доступных отборов.
    СоответствиеДоступныхОтборов = Новый Соответствие;
    СоответствиеДоступныхОтборов.Вставить("Номенклатура", 0);
    СоответствиеДоступныхОтборов.Вставить("ХарактеристикаНоменклатуры", 0);
    СоответствиеДоступныхОтборов.Вставить("Склад", 0);
    
    Для Каждого ДоступноеПоле Из ПостроительОтчета.ДоступныеПоля Цикл
    Если СоответствиеДоступныхОтборов[ДоступноеПоле.Имя] =Неопределено Тогда
    ДоступноеПоле.Отбор = Ложь;
    Иначе
    ДоступноеПоле.Отбор = Истина;
    КонецЕсли;
    КонецЦикла;
    
    // Создадим массив отборов.
    МассивОтбора = Новый Массив;
    МассивОтбора.Добавить("Номенклатура");
    МассивОтбора.Добавить("ХарактеристикаНоменклатуры");
    
    Если ТолькоИмеющиесяВНаличии Тогда
    МассивОтбора.Добавить("Склад");
    КонецЕсли;
    
    Для Каждого ЭлементОтбора Из МассивОтбора Цикл
    Если ПостроительОтчета.Отбор.Найти(ЭлементОтбора) = Неопределено Тогда
    ПостроительОтчета.Отбор.Добавить(ЭлементОтбора);
    КонецЕсли;
    КонецЦикла;
    
    // Вызовем стандартную процедуру заполнения представлений.
    УправлениеОтчетами.ЗаполнитьПредставленияПолей(СтруктураПредставлениеПолей, ПостроительОтчета);
    
    КонецПроцедуры // ЗаполнитьПостроительОтчета()
    
    // Процедура перезаполняет цены в табличной части.
    //
    Процедура ПерезаполнитьЦены() Экспорт
    
    СтруктураЗначений = Новый Структура;
    СтруктураЗначений.Вставить("НовыйТипЦен", ТипЦен);
    
    ЗапросПоЦенам = Ценообразование.СформироватьЗапросПоЦенам(СтруктураЗначений,
    Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры,
    Товары.ВыгрузитьКолонку("Номенклатура"),
    РабочаяДата,
    Неопределено).Выгрузить();
    ЗапросПоЦенам.Индексы.Добавить("Номенклатура");
    
    ПустаяХарактеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
    ТипЦенРассчитывается = ТипЦен.Рассчитывается;
    
    СтруктураКурса = МодульВалютногоУчета.ПолучитьКурсВалюты(Валюта, РабочаяДата);
    Курс = СтруктураКурса.Курс;
    Кратность = СтруктураКурса.Кратность;
    
    Для Каждого СтрокаТовара Из Товары Цикл
    ХарактеристикаНоменклатуры = СтрокаТовара.ХарактеристикаНоменклатуры;
    
    СтруктураПоиска = Новый Структура("Номенклатура", СтрокаТовара.Номенклатура);
    
    СтрокиЦен = ЗапросПоЦенам.НайтиСтроки(СтруктураПоиска);
    
    СтрокаБезХарактеристики = Неопределено;
    СтрокаСХарактеристикой = Неопределено;
    
    Для Каждого СтрокаЦен Из СтрокиЦен Цикл
    Если СтрокаЦен.ХарактеристикаНоменклатуры = ПустаяХарактеристика Тогда
    СтрокаБезХарактеристики = СтрокаЦен;
    ИначеЕсли СтрокаЦен.ХарактеристикаНоменклатуры = ХарактеристикаНоменклатуры Тогда
    СтрокаСХарактеристикой = СтрокаЦен;
    КонецЕсли;
    КонецЦикла;
    
    Если СтрокаСХарактеристикой <> Неопределено Тогда
    НайденнаяСтрока = СтрокаСХарактеристикой;
    ИначеЕсли СтрокаБезХарактеристики <> Неопределено Тогда
    НайденнаяСтрока = СтрокаБезХарактеристики;
    Иначе
    НайденнаяСтрока = Неопределено;
    КонецЕсли;
    
    Если (НайденнаяСтрока <> Неопределено) И (НайденнаяСтрока.Цена <> 0) Тогда
    Цена = НайденнаяСтрока.Цена * (1 + ?(ТипЦенРассчитывается, НайденнаяСтрока.ПроцентСкидкиНаценки / 100, 0));
    Цена = Ценообразование.ОкруглитьЦену(Цена, ТипЦен.ПорядокОкругления, ТипЦен.ОкруглятьВБольшуюСторону);
    Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, НайденнаяСтрока.ВалютаЦены, Валюта, Курс, Кратность);
    
    СтрокаТовара.ЕдиницаИзмерения = НайденнаяСтрока.ЕдиницаИзмеренияЦены;
    Иначе
    Цена = 0;
    КонецЕсли;
    
    СтрокаТовара.Цена = Цена;
    КонецЦикла;
    
    КонецПроцедуры // ПерезаполнитьЦены()
    
    // Функция формирует табличный документ - печатная форма ценника.
    //
    // Возвращаемое значение:
    //  ТабличныйДокумент - сформированный табличный документ или Неопределено, если есть ошибки.
    //
    Функция ПечатьЦенника() Экспорт
    
    Если НЕ ЗначениеЗаполнено(Организация) Тогда
    Предупреждение("Не выбрана организация!");
    Возврат Неопределено;
    КонецЕсли;
    
    ТабДокумент                     = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Ценник";
    Макет                           = ПолучитьМакет("Ценник");
    ОбластьЦенника                  = Макет.ПолучитьОбласть("Строка|Столбец");
    
    ДатаПечати = РабочаяДата;
    
    ТекСтолбец = 0;
    ТекСтрока  = 0;
    
    Для Каждого СтрокаТаблицы Из Товары Цикл
    Если СтрокаТаблицы.Печать Тогда
    Для Тмп = 1 По СтрокаТаблицы.Количество Цикл
    ОбластьЦенника.Параметры.Заполнить(СтрокаТаблицы);
    ОбластьЦенника.Параметры.НоменклатураНаименование        = СтрокаТаблицы.Номенклатура.НаименованиеПолное;
    ОбластьЦенника.Параметры.ХарактеристикаНаименование      = СтрокаТаблицы.Номенклатура.Артикул;
    ОбластьЦенника.Параметры.ЕдиницаНаименование             = СтрокаТаблицы.ЕдиницаИзмерения;
    ОбластьЦенника.Параметры.Цена                            = ОбщегоНазначения.ФорматСумм(СтрокаТаблицы.Цена, Валюта, "00");
    ОбластьЦенника.Параметры.ДатаПечати                      = ДатаПечати;
    ОбластьЦенника.Параметры.Организация                     = Организация;
    ОбластьЦенника.Параметры.ОрганизацияНаименование         = Организация;
    //ОбластьЦенника.Параметры.НоменклатураСтранаПроисхождения = СтрокаТаблицы.Номенклатура.СтранаПроисхождения;
    
    Если ТекСтолбец = 0 Тогда
    ТабДокумент.Вывести(ОбластьЦенника);
    Иначе
    ТабДокумент.Присоединить(ОбластьЦенника);
    КонецЕсли;
    
    ТекСтолбец = ТекСтолбец + 1;
    
    Если ТекСтолбец = 5 Тогда
    ТекСтрока  = ТекСтрока + 1;
    ТекСтолбец = 0;
    КонецЕсли;
    
    Если ТекСтрока = 3 Тогда
    ТекСтрока = 0;
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    
    ТабДокумент.ТолькоПросмотр = Истина;
    
    Возврат ТабДокумент;
    
    КонецФункции // ПечатьЦенника()
    
    // Функция выполняет проверку параметров для заполнения цен.
    //
    // Возвращаемое значение:
    //  Булево - Истина, если все параметры заданы.
    //
    Функция ПроверитьПараметрыЗаполненияЦен(ПечетьБезПроверкиЗаполненияПараметров = Неопределено) Экспорт
    
    Перем РезультатПроверки, СтрокаСообщения;
    
    РезультатПроверки = Истина;
    СтрокаСообщения = "";
    
    Если НЕ ЗначениеЗаполнено(ТипЦен) Тогда
    РезультатПроверки = Ложь;
    СтрокаСообщения = "Не выбран тип цен! Укажите тип цен и повторите перезаполнение цен." + Символы.ПС;
    КонецЕсли;
    
    Если НЕ ЗначениеЗаполнено(Валюта) Тогда
    РезультатПроверки = Ложь;
    СтрокаСообщения = СтрокаСообщения + "Не выбрана валюта!  Укажите валюту и повторите перезаполнение цен.";
    КонецЕсли;
    
    Если НЕ РезультатПроверки И ПечетьБезПроверкиЗаполненияПараметров <> Истина Тогда
    ОбщегоНазначения.СообщитьОбОшибке(СтрокаСообщения);
    КонецЕсли;
    Возврат РезультатПроверки;
    
    КонецФункции // ПроверитьПараметрыЗаполненияЦен()
    
    #КонецЕсли
    
    
    
  8. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    тут надо все менять :)


    в частности Функция ПечатьЦенника() Экспорт
    заменить на Функция Печать() Экспорт

    в ней убрать цикл..
    и заполнить 1 ценник..используя СсылкаНаОбъект - как раз ссылка на элемнт справочника номенклатура

    ой..не дошел до первого поста :)
    заполняй (формируй ценники ) из документа ...СсылкаНаОбъект (там и будет ссылка на твой док установки цен)
  9. TopicStarter Overlay
    alexander.p
    Offline

    alexander.p

    Регистрация:
    9 сен 2011
    Сообщения:
    45
    Симпатии:
    1
    Баллы:
    1
    Убрал цикл, переименовал процедуру, в реквизитах стоит ДокументСсылка.УстановкаЦенНоменклатуры. Вылетает сразу печатная форма пустая( нет саьой обработки где выбрать цены, и т.д., как если нажать на кнопку ценники, в установке цен номенклатуры(
  10. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29

    Начало положено...:)
    Печатная форма работает..но нет данных..

    Теперь надо заполнить макет..по данным из документа...

    а на счет выбора типа цен и т.д.... тебе надо открыть эту форму ??? тогда надо просто внешную обработку делать а не печ форму...
    почитай в чем отличия...
  11. TopicStarter Overlay
    alexander.p
    Offline

    alexander.p

    Регистрация:
    9 сен 2011
    Сообщения:
    45
    Симпатии:
    1
    Баллы:
    1
    ну пусть будет форма. как туда присвоить данные?
  12. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    тогда подключай ее подправив только макет..сарвис - внешние обработки
  13. TopicStarter Overlay
    alexander.p
    Offline

    alexander.p

    Регистрация:
    9 сен 2011
    Сообщения:
    45
    Симпатии:
    1
    Баллы:
    1
    Как передать печатной форме данные, пусть я все пропишу вручную и не будет выбор типа цен??? Как хоть как-нибудь сделать???
  14. TopicStarter Overlay
    alexander.p
    Offline

    alexander.p

    Регистрация:
    9 сен 2011
    Сообщения:
    45
    Симпатии:
    1
    Баллы:
    1
    Проблема решена)

Поделиться этой страницей