Имя: Пароль:
1C
1C 7.7
v7: Печать в 7.7 под SRV2008
0 varelchik
 
05.09.12
14:58
Начали переводить пользователей с 2003 терминала на 2008 и вылезла енприятность.
Смысл следующий.
На 2003 все пучаталось пучком, а именно если у ячейки стоит в свойствах авто то визуально видно что длинный текст образан, а также на печати тоже.
На 2008 вылезла ерунда какая-то внутри 1С мы видем что все пучком, предпросмотр тоже самое,но вот если отправляем на печать то на бумаге уже начинаються чудеса.
Текст который был обрезан накрывает текст в соседней ячейке справа.
Принтер Easy Print.
На спкриптовом все в норме.
1 floody
 
05.09.12
15:05
Не нравится - не используй изипринт.
2 varelchik
 
05.09.12
15:07
Хотелось бы все таки решить конечно.
3 floody
 
05.09.12
15:08
А что решать то?Если он так работает.
4 varelchik
 
05.09.12
15:10
Значит решений никаких нету?
Потому как в других приложениях типа Excel сохраненные файлы из 1С распечатуються нормально.
5 monsterZE
 
05.09.12
15:14
последние обновы для сервера
последние драйвера для принтера
последний скрюшный клиент-сервер
сам пользую скрюшные сервер+клиент
полет нормальный
ковыряй рендеринг шрифтов, если такое есть..
или просто обнови.
6 varelchik
 
05.09.12
17:27
(5) А причем здесь это?
Другие-то приложения печатають нормально скажем если сохранить в xls и открыв Excel распечатать то все пучком.
7 monsterZE
 
06.09.12
10:53
(6) остальные приложения тоже на терминал прокидываются?
8 varelchik
 
06.09.12
11:40
(7) непонял.
Excel стоит на терминале.
9 monsterZE
 
06.09.12
12:23
поясняю - так было, с какой-то версией скрюшных дров
именно под 2008 сервером.. решение - помоему просто версию обновили.
поэксперементируй с установками принт-джоб-рендеринг
10 varelchik
 
06.09.12
14:23
(9) принт-джоб-рендеринг
непомогло.
11 monsterZE
 
06.09.12
17:01
отключи компрессию в настройках сервера
12 varelchik
 
07.09.12
11:48
Вообщем так.
Ничего ненашел посему решил разрулить временно внутри самой 1С.
Для этого потребовались две внешних компоненты.
RWidjets.dll
SpreadSheet.dll
С помощью первой перехватываю момент отправки на Печать
а второй конвертирую Таблицу в PDF и запускаю Акробата для печати.
Извратно конечно, но другого варианта пока ненашел.
13 Maximysis
 
07.09.12
14:38
Попробуй screwdrivers
14 varelchik
 
07.09.12
16:17
(13) Это что за зверь такой?
15 monsterZE
 
07.09.12
22:50
(14) если я правильно помню, то изипринт - это вроде как тоже ихняя поделка?
triCerat ScrewDrivers
http://rutracker.org/forum/viewtopic.php?t=2145190
16 varelchik
 
25.09.12
09:37
Вообщем так. Проблема конечно решилась,но какими усилиями.....
Для этого потребовались 1С++,FormEx,DialMail,RWidjets,Йоксель
1.В глобальнике Перехватил ПолучениеКоманды на печать

ПриПолученииКоманды(Команда,Флаг)
       Если Команда=57607 Тогда
           Конт=1;
           ОткрытьФормуМодально("Обработка.ПреобразованиеMXL",Конт);
           Если Конт=1 Тогда
               Флаг=1;
           КонецЕсли;
       КонецЕсли;    
2.Добавил Обработку с текстом

Перем гТаблица;
Перем Сервис;

Функция ВернутьПараметр(ИТЗ,Имя,Реж=0)
   значение=0;
   Если ИТЗ.НайтиСтроку("инд",Имя,,1)>0 Тогда
       значение=ИТЗ.Значение;
       Если Реж=1 Тогда
           значение=Число(значение);
       КонецЕсли;
   КонецЕсли;
   Возврат значение;
КонецФункции    // ВернутьПараметр

Процедура ПриОткрытии()
   СпУмолч=СоздатьОбъект("СписокЗначений");
   СпУмолч.ДобавитьЗначение("Orient",1);
   СпУмолч.ДобавитьЗначение("Paper",9);
   СпУмолч.ДобавитьЗначение("FitToPage",1);
   
   СпУмолч.ДобавитьЗначение("Scale",100);
   СпУмолч.ДобавитьЗначение("Bottom",10);
   СпУмолч.ДобавитьЗначение("Top",10);

   СпУмолч.ДобавитьЗначение("Left",10);
   СпУмолч.ДобавитьЗначение("Right",10);
   //СпУмолч.ДобавитьЗначение("FitToPage",1);
   //page.Orientation = ВернутьПараметр(ИТЗ,"Orient",1); // portrait
   ////Paper
   //page.PaperSize = ВернутьПараметр(ИТЗ,"Paper"); // Excel.XlPaperSize.xlPaperA4;
   //ПоШирине=ВернутьПараметр(ИТЗ,"FitToPage",1);
   //Если ПоШирине=1 Тогда
   //    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   //    Скрипт.Language="javascript";
   //    Скрипт.AddObject("ПараметрыСтраницы",page);
   //    Скрипт.Eval("ПараметрыСтраницы.Zoom=false");                //page.FitToPagesTall = 1;
   //    Скрипт.Eval("ПараметрыСтраницы.FitToPagesTall=false");                //pageFitToPagesTall = 1;
   //    page.FitToPagesWide = 1;
   //Иначе
   //    page.Zoom = ВернутьПараметр(ИТЗ,"Scale",1);
   //КонецЕсли;
   //// Отступы задаются в точках!
   ////Bottom
   //page.BottomMargin = ВернутьПараметр(ИТЗ,"Bottom",1);
   ////Top
   //page.TopMargin = ВернутьПараметр(ИТЗ,"Top",1);
   ////Left
   //page.LeftMargin = ВернутьПараметр(ИТЗ,"Left",1);
   ////Right
   //page.RightMargin = ВернутьПараметр(ИТЗ,"Right",1);
   
   
   Версия=?(ПустоеЗначение(глВерсияОС)=1,глСервис.ВерсияОС(),глВерсияОС);
   Форма.Параметр=0;
   СтатусВозврата(0);
   Если Найти(Версия,"Server40")>0 Тогда
       Если глСервис.АктивныйКонтекст (гТаблица) = 1 Тогда
           Если ТипЗначенияСтр (гТаблица) = "Таблица" Тогда
               Документ=СоздатьОбъект("ТабличныйДокумент");
               Документ.ЗагрузитьИзТаблицы(гТаблица);
               ИмяФайла=КаталогВременныхФайлов()+глСервис.ПолучитьGUID()+".xls";
               Документ.Записать(ИмяФайла,1);
               Реестр=СоздатьОбъект("РеестрWin");
               Реестр.ОткрытьКлюч("HKEY_CURRENT_USER","Software\1C\1Cv7\7.7\Titles","KEY_READ");
               НазваниеБазы="";
               Реестр.ЗапроситьЗначение(КаталогИБ(),НазваниеБазы);
               //Сообщить(НазваниеБазы);
               Ключ="Software\1C\1Cv7\7.7\"+НазваниеБазы+"\V7\"+ИмяПользователя()+"\Moxel\Default";
               стат=Реестр.ОткрытьКлюч("HKEY_CURRENT_USER",Ключ,"KEY_READ");
               ИмяЗначения="";
               Значение="";
               КодИБ="";
               ИТЗ=СоздатьОбъект("ИндексированнаяТаблица");
               ИТЗ.НоваяКолонка("Имя");
               ИТЗ.НоваяКолонка("Значение");
               ИТЗ.ДобавитьИндекс("инд","Имя");
               Если стат<>0 Тогда
                   Кво=Реестр.ВыбратьЗначения();
                   ИмяЗначения="";
                   Пока Реестр.ПолучитьЗначение(ИмяЗначения)=1 Цикл
                       Реестр.ЗапроситьЗначение(ИмяЗначения,Значение);
                       ИТЗ.НоваяСтрока();
                       ИТЗ.Имя = ИмяЗначения;
                       ИТЗ.Значение = Значение;
                   КонецЦикла;
               КонецЕсли;
               Если ИТЗ.КоличествоСтрок()=0 Тогда
                   Для н=1 По СпУмолч.РазмерСписка() Цикл
                       Значение="";
                       ИмяЗначения=СпУмолч.ПолучитьЗначение(н,Значение);
                       ИТЗ.НоваяСтрока();
                       ИТЗ.Имя = ИмяЗначения;
                       ИТЗ.Значение = Значение;
                   КонецЦикла;
               КонецЕсли;
               excel = СоздатьОбъект("Excel.Application");
               
               excel.WindowState = -4143;
               
               last_height = excel.Height;
               last_width = excel.Width;
               excel.Height = 0;
               excel.Width = 0;
               excel.WindowState = -4140;
               excel.WindowState = -4143; // xlNormal
               excel.Visible = 0;
               book = excel.Workbooks.Open(ИмяФайла); // книга
               page = excel.ActiveSheet.PageSetup; // параметры страницы
               //Orient
               page.Orientation = ВернутьПараметр(ИТЗ,"Orient",1); // portrait
               //Paper
               page.PaperSize = ВернутьПараметр(ИТЗ,"Paper"); // Excel.XlPaperSize.xlPaperA4;
               ПоШирине=ВернутьПараметр(ИТЗ,"FitToPage",1);
               Если ПоШирине=1 Тогда
                   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
                   Скрипт.Language="javascript";
                   Скрипт.AddObject("ПараметрыСтраницы",page);
                   Скрипт.Eval("ПараметрыСтраницы.Zoom=false");                //page.FitToPagesTall = 1;
                   Скрипт.Eval("ПараметрыСтраницы.FitToPagesTall=false");                //pageFitToPagesTall = 1;
                   page.FitToPagesWide = 1;
               Иначе
                   page.Zoom = ВернутьПараметр(ИТЗ,"Scale",1);
               КонецЕсли;
               // Отступы задаются в точках!
               //Bottom
               page.BottomMargin = ВернутьПараметр(ИТЗ,"Bottom",1);
               //Top
               page.TopMargin = ВернутьПараметр(ИТЗ,"Top",1);
               //Left
               page.LeftMargin = ВернутьПараметр(ИТЗ,"Left",1);
               //Right
               page.RightMargin = ВернутьПараметр(ИТЗ,"Right",1);
               dialog = excel.Dialogs(8);
               dialog.Show();
               null=0;
               book.Saved = 1; // не спрашивать про сохранение документа
               excel.Visible = 0;
               excel.Height=last_height ;
               excel.Width=last_width ;
               //Сообщить(last_height);
               //Сообщить(last_width);
               excel.Quit();
               //Возврат;
               //Окна.Максимизировать();
               //Система.ПоказатьОкно("Печать",1);
               Система=СоздатьОбъект("AddIn.SystComm");
               Система.АктивироватьОкноРабочейПрограммы();
               ФС.УдалитьФайл(ИмяФайла);
               Форма.Параметр=1;
               глСервис.ОбработкаОжидания("АктивизироватьПечать",0);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   //СтатусВозврата(0);
   Возврат;
КонецПроцедуры    // ПриОткрытии

В результате получилось очень даже ничего.
Т.е. мы вместо 1С печатаем через Excel.
Пользователь даже не замечает что печать не из 1С а из Excel.
Малоли кому потребуеться.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn