Имя: Пароль:
1C
1С v8
Как добавить нумерацию в макете внешней печатной формы.
,
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) Да, действительно нужно было переместить присвоение значения, спасибо!
Закон Брукера: Даже маленькая практика стоит большой теории.