Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=67266)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Не видит область на макете

Автор: burza 07.06.23, 11:14

нужно зделать штрихование документов в УНФ. вот что есть. в обработчик не попадает область макета где штрихкод,немогу понять что не так.

Модуль ШтрихкодированиеПечатныхФорм

    Если Макет.Области.Найти("ОбластьШтрихкода") <> Неопределено Тогда
            
            // Проверить картинку штрихкода в области "Штрихкод"
            ОбластьМакетаШтрихкод = Макет.ПолучитьОбласть("ОбластьШтрихкода");
            Если ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакетаШтрихкод) Тогда
                ОбластьМакета = ОбластьМакетаШтрихкод;
                ВыводитьШтрихкодВОтдельнуюОбласть = Истина;
            Иначе
                Возврат;
            КонецЕсли;
        Иначе
            Возврат;
        КонецЕсли;


Ну и модульменеджера из обработки где макет: модульменеджера из обработки
Функция СформироватьПФ(ОписаниеПечатнойФормы, ДанныеОбъектовПечати, ОбъектыПечати) Экспорт
    Перем ПервыйДокумент, НомерСтрокиНачало, Ошибки;
    
    Макет                = УправлениеПечатью.МакетПечатнойФормы(ОписаниеПечатнойФормы.ПолныйПутьКМакету);
    
    КодЯзыкаПечать       = Локализация.ПолучитьЯзыкФормированияПечатныхФорм();    
    Макет.КодЯзыкаМакета = КодЯзыкаПечать;
    ТабличныйДокумент    = ОписаниеПечатнойФормы.ТабличныйДокумент;
    ДанныеПечати        = Новый Структура;
    ЕстьТЧЗапасы        = (ДанныеОбъектовПечати.Колонки.Найти("ТаблицаЗапасы") <> Неопределено);
    ЕстьТЧМатериалы        = (ДанныеОбъектовПечати.Колонки.Найти("ТаблицаМатериалы") <> Неопределено);
    ЕстьПоложениеСклада    = (ДанныеОбъектовПечати.Колонки.Найти("ПоложениеСклада") <> Неопределено);
    
    Для каждого ДанныеОбъекта Из ДанныеОбъектовПечати Цикл
        
        СкладВШапке = (НЕ ЕстьПоложениеСклада ИЛИ ДанныеОбъекта.ПоложениеСклада<>Перечисления.ПоложениеРеквизитаНаФорме.ВТабличнойЧасти);
        ПечатьДокументовУНФ.ПередНачаломФормированияДокумента(ТабличныйДокумент, ПервыйДокумент, НомерСтрокиНачало, ДанныеПечати);
        
        МассивОбластейМакета = Новый Массив;
        МассивОбластейМакета.Добавить("Заголовок");
        //{[+](фрагмент ДОБАВЛЕН), АСВ 08.09.2020 19:16:01
        Попытка
            СведенияОбКонтрагенте = УправлениеНебольшойФирмойСервер.СведенияОЮрФизЛице(ДанныеОбъекта.Контрагент, ДанныеОбъекта.ДатаДокумента, , , КодЯзыкаПечать);
            ДолгКлиента = ПолучитьСуммуДолга(ДанныеОбъекта.Контрагент,ДанныеОбъекта.ДатаДокумента,0,КодЯзыкаПечать);
            
            печНакладные = ПолучитьНакладныеТекущегоДня(ДанныеОбъекта.Контрагент,ДанныеОбъекта.ДатаДокумента,ДанныеОбъекта.Склад,ДанныеОбъекта.Ссылка);
            
            МассивОбластейМакета.Добавить("Покупатель");
            МассивОбластейМакета.Добавить("НакладныеТекущегоДня");
        Исключение
        КонецПопытки;
        
        МассивОбластейМакета.Добавить("Комментарий");
        //}АСВ 08.09.2020 19:16:01
        Если СкладВШапке Тогда
            МассивОбластейМакета.Добавить("Склад");
        КонецЕсли;
        МассивОбластейМакета.Добавить("ВремяПечати");
        
        НомерДокумента = ПечатьДокументовУНФ.ПолучитьНомерНаПечатьСУчетомДатыДокумента(ДанныеОбъекта.ДатаДокумента, ДанныеОбъекта.Номер, ДанныеОбъекта.Префикс);
        ТекстЗаголовка = ДанныеОбъекта.ПредставлениеРегистратора + "  № " + НомерДокумента + НСтр("ru=' от ';uk=' від '", КодЯзыкаПечать) + Формат(ДанныеОбъекта.ДатаДокумента, "Л="+КодЯзыкаПечать+"; ДЛФ=DD");
        ДанныеПечати.Вставить("ТекстЗаголовка", ТекстЗаголовка);
        ДанныеПечати.Вставить("ПредставлениеСклада", ДанныеОбъекта.ПредставлениеСклада);
        
        //{[+](фрагмент ДОБАВЛЕН), АСВ 08.09.2020 19:17:47

        Попытка
            ДанныеПечати.Вставить("печКонтрагент",ДанныеОбъекта.Контрагент.Наименование);
            ДанныеПечати.Вставить("печТелефоны",СведенияОбКонтрагенте.Телефоны);
            ДанныеПечати.Вставить("печФизАдресКонтрагент",СведенияОбКонтрагенте.ФактическийАдрес);
            ДанныеПечати.Вставить("ДолгКлиента",ДолгКлиента);
        Исключение
            
        КонецПопытки;
    
        
        ДанныеПечати.Вставить("тКомментарий",ДанныеОбъекта.Ссылка.Комментарий);

        Если печНакладные <> "" Тогда
            ДанныеПечати.Вставить("печНакладные",печНакладные);
            ДанныеПечати.Вставить("текДень",Формат(ДанныеОбъекта.ДатаДокумента, "ДЛФ=D"));
        Иначе
            МассивОбластейМакета.Удалить(МассивОбластейМакета.Найти("НакладныеТекущегоДня"));
        КонецЕсли;
        //}АСВ 08.09.2020 19:17:47
        
        Если СкладВШапке И ПолучитьФункциональнуюОпцию("УчетПоЯчейкам") Тогда
            МассивОбластейМакета.Вставить(2, "Ячейка");
            ДанныеПечати.Вставить("ПредставлениеЯчейки", ДанныеОбъекта.ПредставлениеЯчейки);
        КонецЕсли;
        
        ВремяПечати = НСтр("ru='Дата и время печати: ';uk='Дата і час друку: '", КодЯзыкаПечать) + ТекущаяДатаСеанса() + НСтр("ru='. Пользователь: ';uk='. Користувач: '", КодЯзыкаПечать) + Пользователи.АвторизованныйПользователь();
        ДанныеПечати.Вставить("ВремяПечати", ВремяПечати);
        
        Для каждого ИмяОбласти Из МассивОбластейМакета Цикл
            
            ОбластьМакета = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, ИмяОбласти, "", Ошибки);
            Если ОбластьМакета <> Неопределено Тогда
                 ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, ДанныеОбъекта.Ссылка);
                ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
                ТабличныйДокумент.Вывести(ОбластьМакета);
                
            КонецЕсли;
            
        КонецЦикла;
        
        ОбластьМакета = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "Строка", "", Ошибки);
        ОбластьМакетаШапка = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "ШапкаТаблицы", "", Ошибки);
        Если ОбластьМакета <> Неопределено
            И ОбластьМакетаШапка <> Неопределено Тогда
            
            ОбластьМакетаИтого = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "Итого", "", Ошибки);
            ТаблицаСерийныеНомера = ДанныеОбъекта.ТаблицаСерийныеНомера;
            ПараметрыНоменклатуры = Новый Структура;
            
            Если ЕстьТЧЗапасы Тогда
                
                ДанныеПечати.Вставить("ТипНоменклатурыТаблицы", Нстр("ru='Запасы';uk='Запаси'", КодЯзыкаПечать));
                ОбластьМакетаШапка.Параметры.Заполнить(ДанныеПечати);
                ТабличныйДокумент.Вывести(ОбластьМакетаШапка);
                
                Для каждого СтрокаТаблицыЗапасы Из ДанныеОбъекта.ТаблицаЗапасы Цикл
                    
                    Если НЕ СтрокаТаблицыЗапасы.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас Тогда
                        
                        Продолжить;
                        
                    КонецЕсли;
                    
                    Если СтрокаТаблицыЗапасы.Количество = 0 Тогда
                        Продолжить;
                    КонецЕсли;
                    
                    ЗаполнитьДанныеПечатиПоСтрокеТабличнойЧасти(СтрокаТаблицыЗапасы, ДанныеПечати, ПараметрыНоменклатуры, ТаблицаСерийныеНомера);
                    
                    ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
                    ОбластьМакета.Параметры.ТоварнаяГруппа = СокрЛП(СтрокаТаблицыЗапасы.РодительГруппы)+"; "+СокрЛП(СтрокаТаблицыЗапасы.Группа);
                    ТабличныйДокумент.Вывести(ОбластьМакета);
                    
                КонецЦикла;
                
                Если ОбластьМакетаИтого <> Неопределено Тогда
                    
                    ТабличныйДокумент.Вывести(ОбластьМакетаИтого);
                    
                КонецЕсли;
                
            КонецЕсли;
            
            Если ЕстьТЧМатериалы Тогда
                
                ДанныеПечати.Вставить("ТипНоменклатурыТаблицы", Нстр("ru='Материалы';uk='Матеріали'", КодЯзыкаПечать));
                ОбластьМакетаШапка.Параметры.Заполнить(ДанныеПечати);
                ТабличныйДокумент.Вывести(ОбластьМакетаШапка);
                
                Для каждого СтрокаТаблицыМатериалов Из ДанныеОбъекта.ТаблицаМатериалы Цикл
                    
                    Если НЕ СтрокаТаблицыМатериалов.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Запас Тогда
                        
                        Продолжить;
                        
                    КонецЕсли;
                    
                    ЗаполнитьДанныеПечатиПоСтрокеТабличнойЧасти(СтрокаТаблицыМатериалов, ДанныеПечати, ПараметрыНоменклатуры, ТаблицаСерийныеНомера);
                    
                    ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
                    ТабличныйДокумент.Вывести(ОбластьМакета);
                    
                КонецЦикла;
                
                Если ОбластьМакетаИтого <> Неопределено Тогда
                    
                    ТабличныйДокумент.Вывести(ОбластьМакетаИтого);
                    
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЕсли;
        
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеОбъекта.Ссылка);
        
    КонецЦикла;
    
    //{[+](фрагмент ДОБАВЛЕН), АСВ 03.02.2021 22:05:47
    ТабличныйДокумент.ТолькоПросмотр = Истина;
    ТабличныйДокумент.Защита = Истина;
    //}АСВ 03.02.2021 22:05:47
    
    Возврат ТабличныйДокумент;



