Имя: Пароль:
1C
1С v8
Откуда данный код берет макет?
0 bebibo
 
14.02.20
08:22
Здравствуйте!
Вчера тема не закрылась. Вопрос остается открытым.
Помогите пожалуйста.
Есть обработка обмена 1С и СРМ.
Кидаю в папку файл запрос счета, код мне возвращает ответ и печатную форму в формате пдф.
Вот эта печатная берется из базы. Вот таким образом: НайденаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Счет на бланке");
Открываю данный справочник, беру печатную форму "Счет на бланке", сохраняю к себе на пк. Меняю макет (текст только немного, 2 предложения добавлено). Сохраняю эту ПФ.Загружаю опять в базу обратно. Печатаю из 1с - печатается с моими изменениями.
А если запускаю обработку обмена СРМ и 1С,то оттуда макет печатается без моих изменений!
Как такое может быть, если эта печатная форма берется из базы, а в базе то она нормальная, с изменениями, а печатается без изменений?
1 END
 
14.02.20
08:25
"Есть обработка обмена 1С и СРМ" вот у вас есть, вы и смотрите в отладчике откуда что берется. Или вы думаете, что у всех "Есть обработка обмена 1С и СРМ"?
2 bebibo
 
14.02.20
08:26
(1) Что конкретно смотреть???
3 bebibo
 
14.02.20
08:27
Переменная НайденнаяОбработка.
Значение: Счет на бланке
Тип: СправочникСсылка.ДополнительныеотчетыИОбработки
4 bebibo
 
14.02.20
08:27
(1) Вы думаете я не смотрела???
5 bebibo
 
14.02.20
08:30
Вообще как такое может быть? Это какой то бред.Никак не могу понять((
6 arsik
 
гуру
14.02.20
08:31
Кеш почисти
7 bebibo
 
14.02.20
08:33
(6) где?
8 arsik
 
гуру
14.02.20
08:34
Везде.
9 bebibo
 
14.02.20
08:39
В общем понятно..Никто не знает тоже
10 bebibo
 
14.02.20
08:39
Голову можно блин сломать!
Как додуматься, почему такое происходит
11 bebibo
 
14.02.20
08:47
как такое может быть? Если обработка тащит ПФ из БАЗЫЫЫ
12 ДенисЧ
 
14.02.20
08:50
(9) "Ты знаешь, как переводится I don't konw"?
"Я не знаю".
"Вот блин! Никто не знает!..."
13 bebibo
 
14.02.20
08:50
Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") Тогда
            
            НайденаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Счет на бланке");
            
            Если Не НайденаяОбработка.Пустая() Тогда
                
                МассивОбъектов = Новый Массив;
                МассивОбъектов.Добавить(ДокументСсылка);
                
                ОбъектыПечати = Новый СписокЗначений;
                
                ИмяФайла = ПолучитьИмяВременногоФайла();
                ДвоичныеДанные = НайденаяОбработка.ХранилищеОбработки.Получить();
                ДвоичныеДанные.Записать(ИмяФайла);
                
                ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяФайла, Истина);
                ПечатнаяФорма = ОбработкаОбъект.ПечатьДокумента(МассивОбъектов, ОбъектыПечати, (Число(СтруктураДанных.sign) = 1));
                ОбработкаОбъект = Неопределено;
                
                УдалитьФайлы(ИмяФайла);
                
            КонецЕсли;
14 Михаил Михайлович
 
14.02.20
08:58
(13) хороший код.
15 bebibo
 
14.02.20
08:59
(14) эх, к сожалению мне ваши слова не помогли в решении проблемы..
16 Михаил Михайлович
 
14.02.20
08:59
(15) может потому, что проблемы нет?
17 bebibo
 
14.02.20
09:01
(16) Как нет? Если она есть. Откуда берется тот макет?
18 Михаил Михайлович
 
14.02.20
09:02
(17) а подумать?
19 djekting
 
14.02.20
09:03
хорошая тема... пятничная... пойду чаю заварю...
20 bebibo
 
14.02.20
09:05
(18) Тут думать нет смысла. Ситуация не логичная. Код тащит ПФ из базы. В базе ПФ нормальная, с изменениями. Откуда он там еще этот старый макет берет - ну вообще не понятно
21 bebibo
 
14.02.20
09:05
(19) ааа(((((
22 dka80
 
14.02.20
09:07
Добавить сообщить() в каждое место: в форму твоей обработки, в форму внешней печатной формы в начало каждой процедуры, в каждый цикл, в каждое условие и смотри выводится твое сообщение или нет.
23 Михаил Михайлович
 
14.02.20
09:09
(20) про кэш уже кажется упоминали в этой теме, но автор не читатель, автор писатель
24 Сияющий в темноте
 
14.02.20
09:09
ну поставь уже точку останова на этом месте и смотри,что происходит.
найти по наименованию,иногда,преподносит сюрпризы.
с учетом того,что в команде обработка подключается не по наименованию.
25 acht
 
14.02.20
09:14
(22) ... в каждую базу (:
26 Ifkerri
 
14.02.20
09:14
Да в базе 100% две или больше внешних обработок с таким наименование (или похожим). Вторым параметром в методе НайтиПоНаименованию() можно указать необходимость поиска по точному соответствию.
Автор меняет макет в одной обработке, а в коде используется другая.
А вообще пользоваться этим методом не стоит -_-
27 Lama12
 
14.02.20
09:17
(0) А кэш то почищен?
28 Lama12
 
14.02.20
09:19
Кстати. Еще можно сделать замер производительности и посмотреть всю трассу выполнения кода. Может там действительно, как говорит (26), две обработки.
29 strange2007
 
14.02.20
09:26
Автор, почисти кэш. Точно говорю.

По правде для многих просто нереально найти ответ в такой ситуации. Первый раз с этим столкнулся лет 12-13 назад, когда дружбан попросил совета по вопросу, что счётчик документов, сделанный на константе (!!!!!!) вызывает блокировки базы. Сказал ему переделать на регистр и мозг не парить. Мы час стояли и рассуждали об этом. Я ему объяснял, что тестовая моделька за 20 минут делается. Проверил, принял решение и проблемы нет. А он задумчиво всё твердил "ну чего же она блокируется". Через пол года мы встретились опять и он к этому времени так и не решил проблему.
Да и тут, на мисте, подобные хохмы случаются. Сначала я смеялся и удивлялся, а потом понял, что большинству людей просто трудно собрать алгоритм отладки в голове. Так что, друзья, отнеситесь с пониманием к автору
30 strange2007
 
14.02.20
09:30
Ох, автор, если бы ты только представлял на сколько жесток мир. Я вот тут вижу одну печатную форму из бизнес-процесса, которая тянет часть готового макета из РТУ, который тянет кусок печатной формы из внешней обработки, которая получает отчёт из внешнего отчёта, который на выбор получает макеты и данные из разных баз. А ещё иногда это всё вытягивает какие-то обработки из сети. Всё это без описания. Таких обработок тут под сотню. Некоторые из них инициируются при помощи вёб-приложений, то ли сишный, то ли ассемблерный механизм ещё есть. Не удивлюсь, если тут найду солнечный индикатор, от которого тоже что-то будет запускаться
31 bebibo
 
14.02.20
10:01
(27) почистила в папке темп, не помогло, где еще надо может?
32 bebibo
 
14.02.20
10:02
(28) посмотрю сейчас
33 Salimbek
 
14.02.20
10:06
(31) %appdata%
34 D_E_S_131
 
14.02.20
10:17
"ОбработкаОбъект.ПечатьДокумента(..." - вот внутри этой функции нужно смотреть откуда берется макет.
35 pechkin
 
14.02.20
10:18
а где собственно код получения макета?
36 bebibo
 
14.02.20
10:21
(34) СОдержит табличный документ. Но почему то там макет - Ложь - булево
37 Очевидно
 
14.02.20
10:21
О, пятничные тролли подъехали)
38 bebibo
 
14.02.20
10:22
(35) Так вот он наверно при "НайтиПоНаименованию" берет же эту печатную форму, вот там этот макет и берется наверно. Разве нет? Зачем тогда он ищет эту ПФ? Чтобы наверно взять ее вместе с макетом
39 D_E_S_131
 
14.02.20
10:24
(36) Код из этой процедуры давай, а не что там "содержит". :)
40 bebibo
 
14.02.20
10:25
(39)
Функция СформироватьИСохранитьПечатнуюФорму(ДокументСсылка, СтруктураДанных, НастройкиОбмена)
        
        ПечатнаяФорма = Неопределено;
        
        ПутьКФайлу = "";
        
        Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.СчетНаОплатуПокупателю") Тогда
            
            НайденаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Счет на бланке");
            
            Если Не НайденаяОбработка.Пустая() Тогда
                
                МассивОбъектов = Новый Массив;
                МассивОбъектов.Добавить(ДокументСсылка);
                
                ОбъектыПечати = Новый СписокЗначений;
                
                ИмяФайла = ПолучитьИмяВременногоФайла();
                ДвоичныеДанные = НайденаяОбработка.ХранилищеОбработки.Получить();
                ДвоичныеДанные.Записать(ИмяФайла);
                
                ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяФайла, Истина);
                ПечатнаяФорма = ОбработкаОбъект.ПечатьДокумента(МассивОбъектов, ОбъектыПечати, (Число(СтруктураДанных.sign) = 1));
                ОбработкаОбъект = Неопределено;
                
                УдалитьФайлы(ИмяФайла);
                
            КонецЕсли;            
            
        ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда    
            
            НайденаяОбработка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("ТОРГ12 на бланке");
            
            Если Не НайденаяОбработка.Пустая() Тогда
                
                МассивОбъектов = Новый Массив;
                МассивОбъектов.Добавить(ДокументСсылка);
                
                ОбъектыПечати = Новый СписокЗначений;
                
                ВключатьУслуги = Истина;
                ТаблицаСведенийТОРГ12 = Документы.РеализацияТоваровУслуг.ПолучитьТаблицуСведенийТОРГ12(МассивОбъектов, ВключатьУслуги);
                ИмяПараметровПечати    = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТОРГ12";
                
                ИмяФайла = ПолучитьИмяВременногоФайла();
                ДвоичныеДанные = НайденаяОбработка.ХранилищеОбработки.Получить();
                ДвоичныеДанные.Записать(ИмяФайла);
                
                ОбработкаОбъект = ВнешниеОбработки.Создать(ИмяФайла, Истина);
                ПечатнаяФорма = ОбработкаОбъект.ПечатьДокумента(ТаблицаСведенийТОРГ12, ОбъектыПечати, ИмяПараметровПечати);
                ОбработкаОбъект = Неопределено;
                
                УдалитьФайлы(ИмяФайла);
                
            КонецЕсли;
            
        ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда
            
            МассивОбъектов = Новый Массив;
            МассивОбъектов.Добавить(ДокументСсылка);
            
            ОбъектыПечати = Новый СписокЗначений;
            
            ПечатнаяФорма = УчетНДС.ПечатьСчетовФактур1137(МассивОбъектов, ОбъектыПечати, Документы.СчетФактураВыданный.ТекстЗапросаПечатьСчетовФактур());
            
        ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.АктСверкиВзаиморасчетов") Тогда
            
            МассивОбъектов = Новый Массив;
            МассивОбъектов.Добавить(ДокументСсылка);
            
            ОбъектыПечати = Новый СписокЗначений;
            
            ПечатнаяФорма = ПечатьАктаСверки(МассивОбъектов, ОбъектыПечати)
            
        КонецЕсли;    
        
        Если ПечатнаяФорма <> Неопределено Тогда
            
            Если Число(СтруктураДанных.format) = 0 Тогда
                
                ПутьКФайлу = СтруктураДанных.ПутьКаталога + "\" + СтруктураДанных.Представление + ".xlsx";
                
                ПечатнаяФорма.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
                
            ИначеЕсли Число(СтруктураДанных.format) = 1 Тогда
                
                ПутьКФайлу = СтруктураДанных.ПутьКаталога + "\" + СтруктураДанных.Представление + ".pdf";
                
                ПечатнаяФорма.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
                
            КонецЕсли;    
            
        Иначе
            
            ПутьКФайлу = "";
            
        КонецЕсли;    
        
        Возврат ПутьКФайлу;    
        
    КонецФункции
41 D_E_S_131
 
14.02.20
10:29
(40) Какой мрак!
Возьми элемент справочника "ДополнительныеОтчетыИОбработки", который находится по наименованию "Счет на бланке". Потом из его реквизита "ХранилищеОбработки" сохрани во внешний файл саму обработку печати. Потом открой эту сохраненную обработку в конфигураторе и в ее модуле объекта посмотри функцию "ПечатьДокумента()". Именно в ней будет код для получения макета.
42 Мимохожий Однако
 
14.02.20
10:31
(0) Встань отладчиком на начало процедуры и шагая до места, где получаешь макет. Как найдёшь это место, долго думай.
43 acht
 
14.02.20
10:31
(38) >наверно
Вероятностное женское программирования (:

Откуда такая уверенность, что:
1) НайденаяОбработка найдена верно
2) ОбработкаОбъект.ПечатьДокумента при этом наборе параметров использует исправленный макет, а не, например, общий?
3) Все это происходит вообще в нужной базе?
44 Мимохожий Однако
 
14.02.20
10:36
(38) Повторюсь: Не гадай, встань на проблемное место отладчиком. Анализируй.
45 Ifkerri
 
14.02.20
10:38
(38) Надо просто ответить на все вопросы указанные в (43). Вот прямо все как надо написано
Либо обработка не та, либо макет не тот, либо база.
46 malem13
 
14.02.20
10:44
1) в внешнюю печатную форму в какое-нибудь поле типа комментарий написать свое и при обращении в коде в журнал регистрации вывести значение этого поля
2) можно еще глобальный поиск по макетам сделать текста из печатной формы
47 bebibo
 
14.02.20
10:45
Я решила!!!
Вы представляете!! Вы будете удивлены!
Оказывается, эта ПФ содержит несколько областей, которые используются каждая в своем назначении!
То есть область "ПодвалСчета" - я  ней меняла текст. В 1С печатаю - всё хорошо. А через обмен -нет.
Просто область "ПодвалСчета" - используется при печати из 1С. А есть еще область - ниже в макете (только сейчас увидела и чисто случайно пролистнула макет вниз, а там спустя пробелы есть еще области!!)
А для СРМ точно такой же подвал, но по другому называется область"ПодвалСчетаСПодписьюИПечатью" - но данные там одни и те же, что в том подвале, что в том. Просто одна область подвала нужна для 1с, а другая для СРМ(не понятно зачем, но видимо может быть такое, что при печати из 1С одна и при печати из СРМ информация может меняться, поэтому и сделали 2 подвала).
Боже мой, вот как так))
Печатную форму видела впервые. Зашла, изменила в подвале текст и сохранила -всё.
Кто ж знал, что там ниже прокрутишь и потом появятся еще области))
Всем спасибо огромное, кто пытался помочь!!!
48 strange2007
 
14.02.20
11:12
(47) Ох сколько же ещё сюрпризов тебя ожидает. Главное не сдаваться!
49 Мимохожий Однако
 
14.02.20
11:22
(47) ОФФ: Если ты мадама, то поменяй это в профиле.
50 dka80
 
14.02.20
11:29
(49) тебе это зачем?
51 strange2007
 
14.02.20
11:37
(49) Мадама? А я так понял это мужиГ
Ошибка? Это не ошибка, это системная функция.