Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/35: Рейтинг темы: голосов - 35, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 18.01.2024
Сообщений: 31
1C 8.x

Создание печатных форм в 1С

18.01.2024, 11:29. Показов 9278. Ответов 63
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, уважаемые профессионалы 1С. Можете мне помочь в решении двух вопросов. Хочу разобраться, я новичок в 1С.
Создаю на форме кнопку, которая при нажатии открывает выбор сортировки при печати. Далее после нажатия на эту кнопку должна отработать команда по выводу Макета на печать, но в итоге получаю пустую таблицу. Есть еще один момент, который я не понимаю как должен выглядеть в коде. Нужно встроенную функцию ДлинаСтроки заменить на альтернативную. Мысли есть сделать через
"Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(0)) = Наименование Тогда
0 Иначе
Выбор ..."
Но длина наименования 100 символов. Хотела сделать через рекурсию, где базовый случай это если длина достигает 0, то возвращается 0 индекс, иначе из Длина - 1, но куда вставлять эту функцию и как ее связать с запросом, я не придумала.

Помогите, пожалуйста, последовательно разобраться в теме.

Вот код, который отражается на форме

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
&НаКлиенте
Процедура Печать(Команда)
    
    СписокВыбора = Новый СписокЗначений; 
    СписокВыбора.Добавить("По длине наименования"); 
    СписокВыбора.Добавить("По наименованию товара");
    СписокВыбора.Добавить("По цене");
    
    ОписаниеОповещенияОЗакрытии = Новый ОписаниеОповещения("ПечатьПослеВыбораСортировки", ЭтотОбъект);
    
    ПоказатьВыборИзСписка(ОписаниеОповещенияОЗакрытии, СписокВыбора);
        
КонецПроцедуры                                     
 
