Имя: Пароль:
1C
1С v8
Несколько табличных документов, как показать на клиенте?
0 Death_eye
 
17.10.25
09:08
Помогите, пожалуйста, с алгоритмом. Есть договор, в нем 20 предприятий. Нужно сформировать по каждому табличный документ с оказанными услугами и показать все пользователю.
В обычных формах ТабДокумент.Показать() работало. В УФ работает только на клиенте.
Заранее не известно по какому предприятию данные есть.
Т.е. если в запросе выбрались данные только по 3м предприятиям, то сформировать только 3 табличных документа.
1 СвинТуз
 
17.10.25
09:11
"ТабДокумент.Показать()"
уже  не кошерно.

Формируйте на сервере, возвращайте на клиент массив табличных документов.
2 maxab72
 
17.10.25
09:13
варианты:
1. сформировать все в одном табличном документе с разбивкой по страницам.
2. програмно сформировать на форме "закладки" по каждому предприятию и на них вывести табличные документы по соответствующим предприятиям.
3 Мультук
 
гуру
17.10.25
09:13
(0)

БСП не предлагать, верно ?

&НаСервере 
Функция СформироватьПулТабДокументов()
    мас = Новый массив;

    //
    мас.Добавить(Табдок); 

    Возврат мас;
КонецФункции

&НаКлиенте
Процедура ПоказатьПулТабДокументов()
    мас = СформироватьПулТабДокументов();
    
    Для каждого табДок из мас Цикл
         табДок.Показать();
    конецЦикла;

КонецПроцедуры


P.S.
TO "Маленький вопросик"
Снова 15 лет. Походу где-то что-то как-то произошло.
4 Ёпрст
 
гуру
17.10.25
09:18
(3) просто кто-то открывает для себя волшебный мир "неуправляемых форм".
5 DiMel_77
 
17.10.25
09:59
(3) А для БСП будет что то типа такого:
&НаСервере 
Функция СформироватьПулТабДокументов()
    мас = Новый массив;

    //
    СтруктураПечатнойФормы = Новый Структура("ИдентификаторПечатнойФормы, СинонимМакета, ТабличныйДокумент);
    
    СтруктураПечатнойФормы.Вставить("ИдентификаторПечатнойФормы", ...); // Любая строка идентифицирующая форму
    СтруктураПечатнойФормы.Вставить("СинонимМакета", ...); // Текстовое представление
    СтруктураПечатнойФормы.Вставить("ТабличныйДокумент", ТабДок);

    мас.Добавить(СтруктураПечатнойФормы); 

    Возврат мас;
КонецФункции

&НаКлиенте
Процедура ПоказатьПулТабДокументов()
    
    мас = СформироватьПулТабДокументов();
    
    КоллекцияПечатныхФорм = УправлениеПечатьюКлиент.НоваяКоллекцияПечатныхФорм();
    
    Поля = УправлениеПечатьюКлиентСервер.ИменаПолейКоллекцииПечатныхФорм();

    Для каждого СтрТабДок из мас Цикл
        
        ПечатнаяФорма = Новый Структура(СтрСоединить(Поля, ","));
	
        ПечатнаяФорма.СинонимМакета = СтрТабДок.СинонимМакета;
	ПечатнаяФорма.ИмяФайлаПечатнойФормы = ПечатнаяФорма.СинонимМакета;
	ПечатнаяФорма.ТабличныйДокумент = СтрТабДок.ТабличныйДокумент;

        КоллекцияПечатныхФорм.Добавить(ПечатнаяФорма);

    конецЦикла;

    ДополнительныеПараметры = УправлениеПечатьюКлиент.ПараметрыПечати();
    ДополнительныеПараметры.ЗаголовокФормы = Заголовок;
    ДополнительныеПараметры.ВладелецФормы = ЭтотОбъект;
	
    УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, , ДополнительныеПараметры);


КонецПроцедуры
6 Маленький Вопросик
 
17.10.25
09:55
(3) прям аж глаз «режет» от этих «специалистов»… видно боятся попасть под сокращение
7 Death_eye
 
17.10.25
09:47
(5) спасибо
8 DiMel_77
 
17.10.25
09:55
(7) Поправил код - так должно работать.
9 Garykom
 
гуру
17.10.25
09:56
(7) Какой смысл говорить спасибо за по сути нерабочий (в твоем конкретном случае) код?
Это просто пример, который совсем не обязателен

Ибо хз какая у тебя конфа, есть ли там БСП и какой версии
Лучше подучи теорию

