|
Печать только после проведения документа | ☑ | ||
---|---|---|---|---|
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С работаете уже не первый год.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |