Печать непроведенных документов (через расширение)

07.11.18

Задачи пользователя - Адаптация типовых решений

Обходим стандартную проверку, пошаговая инструкция.

Скачать файлы

Наименование Файл Версия Размер
Расширение с примерами
.cfe 8,32Kb
46
.cfe 1.0.2 8,32Kb 46 Скачать

Проблема: Есть люди, которые хотят печатать не проведённые документы, но типовой механизм не дает им этого делать. Рассмотрим на примере документа Заказ Клиента. Выполнил проверку на ERP 2.4.3.145, но в других типовых так же, 1С:Предприятие 8.3 (8.3.10.2650).

Варианты решения:

Решение точечное

Решение массовое

 

1 Решение точечное.

Заходим в менеджер объекта, ищем область печати и процедуру ДобавитьКомандыПечати.

Над процедурой видим комментарий

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//

В процедуре видим параметр команды КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;

Заходим в указанный над процедурой комментарии модуль УправлениеПечатью и делаем поиск по «ПроверкаПроведенияПередПечатью»

Читаем:

//  * ПроверкаПроведенияПередПечатью    - Булево - (необязательный) Признак необходимости проверки проведенности
//                                        документов перед печатью. Если выбран хотя бы один непроведенный документ, то
//                                        перед выполнением команды печати возникает диалог проведения.
//                                        Для непроведенных документов команда печати не выполняется.
//                                        Если параметр не указан, то проверка проведенности не выполняется.

Делаем выводы. Добавляем расширение и помещаем документ ЗаказКлиент в расширение. Надеюсь, все читали данную статью http://v8.1c.ru/o7/201603module/index.htm.

Воспользуемся Аннотацией &После

Нам нужно после формирования команд, найти нужную и отключить проверку.

Добавляем в расширение модуль менеджера код:

&После ("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати) Экспорт
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("Идентификатор", "ЗаказКлиента");
	НайденныеСтроки = КомандыПечати.НайтиСтроки(ПараметрыОтбора);
		 
	Для каждого строкаНС из НайденныеСтроки Цикл 
		строкаНС.ПроверкаПроведенияПередПечатью = Ложь;
	КонецЦикла;	
	
КонецПроцедуры

Проверяем и радуемся.

2 Решение массовое.

А) Решение не совсем правильное

Ищем где и почему работает проверка. В модуле ОбщегоНазначения. ПроверитьПроведенностьДокументов

Эта функция возвращает массив непроведенных документов, следовательно если массив пустой то все проверки пройдены. Очень просто обманываем систему.

Добавляем этот модуль в расширение и пишем код:

&Вместо("ПроверитьПроведенностьДокументов")
Функция Расш1_ПроверитьПроведенностьДокументов(Знач Документы) Экспорт
	Результат = Новый Массив;
	Возврат Результат;
КонецФункции

Б) Более правильное решение.

Нужно в модуле УправлениеПечатью в процедуре ЗаполнитьКомандыПечатиДляСпискаОбъектов в цикле где обходятся команды параметр ПроверкаПроведенияПередПечатью = Истина поменять значение на Ложь

&Вместо("ЗаполнитьКомандыПечатиДляСпискаОбъектов")
Процедура Расш1_ЗаполнитьКомандыПечатиДляСпискаОбъектов(СписокОбъектов, КомандыПечати)
	Для Каждого ОбъектМетаданных Из СписокОбъектов Цикл
		ИсточникиКомандПечати = ИсточникиКомандПечати();
		Если ИсточникиКомандПечати.Найти(ОбъектМетаданных) = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		КомандыПечатиФормы = КомандыПечатиОбъекта(ОбъектМетаданных);
		
		//Небольшая Доработка++
		ПроверкаПроведенияПередПечатьюВИстину = Ложь;
		Если ТипЗнч(КомандыПечатиФормы) = Тип("ТаблицаЗначений") Тогда 
			Если КомандыПечатиФормы.Колонки.Найти("ПроверкаПроведенияПередПечатью") <> Неопределено Тогда 
				ПроверкаПроведенияПередПечатьюВИстину = Истина;	
			КонецЕсли;	
		КонецЕсли;	
		//Небольшая Доработка--
		
		Для Каждого ДобавляемаяКомандаПечати Из КомандыПечатиФормы Цикл
			//Небольшая Доработка++
			Если ПроверкаПроведенияПередПечатьюВИстину Тогда 
				Если ДобавляемаяКомандаПечати.ПроверкаПроведенияПередПечатью Тогда 
					ДобавляемаяКомандаПечати.ПроверкаПроведенияПередПечатью = Ложь;
				КонецЕсли;	
			КонецЕсли;
			//Небольшая Доработка--
			
			// Поиск аналогичной ранее добавленной команды печати.
			НайденныеКоманды = Новый Массив;
			Для Каждого ИмеющаясяКомандаПечати Из КомандыПечати Цикл
				Если УникальныйИдентификаторКомандыПечати(ИмеющаясяКомандаПечати) = ДобавляемаяКомандаПечати.УникальныйИдентификатор Тогда
					НайденныеКоманды.Добавить(ИмеющаясяКомандаПечати);
				КонецЕсли;
			КонецЦикла;
			
			Если НайденныеКоманды.Количество() > 0 Тогда
				Для Каждого ИмеющаясяКомандаПечати Из НайденныеКоманды Цикл
					// Если уже есть такая команда, дополняем список типов объектов, для которых она предназначена.
					ТипОбъекта = Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка."));
					Если ИмеющаясяКомандаПечати.ТипыОбъектовПечати.Найти(ТипОбъекта) = Неопределено Тогда
						ИмеющаясяКомандаПечати.ТипыОбъектовПечати.Добавить(ТипОбъекта);
					КонецЕсли;
					// Очистим МенеджерПечати в случае, если у имеющейся команды он отличается.
					Если ИмеющаясяКомандаПечати.МенеджерПечати <> ДобавляемаяКомандаПечати.МенеджерПечати Тогда
						ИмеющаясяКомандаПечати.МенеджерПечати = "";
					КонецЕсли;
				КонецЦикла;
				Продолжить;
			КонецЕсли;
			
			Если ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Количество() = 0 Тогда
				ДобавляемаяКомандаПечати.ТипыОбъектовПечати.Добавить(Тип(СтрЗаменить(ОбъектМетаданных.ПолноеИмя(), ".", "Ссылка.")));
			КонецЕсли;
			ЗаполнитьЗначенияСвойств(КомандыПечати.Добавить(), ДобавляемаяКомандаПечати);
		КонецЦикла;
	КонецЦикла;
КонецПроцедуры

Проверяем и радуемся.

Расширение прикладываю с примерами.

Расширение печать печать не проведенных документов документов БСП Команды печати не проведенный Пакетная печать

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4454    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2957    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1295    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1996    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2077    21    progmaster    7    

3
Отзывы
2. dsdred 3279 13.05.18 15:55 Сейчас в теме
(1)Я думаю не только эти отчеты. Проверка проведенности в некоторых случаях лишняя, а где участвуют регистры она как заглушка. Разработчики 1С таким образом себе уменьшили объем работы.

Чаще всего отчеты добавляли через дополнительные отчеты и обработки команду печати, причем типовые кишки тупо копировали и меняли запрос который формирует данные для вывода. Я и сам года 2-2,5 назад на предыдущем месте работы делал отчет по ТОРГ12 с возможностью печать не проведенных документов. В итоге в кнопке печати с каждым таким доп отчетом +1 пункт.

Сейчас достаточно по каждому такому отчету в расширение там где собирается запрос использовать аннотацию &Вместо.
Ну и вышеописанную инструкцию.
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tigrandis 340 13.05.18 11:41 Сейчас в теме
жаль при печати документов реализации не корректно работает торг12 ,сф и упд
2. dsdred 3279 13.05.18 15:55 Сейчас в теме
(1)Я думаю не только эти отчеты. Проверка проведенности в некоторых случаях лишняя, а где участвуют регистры она как заглушка. Разработчики 1С таким образом себе уменьшили объем работы.

Чаще всего отчеты добавляли через дополнительные отчеты и обработки команду печати, причем типовые кишки тупо копировали и меняли запрос который формирует данные для вывода. Я и сам года 2-2,5 назад на предыдущем месте работы делал отчет по ТОРГ12 с возможностью печать не проведенных документов. В итоге в кнопке печати с каждым таким доп отчетом +1 пункт.

Сейчас достаточно по каждому такому отчету в расширение там где собирается запрос использовать аннотацию &Вместо.
Ну и вышеописанную инструкцию.
3. tigrandis 340 14.05.18 11:54 Сейчас в теме
в моей публикации https://infostart.ru/public/828144/ печатные формы УПД, СФ и Торг 12 обощел этот момент )
4. dsdred 3279 14.05.18 12:15 Сейчас в теме
(3) То есть функции с формированием запросов вы не трогали?
Значит заменили таб. часть с товарами, дописав нее данные из не проведенных документов.

В любом случае работы там немного. Тем более если есть уже готовые доп отчеты (их если нет сил самому нарисовать можно и скачать).
5. user970589 10 16.05.18 18:57 Сейчас в теме
Может вы в курсе и как обойти вопрос печати чека (реализация-поступление наличных, реализация - операция по карте) без создания счета или создание счета автоматически? 1с согласно ФЗ требует счета и без него выводит чек без номенклатуры. Тут была старая разработка, но она какая-то кривая, допилить ее до нового релиза не получается, а очень нужно решение. Навыков своих к сожалению мало для создания самостоятельно.
Буду очень благодарен ( в пределах разумного ;) ) за помощь.
6. dsdred 3279 16.05.18 20:57 Сейчас в теме
(5)Думаю вам проще тендер объявить https://infostart.ru/project/
7. dexxxqqq 07.11.18 00:25 Сейчас в теме
Спасибо большое за статью. Можно ли как-то сделать возможность печати непроведенным конкретного макета только? А не для всего документа? Не знаю, за что бы зацепиться. А то в НепроведенныеДокументы только документы, без макетов.
8. dexxxqqq 07.11.18 01:27 Сейчас в теме
(7) Сам и отвечу. В процедуре ВыполнитьОткрытиеПечатнойФормы в общем модуле УправлениеПечатьюСлужебныйКлиент передал в УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов дополнительный параметр "Параметры". Ну а дальше в ПроверитьПроведенностьДокументов можно обратиться к Параметры.ИдентификаторКоманды, который и содержит нужную информацию
atdonya; klaus38; dsdred; +3 Ответить
12. atdonya 95 11.05.21 18:24 Сейчас в теме
(8)
ВыполнитьОткрытиеПечатнойФормы
Спасибо.
9. user592625_lomakinalexey77 07.02.19 14:31 Сейчас в теме
Подскажите как настроить печать СчетаФактурыВыданной в составе комплекта на основании непроведенного документа реализации в УТ 11.4
10. dsdred 3279 07.02.19 22:36 Сейчас в теме
(9)На вскидку не скажу. Надо смотреть.
11. Kennik 13 19.03.21 17:43 Сейчас в теме
Работает на переписанной в хлам УТ 11.
Автору плюс.
13. burgomister 59 13.05.21 06:45 Сейчас в теме
А что так много наворотили? В УТ 11 сделал так:

ОбщийМодуль.ПодключаемыеКомандыКлиент

&Перед("ПродолжитьВыполнениеКоманды")
Процедура Расш1_ПродолжитьВыполнениеКоманды(ПараметрыВыполнения)
	
	Если ПараметрыВыполнения.ОписаниеКоманды.Идентификатор = "РасходнаяНакладная" или
		ПараметрыВыполнения.ОписаниеКоманды.Идентификатор = "Накладная" или
		ПараметрыВыполнения.ОписаниеКоманды.Идентификатор = "ТОРГ12" или
		ПараметрыВыполнения.ОписаниеКоманды.Идентификатор = "СчетНаОплату" Тогда
		ПараметрыВыполнения.ТребуетсяПроведение = Ложь;
	КонецЕсли;
	
КонецПроцедуры
Показать
14. dsdred 3279 13.05.21 22:20 Сейчас в теме
(13) Давно дело было... У меня такое ощущение, что у параметра "ТребуетсяПроведение " какой-то другой смысл и данное решение аукнецо при подключаемых командах.
15. burgomister 59 14.05.21 04:38 Сейчас в теме
(14) Сейчас работает. Посмотрим что дальше будет.
16. Afellay 31.05.21 13:13 Сейчас в теме
Подскажите а для Розницы 2.3 есть что-то подобное?
17. dsdred 3279 31.05.21 15:19 Сейчас в теме
(16)посмотрел Розницу 2.3.6.27. Там все так же
Прикрепленные файлы:
18. Afellay 31.05.21 19:47 Сейчас в теме
(17)Сделал как Вы написали, при печати выдает такую картину: Печатная форма недоступна.
Прикрепленные файлы:
21. dsdred 3279 11.06.21 10:02 Сейчас в теме
(18)Какой документ пытаетесь распечатать?
Разверну на досуге розницу и попробую.
19. bulas 211 11.06.21 06:53 Сейчас в теме
Что нужно добавить для вашего расширения, чтобы была возможность печатать внешнюю печатную форму у не проведённых документов, например: есть внешняя печатная форма Товарный чек для документа Реализация товаров и услуг?
20. dsdred 3279 11.06.21 09:01 Сейчас в теме
(19)Некоторые документы печатаются на основании регистров.
Соответственно если документ не проведен записей в регистре нет.

В этом случае надо точечно смотреть:
1 Как документ делает движения.
2 В том месте где запросом собираются данные для отчета добавить вариант для не проведенного документа.

Вариант 2
создать внешний отчет только для не проведенных документов и всю логику перенести в него.
22. Lurie 23.12.21 17:48 Сейчас в теме
Я один это на отдельную роль в расширении завязал?
23. dsdred 3279 24.12.21 21:55 Сейчас в теме
(22)Этот вопрос на битву экстрасенсов тянет ;))
24. jasand 18.02.22 10:52 Сейчас в теме
У меня 1С 8.3.15.1700 УТ 11.4.10.62
Вроде сделал всё по вашей инструкции, прога всё равно просит проведения. Мне нужно без проведения отправить на печать только документ "Реализация товаров и услуг". Приведу свой алгоритм действий. Поправьте, где не прав, пожалуйста:

1. Открываю Конфигуратор
2. Меню Конфигурация > Расширения конфигурации
3. В открывшемся окне нажимаю Добавить (зеленый крестик)
4. В отрквшемся окошке:
Имя: Расширение1
Синоним: Расширение1
Префикс: Расш1_
Назначение: Адаптация
5. Нажимаю ОК
6. В списке расширений напротив созданного расширения убираю галочку Безопасный режим, так как потом обязательно выйдет ошибка: "Расширение модуля запрещено из-за того, что оно подключено в безопасном режиме".
7. Кроме этого галочки по умолчанию остаются еще на трёх параметрах Активно, Защита от опасных действий, Использовать основные роли для всех пользователей.
8. В дереве Конфигурации нахожу свой документ: Документы > РеализацияТоваровУслуг
9. Нажимаю на него ПКМ, в контекстном меню выбираю "Добавить в расширение".
10. В расширении на появившемся документе РеализацияТоваровУслуг нажимаю ПКМ и в контекстном меню выбираю "Открыть модуль менеджера"
11. В этом модуле написал указанный вами код:

&После ("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати) Экспорт
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("Идентификатор", "ЗаказКлиента");
	НайденныеСтроки = КомандыПечати.НайтиСтроки(ПараметрыОтбора);
		 
	Для каждого строкаНС из НайденныеСтроки Цикл 
		строкаНС.ПроверкаПроведенияПередПечатью = Ложь;
	КонецЦикла;	
	
КонецПроцедуры
Показать


12. Нажал на панели кнопку "Обновить конфигурацию базы данных".
13. Закрыл Конфигуратор
14. Открыл УТ в пользовательском режиме. Создал документ Реализация товаров и услуг. Сохранил, но не провел. Нажал Печать, выбрал Расходная накладная. БАЦ!!: "Для выполнения команды необходимо предварительно провести документ. Выполнить проведение документа и продолжить?"
25. dsdred 3279 18.02.22 12:43 Сейчас в теме
(24)
ПараметрыОтбора.Вставить("Идентификатор", "ЗаказКлиента");

Индентификатор не тот
Посмотрите в основной конфигурации в модуле менеджере по документу Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

скорее всего "Накладная" -> ПараметрыОтбора.Вставить("Идентификатор", "Накладная")
26. jasand 18.02.22 13:10 Сейчас в теме
(25) Как же я не обратил на это внимание?! О_о В коде же ЗаказКлиента стоял )) Спасибо!

Но теперь, когда я нажимаю на Печать > Реализация товаров (выводить скидки) всё работает прекрасно!
Но когда нажимаю на Печать > Реализация товаров (не выводить скидки) выскакивает ошибка: "Деление на 0 значения типа Numeric"
27. dsdred 3279 18.02.22 13:12 Сейчас в теме
(26)посмотрите код в Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
видимо нужно еще и проверки поставить


	Если ЭтоПартнер ИЛИ ПолучитьФункциональнуюОпцию("НеВыбиратьВариантВыводаСкидокПриПечатиДокументовПродажи") Тогда
		// Реализация товаров
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Идентификатор = "Накладная";
		КомандаПечати.Представление = НСтр("ru = 'Реализация товаров';
											|en = 'Goods sales'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.Порядок = 11;
	КонецЕсли;

	Если НЕ ЭтоПартнер
		 И ПолучитьФункциональнуюОпцию("ВыбиратьВариантВыводаСкидокПриПечатиДокументовПродажи") Тогда
		// Реализация товаров (не выводить скидки)
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Идентификатор = "Накладная";
		КомандаПечати.Представление = НСтр("ru = 'Реализация товаров (не выводить скидки)';
											|en = 'Goods sales (do not display discounts)'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("ОтображатьСкидки", Ложь);
		КомандаПечати.Порядок = 12;
	КонецЕсли;

	Если НЕ ЭтоПартнер
		 И ПолучитьФункциональнуюОпцию("ВыбиратьВариантВыводаСкидокПриПечатиДокументовПродажи") Тогда
		// Реализация товаров (выводить скидки)
		КомандаПечати = КомандыПечати.Добавить();
		КомандаПечати.Идентификатор = "Накладная";
		КомандаПечати.Представление = НСтр("ru = 'Реализация товаров (выводить скидки)';
											|en = 'Goods sales (display discounts)'");
		КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
		КомандаПечати.ДополнительныеПараметры.Вставить("ОтображатьСкидки", Истина);
		КомандаПечати.Порядок = 13;
	КонецЕсли;
Показать
28. jasand 18.02.22 13:38 Сейчас в теме
(27) Я понял в чём проблема! Спасибо огромное!
Просто была необходимость в печати документов без указанного количества и суммы, только с ценами. Поэтому-то и выдаёт ошибку, когда дело коснулось скидок. На 0 же делить нельзя ))
29. Farpost 116 27.09.23 02:47 Сейчас в теме
Как все было просто и понятно в обычных формах и УТ-10....
Фирма 1С, как всегда придумала "супер-лайнер" из анекдота...
30. aleksey2 86 29.11.23 10:51 Сейчас в теме
Это способ как напечатать ПФ из конфы.
А как из внешней формы печатать? (ВПФ)
31. dsdred 3279 29.11.23 17:13 Сейчас в теме
(30) я не готов писать статью на эту тему.
Надо всю логику сделать не на данных регистров, а на документе. Начать с того что нужно посмотреть в какие регистры и как делаются движения.
Оставьте свое сообщение