&НаКлиенте
Процедура ПечатьПослеВыбораСортировки(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
    
    Если ВыбранныйЭлемент = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Показать();
    
    ПечатьНаСервере(ТабДок, Объект.Ссылка, ВыбранныйЭлемент.Значение);
    
КонецПроцедуры
 
&НаСервере
Процедура ПечатьНаСервере(ТабДок, ПараметрКоманды, ВариантСортировки) Экспорт
    
    Документы.Клиент.Печать(ТабДок, ПараметрКоманды, ВариантСортировки);
    
КонецПроцедуры
Код в модуле Менеджера

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
Процедура Печать(ТабДок, Ссылка, ВариантСортировки) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
    Макет = Документы.Клиент.ПолучитьМакет("ВариантСортировки");  
    Запрос = Новый Запрос; 
    Если ВариантСортировки = "По длине наименования" Тогда
        Запрос.Текст =
        "ВЫБРАТЬ
        |   Покупатель.Клиент КАК Клиент,
        |   Покупатель.Дата КАК Дата,
        |   Покупатель.Товары.(
        |       Товар КАК Товар,
        |       Цена КАК Цена,
        |       Количество КАК Количество,
        |       Сумма КАК Сумма
        |   ) КАК Товары,
        |   Покупатель.Номер КАК Номер
        |ИЗ
        |   Документ.Клиент КАК Покупатель
        |ГДЕ
        |   Покупатель.Ссылка В (&Ссылка)
        |
        |УПОРЯДОЧИТЬ ПО
        |   ДинаСтроки(Товар)"; 
    ИначеЕсли ВариантСортировки = "По цене" Тогда   
        Запрос.Текст =
        "ВЫБРАТЬ
        |   Покупатель.Клиент КАК Клиент,
        |   Покупатель.Дата КАК Дата,
        |   Покупатель.Товары.(
        |       Товар КАК Товар,
        |       Цена КАК Цена,
        |       Количество КАК Количество,
        |       Сумма КАК Сумма
        |   ) КАК Товары,
        |   Покупатель.Номер КАК Номер
        |ИЗ
        |   Документ.Клиент КАК Покупатель
        |ГДЕ
        |   Покупатель.Ссылка В (&Ссылка)
        |
        |УПОРЯДОЧИТЬ ПО
        |   Цена ВОЗР";         
    ИначеЕсли ВариантСортировки = "По наименованию товара" Тогда   
        Запрос.Текст =
        "ВЫБРАТЬ
        |   Покупатель.Клиент КАК Клиент,
        |   Покупатель.Дата КАК Дата,
        |   Покупатель.Товары.(
        |       Товар КАК Товар,
        |       Цена КАК Цена,
        |       Количество КАК Количество,
        |       Сумма КАК Сумма
        |   ) КАК Товары,
        |   Покупатель.Номер КАК Номер
        |ИЗ
        |   Документ.Клиент КАК Покупатель
        |ГДЕ
        |   Покупатель.Ссылка В (&Ссылка)
        |
        |УПОРЯДОЧИТЬ ПО
        |   Товар ВОЗР";  
    Иначе
        Запрос.Текст =
        "ВЫБРАТЬ
        |   Покупатель.Клиент КАК Клиент,
        |   Покупатель.Дата КАК Дата,
        |   Покупатель.Товары.(
        |       Товар КАК Товар,
        |       Цена КАК Цена,
        |       Количество КАК Количество,
        |       Сумма КАК Сумма
        |   ) КАК Товары,
        |   Покупатель.Номер КАК Номер
        |ИЗ
        |   Документ.Клиент КАК Покупатель
        |ГДЕ
        |   Покупатель.Ссылка В (&Ссылка)
        |
        |УПОРЯДОЧИТЬ ПО
        |   Товар УБЫВ";  
    КонецЕсли;
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);    
    Выборка = Запрос.Выполнить().Выбрать(); 
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТоварыШапка = Макет.ПолучитьОбласть("ТоварыШапка");
    ОбластьТовары = Макет.ПолучитьОбласть("Товары");
    Подвал = Макет.ПолучитьОбласть("Подвал");
 
    ТабДок.Очистить();
 
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
 
        ТабДок.Вывести(ОбластьЗаголовок);
 
        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка, Выборка.Уровень());
 
        ТабДок.Вывести(ОбластьТоварыШапка);
        ВыборкаТовары = Выборка.Товары.Выбрать();
        Пока ВыборкаТовары.Следующий() Цикл
            ОбластьТовары.Параметры.Заполнить(ВыборкаТовары);
            ТабДок.Вывести(ОбластьТовары, ВыборкаТовары.Уровень());
        КонецЦикла;
 
        Подвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Подвал);
 
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.01.2024, 11:29
Ответы с готовыми решениями:

Создание новых печатных форм или редактирование старых 8.2
Доброго времени суток, уважаемые дамы и господа! Пишу вам, так как в данном вопросе плох чуть менее, чем полностью. Мой знакомый попросил...

Макеты печатных форм
Добрый день!Не могли бы Вы посоветовать как мне лучше поступить? В программе Управление Торговлей 11 в пользовательском режиме в...

Параметры печатных форм
можно ли передать параметр их внешней обработки во внешнюю печатную форму. Если да, то как? если конкретней, то в БГУ из обработки...

63
0 / 0 / 0
Регистрация: 12.07.2024
Сообщений: 3
12.07.2024, 16:33
Студворк — интернет-сервис помощи студентам
Юлия Родина, Я конечно понимаю, что тема давно закрыта и изъезжена за 10 лет. И почти все нынешние стажеры через неё проходят, но в итоге какой код оказался? Я код переписал, вроде всё проверил.Ошибок не выдает ни при исполнении в отладке ни при сохранении в конфигураторе. Но при печати накладной не даёт выбор сортировки. Может всёже кто подскажет как это исправить и в какой момент должен появляться данный выбор.
Модуль менеджера
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Процедура Печать(ТабДок, Ссылка, ВариантСортировки) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
    Макет = Документы.ДокументКлиент.ПолучитьМакет("Печать");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ДокументКлиент.Ссылка.Дата КАК Дата,
    |   ДокументКлиент.Ссылка.Клиент КАК Клиент,
    |   ДокументКлиент.Ссылка.Номер КАК Номер,
    |   ДокументКлиент.Товар.(
    |       НомерСтроки,
    |       Товар,
    |       Цена,
    |       Количество,
    |       Сумма
    |   )
    |ИЗ
    |   Документ.ДокументКлиент КАК ДокументКлиент
    |ГДЕ
    |   ДокументКлиент.Ссылка В (&Ссылка)
    |УПОРЯДОЧИТЬ ПО
    |   ДокументКлиент.Товар УБЫВ"; 
    
    Если ВариантСортировки = "ПО Длине наименования" Тогда    
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "УПОРЯДОЧИТЬ ПО", "УПОРЯДОЧИТЬ ПО Стр.Длина(Товар.Товар) ВОЗР")        
    ИначеЕсли ВариантСортировки = "ПО Цене" Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "УПОРЯДОЧИТЬ ПО", "УПОРЯДОЧИТЬ ПО Цена ВОЗР")           
    ИначеЕсли ВариантСортировки = "ПО Наименованию товара" Тогда  
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "УПОРЯДОЧИТЬ ПО", "УПОРЯДОЧИТЬ ПО Товар.Товар ВОЗР")
    КонецЕсли; 
        
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
 
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТоварШапка = Макет.ПолучитьОбласть("ТоварШапка");
    ОбластьТовар = Макет.ПолучитьОбласть("Товар");
    ТабДок.Очистить();
 
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
 
        ТабДок.Вывести(ОбластьЗаголовок);
 
        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка, Выборка.Уровень());
 
        ТабДок.Вывести(ОбластьТоварШапка);
        ВыборкаТовар = Выборка.Товар.Выбрать();
        Пока ВыборкаТовар.Следующий() Цикл
            ОбластьТовар.Параметры.Заполнить(ВыборкаТовар);
            ТабДок.Вывести(ОбластьТовар, ВыборкаТовар.Уровень());
        КонецЦикла;
 
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
КонецПроцедуры
Модуль объекта. ДокументКлиент

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
 
    // регистр Продажи 
    Движения.Продажи.Записывать = Истина;
    Для Каждого ТекСтрокаТовар Из Товар Цикл
        Движение = Движения.Продажи.Добавить();
        Движение.Период = Дата;
        Движение.Товары = ТекСтрокаТовар.Товар;
        Движение.Клиент = Клиент;
        Движение.Количество = ТекСтрокаТовар.Количество;
        Движение.Сумма = ТекСтрокаТовар.Сумма;
    КонецЦикла;
    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Модуль Команды Печать


1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды, ВариантСортировки)
    //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
    ТабДок = Новый ТабличныйДокумент;
    Печать(ТабДок, ПараметрКоманды, ВариантСортировки);
 
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.Показать();
    //}}
    
КонецПроцедуры
 
&НаСервере
Процедура Печать(ТабДок, ПараметрКоманды, ВариантСортировки)
    Документы.ДокументКлиент.Печать(ТабДок, ПараметрКоманды, ВариантСортировки);
КонецПроцедуры
Помогите. Как пришить сортировку в форме печати или при нажатии на кнопку печать выбор сортировки?
Как и все новенькие ни гугу в 1С, но хочу учиться с учителем... а тесты всё теже что в 2011 что в 2024.
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4771 / 967 / 269
Регистрация: 22.04.2013
Сообщений: 6,648
Записей в блоге: 1
12.07.2024, 17:03
Цитата Сообщение от КипелЧайНик Посмотреть сообщение
Но при печати накладной не даёт выбор сортировки
а как у вас задумано, чтобы он выдавал? кто ему что сказал "покажи выбор"? я не понимаю пока
2. было вот так:
Цитата Сообщение от КипелЧайНик Посмотреть сообщение
|УПОРЯДОЧИТЬ ПО
| ДокументКлиент.Товар УБЫВ";
станет как?
Цитата Сообщение от КипелЧайНик Посмотреть сообщение
СтрЗаменить(Запрос.Текст, "УПОРЯДОЧИТЬ ПО", "УПОРЯДОЧИТЬ ПО Стр.Длина(Товар.Товар) ВОЗР")
УПОРЯДОЧИТЬ ПО Стр.Длина(Товар.Товар)
| ДокументКлиент.Товар УБЫВ

не думаю, что это верно

Стр.Длина точно есть такая штука в языке запросов? не помню.

3.
Цитата Сообщение от КипелЧайНик Посмотреть сообщение
Если ВариантСортировки = "ПО Длине наименования" Тогда
ВариантСортировки это у вас что? поле на форме? если так, то возможно должно зайти в если. но мне кажется, что это неизвестно что
0
0 / 0 / 0
Регистрация: 12.07.2024
Сообщений: 3
12.07.2024, 19:48
Цитата Сообщение от Yulunga Посмотреть сообщение
а как у вас задумано, чтобы он выдавал? кто ему что сказал "покажи выбор"? я не понимаю пока
Вот собственно за этим и пришел. Как ему сказать покажи выбор и чтобы этот выбор сработал

Добавлено через 1 минуту
Цитата Сообщение от Yulunga Посмотреть сообщение
Стр.Длина точно есть такая штука в языке запросов? не помню.
В начале этой темы на первой стр. Там про это было написано и вместо ДлинаСтроки использовал СтрДлина. Это учебная версия... пробую по разному.

Добавлено через 2 минуты
Цитата Сообщение от Yulunga Посмотреть сообщение
ВариантСортировки это у вас что? поле на форме? если так, то возможно должно зайти в если. но мне кажется, что это неизвестно что
Я тоже думаю. Логически вариант сортировки должен выпадать когда нажимаем на кнопку печать. Но этого не происходит потому что "никто не сказал этой кнопке что она должна так сделать". Вот и вопрос: Как ей это сказать?...

Добавлено через 46 секунд
Интересно есть у кого-нибудь готовый код по этой теме полностью от и до. Именно методами какие в задании это сделать новичку...
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4771 / 967 / 269
Регистрация: 22.04.2013
Сообщений: 6,648
Записей в блоге: 1
12.07.2024, 21:59
создаёте поле на форме. называете как-то
пробуете туда написать ваши слова
тогда может сработать.
1C
1
2
3
4
5
6
7
...
ГДЕ
    |   ДокументКлиент.Ссылка В (&Ссылка)
    | <<сортировка>>";
Если моеполе = "42" тогда
запрос.текст = стрзаменить(запрос.текст, "<<сортировка>>", "УПОРЯДОЧИТЬ ПО Цена ВОЗР");
конецесли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2024, 21:59

Фолдер (папка) в списке печатных форм
Доброе утро. для одного документа создано огромное количество печатных форм (примерно 20) теперь ещё хотят добавить 8 поэтому...

Перенос печатных форм с КА в УТ 11
Люди в общем вопрос такой, у нас на предприятии стоит 8.2 и КА. И в нашей КА есть несколько макетов которые надо бы забрать и прицепить их...

Отказ печатных форм
Если глПолучитьПолномочие&lt;&lt;?&gt;&gt;(&quot;РазрешитьРедактированиеТаблиц&quot;) = 0 Тогда {C:\Путь к базе\EXTFORMS\PRNFORMS\SALE.ERT(94)}: Функция не...

Удаление ячеек печатных форм
Ребят есть такой вопрос, как мне программно удалить ячейки. Т.е. допустим есть счет, и поля сумма без скидки и скидка, каким методом их...

Формируется несколько печатных форм
Здравствуйте. Для ЗУП 3.1 создал внешнюю обработку с шестью печатными формами. Подключил их к документу: &quot;Договоры (работы,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
64
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru