Сделать форму с настройками перед печатью

1. user1302499 31.07.20 12:54 Сейчас в теме
Есть такая задачка. Необходимо сделать внешнюю обработку. На форме списка документа выбираются несколько документов при нажатиии на кнопку печать выбирается моя внешняя обработка открывается форма внешней обработки и там указывается еще пару параметров. Как сделать вызов этой формы внешней обработки?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Vegner 25 31.07.20 13:06 Сейчас в теме
если есть справочник для хранения внешних печатных форм и обработок то как то так, название реквизитов могут отличаться
ВременныйФайл = ПолучитьИмяВременногоФайла();
ЭлСпр = Справочники.ВнешниеПечатныеФормы.НайтиПоКоду("Код");
ДвоичныеДанныеОбработки = ЭлСпр.Хранилище.Получить();
ДвоичныеДанныеОбработки.Записать(ВременныйФайл);
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ВременныйФайл);
ФормаЗаписи = ВнешняяОбработкаОбъект.ПолучитьФорму("НазваниеФормы");
ФормаЗаписи .Открыть();
3. user1302499 31.07.20 13:17 Сейчас в теме
(2) Еще проблема возникла, не находит процедуру Печать

ВнешняяОбработкаОбъект.Печать(
		ПараметрыИсточника.ОбъектыНазначения,
		КоллекцияПечатныхФорм,
		ОбъектыПечати,
		ПараметрыВывода);
	


На этой строке ругается, что печать не обнаружено. В чем проблема?
4. Z_Denis 31.07.20 13:20 Сейчас в теме
(3) Нет такой процедуры в твоей внешней обработке, или не стоит "Экспорт"
6. user1302499 31.07.20 13:24 Сейчас в теме
(4)
Процедура Печать() Экспорт
      ФормаОбработки = ПолучитьФорму("ВнешняяОбработка.МТД_ПечатьНаОбработку.Форма.Форма");
      ФормаОбработки.Открыть();
    
КонецПроцедуры  
5. Z_Denis 31.07.20 13:23 Сейчас в теме
+ Зачем делать именно через внешнюю обработку? Посмотри как реализована печать к примеру в "РеализацияТоваровУслуг", там тоже в некоторых печатных формах вызывается сперва предварительная форма с параметрами.
7. user1302499 31.07.20 13:25 Сейчас в теме
(5)
Зачем делать именно через внешнюю обработку?

Так надо
8. user1302499 31.07.20 13:26 Сейчас в теме
(5)
Посмотри как реализована печать к примеру в "РеализацияТоваровУслуг"

Не нашел. БП 3.0 если что
9. Z_Denis 31.07.20 13:28 Сейчас в теме
(8) Что не нашел? Я тоже про БП 3.0. К примеру печать комплекта документов.
10. user1302499 31.07.20 13:38 Сейчас в теме
(9) Спасибо, нашел, но почему у меня ошибка взникает здесь. Не понимаю
ВнешняяОбработкаОбъект.Печать(
        ПараметрыИсточника.ОбъектыНазначения,
        КоллекцияПечатныхФорм,
        ОбъектыПечати,
        ПараметрыВывода);
    
11. user1302499 31.07.20 13:42 Сейчас в теме
12. user1302499 31.07.20 13:53 Сейчас в теме
(9)
К примеру печать комплекта документов.


В модуле объекта не получается вызвать открытие формы. Может можно иным способом?
13. Z_Denis 31.07.20 14:19 Сейчас в теме
(12) Модуль обьекта - это серверная сторона, там форму не открыть, тебе надо это на стороне клиента делать. Так почему не устраивает существующий механизм? Добавляешь свою команду печати, в ней прописываешь свой обработчик и все.
15. user1302499 31.07.20 15:21 Сейчас в теме
(13)
в ней прописываешь свой обработчик и все.

Не понял. Где прописывать?
17. user1302499 31.07.20 15:46 Сейчас в теме
(13) Я так же решил попробовать через расширение сделать. Но открыть форму работает только на клиенте, а в МодулеМенеджера не работает. Попробовал с модуля менеджера сослаться в созданный общий модуль но там так же не работает
19. Z_Denis 31.07.20 16:15 Сейчас в теме
(17) А галочка стоит "Клиент" в общем модуле и все остальные сняты? Должно работать оттуда.
20. user1302499 03.08.20 13:49 Сейчас в теме
14. VZyryanov 31.07.20 14:20 Сейчас в теме
(12) В функции СведенияОВнешнейОбработке использовать "ВызовКлиентскогоМетода", вместо "ВызовСерверногоМетода". В примере ниже при печати будет открыта форма "ФормаПодписей" обработки.

Функция СведенияОВнешнейОбработке() Экспорт
	
...
    
    // Создадим таблицу команд (подробнее смотрим ниже)
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    // Добавим команду в таблицу
   	ДобавитьКоманду(ТаблицаКоманд, НаименованиеДляПользователя, "ФормаПодписей", "ВызовКлиентскогоМетода", Истина, "ПечатьMXL");
   	//ДобавитьКоманду(ТаблицаКоманд, НаименованиеДляПользователя, Наименование, "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    
    // Сохраним таблицу команд в параметры регистрации обработки
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    // Теперь вернем системе наши параметры
    Возврат ПараметрыРегистрации;
КонецФункции
Показать
16. user1302499 31.07.20 15:30 Сейчас в теме
(14)
 {ВнешняяОбработка.МТД_ПечатьНаОбработку.МодульОбъекта(11,21)}: Процедура или функция с указанным именем не определена (ПолучитьТаблицуКоманд)
    ТаблицаКоманд = <<?>>ПолучитьТаблицуКоманд(); (Проверка: Сервер)
{ВнешняяОбработка.МТД_ПечатьНаОбработку.МодульОбъекта(14,5)}: Процедура или функция с указанным именем не определена (ДобавитьКоманду)
   	<<?>>ДобавитьКоманду(ТаблицаКоманд, "Нов печать", "Форма", "ВызовКлиентскогоМетода", Истина, "ПечатьMXL"); (Проверка: Сервер)
 
18. VZyryanov 31.07.20 15:46 Сейчас в теме
(16) Обычно берешь готовую внешнюю печатную форму и переделываешь ее для текущих нужд. Весь код модуля объекта внешней печатной формы М-11 для БП 3.0

Функция ПолучитьТаблицуКоманд()

   // Создадим пустую таблицу команд и колонки в ней
   Команды = Новый ТаблицаЗначений;

   // Как будет выглядеть описание печатной формы для пользователя
   Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); 

   // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
   Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

   // Тут задается, как должна вызваться команда обработки
   // Возможные варианты:
   // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
   // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
   // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
   Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

   // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
   Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

   // Для печатной формы должен содержать строку ПечатьMXL 
   Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
   Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
  // Добавляем команду в таблицу команд по переданному описанию.
  // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;

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

&НаСервере

//////////////////////////////////////////////
//ОБРАБОТКИ ПОДКЛЮЧЕНИЯ ВНЕШНЕЙ ПЕЧАТНОЙ ФОРМЫ

Функция СведенияОВнешнейОбработке() Экспорт
	
	//---------------
	Наименование = "(ИС КФ) М-11";
	НаименованиеДляПользователя = "(ИС КФ) М-11";
	Версия = "3.0";
	//---------------	
	
	// Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
    ПараметрыРегистрации = Новый Структура;

    // Объявим еще одну переменную, которая нам потребуется ниже
    ////МассивНазначений = Новый Массив;
    
    // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать. 
    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");

    // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе, 
    // которые поддерживают механизм ВПФ
	МассивНазначений = Новый Массив;
	МассивНазначений.Добавить("Документ.ПередачаМатериаловВЭксплуатацию");
	МассивНазначений.Добавить("Документ.ТребованиеНакладная");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Наименование", Наименование);
    
    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);

    // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
    ПараметрыРегистрации.Вставить("Версия", Версия);    
    ПараметрыРегистрации.Вставить("Информация", НаименованиеДляПользователя);
    
    // Создадим таблицу команд (подробнее смотрим ниже)
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    // Добавим команду в таблицу
   	ДобавитьКоманду(ТаблицаКоманд, НаименованиеДляПользователя, "ФормаПодписей", "ВызовКлиентскогоМетода", Истина, "ПечатьMXL");
   	//ДобавитьКоманду(ТаблицаКоманд, НаименованиеДляПользователя, Наименование, "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    
    // Сохраним таблицу команд в параметры регистрации обработки
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    // Теперь вернем системе наши параметры
    Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()

   // Создадим пустую таблицу команд и колонки в ней
   Команды = Новый ТаблицаЗначений;

   // Как будет выглядеть описание печатной формы для пользователя
   Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); 

   // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
   Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

   // Тут задается, как должна вызваться команда обработки
   // Возможные варианты:
   // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
   // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
   // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
   Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

   // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
   Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

   // Для печатной формы должен содержать строку ПечатьMXL 
   Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
   Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
  // Добавляем команду в таблицу команд по переданному описанию.
  // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;

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

//////////////////////////////////////////////
//ПРОЦЕДУРЫ ВНЕШЕЙ ПЕЧАТНОЙ ФОРМЫ

Функция Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	Наименование = "(ИС КФ) М-11";
	НаименованиеДляПользователя = "(ИС КФ) М-11";
	ТабДокументНаПечать = СформироватьТабличныйДокумент(МассивОбъектов);
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, Наименование) Тогда
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
						Наименование, НаименованиеДляПользователя,
						ТабДокументНаПечать);	
	КонецЕсли;
КонецФункции


Функция СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати = неопределено, СтруктураПодписей = неопределено) Экспорт	
	Перем ЧерезКогоДолжность;
	Перем ЧерезКогоФИО;
	Перем ЗатребовалДолжность;
	Перем ЗатребовалФИО;
	Перем РазрешилДолжность;
	Перем РазрешилФИО;
	Перем ОтпустилДолжность;
	Перем ОтпустилФИО;
	Перем ПолучилДолжность;
	Перем ПолучилФИО;
	
	//ВЗ 20170215 УстановитьПривилегированныйРежим(Истина);
	
	Макет=ПолучитьМакет("М11");	
	ТабДокумент=Новый ТабличныйДокумент;
	ТабДокумент.АвтоМасштаб=Истина;
	ТабДокумент.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
	ТабДокумент.ИмяПараметровПечати="ПАРАМЕТРЫ_ПЕЧАТИ_ТребНаклСПодписями_М11­";	
	КФСервер.ТабДокНижнийКолонтитул(ТабДокумент, ОриентацияСтраницы.Ландшафт, Макет);
			
	ПервыйДокумент=Истина;	
	Для каждого ТекДокумент из МассивОбъектов Цикл
		Если Не ПервыйДокумент Тогда
			ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		ПервыйДокумент = Ложь;		
		//Если МассивОбъектов.Количество() > 1 Тогда
			СтруктураПодписей=ПрочитатьДанныеРегистраПодписи(ТекДокумент);
		//КонецЕсли;		
		ЧерезКого=СтруктураПодписей.ЧерезКого;
		Затребовал=СтруктураПодписей.Затребовал;
		Разрешил=СтруктураПодписей.Разрешил;
		Отпустил=СтруктураПодписей.Отпустил;
		Получил=СтруктураПодписей.Получил;		
		Заказ = Неопределено;
		Если ТипЗнч(ТекДокумент)=Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда
			Запрос=Новый Запрос;
			Запрос.Текст= 	
				"ВЫБРАТЬ ПЕРВЫЕ 1
				|	Инвентарь.СпособОтраженияРасходов
				|ИЗ
				|	Документ.ПередачаМатериаловВЭксплуатацию.ИнвентарьИХозяйственныеПринадлежности КАК Инвентарь
				|ГДЕ
				|	Инвентарь.Ссылка = &Ссылка
				|	И Инвентарь.СпособОтраженияРасходов <> """"";
			Запрос.УстановитьПараметр("Ссылка", ТекДокумент);
			Результат=Запрос.Выполнить();
			Если НЕ Результат.Пустой() Тогда
				Выборка=Результат.Выбрать();
				Выборка.Следующий();
				Заказ=Выборка.СпособОтраженияРасходов;
				Заказ=СтрЗаменить(Заказ, ТекДокумент.Местонахождение.Наименование+", ", "");
			КонецЕсли;
		Иначе
			Если ТипЗнч(ТекДокумент.Субконто1)=Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
				Заказ=ТекДокумент.Субконто1;
			ИначеЕсли ТипЗнч(ТекДокумент.Субконто2)=Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
				Заказ=ТекДокумент.Субконто2;
			ИначеЕсли ТипЗнч(ТекДокумент.Субконто3)=Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
				Заказ=ТекДокумент.Субконто3;
			КонецЕсли;			
		КонецЕсли;		
		КФСервер.ПолучитьПодписи2Сервер(ЧерезКого, Затребовал, ЧерезКогоДолжность, ЧерезКогоФИО, ЗатребовалДолжность, ЗатребовалФИО);
		КФСервер.ПолучитьПодписи2Сервер(Разрешил, Отпустил, РазрешилДолжность, РазрешилФИО, ОтпустилДолжность, ОтпустилФИО);
		КФСервер.ПолучитьПодписи1Сервер(Получил, ПолучилДолжность, ПолучилФИО);
		ПолучилДолжность=КФСерверВызов.ПолучитьДолжность(Получил, Истина);

		КФСерверВызов.ДобавитьВЖурналАктивностиПользователей(ТекДокумент,"Документ",
			"М-11, "+КФСерверВызов.ИмяДокумента(ТекДокумент)+", "+ЧерезКогоФИО+", "+ЗатребовалФИО+", "
			+РазрешилФИО+", "+ОтпустилФИО+", "+ПолучилФИО);
			
		Область = Макет.ПолучитьОбласть("Шапка");
		Область.Параметры.Заголовок="ТРЕБОВАНИЕ-НАКЛАДНАЯ № " +ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ТекДокумент.Номер);
		Область.Параметры.КодОКПО=ТекДокумент.Организация.КодПоОКПО;
		СведенияОбОрганизации=БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ТекДокумент.Организация, ТекДокумент.Дата);
		ПредставлениеОрганизации=ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОбОрганизации, "НаименованиеДляПечатныхФорм,");
		Область.Параметры.ПредставлениеОрганизации=ПредставлениеОрганизации;
		Область.Параметры.ДатаСоставления=Формат(ТекДокумент.Дата, "ДФ=dd.MM.yy");
		Область.Параметры.Склад=ТекДокумент.Склад;
		Если ТипЗнч(ТекДокумент)=Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда
			Область.Параметры.КоррСчет="";
			Область.Параметры.ПредставлениеПодразделения=ТекДокумент.Местонахождение.Наименование;
		Иначе
			Область.Параметры.КоррСчет=ТекДокумент.СчетЗатрат.Код;
			Область.Параметры.ПредставлениеПодразделения=ТекДокумент.ПодразделениеЗатрат.Наименование;
		КонецЕсли;
		Область.Параметры.Заказ=Заказ; 
		Область.Параметры.ЧерезКого=ЧерезКогоФИО;
		Область.Параметры.Затребовал=ЗатребовалФИО;
		Область.Параметры.Разрешил=РазрешилФИО;
		ТабДокумент.Вывести(Область);
		СтруктураПолей=Новый Структура;
		Если ТипЗнч(ТекДокумент)=Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда
			СтруктураПолей.Вставить("Счет","СчетУчета");
		Иначе
			СтруктураПолей.Вставить("Счет","Счет");
		КонецЕсли;
		СтруктураПолей.Вставить("Материал","Номенклатура");
		СтруктураПолей.Вставить("МатериалНаименование","Номенклатура.НаименованиеПолное");
		СтруктураПолей.Вставить("НоменклатурныйНомер","Номенклатура.Код");
		СтруктураПолей.Вставить("ЕдиницаИзмеренияНаименование","Номенклатура.ЕдиницаИзмерения");
		СтруктураПолей.Вставить("ЕдиницаИзмеренияКод","Номенклатура.ЕдиницаИзмерения.Код");
		СтруктураПолей.Вставить("Количество","Количество");
		СтруктураПолей.Вставить("Партия","ДокументОприходования");
		Область=Макет.ПолучитьОбласть("Строка");		
		Если ТипЗнч(ТекДокумент)=Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда
			ТаблицаМатериалов=УчетОС.СформироватьЗапросПоТабличнойЧасти(ТекДокумент,"ИнвентарьИХозяйственныеПринадлежности",СтруктураПолей).Выгрузить();
		Иначе
			ТаблицаМатериалов=УчетОС.СформироватьЗапросПоТабличнойЧасти(ТекДокумент,"Материалы",СтруктураПолей).Выгрузить();
		КонецЕсли;
		//ВЗ 20171101 ТаблицаМатериалов.Свернуть("Материал,МатериалНаименование,Счет,НоменклатурныйНомер,ЕдиницаИзмеренияКод,ЕдиницаИзмеренияНаименование","Количество");
		//ТаблицаСуммСписания=БухгалтерскийУчетПереопределяемый.ПолучитьСуммуСписанияАктивов(ТекДокумент,'00010101','00010101');
		ТаблицаМатериалов.Свернуть("Материал,МатериалНаименование,Счет,НоменклатурныйНомер,ЕдиницаИзмеренияКод,ЕдиницаИзмеренияНаименование,Партия",
			"Количество");
		ТаблицаСуммСписания=КФСервер.ПолучитьСуммуСписанияАктивовПоПартиям(ТекДокумент,'00010101','00010101');
		//ВЗ 20171101;
		Сумма=0;		
		Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл
			Область.Параметры.Заполнить(СтрокаТЧ);
			//ВЗ 20171101 СтрокаСуммСписания=ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал, "Номенклатура");
			Строки=ТаблицаСуммСписания.НайтиСтроки(Новый Структура("Номенклатура,Партия",СтрокаТЧ.Материал,СтрокаТЧ.Партия));
			Если Строки.Количество()>0 Тогда
				СтрокаСуммСписания=Строки[0];
			Иначе
				СтрокаСуммСписания=Неопределено;
			КонецЕсли;
			//ВЗ 20171101;
			Если СтрокаСуммСписания=Неопределено Тогда
				Область.Параметры.Цена=0;
				Область.Параметры.Сумма=0;
			Иначе
				Цена=?(СтрокаСуммСписания.Количество=0,0,СтрокаСуммСписания.Сумма/СтрокаСуммСписания.Количество);
				Область.Параметры.Цена=Цена;
				Область.Параметры.Сумма=Цена*СтрокаТЧ.Количество;
				Сумма=Сумма+Цена*СтрокаТЧ.Количество;
			КонецЕсли;
			ТабДокумент.Вывести(Область);
		КонецЦикла;		
		Если ТипЗнч(ТекДокумент)=Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда
			ТаблицаМатериалов=УчетОС.СформироватьЗапросПоТабличнойЧасти(ТекДокумент, "Спецодежда", СтруктураПолей).Выгрузить();
			//ВЗ 20171101 ТаблицаМатериалов.Свернуть("Материал,МатериалНаименование,Счет,НоменклатурныйНомер,ЕдиницаИзмеренияКод,ЕдиницаИзмеренияНаименование","Количество");
			ТаблицаМатериалов.Свернуть("Материал,МатериалНаименование,Счет,НоменклатурныйНомер,ЕдиницаИзмеренияКод,ЕдиницаИзмеренияНаименование,Партия","Количество");
			Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл
				Область.Параметры.Заполнить(СтрокаТЧ);
				//ВЗ 20171101 СтрокаСуммСписания=ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал,"Номенклатура");
				Строки=ТаблицаСуммСписания.НайтиСтроки(Новый Структура("Номенклатура,Партия",СтрокаТЧ.Материал,СтрокаТЧ.Партия));
				Если Строки.Количество()>0 Тогда
					СтрокаСуммСписания=Строки[0];
				Иначе
					СтрокаСуммСписания=Неопределено;
				КонецЕсли;
				//ВЗ 20171101;
				Если СтрокаСуммСписания=Неопределено Тогда
					 Область.Параметры.Цена=0;
					 Область.Параметры.Сумма=0;
				Иначе
					Цена=?(СтрокаСуммСписания.Количество=0,0,СтрокаСуммСписания.Сумма/СтрокаСуммСписания.Количество);
					Область.Параметры.Цена=Цена;
					Область.Параметры.Сумма=Цена*СтрокаТЧ.Количество;
					Сумма=Сумма+Цена*СтрокаТЧ.Количество;
				КонецЕсли;
				ТабДокумент.Вывести(Область);
			КонецЦикла;
		КонецЕсли;		
		//ВЗ 20171101
		СтруктураПолей.Удалить("Партия");
		ТаблицаСуммСписания.Свернуть("Регистратор,Номенклатура","Количество,Сумма");	
		//ВЗ 20171101;
		Если ТипЗнч(ТекДокумент)=Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда
			ТаблицаМатериалов=УчетОС.СформироватьЗапросПоТабличнойЧасти(ТекДокумент,"Спецоснастка",СтруктураПолей).Выгрузить();
		Иначе
			ТаблицаМатериалов=УчетОС.СформироватьЗапросПоТабличнойЧасти(ТекДокумент,"МатериалыЗаказчика",СтруктураПолей).Выгрузить();
		КонецЕсли;
		ТаблицаМатериалов.Свернуть("Материал,МатериалНаименование,Счет,НоменклатурныйНомер,ЕдиницаИзмеренияКод,ЕдиницаИзмеренияНаименование","Количество");
		Для Каждого СтрокаТЧ Из ТаблицаМатериалов Цикл
			Область.Параметры.Заполнить(СтрокаТЧ);
			СтрокаСуммСписания=ТаблицаСуммСписания.Найти(СтрокаТЧ.Материал, "Номенклатура");
			Если СтрокаСуммСписания=Неопределено Тогда
				 Область.Параметры.Цена=0;
				 Область.Параметры.Сумма=0;
			Иначе
				Цена=?(СтрокаСуммСписания.Количество=0,0,СтрокаСуммСписания.Сумма/СтрокаСуммСписания.Количество);
				Область.Параметры.Цена=Цена;
				Область.Параметры.Сумма=Цена*СтрокаТЧ.Количество;
				Сумма=Сумма+Цена*СтрокаТЧ.Количество;
			КонецЕсли;
			ТабДокумент.Вывести(Область);
		КонецЦикла;
		Область=Макет.ПолучитьОбласть("Подвал");
		Область.Параметры.Сумма=Сумма;
		Область.Параметры.ОтпустилДолжность=ОтпустилДолжность;
		Область.Параметры.Отпустил=ОтпустилФИО;
		Область.Параметры.ПолучилДолжность=ПолучилДолжность;
		Область.Параметры.Получил=ПолучилФИО;
		ТабДокумент.Вывести(Область);
	КонецЦикла;	
	Возврат ТабДокумент;	
КонецФункции

&НаСервере
Функция ПрочитатьДанныеРегистраПодписи(ТекДокумент) Экспорт	
	СтруктураПодписеей=Новый Структура("ЧерезКого,Затребовал,Разрешил,Отпустил,Получил");	
	Если ТекДокумент=Неопределено Тогда
		Возврат СтруктураПодписеей;
	КонецЕсли;		
	Журнал=РегистрыСведений.ПодписиТребованийНакладных.СоздатьНаборЗаписей();
	Журнал.Отбор.Пользователь.Установить(КФСерверВызов.ТекущийПользователь());
	Журнал.Отбор.Документ.Установить(ТекДокумент.Ссылка);
	Журнал.Прочитать();
	Если Журнал.Количество()=0 Тогда
		Журнал.Отбор.Сбросить();
		Журнал.Отбор.Документ.Установить(ТекДокумент.Ссылка);
		Журнал.Прочитать();
	КонецЕсли;
	Если Журнал.Количество()>0 Тогда
		стрЖурнал=Журнал[Журнал.Количество()-1];
		СтруктураПодписеей.ЧерезКого=стрЖурнал.ЧерезКого;
		СтруктураПодписеей.Затребовал=стрЖурнал.Затребовал;
		СтруктураПодписеей.Разрешил=стрЖурнал.Разрешил;
		СтруктураПодписеей.Отпустил=стрЖурнал.Отпустил;
		СтруктураПодписеей.Получил=стрЖурнал.Получил;
	Иначе
		Запрос=Новый Запрос;
		Запрос.УстановитьПараметр("Пользователь",КФСерверВызов.ТекущийПользователь());
		Заказ=Справочники.НоменклатурныеГруппы.ПустаяСсылка();
		Если ТипЗнч(ТекДокумент)=Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда
			Запрос.УстановитьПараметр("Подразделение",ТекДокумент.Местонахождение);
        Иначе
			Запрос.УстановитьПараметр("Подразделение",ТекДокумент.ПодразделениеЗатрат);
			Если ТипЗнч(ТекДокумент.Субконто1)=Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
				Заказ = ТекДокумент.Субконто1;
			ИначеЕсли ТипЗнч(ТекДокумент.Субконто2)=Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
				Заказ = ТекДокумент.Субконто2;
			ИначеЕсли ТипЗнч(ТекДокумент.Субконто3)=Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
				Заказ = ТекДокумент.Субконто3;
			КонецЕсли;			
		КонецЕсли;
		Запрос.УстановитьПараметр("Заказ",Заказ);
		
		ЗапросТекст=
			"ВЫБРАТЬ ПЕРВЫЕ 1
			|	Подписи.ЧерезКого,
			|	Подписи.Затребовал,
			|	Подписи.Разрешил,
			|	Подписи.Отпустил,
			|	Подписи.Получил
			|ИЗ
			|	РегистрСведений.ПодписиТребованийНакладных.СрезПоследних(, &Условие) КАК Подписи
			|ГДЕ
			|	Подписи.Отпустил <> ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)
			|
			|УПОРЯДОЧИТЬ ПО
			|	Подписи.Период УБЫВ";
		Запрос.Текст=СтрЗаменить(ЗапросТекст,"&Условие","Пользователь = &Пользователь И Подразделение = &Подразделение");
		Результат=Запрос.Выполнить();
		Если Результат.Пустой() Тогда
			Запрос.Текст=СтрЗаменить(ЗапросТекст,"&Условие","Подразделение = &Подразделение");
			Результат=Запрос.Выполнить();
		КонецЕсли;
		Если НЕ Результат.Пустой() Тогда
			Выборка=Результат.Выбрать();
			Выборка.Следующий();
			СтруктураПодписеей.Затребовал=Выборка.Затребовал;
			СтруктураПодписеей.Разрешил=Выборка.Разрешил;
			СтруктураПодписеей.Отпустил=Выборка.Отпустил;
			СтруктураПодписеей.Получил=Выборка.Получил;
		КонецЕсли;
		Если ТипЗнч(ТекДокумент)<>Тип("ДокументСсылка.ПередачаМатериаловВЭксплуатацию") Тогда		
			Запрос.Текст=СтрЗаменить(ЗапросТекст,"&Условие","Пользователь = &Пользователь И Заказ = &Заказ");
			Результат=Запрос.Выполнить();
			Если Результат.Пустой() Тогда
				Запрос.Текст=СтрЗаменить(ЗапросТекст,"&Условие","Заказ = &Заказ");
				Результат=Запрос.Выполнить();
			КонецЕсли;
			Если НЕ Результат.Пустой() Тогда
				Выборка=Результат.Выбрать();
				Выборка.Следующий();
				СтруктураПодписеей.ЧерезКого=Выборка.ЧерезКого;
				Если Не ЗначениеЗаполнено(СтруктураПодписеей.Разрешил) Тогда
					СтруктураПодписеей.Разрешил=Выборка.Разрешил;
				КонецЕсли;			
				Если Не ЗначениеЗаполнено(СтруктураПодписеей.Отпустил) Тогда
					СтруктураПодписеей.Отпустил=Выборка.Отпустил;
				КонецЕсли;			
			КонецЕсли;
		КонецЕсли;
		Запрос.Текст=СтрЗаменить(ЗапросТекст,"&Условие","Пользователь = &Пользователь");
		Результат=Запрос.Выполнить();
		Если НЕ Результат.Пустой() Тогда
			Выборка=Результат.Выбрать();
			Выборка.Следующий();
			СтруктураПодписеей.Отпустил=Выборка.Отпустил;
		КонецЕсли;
		Если Не ЗначениеЗаполнено(СтруктураПодписеей.Отпустил) Тогда
			СтруктураПодписеей.Отпустил=КФСерверВызов.ТекущийПользователь().ФизическоеЛицо;
		КонецЕсли;				
		Если Не ЗначениеЗаполнено(СтруктураПодписеей.Разрешил) Тогда
			СтруктураПодписеей.Разрешил=Справочники.ФизическиеЛица.НайтиПоНаименованию("Комаров Игорь Сергеевич");
		КонецЕсли;			
	КонецЕсли;	
	Возврат СтруктураПодписеей;	
КонецФункции
Показать
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день