Показать сообщение отдельно
Старый 23.04.2014, 18:02   #1  
kgenius is offline
kgenius
Участник
 
98 / 10 (1) +
Регистрация: 27.10.2004
Добрый день!
Работаю на кастомизированном ядре 2.6, клиент 2009.
Опишу задачу. Есть функциональность печати ценников из Navision, через report. Ценники имеют разный размер (5x4 и 7x4). Для печати есть ленточный принтер. Необходимо передавать на принтер размер, который требуется напечатать. Какое решение пока рассматривается. Один физический принтер в винде определен, как 2 виртуальных с разными размерами печати (5x4,7x4) по умолчанию. Теперь задача сводится к передачи нужного формата на нужный принтер. Я это сделал через 78 таблицу (Принтер Настройка).
При выборе формата ценника отрабатывает следующий код (на onAfterValidate поля):
[attachment=1384:format.jpg]
CLEAR(ВыбранныйПринтерПуть);
DataMaxПринтерНастройка.RESET;
DataMaxПринтерНастройка.SETRANGE(Магазин,Магазин."Но.");
CASE ФорматЦенника OF
ФорматЦенника::"5x4":
BEGIN
DataMaxПринтерНастройка.SETRANGE(Формат, DataMaxПринтерНастройка.Формат::"5x4");
IF DataMaxПринтерНастройка.FINDFIRST THEN
ВыбранныйПринтерПуть := DataMaxПринтерНастройка.Принтер
ELSE
ERROR('Нет принтера для печати формата 5x4 в таблице 99001656! Обратитесь к администраторам ИС.');
END;
ФорматЦенника::"7x4":
BEGIN
DataMaxПринтерНастройка.SETRANGE(Формат, DataMaxПринтерНастройка.Формат::"7x4");
IF DataMaxПринтерНастройка.FINDFIRST THEN
ВыбранныйПринтерПуть := DataMaxПринтерНастройка.Принтер
ELSE
ERROR('Нет принтера для печати формата 7x4 в таблице 99001656! Обратитесь к администраторам ИС.');
END;
END;
ПринтерНастройка.RESET;
ПринтерНастройка.SETRANGE("Код Пользователя",USERID);
ПринтерНастройка.SETRANGE("Отчет ID", 60252);
IF ПринтерНастройка.FINDSET THEN BEGIN
ПринтерНастройка.VALIDATE("Название Принтера",'');
ПринтерНастройка.MODIFY;
ПринтерНастройка.VALIDATE("Название Принтера", ВыбранныйПринтерПуть);
ПринтерНастройка.MODIFY;
COMMIT;
END ELSE
BEGIN
ПринтерНастройка.INIT;
ПринтерНастройка."Код Пользователя" := USERID;
ПринтерНастройка."Отчет ID" := 60252;
ПринтерНастройка."Название Принтера" := ВыбранныйПринтерПуть;
ПринтерНастройка."Отчет Название" := CurrReport.OBJECTID(TRUE);
ПринтерНастройка.INSERT;
COMMIT;
END;

Суть в том, что записывается значение в Принтер настройка, которое должно далее на системном уровне определять на какой принтер отправлять задание на печать. Работает, но криво. Почему-то срабатывает предыдущий формат, а при повторном запуске он отрабатывает.
Пример:
1) Захожу в сессию Nav, и выбираю формат 5x4. На печать уходит правильный формат.
[attachment=1385:5x4-1.jpg]
2) Перезахожу в отчет и выбираю формат 7x4. На печать идет формат 5x4.
[attachment=1386:7x4-1.jpg]
3) Снова перезахожу и выбираю формат 7x4. Печать идет на правильный формат.
[attachment=1387:7x4-2.jpg]

Всю голову себе уже сломал. Может быть кто-нибудь подскажет вариант решения.
Спасибо.
Изображения