Разберись что такое клиент и сервер
Не вижу ничего сложного с клиента сделать один или нужное число вызовов сервера, сформировать нужные ТабДок и вернуть их на клиента в реквизиты формы например
Можно как СписокЗначений из ТабличныйДокумент или еще как, да хоть во временное хранилище

А затем отображать их как надо пользователю аля (2)
10 Маленький Вопросик
 
17.10.25
10:26
(5) какая-то невообразимая бессмыслица
11 Garykom
 
гуру
17.10.25
10:29
(10) Не мешай ботам общаться друг с другом ))
12 Маленький Вопросик
 
17.10.25
10:30
(0) https://infostart.ru/1c/reports/2315077/ - вот это «в цикле запусти»
13 DiMel_77
 
17.10.25
10:30
(10) Ну ка интересно а в чем бессмыслица? Поясните?
14 Garykom
 
гуру
17.10.25
10:31
(13) Сложить несколько ТабДок в один можно и без БСП
15 DiMel_77
 
17.10.25
10:33
(14) В БСП есть уже готовый механизм для вывода пакета документов. Зачем писать велосипеды?
16 Garykom
 
гуру
17.10.25
10:34
(14)+ Так можно дойти что вместо
А = 2 + 2;

Будут писать
М = Новый Массив;
М.Добавить(2);
М.Добавить(2);
А = ОбщийМодульВычисления.Сложить(МассивСлагаемых);
17 Garykom
 
гуру
17.10.25
10:37
(15) 1. Понимание алгоритмов и работы на низком уровне
2. Надежность и независимость от версий БСП
3. Тупо быстрей работает без БСП?

Есть смысл применять БСП когда оно оправдано
Например для ускорения разработки или "в одном стиле"
Но понимая что это засады в будущем на переписывание, в случае обновлений типовых/БСП
18 DiMel_77
 
17.10.25
10:37
(16) Хороший стиль подразумевает использование существующих библиотек в работе. Почему вы допустим не пишете "Сообщение = Новый СообщениеПользователю();", а используете "ОбщегоНазначения.СообщитьПользователю", а в случае пакетных документов не используете подсистему "УправлениеПечатью"?
19 Garykom
 
гуру
17.10.25
10:40
(18) Так и я о чем
Если я дорабатываю конфу то использую ОбщегоНазначения.СообщитьПользователю

Если же пишу временную внешнюю обработку или печатную форму - нахрена так заморачиваться?
Достаточно просто Сообщить()
Оно же тупо не заработает в другой конфе без ОбщегоНазначения (а таких дофига и более отраслевых)
20 DiMel_77
 
17.10.25
14:06
(19) Я слабо представляю, как может быть универсальная печатная форма (за исключением вывода каких-нибудь технических вещей, типа движений). Обычно всегда внешняя обработка или отчет пишется под конкретную конфигурацию. А использование программного интерфейса подсистем БСП зачастую избавляет от ошибок. У нас во внутренних стандартах разработки это прописано жёстко.
21 craxx
 
18.10.25
11:14
(6) Аха..ха.
Я принимал дела на одном заводе в прошлом году от одной девочки (48 лет и 16 лет опыта!!). Так она даже СКД не знала, писала отчеты на построителе и проверяла условия вывода в цикле. Прайс-лист с таким подходом собирался 2 часа (!!!). Вместо 7 секунд на СКД. УФ, естественно, тоже не знала.
Я когда посмотрел код - реально🤦
22 dmt
 
18.10.25
13:10
(21) чтобы посмеяться - надо знать ЗП и обязанности девочки. А то бывает на заводах, что тянут зоопарк систем и эту вашу 1с - и все тысяч за 40-50
23 Волшебник
 
18.10.25
13:22
(21) А при чём тут СКД?
24 craxx
 
18.10.25
13:31
(23) я это к тому, что опыт 15+ лет - это совершенно ни о чем не говорит.
25 craxx
 
18.10.25
13:30
(22) Она была внешним спецом по обслуживанию их 1С. И даже пыталась перевести их с УТ 10.3 на КА 2.5. Естественно, попытки были неуспешны.
26 Волшебник
 
18.10.25
13:59
(25) Неверно написанный запрос затормозит любую СКД.
27 Маленький Вопросик
 
18.10.25
16:06
(21) человек не был заинтересован в экономии собственного времени - просто сидел на ставке, монотонно выполнял свою работу…
28 Маленький Вопросик
 
18.10.25
16:07
(25) я бы самолично сейчас кого-нибудь с удовольствием перевел - именно на КА2.5, УТ-ха мне уже поднадоела….