×
×
Закрытая тема
Показано с 1 по 24 из 24
  1. #1
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140

    Вопрос Снова групповая обработка

    Хочу в стандартную групповую обработку документов добавить возможность пакетной печати документов на принтер (ПКО, РКО и оказание услуг). Например для ПКО: кроме реестра документов добавил таблицу (Таблица1) в печатные формы обработки. Вставил после выборки процедуру печати:
    //_____________________________________________________________________________

    Процедура Печать_ПКО(Док, СразуНаПринтер = 0)
    НомерДокПечатнойФормы = глПреобразоватьНомерДок(Док.НомерДок, 0, 0);

    ВТомЧисле = "";
    СтрНДС = "";
    СтрНП = "";
    Если Док.Валютный = 2 Тогда
    Если ПустоеЗначение(Док.Валюта.ИмяФайлаПрописи) = 1 Тогда
    Предупреждение("Для выбранной валюты не указан файл прописи.");
    ИначеЕсли ФС.СуществуетФайл(КаталогИБ()+Док.Валюта.ИмяФайлаПрописи) = 0 Тогда
    Предупреждение("Для выбранной валюты неверно указан файл прописи.");
    Иначе
    Пропись(КаталогИБ()+Док.Валюта.ИмяФайлаПрописи);
    КонецЕсли;
    СтрСумма = Формат(Док.Сумма,"Ч10.2-")+" "+Док.Валюта.Наименование;

    Иначе
    Пропись("");
    СтрСумма = Док.РубКоп(Док.Сумма);
    ...............
    ..............
    ...........
    Таб = СоздатьОбъект("Таблица1");
    ИмяФайлаПечатнойФормы = КаталогИБ()+"ExtForms\PrnForms\1cbpo.mxl";
    Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда
    Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);
    Иначе
    Таб.ИсходнаяТаблица("Таблица1");
    КонецЕсли;
    Таб.Вывести();
    Пропись("");
    Таб.ПараметрыСтраницы(,,,10,0,0,0,,,,,);
    Таб.Опции(0,0,0,0,"ОпцииПечатиПриходногоОрдера","ОкноПКО");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Печать приходного кассового ордера","");
    КонецПроцедуры //Печать
    //***************************************************************************

    Процедура ПакетнаяПечать(Док, СразуНаПринтер = 0)
    Если Док.Вид() = "СчетФактура" тогда
    Печать_СчетФактура(Док, СразуНаПринтер);
    ИначеЕсли Док.Вид() = "РасходнаяНакладная" тогда
    Печать_РасходнаяНакладная(Док, СразуНаПринтер);
    ИначеЕсли Док.Вид() = "ПриходныйОрдер" тогда
    Печать_ПКО(Док, СразуНаПринтер);
    КонецЕсли;
    КонецПроцедуры


    Вот тут возник вопрос - как правильно?
    СтрСумма = Док.РубКоп(Док.Сумма);
    или
    Док.СтрСумма = РубКоп(Сумма);

    а то ругается:" Поле агрегатного объекта не обнаружено (РубКоп)"
    а ведь по идее он обращается в документ или я чего-то недопонимаю?
    Последний раз редактировалось Serdg; 11.08.2005 в 15:13.

  2. #2
    Модератор Аватар для Aquad
    Регистрация
    04.12.2002
    Адрес
    Москва
    Сообщений
    3,870
    СтрСумма = Док.РубКоп(Док.Сумма);
    А что вы этим хотите получить ?
    РубКоп - это процедура ? Тогда где она ?!
    Или это реквизит документа ?!

  3. #3
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    //_____________________________________________________________________________
    Функция РубКоп(Сумма)
    Руб=Цел(Сумма);
    Коп=ОКР(100*(Сумма-Руб),0,1);
    СуммаРубКоп=""+Руб+"руб."+Цел(Коп/10)+(Коп-10*Цел(Коп/10))+"коп.";
    Возврат СуммаРубКоп;
    КонецФункции
    //_____________________________________________________________________________
    Это штатная функция, которая находится в модуле ПКО, я её добавил перед процедурой печати, убрал Док. перед РубКоп, но 1С ругается на поле агрегатного объекта

  4. #4
    Модератор Аватар для Aquad
    Регистрация
    04.12.2002
    Адрес
    Москва
    Сообщений
    3,870
    Serdg,
    Как в итоге вызываешь ?

  5. #5
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    Разобрался уже, только не пойму почему поменяв имя таблицы с "Таблица1" на "ПКО", и исправив строку:
    Таб.Исходная таблица("Таблица1");
    на
    Таб.Исходная таблица("ПКО");
    у меня перестало всё печататься, вертаю всё в зад - опять работает

  6. #6
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    Если СразуНаПринтер = 1 тогда
    Таб.Напечатать(0);
    Иначе
    Таб.Показать("Печать ПКО","");
    КонецЕсли;

    и ошибся в строке:
    Таб = СоздатьОбъект("Таблица1");
    надо
    Таб = СоздатьОбъект("Таблица");
    Последний раз редактировалось Serdg; 12.08.2005 в 09:32.

  7. #7
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    Почему-то сейчас не выводится на печать Подскажите, а то я уже туплю окончательно! Фиг его знает как умудрился испортить. Самое интересное: печать на экран происходит, как только я меняю значение Таб.Напечатать(0) на Таб.Напечатать(1), 1С выдает диалог принтера и после подтверждения ПЕЧАТАЕТ!! Как только ставлю 0 - всё! Нифига! В чем дело, подскажите? А то крыша уже съезжает!
    //*****************************************************************************
    Функция РубКоп(Сумма)
    Руб=Цел(Сумма);
    Коп=ОКР(100*(Сумма-Руб),0,1);
    СуммаРубКоп=""+Руб+"руб."+Цел(Коп/10)+(Коп-10*Цел(Коп/10))+"коп.";
    Возврат СуммаРубКоп;
    КонецФункции
    //*****************************************************************************
    Процедура Печать_ПКО(Док, СразуНаПринтер = 0)
    НомерДокПечатнойФормы = глПреобразоватьНомерДок(Док.НомерДок, 0, 0);
    ВТомЧисле = "";
    СтрНДС = "";
    СтрНП = "";
    Если Док.Валютный = 2 Тогда
    Если ПустоеЗначение(Док.Валюта.ИмяФайлаПрописи) = 1 Тогда
    Предупреждение("Для выбранной валюты не указан файл прописи.");
    ИначеЕсли ФС.СуществуетФайл(КаталогИБ()+Док.Валюта.ИмяФайлаПрописи) = 0 Тогда
    Предупреждение("Для выбранной валюты неверно указан файл прописи.");
    Иначе
    Пропись(КаталогИБ()+Док.Валюта.ИмяФайлаПрописи);
    КонецЕсли;
    СтрСумма = Формат(Док.Сумма,"Ч10.2-")+" "+Док.Валюта.Наименование;

    Иначе
    Пропись("");
    СтрСумма = РубКоп(Док.Сумма);
    Если Док.УказатьНДС = 1 Тогда
    Если Док.НДС = 0 Тогда
    СтрНДС = "без налога (НДС)";
    СтрНП = ".";
    Иначе
    СтрНДС = "НДС("+глПредставлениеСтавки(Док.СтавкаНДС)+")- "+РубКоп(Док.НДС);
    КонецЕсли;
    КонецЕсли;
    Если Док.УказатьНП = 1 Тогда
    Если Док.УказатьНДС = 1 Тогда
    СтрНДС = СтрНДС + ", ";
    КонецЕсли;

    Если Док.СтавкаНП.Ставка = 0 Тогда
    СтрНП = "без налога с продаж.";
    Иначе
    СтрНП = "НП("+глПредставлениеСтавки(Док.СтавкаНП)+")- "+РубКоп(Док.НП);
    КонецЕсли;
    КонецЕсли;
    ВТомЧисле = СтрНДС + СтрНП;
    КонецЕсли;
    Таб = СоздатьОбъект("Таблица");
    ИмяФайлаПечатнойФормы = КаталогИБ()+"ExtForms\PrnForms\1cbpo.mxl";
    Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда
    Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);
    Иначе
    Таб.ИсходнаяТаблица("ПКО");
    КонецЕсли;
    Таб.Вывести();
    Пропись("");
    Таб.ПараметрыСтраницы(,,,10,0,0,0,,,,,);
    Таб.Опции(0,0,0,0,"ОпцииПечатиПриходногоОрдера","ОкноПКО");
    Таб.ТолькоПросмотр(1);
    //Таб.Показать("Печать приходного кассового ордера","");
    Если СразуНаПринтер = 1 тогда
    Таб.Напечатать(1); //ВОТ ТУТ Я МЕНЯЛ 0 на 1
    Иначе
    Таб.Показать("Печать ПКО","");
    КонецЕсли;
    КонецПроцедуры //Печать
    //*****************************************************************************
    Процедура ПакетнаяПечать(Док, СразуНаПринтер = 0)
    Если Док.Вид() = "СчетФактура" тогда
    Печать_СчетФактура(Док, СразуНаПринтер);
    ИначеЕсли Док.Вид() = "РасходнаяНакладная" тогда
    Печать_РасходнаяНакладная(Док, СразуНаПринтер);
    ИначеЕсли Док.Вид() = "ПриходныйОрдер" тогда
    Печать_ПКО(Док, СразуНаПринтер);
    КонецЕсли;
    КонецПроцедуры

  8. #8
    Fosihas
    Гость
    Таб.ПараметрыСтраницы(,,,10,0,0,0,,,,,);
    Попробуй происать имя принтера

  9. #9
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    а как?
    Таб.ПараметрыСтраницы(1,,,10,0,0,0,,,,,hp LaserJet 1320 PCL 6);
    и это не вариант. Эту обработку будут использовать на разных компах, это придется для каждого свою делать, для разных принтеров? Или печатать только на один? Я попробовал с другого компа запустить её (с того, к которому принтер подсоединен напрямую, а не через сеть) - печатает!! А с тех у которых сетевые принтеры - нет! Вот где собака порылась! .......вот только как это забороть?

  10. #10
    Модератор Аватар для Aquad
    Регистрация
    04.12.2002
    Адрес
    Москва
    Сообщений
    3,870
    Serdg,
    Так что хотим получить ?
    Сразу на принтер или с просмотром ?
    2 вариант - не жилец представь - 200 документов с предпросмотром ...

  11. #11
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    вот и я про то же. Во встроенной групповой обработке есть пунктик "Печать" (на экран), а я добиваюсь печати сразу на принтер, без всяких диалогов и прочего -выбрал период, вид документа и всё, пошла печать.......в идеале.

  12. #12
    Модератор Аватар для Aquad
    Регистрация
    04.12.2002
    Адрес
    Москва
    Сообщений
    3,870
    Самое интересное: печать на экран происходит, как только я меняю значение Таб.Напечатать(0) на Таб.Напечатать(1), 1С выдает диалог принтера и после подтверждения ПЕЧАТАЕТ!! Как только ставлю 0 - всё! Нифига
    Так печатает сразу или нет ?

  13. #13
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    В том то и дело, что стоит поставить 1 (чтобы появлялся диалог принтера), диалог появляется с принтером по умолчанию - жму ОК и принтер печатает. Стоит поставить 0 (чтобы диалог глаза не мозолил) - нифига. Пробую с отключенным диалогом с компа к которому непосредственно подключен принтер - печатает. Пробовал с разных компов запускать эту же обработку - та же история: печатает только на тех, у которых локальные принтеры

  14. #14
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    Блин!!
    Сделал аналогично печать РКО - печатает без всяких выкрутасов!!
    Процедура Печать_РКО(Док, СразуНаПринтер = 0)
    НомерДокПечатнойФормы = глПреобразоватьНомерДок(Док.НомерДок, 0, 0);
    Таб = СоздатьОбъект("Таблица");

    АдресТелефон = "";
    глДобавитьРеквизит(АдресТелефон, "Адрес: ", глПредставлениеАдреса(Константа.АдресОрганизации));
    глДобавитьРеквизит(АдресТелефон, ", тел.: ", Константа.ТелефоныОрганизации);
    Таб.ВывестиСекцию("Шапка");

    Ном = 0;
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Ном = Ном + 1;
    Наименование = ?(ПустаяСтрока(Услуга.ПолнНаименование)=1, Услуга.Наименование, Услуга.ПолнНаименование);
    Таб.ВывестиСекцию("Строка");
    Состояние("Выведено строк: " + НомерСтроки);
    КонецЦикла;

    Таб.ВывестиСекцию("Итоги");
    Если УчитыватьНП = 1 Тогда
    Таб.ВывестиСекцию("НП");
    КонецЕсли;
    Таб.ВывестиСекцию("Подвал");

    Таб.Опции(0,0,0,0,"ОпцииПечатиНакладной","ОкноНакладной");
    Таб.ТолькоПросмотр(1);
    //Таб.Показать("Печать акта");
    Если СразуНаПринтер = 1 тогда
    Таб.Напечатать(0);
    Иначе
    Таб.Показать("Печать Оказание услуг","");
    КонецЕсли;
    КонецПроцедуры // Печать()
    //***************************************************************************
    Процедура ПакетнаяПечать(Док, СразуНаПринтер = 0)
    Если Док.Вид() = "СчетФактура" тогда
    Печать_СчетФактура(Док, СразуНаПринтер);
    ИначеЕсли Док.Вид() = "РасходнаяНакладная" тогда
    Печать_РасходнаяНакладная(Док, СразуНаПринтер);
    ИначеЕсли Док.Вид() = "ПриходныйОрдер" тогда
    Печать_ПКО(Док, СразуНаПринтер);
    ИначеЕсли Док.Вид() = "РасходныйОрдер" тогда
    Печать_РКО(Док, СразуНаПринтер);
    КонецЕсли;
    КонецПроцедуры

  15. #15
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    и последний вопрос:
    //******************************************************************************
    // СуммаПрописью(Сумма)
    //
    // Параметры:
    // Сумма - число, на основе которого формируется сумма
    //
    // Возвращаемое значение:
    // Сумма прописью
    //
    // Описание:
    // Формирует сумму прописью в соответствии с файлом прописи, заданным в валюте.
    //
    Функция СуммаПрописью(Сумма) Экспорт

    Валюта = Договор.ВалютаДоговора;
    Если ПустоеЗначение(Валюта) = 0 Тогда

    Если ПустоеЗначение(Валюта.ИмяФайлаПрописи) = 1 Тогда
    Предупреждение("Для выбранной валюты не указан файл прописи.");
    ИначеЕсли ФС.СуществуетФайл(КаталогИБ()+Валюта.ИмяФайлаПрописи) = 0 Тогда
    Предупреждение("Для выбранной валюты неверно указан файл прописи.");
    Иначе
    Пропись(КаталогИБ()+Валюта.ИмяФайлаПрописи);
    КонецЕсли;

    КонецЕсли;
    СтрокаСуммы = Формат(Сумма, "ЧПДС");

    // установим пропись по умолчанию
    Пропись("");
    Возврат СтрокаСуммы;

    КонецФункции // СуммаПрописью()
    //******************************************************************************
    Процедура Печать_ОУ(Док, СразуНаПринтер = 0)
    НомерДокПечатнойФормы = глПреобразоватьНомерДок(Док.НомерДок, 0, 0);
    Таб = СоздатьОбъект("Таблица");
    //ИмяФайлаПечатнойФормы = КаталогИБ()+"ExtForms\PrnForms\prn-akt.ert";
    //Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда
    // Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);
    //Иначе
    Таб.ИсходнаяТаблица("ОУ");
    //КонецЕсли;
    АдресТелефон = "";
    глДобавитьРеквизит(АдресТелефон, "Адрес: ", глПредставлениеАдреса(Константа.АдресОрганизации));
    глДобавитьРеквизит(АдресТелефон, ", тел.: ", Константа.ТелефоныОрганизации);
    Таб.ВывестиСекцию("Шапка");

    Ном = 0;
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку() = 1 Цикл
    Ном = Ном + 1;
    Наименование = ?(ПустаяСтрока(Док.Услуга.ПолнНаименование)=1, Док.Услуга.Наименование, Док.Услуга.ПолнНаименование);
    Таб.ВывестиСекцию("Строка");
    Состояние("Выведено строк: " + Док.НомерСтроки);
    КонецЦикла;

    Таб.ВывестиСекцию("Итоги");
    Если Док.УчитыватьНП = 1 Тогда
    Таб.ВывестиСекцию("НП");
    КонецЕсли;
    Таб.ВывестиСекцию("Подвал");
    Таб.Опции(0,0,0,0,"ОпцииПечатиНакладной","ОкноНакладной");
    Таб.ТолькоПросмотр(1);
    //Таб.Показать("Печать акта");
    Если СразуНаПринтер = 1 тогда
    Таб.Напечатать(0);
    Иначе
    Таб.Показать("Печать Оказание услуг","");
    КонецЕсли;
    КонецПроцедуры // Печать()
    ОШИБКА: Значение не представляет агрегатный объект (ВалютаДоговора)

  16. #16
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    как мне убрать проверку валюты, и жестко указать что это рубли?

  17. #17
    Модератор Аватар для Aquad
    Регистрация
    04.12.2002
    Адрес
    Москва
    Сообщений
    3,870

    moderatorial

    Serdg,
    Используйте плиз тэг Code ... А то читать сложно ....

  18. #18
    Модератор Аватар для Aquad
    Регистрация
    04.12.2002
    Адрес
    Москва
    Сообщений
    3,870
    ОШИБКА: Значение не представляет агрегатный объект (ВалютаДоговора)
    В какой строке ? Не видно

  19. #19
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    в функции СтрокаПрописью
    Функция СуммаПрописью(Сумма) Экспорт

    Валюта = Договор.ВалютаДоговора;

  20. #20
    Fosihas
    Гость
    Serdg, А откуда ты договор берешь....
    из воздуха или из документа.... где это прописанно.

  21. #21
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    Из документа хочу взять, но убрать вообще проверку валюты (т.к везде только рубли)

  22. #22
    Fosihas
    Гость
    Так используй в печатной форме [Формат(Док.Сумма,"ЧПДС")] и забей на ту процедуру.

  23. #23
    Клерк Аватар для Serdg
    Регистрация
    29.06.2005
    Сообщений
    140
    Спасибо за помощь - всё получилось! А не всегда печатал из-за Опций

  24. #24
    Fosihas
    Гость
    Таб.Опции(0,0,0,0,"ОпцииПечатиНакладной","ОкноНакладной");
    Всесто ОпцииПечатиНакладной напиши МойПКО

Закрытая тема

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы можете создавать новые темы
  • Вы можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •