Сделать форму с настройками перед печатью
Есть такая задачка. Необходимо сделать внешнюю обработку. На форме списка документа выбираются несколько документов при нажатиии на кнопку печать выбирается моя внешняя обработка открывается форма внешней обработки и там указывается еще пару параметров. Как сделать вызов этой формы внешней обработки?
По теме из базы знаний
- Корректная двусторонняя печать табличных документов + Простой пример создания внешней печатной формы
- Формирование комплекта печатных форм в типовых конфигурациях для разнотипных документов
- Переход с 1С:УПП на 1C:ERP: Задача переноса печатных форм в сжатые сроки. Конструктор печати
- Внешняя печатная форма с выводом формы настроек перед печатью (выбор подписантов). Работает на БСП 3.1.9, имеет 1 форму настроек, есть режим отладки, управляемые формы 8.3
- PrintWizard: Консоль команд печати
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
если есть справочник для хранения внешних печатных форм и обработок то как то так, название реквизитов могут отличаться
ВременныйФайл = ПолучитьИмяВременногоФайла();
ЭлСпр = Справочники.ВнешниеПечатныеФормы.НайтиПоКоду("Код");
ДвоичныеДанныеОбработки = ЭлСпр.Хранилище.Получить();
ДвоичныеДанныеОбработки.Записать(ВременныйФайл);
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ВременныйФайл);
ФормаЗаписи = ВнешняяОбработкаОбъект.ПолучитьФорму("НазваниеФормы");
ФормаЗаписи .Открыть();
ВременныйФайл = ПолучитьИмяВременногоФайла();
ЭлСпр = Справочники.ВнешниеПечатныеФормы.НайтиПоКоду("Код");
ДвоичныеДанныеОбработки = ЭлСпр.Хранилище.Получить();
ДвоичныеДанныеОбработки.Записать(ВременныйФайл);
ВнешняяОбработкаОбъект = ВнешниеОбработки.Создать(ВременныйФайл);
ФормаЗаписи = ВнешняяОбработкаОбъект.ПолучитьФорму("НазваниеФормы");
ФормаЗаписи .Открыть();
(12) В функции СведенияОВнешнейОбработке использовать "ВызовКлиентскогоМетода", вместо "ВызовСерверногоМетода". В примере ниже при печати будет открыта форма "ФормаПодписей" обработки.
Функция СведенияОВнешнейОбработке() Экспорт
...
// Создадим таблицу команд (подробнее смотрим ниже)
ТаблицаКоманд = ПолучитьТаблицуКоманд();
// Добавим команду в таблицу
ДобавитьКоманду(ТаблицаКоманд, НаименованиеДляПользователя, "ФормаПодписей", "ВызовКлиентскогоМетода", Истина, "ПечатьMXL");
//ДобавитьКоманду(ТаблицаКоманд, НаименованиеДляПользователя, Наименование, "ВызовСерверногоМетода", Истина, "ПечатьMXL");
// Сохраним таблицу команд в параметры регистрации обработки
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
// Теперь вернем системе наши параметры
Возврат ПараметрыРегистрации;
КонецФункции
Показать
(14)
{ВнешняяОбработка.МТД_ПечатьНаОбработку.МодульОбъекта(11,21)}: Процедура или функция с указанным именем не определена (ПолучитьТаблицуКоманд)
ТаблицаКоманд = <<?>>ПолучитьТаблицуКоманд(); (Проверка: Сервер)
{ВнешняяОбработка.МТД_ПечатьНаОбработку.МодульОбъекта(14,5)}: Процедура или функция с указанным именем не определена (ДобавитьКоманду)
<<?>>ДобавитьКоманду(ТаблицаКоманд, "Нов печать", "Форма", "ВызовКлиентскогоМетода", Истина, "ПечатьMXL"); (Проверка: Сервер)
(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С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)