|
Как добавить нумерацию в макете внешней печатной формы. | ☑ | ||
---|---|---|---|---|
0
Yunniy_Proger
20.03.23
✎
12:43
|
Добрый день, есть код для формирования печатной формы документа, в макет нужно добавить нумерацию по артиклу, в макете параметр нарисовал, а вот как отобразить в коде не знаю.Я не программист, может кто знающий подсказать, как отобразить в коде.
Запрос = Новый Запрос; Запрос.Текст = ПолучитьТекстЗапросаЗаданияНаСборку(); Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов); Запрос.УстановитьПараметр("ВидЦены", ГИГ_ОбщегоНазначенияПовтИсп.ПолучитьЗначениеКонстанты("ВидыЦен_ЦенаРРЦ")); Результат = Запрос.ВыполнитьПакет(); ДанныеШапки = Результат[3].Выгрузить(); ДополнительныеОрдера = Результат[5].Выгрузить(); ТаблДанныхКолонки = Результат[4].Выгрузить(); ТЗНоменклатуры = ТаблДанныхКолонки.Скопировать(); ТЗНоменклатуры.свернуть("Номенклатура"); МассивНоменклатуры = ТЗНоменклатуры.ВыгрузитьКолонку("Номенклатура"); ТаблДанныхКолонки.Очистить(); ДанныеШКНоменклатуры = ПолучитьШКПоНоменклатуреДокументов(МассивНоменклатуры); ВалютаДенежныхСредств = ВалютаПоКоду("643"); Для Каждого СтрокаМасива из МассивДокументов Цикл МассивДополнительныхОрдеров = ДополнительныеОрдера.НайтиСтроки(Новый Структура("Ордер", СтрокаМасива)); Если МассивДополнительныхОрдеров.Количество() = 0 Тогда Продолжить //Что-то пошло не так, пропускаем документ КонецЕсли; Если МассивДополнительныхОрдеров[0].Статус = Перечисления.СтатусыРасходныхОрдеров.Подготовлено Тогда СтатусИзменен = ИзменитьСтатусОрдера(МассивДополнительныхОрдеров[0].Ордер); Если НЕ СтатусИзменен Тогда Продолжить КонецЕсли; КонецЕсли; МассивДокументовРаспоряжений = ДанныеШапки.НайтиСтроки(Новый Структура("Ссылка", СтрокаМасива)); Если МассивДокументовРаспоряжений.Количество() > 0 Тогда СтруктураПараметровЗаполнения = Новый Структура; МассивПредставленийРаспроряжений = Новый Массив; МассивКомментариев = Новый Массив; Для каждого СтрокаРаспоряжений Из МассивДокументовРаспоряжений Цикл ПредставлениеРаспоряжения = СформироватьПредставлениеДокумента(СтрокаРаспоряжений.Распоряжение, СтрокаРаспоряжений.РаспоряжениеНомер, СтрокаРаспоряжений.РаспоряжениеДата); МассивПредставленийРаспроряжений.Добавить(ПредставлениеРаспоряжения); Если ЗначениеЗаполнено(СокрЛП(СтрокаРаспоряжений.РаспоряжениеКомментарий)) Тогда МассивКомментариев.Добавить(СокрЛП(СтрокаРаспоряжений.РаспоряжениеКомментарий)) КонецЕсли; КонецЦикла; ПредставлениеЗадания = СформироватьПредставлениеДокумента(СтрокаРаспоряжений.Ссылка, СтрокаРаспоряжений.Номер, СтрокаРаспоряжений.Дата); СтруктураПараметровЗаполнения.Вставить("Продавец", СтрокаРаспоряжений.Продавец); СтруктураПараметровЗаполнения.Вставить("Покупатель", СтрокаРаспоряжений.Покупатель); СтруктураПараметровЗаполнения.Вставить("ТекстЗаголовка", ПредставлениеЗадания); СтруктураПараметровЗаполнения.Вставить("Распоряжение", СтрСоединить(МассивПредставленийРаспроряжений, "; ")); СтруктураПараметровЗаполнения.Вставить("Комментарий", СтрСоединить(МассивКомментариев, "; ")); СтруктураПараметровЗаполнения.Вставить("Склад", СтрокаРаспоряжений.Склад); Если ТипЗнч(СтрокаРаспоряжений.Распоряжение) = Тип("ДокументСсылка.ЗаказКлиента") ИЛИ ТипЗнч(СтрокаРаспоряжений.Распоряжение) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда //Титульный лист ОбластьМакета = Макет.ПолучитьОбласть("ОбластьТитульныйЛист"); ОбластьМакета.Параметры.Заполнить(СтруктураПараметровЗаполнения); ТабличныйДокумент.Вывести(ОбластьМакета); ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; // шапка табличного документа ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШапка"); ОбластьМакета.Параметры.Заполнить(СтруктураПараметровЗаполнения); ТабличныйДокумент.Вывести(ОбластьМакета); Если ЗначениеЗаполнено(МассивДополнительныхОрдеров[0].ДополнительныйОрдер) Тогда ПроверитьИВывестиСвязанныеОрдера(МассивДополнительныхОрдеров, ДополнительныеОрдера, ТабличныйДокумент, Макет) КонецЕсли; ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы"); ОбластьМакетаПовторятьПриПечати = Макет.ПолучитьОбласть("ОбластьШапкаТаблицы"); ТабличныйДокумент.Вывести(ОбластьМакета); ОбластьКолонтитул = Макет.ПолучитьОбласть("ОбластьКолонтитул"); ОбластьПустая = Макет.ПолучитьОбласть("ОбластьПустая"); К_НомерСтраницы = 1; ОбластьМакетаИтоги = Макет.ПолучитьОбласть("ОбластьИтог"); ИтогоСумма = 0; ИтогоКоличество = 0; // выборка по строкам распоряжения ДанныеПечати = Результат[4].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Ссылка"); Пока ДанныеПечати.Следующий() Цикл Если ДанныеПечати.Ссылка <> СтрокаМасива Тогда Продолжить; КонецЕсли; ВыборкаПоИерархия = ДанныеПечати.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоИерархия.Следующий() Цикл ОбластьМакета = Макет.ПолучитьОбласть("ОбластьСтрокаГруппировки"); ОбластьМакета.Параметры.Заполнить(ВыборкаПоИерархия); // вывод области колонтитула МассивВыводимыхОбластей = Новый Массив; МассивВыводимыхОбластей.Добавить(ОбластьМакета); МассивВыводимыхОбластей.Добавить(ОбластьМакетаИтоги); МассивВыводимыхОбластей.Добавить(ОбластьКолонтитул); Если НЕ ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, МассивВыводимыхОбластей) Тогда ОбластьКолонтитул.Параметры.КолонтитулДата = "№ "+СтрокаРаспоряжений.Номер+" от "+Формат(СтрокаРаспоряжений.Дата,"ДФ=dd.MM.yyyy" ); ОбластьКолонтитул.Параметры.КолонтитулТекст = "Стр. "+К_НомерСтраницы; ТабличныйДокумент.Вывести(ОбластьКолонтитул); ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); К_НомерСтраницы = К_НомерСтраницы +1; ТабличныйДокумент.Вывести(ОбластьМакетаПовторятьПриПечати); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьМакета); ВыборкаПрямая = ВыборкаПоИерархия.Выбрать(); ТЗДанныеСтрок = ТаблДанныхКолонки.Скопировать(); ТЗДанныеСтрок.Колонки.Добавить("АртикулЧислом", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Неотрицательный))); Пока ВыборкаПрямая.Следующий() Цикл СтрокаТЗ = ТЗДанныеСтрок.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТЗ, ВыборкаПрямая); Попытка СтрокаТЗ.АртикулЧислом = Число(СокрЛП(СтрокаТЗ.Артикул)); Исключение КонецПопытки; КонецЦикла; ТЗДанныеСтрок.Сортировать("АртикулЧислом ВОЗР"); Для Каждого СтрокаТЗ Из ТЗДанныеСтрок цикл ОбластьМакета = Макет.ПолучитьОбласть("ОбластьСтрока"); ОбластьМакета.Параметры.Заполнить(СтрокаТЗ); СтрокаШК = ""; МассивШКСтроки = ДанныеШКНоменклатуры.НайтиСтроки(Новый Структура("Номенклатура, Характеристика", СтрокаТЗ.Номенклатура, СтрокаТЗ.Характеристика)); НомСтрокиШК = 1; Для Каждого СтрокаМассива Из МассивШКСтроки Цикл СтрокаШК = СтрокаШК + ""+ СтрокаМассива.ШтрихКод + ?(НомСтрокиШК = МассивШКСтроки.Количество(),"", ","); НомСтрокиШК = НомСтрокиШК + 1; КонецЦикла; Если ЗначениеЗаполнено(СтрокаШК) Тогда ОбластьМакета.Параметры.НаименованиеДляПечати = СтрокаТЗ.НаименованиеДляПечати+" ("+СтрокаШК+")"; КонецЕсли; Если ЗначениеЗаполнено(СтрокаШК) Тогда ОбластьМакета.Параметры.НаименованиеДляПечати = СтрокаТЗ.НаименованиеДляПечати+" ("+СтрокаШК+")"; КонецЕсли; // вывод области колонтитула МассивВыводимыхОбластей = Новый Массив; МассивВыводимыхОбластей.Добавить(ОбластьМакета); МассивВыводимыхОбластей.Добавить(ОбластьМакетаИтоги); МассивВыводимыхОбластей.Добавить(ОбластьКолонтитул); Если НЕ ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, МассивВыводимыхОбластей) Тогда ОбластьКолонтитул.Параметры.КолонтитулДата = "№ "+СтрокаРаспоряжений.Номер+" от "+Формат(СтрокаРаспоряжений.Дата,"ДФ=dd.MM.yyyy" ); ОбластьКолонтитул.Параметры.КолонтитулТекст = "Стр. "+К_НомерСтраницы; ТабличныйДокумент.Вывести(ОбластьКолонтитул); ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); К_НомерСтраницы = К_НомерСтраницы +1; ТабличныйДокумент.Вывести(ОбластьМакетаПовторятьПриПечати); КонецЕсли; ТабличныйДокумент.Вывести(ОбластьМакета); ИтогоКоличество = ИтогоКоличество + СтрокаТЗ.Количество; КонецЦикла; КонецЦикла; КонецЦикла; КонецЕсли; ОбластьМакетаИтоги.Параметры.Количество = ИтогоКоличество; ТабличныйДокумент.Вывести(ОбластьМакетаИтоги); Для а = 1 по 150 Цикл МассивВыводимыхОбластей = Новый Массив; МассивВыводимыхОбластей.Добавить(ОбластьПустая); МассивВыводимыхОбластей.Добавить(ОбластьКолонтитул); Если НЕ ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, МассивВыводимыхОбластей) Тогда ОбластьКолонтитул.Параметры.КолонтитулДата = "№ "+СтрокаРаспоряжений.Номер+" от "+Формат(СтрокаРаспоряжений.Дата,"ДФ=dd.MM.yyyy" ); ОбластьКолонтитул.Параметры.КолонтитулТекст = "Стр. "+К_НомерСтраницы; ТабличныйДокумент.Вывести(ОбластьКолонтитул); ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); Прервать; Иначе ТабличныйДокумент.Вывести(ОбластьПустая); КонецЕсли; КонецЦикла; КонецЦикла; #КонецОбласти КонецЕсли; ТабличныйДокумент.АвтоМасштаб = Истина; ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; // Поля ТабличныйДокумент.ПолеСверху = 5; ТабличныйДокумент.ПолеСнизу = 5; ТабличныйДокумент.ПолеСлева = 5; ТабличныйДокумент.ПолеСправа = 5; // Прочие параметры ТабличныйДокумент.ОтображатьЗаголовки = Ложь; ТабличныйДокумент.ОтображатьСетку = Ложь; УстановитьПривилегированныйРежим(Ложь); Возврат ТабличныйДокумент; КонецФункции |
|||
1
Yunniy_Proger
20.03.23
✎
12:44
|
Код не мой, делал программист и уволился, а задачку срочно над решить.
|
|||
2
vicof
20.03.23
✎
12:45
|
Нанять программиста и заплатить не предлагать?
|
|||
3
Yunniy_Proger
20.03.23
✎
12:51
|
(2) Спасибо, но насколько я думаю, там пару строчек , если кто то делал, то сможет подсказать.
|
|||
4
Волшебник
20.03.23
✎
12:53
|
(0) У вас ник "Прогер", а Вы пишете "Я не программист". Как так-то?!
|
|||
5
p-soft
20.03.23
✎
12:54
|
(3) "а мой руководитель вообще думает, что там все уже есть и надо только пару кнопок нажать" - все так обычно и бывает)
|
|||
6
НикДляЗапросов
20.03.23
✎
12:55
|
АртикулЧислом назови параметр в макете
|
|||
7
Yunniy_Proger
20.03.23
✎
12:56
|
(4) Первое в голову пришло, только зарегистрировался.
|
|||
8
Yunniy_Proger
20.03.23
✎
12:57
|
(6) <Артикул>
|
|||
9
Yunniy_Proger
20.03.23
✎
12:58
|
(6) И все?)
|
|||
10
НикДляЗапросов
20.03.23
✎
12:58
|
(9) Нет, но станет понятнее
|
|||
11
НикДляЗапросов
20.03.23
✎
12:59
|
"в макет нужно добавить нумерацию по артиклу" не понятно что это значит
|
|||
12
yurikmellon2
20.03.23
✎
13:00
|
я один не понял что такое "в макет нужно добавить нумерацию по артиклу"?
|
|||
13
yurikmellon2
20.03.23
✎
13:00
|
(11) а, не, не один)
|
|||
14
Yunniy_Proger
20.03.23
✎
13:04
|
(13) Немного не правильно выразился, есть колонка артикул , рядом с этой колонкой , должна быть нумерация.
|
|||
15
Новый1сник2
20.03.23
✎
13:07
|
(14) создай переменную мСчетчик =0; и в цикле перед выводом строки мСчетчик = мСчетчик + 1; в таблице рядом с артикулом, добавь этот параметр. если я правильно понял
|
|||
16
Новый1сник2
20.03.23
✎
13:07
|
мСчетчик =0; - перед циклом
|
|||
17
Yunniy_Proger
20.03.23
✎
13:08
|
(16) Супер , так я и думал, проблема в том, что я не знаю , в каком именно цикле из приведенного кода это написать.
|
|||
18
yurikmellon2
20.03.23
✎
13:10
|
(17)
Параметр в макете должен называться "НомерПП" ТЗДанныеСтрок.Колонки.Добавить("АртикулЧислом", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3, ДопустимыйЗнак.Неотрицательный))); // ТЗДанныеСтрок.Колонки.Добавить("НомерПП", Новый ОписаниеТипов("Число")); н = 1; // Пока ВыборкаПрямая.Следующий() Цикл СтрокаТЗ = ТЗДанныеСтрок.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТЗ, ВыборкаПрямая); Попытка СтрокаТЗ.АртикулЧислом = Число(СокрЛП(СтрокаТЗ.Артикул)); Исключение КонецПопытки; // СтрокаТЗ.НомерПП = н; н = н + 1; // КонецЦикла; |
|||
19
Новый1сник2
20.03.23
✎
13:13
|
(18) можно и так
|
|||
20
Yunniy_Proger
20.03.23
✎
13:32
|
(18) Спасибо, но он номерует неверно, начал вообще с 19 , дошел до 27 и начал с единицы.
|
|||
21
Yunniy_Proger
20.03.23
✎
13:33
|
(20) Потом вообще со ста начинает
|
|||
22
Yunniy_Proger
20.03.23
✎
13:46
|
(21) Он отдельно считает по каждой номенклатуре , например с 1 по 6 посчитал по номенклатуре "Молоко" , затем идет номенклатура "Картошка" и он заново начинает с единицы. Есть возможность не привязываться к номенклатуре?
|
|||
23
Новый1сник2
20.03.23
✎
13:47
|
(21) попробуй тут
НомерПП =0; Для Каждого СтрокаТЗ Из ТЗДанныеСтрок цикл НомерПП = НомерПП +1; ОбластьМакета = Макет.ПолучитьОбласть("ОбластьСтрока"); ОбластьМакета.Параметры.Заполнить(СтрокаТЗ); ОбластьМакета.Параметры.НомерПП = НомерПП; |
|||
24
Yunniy_Proger
21.03.23
✎
05:01
|
(23) Спасибо большое вам. Начинается с единицы, но все равно , когда начинается новая номенклатура , снова сбрасывает счетчик до единицы. Но и так сойдет. Еще раз спасибо!
|
|||
25
Новый1сник2
21.03.23
✎
09:53
|
(24) можно переменную НомерПП =0; попробовать перенести выше, перед
ВыборкаПоИерархия = ДанныеПечати.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); пока ВыборкаПоИерархия.Следующий() Цикл |
|||
26
evgeniy_n
21.03.23
✎
10:02
|
Если нумерация должна быть единой, строку НомерПП =0; надо перенести в начало, до всех циклов.
Если по документам должна быть своя нумерация, то эту строку надо разместить после начала цикла по документам. |
|||
27
Yunniy_Proger
22.03.23
✎
05:12
|
(25) Вы лучший!) Спасибо , все работает отлично!
|
|||
28
Yunniy_Proger
22.03.23
✎
05:13
|
(26) Да, действительно нужно было переместить присвоение значения, спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |