Печать на принтер этикеток

1. Sanario 27 25.09.14 10:39 Сейчас в теме
К документу Поступление ТМЦ прилеплена печатная форма для печати этикетки. Когда приходит большая приходная накладная, в которой больше 500 строк прихода с количеством единиц на каждую позицию не меньше 2 (Бывает от 30 до 500), и потом менеджер по закупу из формы документа вызывает на печать, то 1С (под любым пользователем) зависает на продолжительное время ПРИ ВЫВЕДЕНИИ НА ЭКРАН и может потом из "подвиса" не выйти.

Тех условия:
Windows Server 2003
Intel i7 - 3770
ОЗУ - 16Gb
HDD - 2x1Tb

Терминальный режим
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Sanario 27 25.09.14 11:20 Сейчас в теме
Сделал внешнюю печатную форму. Другой алгоритм формирования данных - ситуация не изменилась :(

Вариант 1 (как было до меня)
Процедура СформироватьЭтикетку(ТаблицаТоваров, Устройство = "экран")
	Если фРозница = 1 Тогда
		ИсхТабл = СоздатьОбъект("Таблица");
		ИсхТабл.ИсходнаяТаблица("ЭтикеткаРозница");
		ТаблицаТоваров.ВыбратьСтроки();
		Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
			ПечФирма        = Фирма.Наименование;
			ПечКод          = ТаблицаТоваров.Код;
			ПечНаименование = ТаблицаТоваров.Товар;
			ПечРозн         = ТаблицаТоваров.Цена;
			Штрих           = ТаблицаТоваров.Штрихкод;
			ИсхТабл.ВывестиСекцию("Товар|Ценник");
			ИсхТабл.НоваяСтраница();
		КонецЦикла;
	Иначе
		ИсхТабл	= СоздатьОбъект("Таблица");
		ИсхТабл.ИсходнаяТаблица("Этикетка");
		ТаблицаТоваров.ВыбратьСтроки();
		Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
			ПечКод          = ТаблицаТоваров.Код;
			ПечНаименование = ТаблицаТоваров.Товар;
			ПечРозн         = ТаблицаТоваров.Цена;
			ПечОпт          = ТаблицаТоваров.Цена1;
			Штрих           = ТаблицаТоваров.Штрихкод;
			ИсхТабл.ВывестиСекцию("Товар|Ценник");
			ИсхТабл.НоваяСтраница();
		КонецЦикла;
	КонецЕсли;
	
	ИсхТабл.Опции(0,0,0,0,"ПечатьЦенников","ПечатьЦенников");
	ИсхТабл.ТолькоПросмотр(1);
	ИсхТабл.Показать("Товарные ценники","");
КонецПроцедуры

Процедура Этикетка() 
	Данные.УдалитьСтроки();
	ВыбратьСтроки();
	Пока ПолучитьСтроку()=1 Цикл 
		СчетчикЦикла = 0;
		Для СчетчикЦикла = 1 По Количество Цикл
			Данные.НоваяСтрока();
			Данные.Товар    = СокрЛП(Номенклатура.Наименование);
			Данные.Штрихкод = СокрЛП(Номенклатура.БазоваяЕдиница.Штрихкод);  
			Если ЕстьЦенаР=1 Тогда
				ПечРозн    = глПолучитьЦену(Номенклатура, Константа.РозничныйТипЦен, ДатаДок) ; 
				ПечОпт    = глПолучитьЦену(Номенклатура, Константа.МелкооптовыйТипЦен, ДатаДок) ; 
			иначе
				печрозн=0;              		
				ПЕЧОПТ=0;  
			КонецЕсли;
			Данные.Цена  = СокрЛП(Формат(ПечРозн,"Ч010.2-"));	
			Данные.Цена1 = СокрЛП(Формат(ПечОпт,"Ч010.2-"));	
			Данные.Код   = СокрЛП(Номенклатура.Код);  
			
		КонецЦикла;
	КонецЦикла;   
	СформироватьЭтикетку(Данные);
КонецПроцедуры
Показать


Вариант 2 (как сделал я во внешней ПФ)

Процедура Печать(Докум, Устройство=0, КолвоКопий=1)

	ИсхТабл = СоздатьОбъект("Таблица");
	Докум.ВыбратьСтроки(); 
	
	Пока Докум.ПолучитьСтроку() = 1 Цикл
		
		ПечРозн         = глПолучитьЦену(Докум.Номенклатура, Константа.РозничныйТипЦен, Докум.ДатаДок);
		ПечОпт          = глПолучитьЦену(Докум.Номенклатура, Константа.МелкооптовыйТипЦен, Докум.ДатаДок);
		ПечНаименование = СокрЛП(Докум.Номенклатура.Наименование);
		ПечКод          = Докум.Номенклатура.Код;
		Штрих           = Докум.Номенклатура.БазоваяЕдиница.ШтрихКод;
		Для Сч =1 По Докум.Количество Цикл
			ИсхТабл.ВывестиСекцию("Товар|Ценник");
			ИсхТабл.НоваяСтраница();
		КонецЦикла;                 

	КонецЦикла;
	
	Если Устройство = 0 Тогда
		ИсхТабл.Опции(0,0,0,0,"ОпцииПечатиРеализация");
		Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
			ИсхТабл.ТолькоПросмотр(1);
		Иначе
			ИсхТабл.ТолькоПросмотр(0);
		КонецЕсли;
		ИсхТабл.Показать(глНазваниеДокументаВжурнале(Докум),"");  
	Иначе     
		ИсхТабл.ПараметрыСтраницы(,,,,,,,,,1,,);
		ИсхТабл.КоличествоЭкземпляров(КолвоКопий);
		ИсхТабл.Напечатать(0);
	КонецЕсли; 
	
КонецПроцедуры // Печать()
Показать
13. Cooler 22 25.09.14 15:16 Сейчас в теме
(1)
Терминальный режим
А если локально на сервере попробовать печатать?

(11)
думаю, что задания для печати все почистились (ну должны были)
Детский лепет, недостойный даже начинающего админа. Проверить и очистить соответствующие папки - дело 10 минут.
14. Sanario 27 25.09.14 15:25 Сейчас в теме
(13) Cooler, Я почистил, не надо уж совсем про детский лепет. Это самое первое было, что я сделал.
15. Sanario 27 25.09.14 15:27 Сейчас в теме
(13) Cooler: "А если локально на сервере попробовать печатать?"

Без разницы. Пробовал сидя за сервером - одинаково
43. Sanario 27 02.10.14 17:53 Сейчас в теме
На печать теперь без предпросмотра сделал. Единственное, что если обсчитывает накладную если на ляма полтора-два, то просто зависает кушая от 200Мб до бесконечности памяти и потом "Нехватка памяти". Вот тут я уже пас - код вылизан. ХЗ, чего с ним творить еще можно
Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
    
	ИсхТабл = СоздатьОбъект("Таблица"); 
	Сч = 1;
	
	тРозничныйТипЦен    = Константа.РозничныйТипЦен;
	тМелкооптовыйТипЦен = Константа.МелкооптовыйТипЦен;
	
	
	Докум.ВыбратьСтроки(); 
	Пока Докум.ПолучитьСтроку() = 1 Цикл
		
		тНоменклатура   = Докум.Номенклатура; 
		тДатаДок        = Докум.ДатаДок;
		
		ПечРозн         = глПолучитьЦену(тНоменклатура, тРозничныйТипЦен, тДатаДок);
		ПечОпт          = глПолучитьЦену(тНоменклатура, тМелкооптовыйТипЦен, тДатаДок);
		ПечНаименование = СокрЛП(тНоменклатура.Наименование);
		ПечКод          = тНоменклатура.Код;
		Штрих           = тНоменклатура.БазоваяЕдиница.ШтрихКод;
		
		Для Сч =1 По Докум.Количество Цикл
			ИсхТабл.ВывестиСекцию("Товар|Ценник");
			ИсхТабл.НоваяСтраница();
		КонецЦикла;                 
		
	КонецЦикла;
	ИсхТабл.ТолькоПросмотр(1);
	ИсхТабл.ПараметрыСтраницы(1,,,0,0,0,0,0,0,1,,1);
	ИсхТабл.Опции(0,0,0,0,,,,);
	ИсхТабл.Напечатать(1);
	//ИсхТабл.Показать("Таблица");
				
КонецПроцедуры // Печать()
Показать
2. Sanario 27 25.09.14 10:57 Сейчас в теме
На продолжительное - это больше 5 минут
4. Sanario 27 25.09.14 11:27 Сейчас в теме
Мда... Мой вариант на одной и той же накладной работает быстрее, примерно в полтора раза. Но всеравно долго
5. Frogger1971 25.09.14 13:09 Сейчас в теме
Может проблема с Диспетчером печати? Много подключаемых сетевых принтеров?
6. Sanario 27 25.09.14 13:56 Сейчас в теме
Да не так уж и много - 6 штук. Поскольку терминальный режим - принтера мапятся по мере подключения. Но нюанс в том, что долго именно формируется выходная таблица ( в последний раз после 2-х часов ожидания я снял задачу пользователю). Сама печать идет быстро
7. shard 281 25.09.14 14:36 Сейчас в теме
долго таблица формируется или долго выводится на экран? если так хочется на такое кол-во этикеток смотреть, то может попробовать через ВК в ёксель сохранить?
9. Sanario 27 25.09.14 14:46 Сейчас в теме
(7) shard, долго выводится на экран. в накладной 6400 этикеток примерно получается, в той, что я счас запустил. в 14-35 начало. Еще формируется
17. shard 281 25.09.14 19:52 Сейчас в теме
(9) имхо вы все не туда копаете. если "долго выводится на экран" - то долго отрабатывает строка "ИсхТабл.Показать()". и все оптимизации кода - для очистки совести. проверьте, добавив вывод текущего времени перед формированием таблицы, после цикла формирования таблицы и после вывода таблицы на экран
8. foxey 4 25.09.14 14:42 Сейчас в теме
Я бы сделал так: Перед печатью определяем примерное количество страниц печатной продукции. Если более пяти - предупреждаем юзверя, что печатать будем порциями по пять листов (например). И, собственно, оформляем печать этикеток порционно (по пять листочков). Таким образом пока печатается очередная порция картинок, готовится следующая очередь. Избавляемся от якобы "зависания" программы перед печатью.
10. Sanario 27 25.09.14 14:48 Сейчас в теме
Причем манагеры кричат в один голос - мол до падения света (ОКАЗЫВАЕТСЯ ТАКОЕ БЫЛО, КОГДА МЕНЯ НЕ БЫЛО !!!) все быстро чепятоло
11. Sanario 27 25.09.14 14:55 Сейчас в теме
Естественно сервер я перегрузил. Машины менеджеры и так выключали, как принтера. Так что думаю, что задания для печати все почистились (ну должны были)
12. foxey 4 25.09.14 15:00 Сейчас в теме
Ускорить код можно уменьшив количество обращений через точку.
Например, код
Пока Докум.ПолучитьСтроку() = 1 Цикл

	ПечРозн         = глПолучитьЦену(Докум.Номенклатура, Константа.РозничныйТипЦен, Докум.ДатаДок);
	ПечОпт          = глПолучитьЦену(Докум.Номенклатура, Константа.МелкооптовыйТипЦен, Докум.ДатаДок);
	ПечНаименование = СокрЛП(Докум.Номенклатура.Наименование);
	ПечКод          = Докум.Номенклатура.Код;
	Штрих           = Докум.Номенклатура.БазоваяЕдиница.ШтрихКод;
	Для Сч =1 По Докум.Количество Цикл
		ИсхТабл.ВывестиСекцию("Товар|Ценник");
		ИсхТабл.НоваяСтраница();
	КонецЦикла;                 

КонецЦикла;
Показать


Следует заменить на
РозничныйТипЦен = Константа.РозничныйТипЦен;
МелкооптовыйТипЦен = Константа.МелкооптовыйТипЦен;
тДатаДок = Докум.ДатаДок;

Пока Докум.ПолучитьСтроку() = 1 Цикл
            
	тНоменклатура = Докум.Номенклатура;
	ПечРозн         = глПолучитьЦену(тНоменклатура, РозничныйТипЦен, тДатаДок);
	ПечОпт          = глПолучитьЦену(тНоменклатура, МелкооптовыйТипЦен, тДатаДок);
	ПечНаименование = СокрЛП(тНоменклатура.Наименование);
	ПечКод          = тНоменклатура.Код;
	Штрих           = тНоменклатура.БазоваяЕдиница.ШтрихКод;
	Для Сч =1 По Докум.Количество Цикл
		ИсхТабл.ВывестиСекцию("Товар|Ценник");
		ИсхТабл.НоваяСтраница();
	КонецЦикла;                 

КонецЦикла;
Показать
38. Sanario 27 02.10.14 13:22 Сейчас в теме
(12) foxey, я так сделал, выигрыш по времени конечно есть, но проблема то не в этом - все так же медленно выводится печатная форма на предпросмотр
16. vcv 89 25.09.14 18:06 Сейчас в теме
А что говорит замер производительности в отладчике? Исходя из того, сколько времени на что уходит, можно говорить о причинах и оптимизации.
Из основных кандидатов:
1. глПолучитьЦену функция тормозная. К тому же два раза вызывается для одной и той же номенклатуры. Могла распухнуть таблица с периодикой и тормозно заработать. Добавили пару типов цен, заполнили их обработкой - получите приличное замедление работы с периодикой в любом справочнике. Или какой-нибудь реквизит сделали периодическим со всеми вытекающими.
2. ИсхТабл.ВывестиСекцию. Вывод секции по имени горадо тормознее, чем вывод заранее полученной с помощью ПолучитьСекцию.
18. Ёпрст 1065 26.09.14 08:28 Сейчас в теме
(0) самый тормоз в мокселе - объединенные ячейки и картинки. Заменишь их по возможности на галку "по выделенным строкам", будет шустрее вывод.
19. Ёпрст 1065 26.09.14 08:29 Сейчас в теме
ну и да, глПолучитьцену... самый тормоз в этом алгоритме.
Лучше за раз получить все цены для всей номенклатуры, скинуть в тз и потом вывод.
20. Sanario 27 26.09.14 11:45 Сейчас в теме
Попробовал в коде изменить по всем рекомендациям. Не помогло. Чувствую проблема в сервере в самой ОС или в программе. Ведь обработка считает все как положено и быстро. Заторможен вывод на экран сформированных данных. И вот тут у меня затык. Моксель пофиксен, сервак перегружен... А воз и поныне там
22. vcv 89 26.09.14 11:50 Сейчас в теме
(20) "Заторможен вывод на экран сформированных данных"
Это означает, что отладчик показывает львиную долю времени на строке ИсхТабл.Показать?
Или на строке ИсхТабл.ВывестиСекцию?
24. Sanario 27 26.09.14 11:58 Сейчас в теме
(22) vcv, ИсхТабл. Показать()
25. vcv 89 26.09.14 12:04 Сейчас в теме
(24) Тогда обойтись без показать. Попробовать сразу Напечатать(). 6400 этикеток показывать на экране как минимум бесполезно. Если и Напечатать будет тормозить, попробовать с помощью какого-нибудь Йокселя сохранить в эксель и распечатать через него.
30. shard 281 27.09.14 19:41 Сейчас в теме
(24) Sanario, что и требовалось доказать. альтернатива - вывод для просмотра сторонними средствами.
попробуйте разрыв страниц убрать - насколько изменится времы вывода?
21. Ёпрст 1065 26.09.14 11:49 Сейчас в теме
Это у всех юзверей, или у кого то одного ?
Если моксель большой - то памяти отъедает на показ прилично.
23. Sanario 27 26.09.14 11:58 Сейчас в теме
(21) Ёпрст, у всех, кто печатает эти этикетки:(
26. Sanario 27 26.09.14 13:38 Сейчас в теме
Проблема в том, что я видел, как до этого они формировались и без проблем отображались на экране( За короткий промежуток времени(
27. Cooler 22 26.09.14 13:55 Сейчас в теме
(26) Вы это сами видели? Или юзеры напели? Так они всегда врут.
29. Sanario 27 26.09.14 16:31 Сейчас в теме
(27) Cooler, видел. Как только система новая была
28. Ёпрст 1065 26.09.14 14:12 Сейчас в теме
(26) прибей cfg у юзверя и пользовательскую ветку реестра, в частности мокселя..
31. Sanario 27 29.09.14 11:46 Сейчас в теме
Вычитал, что нужно попробовать снести принтеры в терминалке и выставить их снова. Попробую - отпишусь. Будет в копилочку
П.С. cfg сносил, moxel тоже. Попробуем теперь этот вариант
32. Sanario 27 02.10.14 11:17 Сейчас в теме
Плин. Не помогло... Ну не переставлять же сервер ...
33. Ёпрст 1065 02.10.14 11:23 Сейчас в теме
покажи моксель от этикетки свой
35. Sanario 27 02.10.14 12:05 Сейчас в теме
(33) Ёпрст, Выходная форма какая в смысле?
34. Sanario 27 02.10.14 12:05 Сейчас в теме
А творится у всех пользователей:(
36. Sanario 27 02.10.14 12:08 Сейчас в теме
Хотел сделать без предпросмотра - наотрез отказываются - мол а как мы проверим - правильно или нет ...
37. Sanario 27 02.10.14 12:16 Сейчас в теме
Вот такая форма выходная этикетки
Прикрепленные файлы:
39. Sanario 27 02.10.14 17:29 Сейчас в теме
Ребят, а если подхватить и заменить moxel.dll от 81 или 82, может случиться так, что все норм заработает?
40. Ёпрст 1065 02.10.14 17:48 Сейчас в теме
Ну ё..
у тебя налицо самый тормозной вариант в мокселе -
1. объединённые ячейки
2.внедренный объект - картинка/оле объект

ясен пень, ято форма с 50000 такими картинками долго будет показываться.

примитивный вариант - показ 1 страницы. Усё.
41. Ёпрст 1065 02.10.14 17:49 Сейчас в теме
Можно даже на рвд сделать с кнопками листания вперёд/назад..
А печатать ужо всё и без препросмотра.
42. Ёпрст 1065 02.10.14 17:53 Сейчас в теме
можно "ускорить", избавившись от объедиененых ячеек, заменив их галкой "по выделенным столбцам"
44. Ёпрст 1065 02.10.14 17:54 Сейчас в теме
глПолучитьЦену
можно заменить на получения всех цен в одном запросе для всех номенклатуры, потом поиск в ней.
45. Ёпрст 1065 02.10.14 17:54 Сейчас в теме
будет не быстро, а очень быстро
46. Sanario 27 02.10.14 17:54 Сейчас в теме
(45) Ёпрст, подскажи пожалуйста как?
47. Ёпрст 1065 02.10.14 18:05 Сейчас в теме
для начала, 42
:)
потом ужо с ценами.
Основной тормоз - невозможность вывода для показа таблицы с куевой тучи внедренных объектов-штрихкода
48. Ёпрст 1065 02.10.14 18:06 Сейчас в теме
Он у вас что, кстати ?

Если это обычный еан, то проще (и это ускорит поделку и вывод) заместо картинки/активикса просто использовать Шрифт, как в регламентных.
49. Ёпрст 1065 02.10.14 18:10 Сейчас в теме
И, только не как в регламентированной отчетности, в виде Картинки, а именно в ячейке просто текстом нужным шрифтом.
50. Ёпрст 1065 02.10.14 18:13 Сейчас в теме
тип того:
Прикрепленные файлы:
69. assa 61 16.10.14 13:18 Сейчас в теме
(50)Как обычно, прав.
Время формирования таблицы данных 00:00:57 Количество строк в таблице: 17100
Время формирования ценников 00:00:08
Время вывода ценников на экран 00:00:00
Это если применить вместо ActiveBarcode шрифт EanGnivc.
Если оставить ActiveBarcode - то у меня не хватило терпения дождаться вывода на экран. Именно ВЫВОДА. Все остальное отрабатывает так же.
51. Ёпрст 1065 02.10.14 18:14 Сейчас в теме
Тогда, такой ценник без проблем будет показан через обычный предпросмотр
52. Sanario 27 02.10.14 22:41 Сейчас в теме
Епрст. Спасибо. Попробую. Только с работы домой приехал... Устал как собака:)
53. CheBurator 2712 03.10.14 19:54 Сейчас в теме
Епрст, а ты какой фон используешь для печати?
55. Ёпрст 1065 06.10.14 08:53 Сейчас в теме
(53) да 1с-овский, EanGnivc который
54. CheBurator 2712 03.10.14 19:54 Сейчас в теме
56. Sanario 27 07.10.14 11:12 Сейчас в теме
Проблема решилась, но с нюансами - принтер при переполнении своей памяти просто тупо рестартует задание, поэтому пришлось сказать, чтобы больше 1500 этикеток на раз не выпускали
57. Ёпрст 1065 07.10.14 11:33 Сейчас в теме
(56) а макет не переделывал при этом ?
58. Sanario 27 07.10.14 12:17 Сейчас в теме
Переделал, попробовали. Все нормально
59. Ёпрст 1065 07.10.14 12:32 Сейчас в теме
(58) т.е предпросмотр заработал ?
60. Sanario 27 07.10.14 12:51 Сейчас в теме
Не, продолжает тупо висеть, если этикеток много. Я вчера накладную на 2 000 000 выпускал пачками по 2 000 этикеток в течение 4-х часов с учетом печати притера
61. V_I_PRO 07.10.14 14:44 Сейчас в теме
(60) Sanario, Что-то долго. Сколько всего страниц выводится на печать?
62. V_I_PRO 07.10.14 14:47 Сейчас в теме
(60) Sanario, И сколько строк в таблице?
63. Sanario 27 07.10.14 15:49 Сейчас в теме
15000 эткеток примерно было
64. V_I_PRO 07.10.14 15:53 Сейчас в теме
(63) Sanario, Вы печатаете на принтер этикеток? Таблица содержит сколько страниц и сколько строк?
65. Sanario 27 08.10.14 09:11 Сейчас в теме
Да, на принтер этикеток, 1 Стр, 9 строк
66. CheBurator 2712 09.10.14 01:22 Сейчас в теме
У меня печать этикеток идет на А4 #65 (13 строк по 5 этикеток в строке). бывают заказы когда общая печать - страниц по 200.
Печать идет порциями по 30 листов.
если делать большие моксели - клюшки начинают глохнуть.
67. Sanario 27 10.10.14 10:55 Сейчас в теме
(66) CheBurator, суть то в том, что там принтер термоэтикетки и размер жестко фиксирован 58мм Х 30мм. Так что вариант на А4 не прокатит. Этикетка клеящаяся. На А4 я написал уже обработку и она рисует на А4 те же 30 этикеток
68. CheBurator 2712 10.10.14 14:52 Сейчас в теме
не знаю. надо смотреть.
не любит клюшки сильно большие моксели. а этикетки еще набиты инфой плотно, вот он еле и ворочается. попробуй частями.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот