|
Внешнюю печатная форма. Не получилось разрыв страницы и печать непроведенных док-ов! КАК? | ☑ | ||
---|---|---|---|---|
0
koketka
26.02.19
✎
23:34
|
Написала внешнюю печатную форму не получилось реализовать 2 задачи:
1) Сделать разрыв страницы если не умещается последняя строка, итоги и подвал на одном листе (вроде все написала, по мне все так - но не работает!!!) 2) Не дает печатать документ если он не проведен. 3) Скажите по коду если что кому не нравится (Критика по делу приветствуется) Спасибо) Функция СведенияОВнешнейОбработке()Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; МассивНазначений.Добавить("Документ.Премия"); //Указываем документ к которому делаем внешнюю печ. форму ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов... ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); ПараметрыРегистрации.Вставить("Наименование", "Ведомость по премиям"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ); ПараметрыРегистрации.Вставить("Версия", "1.0"); ПараметрыРегистрации.Вставить("Информация", "Внешний отчет по премиям"); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, "Ведомость по премиям", "ВедомостьПоПремиям", "ВызовСерверногоМетода", Истина, "Печать"); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));//как будет выглядеть описание печ.формы для пользователя Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета печ.формы Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = Представление; НоваяКоманда.Идентификатор = Идентификатор; НоваяКоманда.Использование = Использование; НоваяКоманда.ПоказыватьОповещение = Ложь; НоваяКоманда.Модификатор = Модификатор; КонецПроцедуры Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ВедомостьПоПремиям", "Ведомость по премиям", СформироватьПечатнуюФорму(МассивОбъектов[0], ОбъектыПечати)); КонецПроцедуры // Печать() Функция СформироватьПечатнуюФорму(СсылкаНаДокумент, ОбъектыПечати) ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.АвтоМасштаб = Истина; ТабличныйДокумент.ПолеСверху = 10; ТабличныйДокумент.ПолеСнизу = 10; ТабличныйДокумент.ПолеСлева = 0; ТабличныйДокумент.ПолеСправа = 0; ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ВедомостьНаПремии"; МакетОбработки = ПолучитьМакет("ВедомостьПремия"); Сз = Новый СписокЗначений; Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000104")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000205")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000106")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000111")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000116")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000119")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000201")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000225")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000633")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000624")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000629")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000630")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000631")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000617")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000040040")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000050050")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000053000")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000984")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000983")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("400001103")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000035")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("400001081")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000093")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000010096")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000090")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("400000997")); Сз.Добавить(Справочники.ПодразделенияОрганизаций.НайтиПоКоду("400001011")); Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ПремияНачисления.Ссылка.ВидПремии КАК ВидПремии, | ПремияНачисления.Сотрудник КАК Сотрудник, | КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию, | ДОБАВИТЬКДАТЕ(ПремияНачисления.Ссылка.ПериодРегистрации, МЕСЯЦ, -1) КАК ПериодРегистрации, | ПремияНачисления.ИдентификаторСтрокиВидаРасчета КАК ИдНомер, | ПремияНачисления.Результат КАК Результат, | ТарифныеСеткиДополнительныеРеквизиты.Значение КАК Категория, | ПремияНачисления.Подразделение КАК Подразделение |ИЗ | Документ.Премия.Начисления КАК ПремияНачисления | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&ДатаДокумента, ) КАК КадроваяИсторияСотрудниковСрезПоследних | ПО ПремияНачисления.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТарифныеСетки.ДополнительныеРеквизиты КАК ТарифныеСеткиДополнительныеРеквизиты | ПО (ТарифныеСеткиДополнительныеРеквизиты.Ссылка = КадроваяИсторияСотрудниковСрезПоследних.ДолжностьПоШтатномуРасписанию.ТарифнаяСетка) | И (ТарифныеСеткиДополнительныеРеквизиты.Свойство = &Свойство) | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ПодразделенияОрганизаций.Ссылка КАК ПодразделениеДляВедомости | ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций | ГДЕ | ПодразделенияОрганизаций.Ссылка В(&СЗ)) КАК ВложенныйЗапрос | ПО (ПремияНачисления.Подразделение.Родитель = ВложенныйЗапрос.ПодразделениеДляВедомости | ИЛИ ПремияНачисления.Подразделение.Родитель.Родитель = ВложенныйЗапрос.ПодразделениеДляВедомости | ИЛИ ПремияНачисления.Подразделение.Родитель.Родитель.Родитель = ВложенныйЗапрос.ПодразделениеДляВедомости | ИЛИ ПремияНачисления.Подразделение.Ссылка = ВложенныйЗапрос.ПодразделениеДляВедомости) |ГДЕ | ПремияНачисления.Ссылка = &ТекДокумент | И ВЫБОР | КОГДА ВложенныйЗапрос.ПодразделениеДляВедомости = &ОсобыйСклад | ТОГДА НЕ ПремияНачисления.Подразделение В ИЕРАРХИИ (&ДопСклад) | ИНАЧЕ ПремияНачисления.Подразделение В ИЕРАРХИИ (&СЗ) | КОНЕЦ |ИТОГИ ПО | ВложенныйЗапрос.ПодразделениеДляВедомости, | Подразделение"; Запрос.УстановитьПараметр("Свойство",ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Категория")); Запрос.УстановитьПараметр("ДатаДокумента",СсылкаНаДокументПремия.Дата); Запрос.УстановитьПараметр("ТекДокумент", СсылкаНаДокумент); Запрос.УстановитьПараметр("ОсобыйСклад", Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000983")); Запрос.УстановитьПараметр("ДопСклад", Справочники.ПодразделенияОрганизаций.НайтиПоКоду("400001103")); Запрос.УстановитьПараметр("СЗ",сз); Результат = Запрос.Выполнить(); ВыбПодр = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыбПодр.Следующий() Цикл ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ОбластьЗаголовок = МакетОбработки.ПолучитьОбласть("Заголовок"); Если СсылкаНаДокумент.ВидПремии.Наименование = "Премия рабочим на повременной оплате труда" Тогда ОбластьЗаголовок.Параметры.ДопИнформация = "вспомогательных рабочих за "; ИначеЕсли СсылкаНаДокумент.ВидПремии.Наименование = "Премия рабочим на сдельной оплате труда процентом" Тогда ОбластьЗаголовок.Параметры.ДопИнформация = "рабочих сдельщиков за "; ИначеЕсли СсылкаНаДокумент.ВидПремии.Наименование = "Премия специалистам" Тогда ОбластьЗаголовок.Параметры.ДопИнформация = "руководителей, специалистов,служащих за "; Конецесли; ОбластьЗаголовок.Параметры.ПериодРегистрации = Формат(ДобавитьМесяц(СсылкаНаДокумент.ПериодРегистрации,-1),"ДФ='MMMM yyyy'"); ТабличныйДокумент.Вывести(ОбластьЗаголовок); ИтогоОбщееПремия = 0; ИтогоОбщееРасчетнаяБаза = 0; Под = 0; Стр = 0; ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка"); ТабличныйДокумент.Вывести(ОбластьШапка); ОбластьСтроки = МакетОбработки.ПолучитьОбласть("Строка"); ОбластьИтоги = МакетОбработки.ПолучитьОбласть("Итоги"); ОбластьПодвал = МакетОбработки.ПолучитьОбласть("Подвал"); Выб = ВыбПодр.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выб.Следующий() Цикл Под = Под + 1; ОбластьПодразделение = МакетОбработки.ПолучитьОбласть("ПодразделениеНазвание"); ОбластьПодразделение.Параметры.Подразделение = Выб.Подразделение; ТабличныйДокумент.Вывести(ОбластьПодразделение); Выборка = Выб.Выбрать(); Пока Выборка.Следующий() Цикл Стр = Стр + 1; СписокЗн = Новый СписокЗначений; СписокЗн.Добавить(Справочники.ПоказателиРасчетаЗарплаты.РасчетнаяБаза); СписокЗн.Добавить(Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Процент прогрессивки")); СписокЗн.Добавить(Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Процент прогрессивки рабочим")); СписокЗн.Добавить(Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Процент прогрессивки вспомогательным рабочим")); ОбластьСтроки = МакетОбработки.ПолучитьОбласть("Строка"); ДопЗапрос =Новый Запрос; ДопЗапрос.Текст = "ВЫБРАТЬ | ПремияПоказатели.Показатель КАК Показатель, | ПремияПоказатели.Значение КАК Значение |ИЗ | Документ.Премия.Показатели КАК ПремияПоказатели |ГДЕ | ПремияПоказатели.ИдентификаторСтрокиВидаРасчета = &ИдНомер | И ПремияПоказатели.Показатель В(&СпискеЗН) | И ПремияПоказатели.Ссылка.Ссылка = &ТекДокумент"; ДопЗапрос.УстановитьПараметр("ИдНомер",Выборка.ИдНомер); ДопЗапрос.УстановитьПараметр("СпискеЗН",СписокЗн); ДопЗапрос.УстановитьПараметр("ТекДокумент",СсылкаНаДокумент); ДопРезультат = ДопЗапрос.Выполнить(); ДопВыборка = ДопРезультат.Выбрать(); ОбластьСтроки.Параметры.ПроцентПремии = 0; ОбластьСтроки.Параметры.СуммаПремии = 0; ОбластьСтроки.Параметры.РасчетнаяБаза = 0; ОбластьСтроки.Параметры.Категория = ""; ОбластьСтроки.Параметры.Сотрудник = ""; ОбластьСтроки.Параметры.Должность = ""; Пока ДопВыборка.Следующий()Цикл Если ДопВыборка.Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Процент прогрессивки") или ДопВыборка.Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Процент прогрессивки рабочим")или ДопВыборка.Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("Процент прогрессивки вспомогательным рабочим") Тогда ОбластьСтроки.Параметры.ПроцентПремии = ДопВыборка.Значение; ИначеЕсли ДопВыборка.Показатель = Справочники.ПоказателиРасчетаЗарплаты.РасчетнаяБаза Тогда ОбластьСтроки.Параметры.РасчетнаяБаза = ДопВыборка.Значение; ИтогоОбщееРасчетнаяБаза = ИтогоОбщееРасчетнаяБаза + ДопВыборка.Значение; КонецЕсли; КонецЦикла; ОбластьСтроки.Параметры.ВидОплаты = Выборка.ВидПремии; ОбластьСтроки.Параметры.Категория = Выборка.Категория; ОбластьСтроки.Параметры.Сотрудник = Выборка.Сотрудник; ОбластьСтроки.Параметры.Должность = Выборка.ДолжностьПоШтатномуРасписанию; // ОбластьСтроки.Параметры.ПериодРегистрации = Выборка.ПериодРегистрации; ОбластьСтроки.Параметры.СуммаПремии = Выборка.Результат; ИтогоОбщееПремия = ИтогоОбщееПремия + Выборка.Результат; Если Под = Выб.Количество() и Стр = Выборка.Количество() Тогда Сообщить("прывет"); МассивВ = Новый Массив; МассивВ.Очистить(); МассивВ.Добавить(ОбластьСтроки); МассивВ.Добавить(ОбластьИтоги); МассивВ.Добавить(ОбластьПодвал); Сообщить(МассивВ); Если не ТабличныйДокумент.ПроверитьВывод(МассивВ) Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); Сообщить("ура"); ТабличныйДокумент.Вывести(ОбластьСтроки); КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; ОбластьИтоги.Параметры.ИтогоСуммаПремии = ИтогоОбщееПремия; Областьитоги.Параметры.ИтогоРасчетнаяБаза = ИтогоОбщееРасчетнаяБаза; ТабличныйДокумент.Вывести(ОбластьИтоги); ТабличныйДокумент.Вывести(ОбластьПодвал); КонецЦикла; Возврат ТабличныйДокумент; КонецФункции |
|||
1
koketka
27.02.19
✎
00:26
|
и тишина!
|
|||
2
Йохохо
27.02.19
✎
00:57
|
Под Выб Стр Брр
для читаемости вот это всё Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000104") и СписокЗн можно вынести в соответствие, инициализируемое функцией. И потом в коде тСтруктураПараметров.Получить("МассивПодразделений) тСтруктураПараметров.Получить("ДопРеквизит_Категория") разрыв вроде должен работать но не по Выб |
|||
3
AlvlSpb
27.02.19
✎
00:58
|
(0) "Не дает печатать документ если он не проведен." Это нормально, попробуйте напечатать непроведенный док не впф, получите то же самое.
"Сделать разрыв страницы если не умещается последняя строка" Смотри метод ПроверитьВывод() и ВывестиГоризонтальныйРазделительСтраниц |
|||
4
koketka
27.02.19
✎
01:14
|
изначально был такой код и он не работал!!!
МассивВ = Новый Массив; МассивВ.Добавить(ОбластьСтроки); МассивВ.Добавить(ОбластьИтоги); МассивВ.Добавить(ОбластьПодвал); Если не ТабличныйДокумент.ПроверитьВывод(МассивВ) Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьСтроки); |
|||
5
koketka
27.02.19
✎
01:14
|
(3) посмотрела! так я и делала не работатет и все!
|
|||
6
koketka
27.02.19
✎
01:25
|
Вот что нашла
ТабличныйДокументСтрока = Новый ТабличныйДокумент; ТабличныйДокументСтрока.Вывести(ОбластьСтроки); ТабличныйДокументСтрока.Вывести(ОбластьИтоги); ТабличныйДокументСтрока.Вывести(ОбластьПодвал); Если не ТабличныйДокумент.ПроверитьВывод(ТабличныйДокументСтрока ) Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; |
|||
7
koketka
27.02.19
✎
01:25
|
Если честно не знаю как это поможет (((
|
|||
8
koketka
27.02.19
✎
01:32
|
ТабличныйДокументСтрока.ТекущаяОбласть.СоздатьФорматСтрок();
ТабличныйДокументСтрока.АвтоМасштаб = Истина; |
|||
9
Йохохо
27.02.19
✎
02:06
|
(4) и (7) оба допустимые варианты, (8) не про то
Пока не ТабличныйДокумент.ПроверитьВывод(МассивВ) Цикл МассивВ.Добавить(ОбластьСтроки); КонецЦикла; ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); Сообщить("ура"); |
|||
10
Йохохо
27.02.19
✎
02:06
|
просто для теста
|
|||
11
catena
27.02.19
✎
07:28
|
Ни "не работает", а "не умею готовить".
Не совсем понятно, конечно, как выглядит ваше "не работает", но по приведенному коду вижу два тонких места: заполнение области после проверки, проверка не переде каждым выводом. |
|||
12
Мимохожий Однако
27.02.19
✎
08:04
|
Добавь после каждой строчки вывода секции
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); Порадуйся, что вывод работает. Потом убери лишние |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |