Имя: Пароль:
1C
1С v8
Печать только после проведения документа
,
0 BarakuzA
 
19.03.14
16:17
Добрый день,

КАк прописать в документе, чтобы документ выводился на печать только после его проведения и установить запрет на повторную печать?

Самописная$ простая конфигурация, управляемые формы 8.2.

Спасибо.
1 ДенисЧ
 
19.03.14
16:18
1. реквизит "напечатан"
2 в процедуре печати
Если НЕ Проведен Тогда
  Сообщить("не проведен, не печатаем");
  Возврат;
КонецЕсли;
3. табдок.Напечатать(); напечатан = Истина; Записать();
2 GROOVY
 
19.03.14
16:19
В команде указать что меняет данные.
3 BarakuzA
 
19.03.14
16:21
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ТабДок=Новый ТабличныйДокумент;
    Печать(ТабДок,ПараметрКоманды);
    ТабДок.ОтображатьСетку     = Ложь;
    ТабДок.Защита              = Ложь;
    ТабДок.ТолькоПросмотр      = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.ОриентацияСтраницы  = ОриентацияСтраницы.Ландшафт;
    ТабДок.АвтоМасштаб         = Истина;
    ТабДок.Напечатать();
    //ТабДок.Показать();
КонецПроцедуры

&НаСервере
Процедура Печать(ТабДок,ПараметрКоманды)
    Документы.Заказ.Печать(ТабДок, ПараметрКоманды);
КонецПроцедуры

Где конкретнее вставлять данный текст?
4 BarakuzA
 
19.03.14
16:48
(1) -
Если Не Проведен Тогда
ТабДок=Новый ТабличныйДокумент;
    Печать(ТабДок,ПараметрКоманды);
    ТабДок.ОтображатьСетку     = Ложь;
    ТабДок.Защита              = Ложь;
    ТабДок.ТолькоПросмотр      = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.ОриентацияСтраницы  = ОриентацияСтраницы.Ландшафт;
    ТабДок.АвтоМасштаб         = Истина;
    ТабДок.Напечатать();
КонецЕсли;

Как правильно написать???
5 Кай066
 
19.03.14
16:52
(4) Если Не Проведен Тогда Сообщить("Досвидос");

Не?
6 BarakuzA
 
19.03.14
16:54
(5) - да, так

Выдает ошибку
{Документ.Заказ.Команда.Печать.МодульКоманды(5,7)}: Переменная не определена (Проведен)
    Если <<?>>Проведен Тогда (Проверка: Тонкий клиент)
7 BarakuzA
 
19.03.14
17:26
(1) - не совсем понятно где написать реквизит Напечатан и присвоить ему значение.
8 Кай066
 
19.03.14
17:29
(7) РС видимо добавить
9 BarakuzA
 
19.03.14
17:32
(8) - реквизит добавлен, тип булево
10 Аннушка
 
19.03.14
17:35
(6) В модуле команды вызвать процедуру модуля документа, а в модуле документа Проведен будет определено.
11 BarakuzA
 
19.03.14
17:35
НЕ понятно как прописать в процедуре печати, что данный реквизит меняет свое значение с ложь на истина.
12 BarakuzA
 
19.03.14
17:37
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    ТабДок=Новый ТабличныйДокумент;
    Печать(ТабДок,ПараметрКоманды);
    ТабДок.ОтображатьСетку     = Ложь;
    ТабДок.Защита              = Ложь;
    ТабДок.ТолькоПросмотр      = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.ОриентацияСтраницы  = ОриентацияСтраницы.Ландшафт;
    ТабДок.АвтоМасштаб         = Истина;
    ТабДок.Напечатать();
    Сообщить("Документ напечатан 1");
    //ТабДок.Показать();
КонецПроцедуры

&НаСервере
Процедура Печать(ТабДок,ПараметрКоманды)
    Документы.Заказ.Печать(ТабДок, ПараметрКоманды);
    Сообщить("Документ напечатан 2");
КонецПроцедуры
13 BarakuzA
 
19.03.14
17:40
(10) -  не понятно.
14 Аннушка
 
19.03.14
17:44
В процедуре "Печать" модуля документа "Заказ".

Если Не Проведен Или Напечатан Тогда
   Вовзрат;
Иначе
   Напечатан = Истина;
   Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;

Ещё подумать на счёт отмены проведения. Либо сбрасывать реквизит "Напечатан" в "Ложь", либо не давать отменять проведение.
15 timurhv
 
19.03.14
17:47
1) какие-то костыли кругом.
2) Получай данные запросом, необходимые для формирования печатной формы - там передавай ссылку документа и ставь ограничение на "Проведен".
3) Для чего необходим такой механизм - для меня не понятен. Человек вывел печатную форму, не распечатал - закрыл и все?
16 BarakuzA
 
19.03.14
17:50
(15)
Процедура Печать(ТабДок, Ссылка) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
    Макет = Документы.Заказ.ПолучитьМакет("Печать");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Заказ.Дата,
    |    Заказ.Номер,
    |    Заказ.ИтоговаяСумма,
    |    Заказ.ИтоговаяСуммаСкидки,
    |    Заказ.ИтоговаяСуммаБезСкидки,
    |    Заказ.Скидка,
    |    Заказ.Клиент,
    |    Заказ.АдресДоставки,
    
    |    Заказ.Подъезд,
    |    Заказ.Этаж,
    |    Заказ.Квартира,
    |    Заказ.КонтактноеЛицо,
    
    |    Заказ.Телефон,
    |    Заказ.Доставка,
    |    Заказ.Курьер,
    |    Заказ.ВремяИсполненияЗаказа,
    |    Заказ.Комментарий,
    |    Заказ.КоличествоЧеловек,
    |    Заказ.Оплачено,
    |    Заказ.СуммаОплаты,
    |    Заказ.Сдача,
    |    Заказ.ТекущаяДК,
    |    Заказ.ТаблЧасть.(
    |        НомерСтроки,
    |        Артикул КАК Арт,
    |        Номенклатура.НаименованиеПолное КАК Номенклатура,
    |        Количество,
    |        Цена,
    |        СуммаБезСкидки
    |    )
    |ИЗ
    |    Документ.Заказ КАК Заказ
    |ГДЕ
    |    Заказ.Ссылка В (&Ссылка)
    |    и Заказ.Ссылка.Проведен = Истина
    |    И Заказ.Ссылка.Напечатан = Истина";
    
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();

    ОбластьЗаголовок      = Макет.ПолучитьОбласть("Заголовок");
    Шапка                 = Макет.ПолучитьОбласть("Шапка");
    ОбластьТаблЧастьШапка = Макет.ПолучитьОбласть("ТаблЧастьШапка");
    ОбластьТаблЧасть      = Макет.ПолучитьОбласть("ТаблЧасть");
    Подвал                = Макет.ПолучитьОбласть("Подвал");
    
    
    

    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;

        //ДеньДата = Лев(Выборка.Дата, 10);
        ОбластьЗаголовок.Параметры.Номер = Выборка.Номер;
        ОбластьЗаголовок.Параметры.ДеньДата = Выборка.Дата;
        //ДеньДата;
        
        ТабДок.Вывести(ОбластьЗаголовок);

        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка, Выборка.Уровень());

        ТабДок.Вывести(ОбластьТаблЧастьШапка);
        ВыборкаТаблЧасть = Выборка.ТаблЧасть.Выбрать();
        Пока ВыборкаТаблЧасть.Следующий() Цикл
            ОбластьТаблЧасть.Параметры.Заполнить(ВыборкаТаблЧасть);
            ТабДок.Вывести(ОбластьТаблЧасть, ВыборкаТаблЧасть.Уровень());
        КонецЦикла;
        
        Подвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Подвал);

        //сумма прописью
        СуммаПрописью         = Макет.ПолучитьОбласть("СуммаПрописью");
        СуммаПрописью.Параметры.ИтоговаяСтрока = "Всего наименований " + ВыборкаТаблЧасть.Количество() + ", на сумму " + Формат(Выборка.ИтоговаяСумма, "ЧЦ=15; ЧДЦ=2; ЧРД=-") + " руб.";
        СуммаПрописью.Параметры.СуммаПрописью  = ЧислоПрописью(Выборка.ИтоговаяСумма, "L=ru_RU","рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2");
        ТабДок.Вывести(СуммаПрописью);
        
        Оплата                = Макет.ПолучитьОбласть("Оплата");
        Оплата.Параметры.Оплачено = Выборка.Оплачено;
        
        Оплата.Параметры.Оплата = Формат(Выборка.СуммаОплаты,"ЧЦ=15; ЧДЦ=2; ЧРД=-");
        
        Если (Выборка.СуммаОплаты-Выборка.ИтоговаяСумма)>0 Тогда
            Оплата.Параметры.Сдача  = Формат((Выборка.СуммаОплаты-Выборка.ИтоговаяСумма),"ЧЦ=15; ЧДЦ=2; ЧРД=-");
        Иначе
            Оплата.Параметры.Сдача =  " ";
        КонецЕсли;
                
        ТабДок.Вывести(Оплата);
        
        Подписи               = Макет.ПолучитьОбласть("Подписи");
        ТабДок.Вывести(Подписи);
        
        //Ссылки          = Макет.ПолучитьОбласть("СсылкиНаКоды");
        //ТабДок.Вывести(Ссылки);
        
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    

    
    
    //}}
КонецПроцедуры

Прописан что документ должен быть проведен. НЕ могу понять как здесь ограничить печать один раз.
17 timurhv
 
19.03.14
17:52
(16) В вашем случае в запросе не "И Заказ.Ссылка.Напечатан = Истина", а Ложь.
18 BarakuzA
 
19.03.14
17:56
(17) - а где прописать момент когда данный реквизит меняет свое значение с Ложь на Истина???
19 Аннушка
 
19.03.14
18:01
(15) Ему не достаточно на проведённость проверить. Он хочет, чтобы человек второй раз не выводил форму. Как автор поставил задачу, так ему и отвечают, отсюда и костыли. И если пользователь вывел на печать, но не распечатал и закрыл, значит, такова нелёгкая судьба пользователя :)

Можно попробовать (12) подработать.

&НаСервере
Процедура Печать(ТабДок,ПараметрКоманды)

    Если НЕ ТабДок.Проведен Тогда
      Сообщить("не проведен, не печатаем");
      Возврат;
    ИначеЕсли ТабДок.Напечатан Тогда
      Сообщить("уже печатали, можно это делать всего раз");
      Возврат;
    КонецЕсли;

    Документы.Заказ.Печать(ТабДок, ПараметрКоманды);

    ТабДок.Напечатан = Истина;
    ТабДок.Записать();

    Сообщить("Документ напечатан 2");
КонецПроцедуры
20 Аннушка
 
19.03.14
18:05
ой, ну и режим записи установить, а то вдруг там документ перепроводится при записи, как-то нехорошо будет

ТабДок.Записать(РежимЗаписиДокумента.Запись);

вместо

ТабДок.Записать();
21 BarakuzA
 
19.03.14
18:08
(19),(20) - ошибка
{Документ.Заказ.Команда.Печать.МодульКоманды(18)}: Поле объекта не обнаружено (Проведен)
    Если Не ТабДок.Проведен Тогд
22 BarakuzA
 
19.03.14
18:10
(19), (20) - ошибка
{Документ.Заказ.Команда.Печать.МодульКоманды(28)}: Поле объекта не обнаружено (Напечатан)
    ТабДок.Напечатан = Истина;
23 Аннушка
 
19.03.14
18:11
тьфу, ТабДок - это же не ссылка на документ, а ссылка на табличный документ, тогда надо обратиться к объекту

попробуй

Если Не Объект.Проведен Тогда
24 BarakuzA
 
19.03.14
18:12
(23)
{Документ.Заказ.Команда.Печать.МодульКоманды(18,10)}: Переменная не определена (Объект)
    Если Не <<?>>Объект.Проведен Тогда (Проверка: Сервер)
{Документ.Заказ.Команда.Печать.МодульКоманды(21,12)}: Переменная не определена (Объект)
    ИначеЕсли <<?>>Объект.Напечатан Тогда (Проверка: Сервер)
{Документ.Заказ.Команда.Печать.МодульКоманды(28,2)}: Переменная не определена (Объект)
    <<?>>Объект.Напечатан = Истина; (Проверка: Сервер)
{Документ.Заказ.Команда.Печать.МодульКоманды(29,2)}: Переменная не определена (Объект)
    <<?>>Объект.Записать(РежимЗаписиДокумента.Запись); (Проверка: Сервер)
25 BarakuzA
 
19.03.14
18:27
???
26 Fram
 
19.03.14
18:30
(24) Научись пользоваться отладчиком, поиском и синтакс помощником.
Первым делом посмотри в отладчике ПараметрКоманды
27 BarakuzA
 
19.03.14
18:34
(26) - к сожалению не умею пользоваться я отладчиков.
как в нем посмотреть параметр???
28 BarakuzA
 
19.03.14
22:45
Ну всетаки ктонибудь поможет с данной проблемой?
29 timurhv
 
20.03.14
10:27
o_O Вы где варитесь? С 1С работаете уже не первый год.