![]() |
![]() |
![]() |
|
Внешняя печатная форма ИНВ-19 | ☑ | ||
---|---|---|---|---|
0
slavabatov
11.11.11
✎
14:10
|
Здравствуйте.
Если есть возможность помогите в следующем вопросе. Создаю внешнюю печатную форму ИНВ-19 для КА 1.1 (1.1.12.1). Она практически идентична стандартной, кроме "косметических" отличий и попытки реализовать автоматическое заполнение тех полей которые в стандартной пустые. Сделав это через Параметры ОбластиМакета (установил аналогичные стандартному заполнению) я столкнулся с проблемой ресурсоёмкости заполнения формы (безусловно до оптимальности решения тут далеко). Не могу понять как сделать так что бы значения получались единожды, а после просто распределялись по необходимым ячейкам. И проблема номер два это фомирование в печатной форме множества пустых страниц имеющих в себе только ЗаголовокТаблицы. Код и файл прикладываю http://depositfiles.com/files/lqnn45chc Только большая просьба советы давайте "с поправкой на ветер")) не силен я в разработке приложений. (например- "добавь вот такой кусок кода...") |
|||
1
Нуф-Нуф
11.11.11
✎
14:10
|
пригласите специалиста
|
|||
2
slavabatov
11.11.11
✎
14:11
|
Код
Перем мВалютаРегламентированногоУчета Экспорт; // Валюта курс и кратность для пересчета регламентированных сумм Перем мВалютаУпрУчета Экспорт; Перем мКурсУпрУчета Экспорт; Перем мКратностьУпрУчета Экспорт; Перем Дата Экспорт; Перем Склад Экспорт; Функция Печать() Экспорт ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить(); Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда ТоварКод = "Артикул"; Иначе ТоварКод = "Код"; КонецЕсли; //Запрос = Новый Запрос; //Если Склад.ВидСклада = Перечисления.ВидыСкладов.НТТ Тогда //ВалютаПересчета = мВалютаРегламентированногоУчета; //Иначе ВалютаПересчета = мВалютаУпрУчета; //КонецЕсли; //Запрос.УстановитьПараметр("ВидСкладаНТТ", Перечисления.ВидыСкладов.НТТ); ВалютаПечати = мВалютаРегламентированногоУчета; Параметры = МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаПересчета, Дата); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка); Запрос.УстановитьПараметр("Курс", Параметры.Курс); Запрос.УстановитьПараметр("Кратность", Параметры.Кратность); Запрос.УстановитьПараметр("ВидСкладаНТТ", Перечисления.ВидыСкладов.НТТ); Запрос.Текст = "ВЫБРАТЬ | Номер КАК НомерДокумента, | Дата КАК ДатаДокумента, | Дата КАК ДатаНачалаИнвентаризации, | Организация КАК Руководители, | Организация, | Склад.Представление КАК ПредставлениеСклада, | Товары.( | НомерСтроки КАК Номер, | Номенклатура, | Номенклатура.НаименованиеПолное КАК ТоварНаименование, | Номенклатура." + ТоварКод + " КАК ТоварКод, | ЕдиницаИзмерения.Представление КАК ЕдиницаИзмеренияНаименование, | ЕдиницаИзмерения.ЕдиницаПоКлассификатору.Код КАК ЕдиницаИзмеренияКодПоОКЕИ, | Количество КАК ФактКоличество, | КоличествоУчет КАК БухКоличество, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА ЦенаВРознице | ИНАЧЕ Цена * &Курс / &Кратность | КОНЕЦ КАК Цена, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА Количество * ЦенаВРознице | ИНАЧЕ Сумма * &Курс / &Кратность | КОНЕЦ КАК ФактСумма, | ВЫБОР | КОГДА Склад.ВидСклада = &ВидСкладаНТТ ТОГДА КоличествоУчет *ЦенаВРознице | ИНАЧЕ СуммаУчет * &Курс / &Кратность | КОНЕЦ КАК БухСумма, | ХарактеристикаНоменклатуры КАК Характеристика, | СерияНоменклатуры КАК Серия | ) |ИЗ | Документ.ИнвентаризацияТоваровНаСкладе КАК ИнвентаризацияТоваровНаСкладе | |ГДЕ | ИнвентаризацияТоваровНаСкладе.Ссылка = &ТекущийДокумент |УПОРЯДОЧИТЬ ПО | Товары.НомерСтроки"; Шапка = Запрос.Выполнить().Выбрать(); Шапка.Следующий(); ВыборкаСтрокТовары = Шапка.Товары.Выбрать(); ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияТоваровНаСкладе_ИНВ19"; Макет = ПолучитьМакет("ИНВ19а"); // Выводим шапку накладной ОбластьМакета = Макет.ПолучитьОбласть("Шапка"); ОбластьМакета.Параметры.Заполнить(Шапка); СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента); ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации); ОбластьМакета.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО; ОбластьМакета.Параметры.ДатаДокумента = Шапка.ДатаДокумента; ОбластьМакета.Параметры.ДатаНачалаИнвентаризации = Шапка.ДатаНачалаИнвентаризации; ОбластьМакета.Параметры.НомерДокумента = ОбщегоНазначения.ПолучитьНомерНаПечать(СсылкаНаОбъект); Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.ДатаДокумента,); Руководитель = Руководители.Руководитель; Бухгалтер = Руководители.ГлавныйБухгалтер; ТабДокумент.Вывести(ОбластьМакета); ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); СтрокНаСтранице = 19; СтрокШапки = 5; СтрокПодвала = 5; НомерСтраницы = 2; Ном = 0; ИтогоРезультатИзлишекКолво = 0; ИтогоРезультатИзлишекСумма = 0; ИтогоРезультатНедостачаКолво = 0; ИтогоРезультатНедостачаСумма = 0; // Выводим заголовок таблицы ЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы1"); ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.Вывести(ЗаголовокТаблицы); КоличествоСтрок = ВыборкаСтрокТовары.Количество(); Если КоличествоСтрок = 1 Тогда ПереноситьПоследнююСтроку = 0; Иначе ЦелыхСтраницСПодвалом = Цел((СтрокШапки + КоличествоСтрок + СтрокПодвала) / СтрокНаСтранице); ЦелыхСтраницБезПодвала = Цел((СтрокШапки + КоличествоСтрок - 1) / СтрокНаСтранице); ПереноситьПоследнююСтроку = ЦелыхСтраницСПодвалом - ЦелыхСтраницБезПодвала; КонецЕсли; // Выводим многострочную часть документа ВыборкаСтрокТовары = Шапка.Товары.Выбрать(); ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы1"); Пока ВыборкаСтрокТовары.Следующий() Цикл Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное); Продолжить; КонецЕсли; //Начинаем новую страницу, если предыдущая строка была последней на странице //или пора переносить последнюю строку на последнюю страницу с подвалом. ЦелаяСтраница = (СтрокШапки + Ном - 1) / СтрокНаСтранице; Если (ЦелаяСтраница = Цел(ЦелаяСтраница)) или ((ПереноситьПоследнююСтроку = 1) и (Ном = КоличествоСтрок)) Тогда ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоТаблицы1"); ТабДокумент.Вывести(ОбластьИтоговПоСтранице); НомерСтраницы = НомерСтраницы + 1; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы; ТабДокумент.Вывести(ЗаголовокТаблицы); КонецЕсли; ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокТовары); ОбластьМакета.Параметры.ТоварНаименование = ВыборкаСтрокТовары.ТоварНаименование + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары); Разница = 0; РазницаСумм = 0; Разница = ВыборкаСтрокТовары.ФактКоличество - ВыборкаСтрокТовары.БухКоличество; РазницаСумм = ВыборкаСтрокТовары.ФактСумма - ВыборкаСтрокТовары.БухСумма; Если Разница = 0 Тогда Продолжить; КонецЕсли; Если Разница < 0 И РазницаСумм < 0 Тогда ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница; ОбластьМакета.Параметры.РезультатНедостачаСумма = - РазницаСумм; ОбластьМакета.Параметры.РезультатИзлишекКолво = 0; ОбластьМакета.Параметры.РезультатИзлишекСумма = 0; ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница); ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + (- РазницаСумм); ИначеЕсли Разница < 0 И РазницаСумм >= 0 Тогда ОбластьМакета.Параметры.РезультатНедостачаКолво = - Разница; ОбластьМакета.Параметры.РезультатНедостачаСумма = РазницаСумм; ОбластьМакета.Параметры.РезультатИзлишекКолво = 0; ОбластьМакета.Параметры.РезультатИзлишекСумма = 0; ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво + (- Разница); ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма + РазницаСумм; Иначе ОбластьМакета.Параметры.РезультатНедостачаКолво = 0; ОбластьМакета.Параметры.РезультатНедостачаСумма = 0; ОбластьМакета.Параметры.РезультатИзлишекКолво = Разница; ОбластьМакета.Параметры.РезультатИзлишекСумма = РазницаСумм; ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво + Разница; ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма + РазницаСумм; КонецЕсли; ТабДокумент.Вывести(ОбластьМакета); Ном = Ном + 1; КонецЦикла; ОбластьИтоговПоСтранице = Макет.ПолучитьОбласть("ИтогоТаблицы1"); ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекКолво = ИтогоРезультатИзлишекКолво; ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатИзлишекСумма = ИтогоРезультатИзлишекСумма; ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаКолво = ИтогоРезультатНедостачаКолво; ОбластьИтоговПоСтранице.Параметры.ИтогоРезультатНедостачаСумма = ИтогоРезультатНедостачаСумма; ТабДокумент.Вывести(ОбластьИтоговПоСтранице); ОбластьМакета = Макет.ПолучитьОбласть("Подвал"); ОбластьМакета.Параметры.ФИОБухгалтера = Бухгалтер; ОбластьМакета.Параметры.Заполнить(Шапка); ТабДокумент.Вывести(ОбластьМакета); // Зададим параметры макета ТабДокумент.ПолеСверху = 0; ТабДокумент.ПолеСлева = 0; ТабДокумент.ПолеСнизу = 0; ТабДокумент.ПолеСправа = 0; ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; Возврат ТабДокумент; КонецФункции // ПечатьИНВ19() мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета"); мВалютаУпрУчета = глЗначениеПеременной("ВалютаУправленческогоУчета"); |
|||
3
slavabatov
11.11.11
✎
15:02
|
может я решил это и по "колхозному" без запросов получения данных или внешней обработкой заполнения, но результат по первому вопросу получил путем добавления параметров
код ОбластьМакета.Параметры.РезультатИзлишекКолво2 = ОбластьМакета.Параметры.РезультатНедостачаКолво; ОбластьМакета.Параметры.РезультатИзлишекСумма2 = ОбластьМакета.Параметры.РезультатИзлишекСумма; ОбластьМакета.Параметры.РезультатНедостачаКолво2 = ОбластьМакета.Параметры.РезультатНедостачаКолво; ОбластьМакета.Параметры.РезультатНедостачаСумма2 = ОбластьМакета.Параметры.РезультатНедостачаСумма; ИтогоРезультатИзлишекКолво2 = ИтогоРезультатИзлишекКолво; ИтогоРезультатИзлишекСумма2 = ИтогоРезультатИзлишекСумма; ИтогоРезультатНедостачаКолво2 = ИтогоРезультатНедостачаКолво; ИтогоРезультатНедостачаСумма2 = ИтогоРезультатНедостачаСумма; ТабДокумент.Вывести(ОбластьМакета); Ном = Ном + 1; КонецЦикла; |
|||
4
slavabatov
11.11.11
✎
15:05
|
Ну и соответственно в макете в Параметрах установил новые значения.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |