Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Командировочное удостоверение
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
cRYSMAS
Здравствуйте, нужно сделать обработку которая печатает, командировочные накладные с/без просмотра печати, с указанием периода
//*******************************************
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ДокС по ДокПо;
    |КУ = Документ.КомандировочноеУдостоверение.ТекущийДокумент;
    |Группировка КУ;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
  
    спПарам = СоздатьОбъект("СписокЗначений");
    спПарам.ДобавитьЗначение("ПЕЧАТЬ","Что");
    
    Пока Запрос.Группировка(1) = 1 Цикл
        ОткрытьФорму(Запрос.КУ,спПарам,1);
    КонецЦикла;
КонецПроцедуры
//*******************************************
// ======================================
Процедура ПриОткрытии()
    флКопии = 2;
    флПросм = 1;
    
КонецПроцедуры
тока при выборе периода мне командировочные накладные открываются почему то а не печатаются. что мне нужно исправить?
MATEVI
Цитата(cRYSMAS @ 24.03.10, 12:24) необходимо зарегистрироваться для просмотра ссылки
Здравствуйте, нужно сделать обработку которая печатает, командировочные накладные с/без просмотра печати, с указанием периода
тока при выборе периода мне командировочные накладные открываются почему то а не печатаются. что мне нужно исправить?


Это ж не 8-ка smile.gif
Вариант 1 так как ты хочешь. Но при открытии командировки из обработки передавать параметр проверять его и вызывать процедуру печати.
Собственно ты и пытаешся. Это сделать. А в командировке проверяешь при открытии?
Но что будет сам подумай smile.gif Штук тридцать командировок например откроются.

ЗЫ Наверно в командировке не хватает.
ПриОткрытии()
....
П=Форма.Параметр;
    Если ПустоеЗначение(П)=0 Тогда
        Если ТипЗначенияСтр(П)="СписокЗначений" Тогда
            Действие=П.Получить("Действие");
            Если Действие="Печать" Тогда  
                Печать();
                Форма.Закрыть(0);
                Возврат;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
....

Вариант 2 перетащить печатную форму и процедуру печати в свою обработку.
cRYSMAS
Цитата
Это ж не 8-ка smile.gif
Вариант 1 так как ты хочешь. Но при открытии командировки из обработки передавать параметр проверять его и вызывать процедуру печати.
Собственно ты и пытаешся. Это сделать. А в командировке проверяешь при открытии?
Но что будет сам подумай smile.gif Штук тридцать командировок например откроются.

ЗЫ Наверно в командировке не хватает.
ПриОткрытии()
....
П=Форма.Параметр;
    Если ПустоеЗначение(П)=0 Тогда
        Если ТипЗначенияСтр(П)="СписокЗначений" Тогда
            Действие=П.Получить("Действие");
            Если Действие="Печать" Тогда  
                Печать();
                Форма.Закрыть(0);
                Возврат;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
....

Вариант 2 перетащить печатную форму и процедуру печати в свою обработку.


гм а куда мне ее вставить вот в форме командировке есть печать
// ======================================
Процедура Печать()
    Таб = СоздатьОбъект("Таблица");
    СуффиксТаблицы = ?(Константа.ФормыНаУкраинском = Да, "_Укр", "");
    СуффиксФайла = ?(Константа.ФормыНаУкраинском = Да, "_ukr", "");
    ПрефиксТаблицы = "Таблица";
    ПрефиксФайла = "KomU";
    
    ИмяФайлаПечатнойФормы = КаталогИБ()+"ExtForms\PrnForms\"+ПрефиксФайла+СуффиксФайла+".mxl";
    Если ФС.СуществуетФайл(ИмяФайлаПечатнойФормы) = 1 Тогда
        Таб.ИсходнаяТаблица(ИмяФайлаПечатнойФормы);
    Иначе
        Таб.ИсходнаяТаблица(ПрефиксТаблицы+СуффиксТаблицы);
    КонецЕсли;
    
    глУстПропись(Гривня);
    
//    ПечДатаПриказа = Формат([b]ДатаПриказа[/b],"Д (0)ДДММММГГГГ");
//    ПечАдрес = ?(ПустаяСтрока(ФизАдрес)=0, СокрЛП(ФизАдрес), СокрЛП(Контрагент.ФизАдрес));

    Таб.ВывестиСекцию("Шапка");
//      [b]ВыбратьСтроки();[/b]    
//         Пока ПолучитьСтроку()=1 Цикл
//        Таб.ВывестиСекцию("Строка");
//    КонецЦикла;
    Таб.ВывестиСекцию("Дно");
    
    Таб.Защита(Константа.ФлагЗащитыТаблиц);
    Таб.ТолькоПросмотр(1);
    Таб.Опции(0,0,,);
    Таб.Показать("ПЕЧАТЬ: Командировочное удостоверение","");
    глУстПропись(Гривня);
КонецПроцедуры

вот когда я ее добаляю как мне процедуру печати вызвать? \"Печать ()\", но после этого 1с начинает ругаться на синтаксис выделено жирным, ругаеться что переменная не определена, удалил эти строки, грит не найдена таблица, создал в модуле таблицу, пишет не верное имя таблицы, вот. А вот так эта другая обработка Податковых накладных выбор периода и печать, это не я делал:
//*******************************************
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ДокС по ДокПо;
    |НН = Документ.НалоговаяНакладная.ТекущийДокумент;
    |Группировка НН;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
  
    спПарам = СоздатьОбъект("СписокЗначений");
    спПарам.ДобавитьЗначение("ПЕЧАТЬ","Что");
    спПарам.ДобавитьЗначение(флКопии,"Страница");
    спПарам.ДобавитьЗначение(флПросм,"Метод");
    
    Пока Запрос.Группировка(1) = 1 Цикл
        ОткрытьФорму(Запрос.НН,спПарам,1);
    КонецЦикла;
КонецПроцедуры




//*******************************************
// ======================================
Процедура ПриОткрытии()
    флКопии = 2;
    флПросм = 1;
    
КонецПроцедуры

И она работает а моя нет(

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


что Вы писали в процедуры при открытии, и вот мне заругалось на то что в таблице нет шапки, как мне таблицу с Командировочных скопировать в мою обработку, а то я информацию скопировал а шапку у меня не получилось сделать, подскажите пожалуста
Zaval
Можно процедуру печати из документа вставить в обработку. Поменять обращения к реквизитам. Плюс - не надо ничего менять в конфигурации. Даже запускать можно из внешнего файла.
Если это не устраивает - возьмите ТиС, посмотрите БыструюПродажу. Там по одному доку формируется, проводится и печатается полный комплект - Счет, РН, НН. Все сделано довольно аккуратно.
cRYSMAS
Цитата(Zaval @ 24.03.10, 15:11) необходимо зарегистрироваться для просмотра ссылки
Можно процедуру печати из документа вставить в обработку. Поменять обращения к реквизитам. Плюс - не надо ничего менять в конфигурации. Даже запускать можно из внешнего файла.
Если это не устраивает - возьмите ТиС, посмотрите БыструюПродажу. Там по одному доку формируется, проводится и печатается полный комплект - Счет, РН, НН. Все сделано довольно аккуратно.

мне не нужно делать из внешнего файла я его уже сделал, мне нужно обработку добавить в "сервис" и что бы от туда запускать обработку а не из внешнего файла.
MATEVI
А может проблема в том что процедура "ПриОткрытии()" в КУ раньше чем "Печать()"?
Для изначального варианта. Чтоб печаталось из обработки.

Добавить в документе Командировочное удостоверение в процедуру приоткрытии()
Это:

П=Форма.Параметр;
Если ПустоеЗначение(П)=0 Тогда
Если ТипЗначенияСтр(П)="СписокЗначений" Тогда
Действие=П.Получить("Действие");
Если Действие="ПЕЧАТЬ" Тогда
Печать();
Форма.Закрыть(0);
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;


Процедуру ПриОткрытии() в КУ перенсти под печать()
ИЛИ Так даже правильней

Перед процедуруй ПриОткрытии() в КУ написать

Процедура Печать() Далее
cRYSMAS
вообщем сделал вот так:
//*******************************************
Процедура Сформировать()
    Перем Запрос, ТекстЗапроса;
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ДокС по ДокПо;
    |КУ = Документ.КомандировочноеУдостоверение.ТекущийДокумент;
    |Группировка КУ;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
  
    спПарам = СоздатьОбъект("СписокЗначений");
    спПарам.ДобавитьЗначение("ПЕЧАТЬ", "Что");
    спПарам.ДобавитьЗначение(флКопии,"страница");
    спПарам.ДобавитьЗначение(флПросм,"Метод");
    
    Пока Запрос.Группировка(1) = 1 Цикл
        ОткрытьФорму(Запрос.КУ,спПарам,1);
    КонецЦикла;
КонецПроцедуры

//*******************************************
// ======================================
Процедура ПриОткрытии()
    флКопии = 2;
    флПросм = 1;
КонецПроцедуры

выбираю период с какого по какой открыть документы нажимаю выполнить и он их открывает, по чему?я думаю что нужно в процедуре сформировать в строке "ОткрытьФорму(Запрос.КУ,спПарам,1);" сделать не открыть форму а напечатать форму есть такой оператор?2 вопрос как мне сделать вариант выбора печати тоесть если флаг стоит на предварительном просмотре то открывать документ на печать, если нет сразу распечатать
alex1c
Вот тебе пример из комплексной док. Счет-фактура
Процедура ПриОткрытии() //Предопределенная процедура
    Если ПустоеЗначение(Форма.Параметр)=0 Тогда
                Если ТипЗначенияСтр(Форма.Параметр)="Строка" Тогда
                        Если ВРег(Форма.Параметр)="БЫСТРАЯПЕЧАТЬ" Тогда
                                Печать(1); // 1- это быстрая печать
                                СтатусВозврата(0);
                                Возврат;
                        КонецЕсли;    
                КонецЕсли;    
        КонецЕсли;
MATEVI
Слушай ну нельзя так как ты хочешь. Можно только передать параметр в тот документ котрый ты хочешь напечатать.
А в этом документе приоткрытии() смотреть было что то передано или нет.
Я уже третий раз тебе об этом говорю и alex1c
Больше не буду....
cRYSMAS
Я все сделал как показал пример alex1c вот а оно мне выдало ошибку в строке "Печать(1)" Слишком много фактических параметров. Э то что значит?
Vofka
Попробуй просто "Печать();"
cRYSMAS
я понял почему у меня открывается в моей обработке а не печатается нужно было в документе "Командировочные удостоверения", что бы прояснить ситуацию нужно было еще в документ Командировочные удостоверение ставить текст программы:

// Для автоматической печати НН за период
//============================
Процедура Печать(ллСТР=4,прПросм = 0) Далее

//============================
Процедура ПриОткрытии()
//Меренков 7-07-06
// Для автоматической печати НН за период
ПарамВыз = Форма.Параметр;
Если ТипЗначенияСтр(ПарамВыз)="СписокЗначений" Тогда
Если ПарамВыз.Получить("Что")="ПЕЧАТЬ" Тогда
//Сообщить("Мы вызвали для печати");
лКопия = ПарамВыз.Получить("Страница");
лПросм = ПарамВыз.Получить("Метод");
Печать(лКопия,лПросм);
СтатусВозврата(0);
КонецЕсли;
КонецЕсли;
//
Но потом выдает ошибку процедура Печать() не найдена, значит я перенёс процедуру печать поставил перед вызовом этой процедуры, и мне написало вот такую ошибку "Процедура или функция с указанным именем объявлена, но не определена в текущем модуле (Печать)" что это может быть?
cRYSMAS
у меня все получилось все печатает, только есть одно но при установке флага "без предварительного просмотра" 1с все равно открывает предварительный просмотр и печатает сразу, а если не ставить флаг "без предварительно просмотра" то только открывает предварительный просмотр, но не печатает, как мне найти траблу что бы печатало без предварительно просмотра?.
ЗЫ код Вам в студию?
Batchir
Если стоит без просмотра то не вызывать команду Показать() для таблицы, вроде так.
cRYSMAS
Цитата(Batchir @ 30.03.10, 13:28) необходимо зарегистрироваться для просмотра ссылки
Если стоит без просмотра то не вызывать команду Показать() для таблицы, вроде так.

Все спасибо нашол исправил), все работает так как надо, если кому не ясно могу подсказать.
Всем Большое СПАСИБО, извените если что не так я не програмер...Спасибо за понимание.
ЗЫ. темку можно закрывать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.