Автор: alex-l1904 07.06.23, 11:26

burza @ Сегодня, 12:14 * ,

можна ще код цього ПечатьДокументовУНФ.ПолучитьОбластьБезопасно( ?

burza @ Сегодня, 12:14 * ,

треба додати ОбластьШтрихкода в МассивОбластейМакета

Автор: burza 07.06.23, 11:36

alex-l1904 @ Сегодня, 12:26 * ,

Функция ПолучитьОбластьБезопасно(Макет, ИмяОбласти, ПредставлениеОбласти, Ошибки) Экспорт
    Перем ОбластьМакета;
    
    Если Макет.Области.Найти(ИмяОбласти) = Неопределено Тогда
        
        ТекстСообщения = НСтр("ru='ВНИМАНИЕ! Не обнаружена область макета %1. Возможно используется пользовательский макет.';uk='УВАГА! Не виявлено ділянку макета %1. Можливо використовується користувацький макет.'");
        ТекстСообщения = СтрШаблон(ТекстСообщения, ?(ПустаяСтрока(ПредставлениеОбласти), ИмяОбласти, ПредставлениеОбласти));
        
        ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, , ТекстСообщения, Неопределено);
        
    Иначе
        
        ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);
        
    КонецЕсли;
    
    Возврат ОбластьМакета;
    
КонецФункции



Добавлял рядом с Заголовком , ничего. Или я не то делаю
МассивОбластейМакета = Новый Массив;
        МассивОбластейМакета.Добавить("Заголовок");
        МассивОбластейМакета.Добавить("ОбластьШтрихкода");


уже голову сломал, вроде долно работать а нет(

burza @ Сегодня, 12:29 * ,
Если ставить точкуОстановки то в макете просто области нету. вот найти и не может. а почему ее нету

Макет = УправлениеПечатью.МакетПечатнойФормы(ОписаниеПечатнойФормы.ПолныйПутьКМакету);

* КодЯзыкаПечать = Локализация.ПолучитьЯзыкФормированияПечатныхФорм();

Автор: alex-l1904 07.06.23, 12:38

burza @ Сегодня, 12:36 * ,
перевіряйте який саме макет в
Макет = УправлениеПечатью.МакетПечатнойФормы(ОписаниеПечатнойФормы.ПолныйПутьКМакету)

(схоже що там інший макет...)

Автор: burza 07.06.23, 13:12

alex-l1904 @ Сегодня, 13:38 * ,
макет той
вот и я не могу понять что не так. это капец


burza @ Сегодня, 13:40 * ,
куда смотреть уже не знаю(((

Автор: denis84 07.06.23, 14:21

burza,
а сама картинка штрихкода не выходит за границы областиштрихкода? когда-то встречал такой прикол с подписями и печатью в документе

Автор: burza 07.06.23, 15:13

denis84 @ Сегодня, 15:21 * ,
нет, ругается что нету области штрихкода


Никто ничего не подскажет идеи кончились. Странно оно всё, должно работать а фиг))

Автор: denis84 07.06.23, 15:15

burza @ Сегодня, 15:53 * ,
уточните это Управление небольшой фирмой для Украины, редакция 1.6 или выше. чтоб я мог у себя глянуть.

Ну вот по тексту модуля не вижу где вы получаете область штрихкода?

Автор: alex-l1904 07.06.23, 15:37

Цитата(burza @ 07.06.23, 12:36) *
НСтр("ru='ВНИМАНИЕ! Не обнаружена область макета %1. Возможно используется пользовательский макет.';uk='УВАГА! Не виявлено ділянку макета %1. Можливо використовується користувацький макет.'");

оце у вас ? так ?

Автор: burza 07.06.23, 15:37

denis84 @ Сегодня, 16:15 * ,
да это Управление небольшой фирмой для Украины, редакция 1.6 но модуль штрихование документов взял в 1.6.24.152

Автор: alex-l1904 07.06.23, 15:47

alex-l1904 @ Сегодня, 16:37 * ,
в отладчику пошагово перевірте
УправлениеПечатью.МакетПечатнойФормы(

можливо макет из конфігурації заміняється користувацьким

Автор: burza 08.06.23, 9:17

alex-l1904 @ Вчера, 16:37 * ,
нет.

по причине:
Область не найдена: ОбластьШтрихкода

alex-l1904 @ Вчера, 16:47 * ,
нет ссылка идет правильно на макет. више кидал фото


Оно вроде должно но нет, мистика блин

burza @ Сегодня, 9:55 * ,

При начале захвата макета в области должна попадать областьштрихкода(это донор там все ок) а в моем случае что не делаю обасть не попадает поэтому и найти не может

Автор: fly 08.06.23, 9:22

Администрирование -> Макеты печатных форм -> если есть, удаляете

или Регистр сведений
ПользовательскиеМакетыПечати

ищите название макета - удаляете или ставите использование = ЛОжь



УправлениеПечатью
Функция МакетПечатнойФормы(ПолныйПутьКМакету)

сначало ищет пользовательские макеты, потом идет уже к объектам конфигурации...

Автор: burza 08.06.23, 9:37

fly @ Сегодня, 10:22 * ,
да я вот только что хотел писать, да нашел, всётаки были пользовательский макет) его редактировали

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua