Внешняя печатная форма печатается только под полными правами

1. mib338956 1 20.08.20 08:49 Сейчас в теме
Подскажите пожалуйста может кто то сталкивался. При запуске внешней печатной формы из документа "Реализация товаров и услуг" у пользователей с не полными правами появляется ошибка:
-----
Не удалось сформировать внешнюю печатную форму!
Ошибка при вызове метода контекста (Создать): Нарушение прав доступа!
-----
У всех ролей пользователя стоят галочки:
-Интерактивное открытие внешних отчётов
-Интерактивное открытие внешних обработок
-В настройках пользователя стоит разрешение на печать непроведенных документов
-----
В журнале регистрации событий :
Событие - Доступ. Отказ в доступе
Данные - Право. Использование
-----
Подскажите где нужно дать доступ пользователю на внешнюю печатную форму?
Саму форму и скриншоты прикрепил к сообщению
Прикрепленные файлы:
Печать по складам.epf
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. alex-l19041 8 20.08.20 09:02 Сейчас в теме
(1) как-то странно что внешняя печатная форма вызывает встроенную обработку...
13. Vegner 36 20.08.20 10:21 Сейчас в теме
(1) попробуй под обычным пользователем (без полных прав) запустить отладку, открыть как внешнюю обработку (создай форму если ее нет с выбором документа) и попробовать так ее запустить, там должно быть более точное описание ошибки
OksDallas; +1 Ответить
2. ixijixi 1992 20.08.20 08:56 Сейчас в теме
Очевидно нет доступа к обработке "Печать по складам". Тут либо такое право пользователю дать, либо перед вызовом этой обработки установить привилегированный режим.
alex-l19041; +1 Ответить
4. mib338956 1 20.08.20 09:02 Сейчас в теме
А где дать право пользователю?
Внешняя печатная форма для документа реализация товаров и услуг.
5. ixijixi 1992 20.08.20 09:06 Сейчас в теме
(4) Открыть в Конфигураторе обработку и посмотреть какие роли дают право на использование. Затем дать такую роль пользователю.
6. mib338956 1 20.08.20 09:13 Сейчас в теме
Открывал в конфигураторе, вообще никаких ролей не увидел
Прикрепленные файлы:
8. azali 20.08.20 09:26 Сейчас в теме
(6)
У меня в ERP ,была похожая ситуация. При печать данные брались из регистра сведений "Сумма документов в валюте Регл". В конфигураторе у это регистра доступ только для пользователя с полными правами. Тогда не стала разбираться, почему так. Дала через расширение права на этот регистр. Все стало печататься.
9. mib338956 1 20.08.20 09:28 Сейчас в теме
(8)Похоже тут тоже есть ссылка на валюту регламентн. учёта
10. mib338956 1 20.08.20 09:31 Сейчас в теме
(8)Подскажите пожалуйста где этот регистр?
11. azali 20.08.20 10:13 Сейчас в теме
(10)
Не поняла. Что значит где ?
14. mib338956 1 20.08.20 10:33 Сейчас в теме
В печатной форме:
-----
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
-----
Прикрепленные файлы:
12. Vegner 36 20.08.20 10:16 Сейчас в теме
(10) надо смотреть из каких дополнительных наборов данных (регистры сведений, регистры накоплений) берутся показатели при формировании печатной формы
7. mib338956 1 20.08.20 09:25 Сейчас в теме
Вот собственно модуль обработки:
-----
Перем мВалютаРегламентированногоУчета Экспорт;

Функция Печать() Экспорт	

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

// Функция формирует табличный документ с печатной формой накладной,
// разработанной методистами
//
// Возвращаемое значение:
//  Табличный документ - печатная форма накладной
//
Функция ПечатьРеализация() Экспорт
	
	ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
	Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
		ВыводитьКоды    = Истина;
		Колонка         = "Артикул";
		ТекстКодАртикул = "Артикул";
	ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
		ВыводитьКоды    = Истина;
		Колонка         = "Код";
		ТекстКодАртикул = "Код";
	Иначе
		ВыводитьКоды    = Ложь;
		Колонка         = "";
		ТекстКодАртикул = "Код";
	КонецЕсли;

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Номер,
	|	Дата,
	|	ДоговорКонтрагента,
	|	ДоговорКонтрагента.ВидДоговора КАК ВидДоговораКонтрагента,
	|	ДоговорКонтрагента.ВедениеВзаиморасчетов КАК ДоговорВедениеВзаиморасчетов,
	|	ДоговорКонтрагента.НаименованиеДляПечати КАК ДоговорНаименованиеДляПечати,	
	|	ДоговорКонтрагента.ВыводитьИнформациюОСделкеПриПечатиДокументов КАК ПечататьСделку,	
	|	Контрагент КАК Покупатель,
	|	Организация,
	|	Организация КАК Поставщик,
	|	Ответственный.ФизЛицо.Наименование КАК Отпустил,
	|	ОтпускПроизвел,
	|	СуммаДокумента,
	|	ВалютаДокумента,
	|	УчитыватьНДС,
	|	СуммаВключаетНДС
	|ИЗ
	|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
	|
	|ГДЕ
	|	РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
	Шапка = Запрос.Выполнить().Выбрать();       
	Шапка.Следующий();
        
	Запрос = Новый Запрос;          
	Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ВложенныйЗапрос.НомерТЧ,
	|	ВложенныйЗапрос.Номенклатура,
	|	ВложенныйЗапрос.Товар,
	|	ВложенныйЗапрос.Код,
	|	ВложенныйЗапрос.КодАртикул,
	|	СУММА(ВложенныйЗапрос.Количество) КАК Количество,
	|	СУММА(ВложенныйЗапрос.КоличествоМест) КАК КоличествоМест,
	|	ВложенныйЗапрос.Склад КАК Склад,
	|	ВложенныйЗапрос.Характеристика,
	|	ВложенныйЗапрос.ЕдиницаЦены,
	|	ВложенныйЗапрос.ЕдиницаМест,
	|	ВложенныйЗапрос.Серия,
	|	ЕСТЬNULL(СУММА(ВложенныйЗапрос.Количество * ВложенныйЗапрос.Номенклатура.ЕдиницаХраненияОстатков.Вес * ВложенныйЗапрос.ЕдиницаИзмерения.Коэффициент), 0) КАК Вес,
	|	ВложенныйЗапрос.ЕдиницаИзмерения,
	|	ЕСТЬNULL(СУММА(ВложенныйЗапрос.Количество * ВложенныйЗапрос.Номенклатура.ЕдиницаХраненияОстатков.Объем * ВложенныйЗапрос.ЕдиницаИзмерения.Коэффициент), 0) КАК Объем
	|ИЗ
	|	(ВЫБРАТЬ
	|		ВложенныйЗапросПоТоварам.НомерТЧ КАК НомерТЧ,
	|		ВложенныйЗапросПоТоварам.НомерСтрокиТЧ КАК НомерСтрокиТЧ,
	|		ВложенныйЗапросПоТоварам.Номенклатура КАК Номенклатура,
	|		ВЫРАЗИТЬ(ВложенныйЗапросПоТоварам.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) КАК Товар,
	|		ВложенныйЗапросПоТоварам.Номенклатура.Код КАК Код,
	|		ВложенныйЗапросПоТоварам.Номенклатура."+ ТекстКодАртикул + " КАК КодАртикул,
	|		ВложенныйЗапросПоТоварам.Количество КАК Количество,
	|		ВложенныйЗапросПоТоварам.КоличествоМест КАК КоличествоМест,
	|		ВложенныйЗапросПоТоварам.Склад КАК Склад,
	|		ВложенныйЗапросПоТоварам.ЕдиницаИзмерения.Представление КАК ЕдиницаЦены,
	|		ВложенныйЗапросПоТоварам.ЕдиницаИзмеренияМест.Представление КАК ЕдиницаМест,
	|		ВложенныйЗапросПоТоварам.ХарактеристикаНоменклатуры КАК Характеристика,
	|		ВложенныйЗапросПоТоварам.СерияНоменклатуры КАК Серия,
	|		ВложенныйЗапросПоТоварам.ЕдиницаИзмерения КАК ЕдиницаИзмерения
	|	ИЗ
	|		(ВЫБРАТЬ
	|			1 КАК НомерТЧ,
	|			МИНИМУМ(РеализацияТоваровУслуг.НомерСтроки) КАК НомерСтрокиТЧ,
	|			РеализацияТоваровУслуг.Номенклатура КАК Номенклатура,
	|			РеализацияТоваровУслуг.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	|			РеализацияТоваровУслуг.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,
	|			РеализацияТоваровУслуг.СерияНоменклатуры КАК СерияНоменклатуры,
	|			РеализацияТоваровУслуг.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	|			РеализацияТоваровУслуг.Склад КАК Склад,
	|			СУММА(РеализацияТоваровУслуг.Количество) КАК Количество,
	|			СУММА(РеализацияТоваровУслуг.КоличествоМест) КАК КоличествоМест
	|		ИЗ
	|			Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
	|		ГДЕ
	|			РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
	|		
	|		СГРУППИРОВАТЬ ПО
	|			РеализацияТоваровУслуг.Склад,
	|			РеализацияТоваровУслуг.Номенклатура,
	|			РеализацияТоваровУслуг.ЕдиницаИзмерения,
	|			РеализацияТоваровУслуг.ЕдиницаИзмеренияМест,
	|			РеализацияТоваровУслуг.СерияНоменклатуры,
	|			РеализацияТоваровУслуг.ХарактеристикаНоменклатуры) КАК ВложенныйЗапросПоТоварам
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		2,
	|		РеализацияТоваровУслуг.НомерСтроки,
	|		РеализацияТоваровУслуг.Номенклатура,
	|		ВЫРАЗИТЬ(РеализацияТоваровУслуг.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)),
	|		РеализацияТоваровУслуг.Номенклатура.Код,
	|		РеализацияТоваровУслуг.Номенклатура."+ ТекстКодАртикул + ",
	|		РеализацияТоваровУслуг.Количество,
	|		NULL,
	|		РеализацияТоваровУслуг.Склад,
	|		РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков.Представление,
	|		NULL,
	|		NULL,
	|		NULL,
	|		РеализацияТоваровУслуг.Номенклатура.ЕдиницаХраненияОстатков
	|	ИЗ
	|		Документ.РеализацияТоваровУслуг.ВозвратнаяТара КАК РеализацияТоваровУслуг
	|	ГДЕ
	|		РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент) КАК ВложенныйЗапрос
	|
	|СГРУППИРОВАТЬ ПО
	|	ВложенныйЗапрос.Склад,
	|	ВложенныйЗапрос.НомерТЧ,
	|	ВложенныйЗапрос.Серия,
	|	ВложенныйЗапрос.Характеристика,
	|	ВложенныйЗапрос.КодАртикул,
	|	ВложенныйЗапрос.Код,
	|	ВложенныйЗапрос.Товар,
	|	ВложенныйЗапрос.Номенклатура,
	|	ВложенныйЗапрос.ЕдиницаМест,
	|	ВложенныйЗапрос.ЕдиницаЦены,
	|	ВложенныйЗапрос.ЕдиницаИзмерения
	|ИТОГИ
	|	СУММА(Количество),
	|	СУММА(КоличествоМест),
	|	СУММА(Вес),
	|	СУММА(Объем)
	|ПО
	|	Склад";
	
	ВыборкаТовары = Запрос.Выполнить();
	ЗапросТовары = ВыборкаТовары.Выгрузить();

	ТабДокумент = Новый ТабличныйДокумент;
	ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_НакладнаяПоСкладам"­;

	Макет = ПолучитьМакет("НакладнаяПоСкладам");

	// печать производится на языке, указанном в настройках пользователя
	КодЯзыкаПечать = Локализация.ПолучитьЯзыкФормированияПечатныхФорм(УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "РежимФормированияПечатныхФорм"));
	Макет.КодЯзыкаМакета = КодЯзыкаПечать;

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

		ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
			
		ОбластьМакета.Параметры.ТекстЗаголовка = НСтр("ru='Накладная на склад';uk='Накладна на склад'",КодЯзыкаПечать) + " № " + ОбщегоНазначения.ПолучитьНомерНаПечать(Ссылканаобъект.ПолучитьОбъект())
			+ НСтр("ru=' от ';uk=' від '",КодЯзыкаПечать) + Формат(Ссылканаобъект.Дата, "ДЛФ=DDT; Л="+ Локализация.ОпределитьКодЯзыкаДляФормат(КодЯзыкаПечать));
			
		ТабДокумент.Вывести(ОбластьМакета);

		ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
		ОбластьМакета.Параметры.Склад = ВыборкаСтрокТоварыОбщий.Склад;
		ТабДокумент.Вывести(ОбластьМакета);
		
		ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
		ОбластьМакета.Параметры.Заполнить(Шапка);	
		ОбластьМакета.Параметры.ПредставлениеПокупателя = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПокупателе, "ПолноеНаименование,",,КодЯзыкаПечать) + " (код: " + Шапка.Покупатель.Код + ")";
		ТабДокумент.Вывести(ОбластьМакета);

		// Выводим дополнительно информацию о договоре и сделке
		СписокДополнительныхПараметров = "ДоговорНаименованиеДляПечати,";
		Если Шапка.ПечататьСделку = Истина Тогда
			СписокДополнительныхПараметров = СписокДополнительныхПараметров + "Сделка,";
		КонецЕсли;
		СписокДополнительныхПараметров = СписокДополнительныхПараметров;
		
		МассивСтруктурСтрок = ФормированиеПечатныхФорм.ДополнительнаяИнформация(Шапка,СписокДополнительныхПараметров,КодЯзыкаПечать);
		ОбластьМакета = Макет.ПолучитьОбласть("ДопИнформация");
		Для каждого СтруктураСтроки Из МассивСтруктурСтрок Цикл
			ОбластьМакета.Параметры.Заполнить(СтруктураСтроки);
			ТабДокумент.Вывести(ОбластьМакета);
		КонецЦикла;		
		
		Если ВыводитьКоды Тогда
			ОбластьШапки  = "ШапкаСКодом";
			ОбластьСтроки = "СтрокаСКодом";
		Иначе
			ОбластьШапки  = "ШапкаТаблицы";
			ОбластьСтроки = "Строка";
		Конецесли;

		Если ЗапросТовары.Итог("КоличествоМест") > 0 Тогда
			ОбластьШапки  = ОбластьШапки  + "Мест";
			ОбластьСтроки = ОбластьСтроки + "Мест";
		Конецесли;
		
		// Вывести табличную часть (товары и услуги)
		ОбластьМакета = Макет.ПолучитьОбласть(ОбластьШапки);
		Если ВыводитьКоды Тогда
			ОбластьМакета.Параметры.Колонка = Колонка;
		КонецЕсли;
		
		ОбластьМакета.Параметры.Вес  = НСтр("ru='Вес';uk='Вага'",КодЯзыкаПечать);
		ОбластьМакета.Параметры.Объем = НСтр("ru='Объем';uk='Об''єм'",КодЯзыкаПечать);
		
		ТабДокумент.Вывести(ОбластьМакета);
		
		ВыборкаСтрокТоварыДетали = ВыборкаСтрокТоварыОбщий.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		мИндекс = 0;
		Пока ВыборкаСтрокТоварыДетали.Следующий() Цикл

			ОбластьМакета = Макет.ПолучитьОбласть(ОбластьСтроки);

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

			ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТоварыДетали);
			ОбластьМакета.Параметры.НомерСтроки = мИндекс + 1;
			
			мИндекс = мИндекс + 1;
			ОбластьМакета.Параметры.Товар       = СокрЛП(ВыборкаСтрокТоварыДетали.Товар) + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТоварыДетали);

			Если ВыводитьКоды Тогда
				ОбластьМакета.Параметры.КодАртикул = ВыборкаСтрокТоварыДетали.КодАртикул;
			КонецЕсли;

			ТабДокумент.Вывести(ОбластьМакета);
            
			ВсегоВес    = ВсегоВес    + ВыборкаСтрокТоварыДетали.Вес;
			ВсегоОбъем  = ВсегоОбъем  + ВыборкаСтрокТоварыДетали.Объем;
			
		КонецЦикла;
		ОбластьИтого = "Итого";
			
		// Вывести Итого
		ОбластьМакета                 = Макет.ПолучитьОбласть(ОбластьИтого);
		ОбластьМакета.Параметры.ВсегоВес 	= ВсегоВес;
		ОбластьМакета.Параметры.ВсегоОбъем 	= ВсегоОбъем;
		ТабДокумент.Вывести(ОбластьМакета);
		
		// Вывести Сумму прописью
		ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
		СуммаКПрописиВес 	= ВсегоВес;
		СуммаКПрописиОбъем 	= ВсегоОбъем;
		
		ОбластьМакета.Параметры.ИтоговаяСтрока = НСтр("ru='Всего наименований ';uk='Всього найменувань '",КодЯзыкаПечать) + ВыборкаСтрокТоварыДетали.Количество() + ","
											   + НСтр("ru=' общий вес ';uk=' загальна вага '",КодЯзыкаПечать)  		+ ОбщегоНазначения.ФорматСумм(ВсегоВес)
											   + НСтр("ru=' общий объем ';uk=' загальний об''єм '",КодЯзыкаПечать)  + ОбщегоНазначения.ФорматСумм(ВсегоОбъем);
											  
		ТабДокумент.Вывести(ОбластьМакета);

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

	Возврат ТабДокумент; 	

КонецФункции // ПечатьДокумента()

мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот