Имя: Пароль:
1C
 
Перенос данных из одной ТЧ в другую и группировка
0 miniconda
 
05.11.19
20:16
У меня есть бизнес-процесс МойБП, у которого есть форма задачи.
На этой форме у меня есть 2 ТЧ — ТЧПервая и ТЧВторая

У ТЧПервая есть реквизиты Номенклатура, Поставщик (СправочникСсылка.Контрагенты)  и Сумма
У ТЧВторая есть реквизиты Контрагент (СправочникСсылка.Контрагенты) и Сумма

Мне нужно чтобы после ввода всех данных в ТЧПервая, при нажатии на кнопку
в ТЧВторая группировались данные по Контрагентам и выводилась общая сумма

То есть если в ТЧПервая будут заказы к Поставщик1 на суммы 50.000 и 30.000,
то в ТЧВторая вывелось Поставщик1 80.000

Вопрос: как это примерно реализовать?
2 Многолетний Апельсин
 
05.11.19
20:19
ВременнаяТаблицаЗначений = ТЧПервая.Выгрузить();
ВременнаяТаблицаЗначений.Свернуть("Контрагент","Сумма");
ТЧВторая.Загрузить(ВременнаяТаблицаЗначений);
3 Многолетний Апельсин
 
05.11.19
20:22
(2) Малость опечатался, надо написать

ВременнаяТаблицаЗначений.Свернуть("Поставщик","Сумма");
4 Garykom
 
гуру
05.11.19
20:23
(2) Три строчки на 1С.
На Java (или других больших ЯП) сначала придется писать пару-тройку функций, каждая по несколько экранов. И то нихрена не универсально будет, только для ограниченных типов значений внутри "Контрагент" и "Сумма"
5 miniconda
 
05.11.19
21:59
(2) И все это корректно отобразится на форме?
А где это лучше всего ввести? В модуле объекта, да?
Но там же есть всякие обработчики событий, в каком-то из них?
6 hhhh
 
05.11.19
22:09
(5) "Мне нужно чтобы после ввода всех данных в ТЧПервая, при нажатии на кнопку"

то есть это надо ввести в процедуре, которая вызывается при нажатии на кнопку.
7 miniconda
 
05.11.19
22:11
(6) Точно. Спасибо
8 miniconda
 
06.11.19
09:56
(6) Подскажите, а что делать, если у ТЧПервая есть другие реквизиты, которых
нет в ТЧВторая? Выгрузка произойдет корректным образом тогда или нет?

И еще вопрос: как правильно обратиться к этой ТЧ? Она заполняется на форме.
Объект.ТЧПервая.Выгрузить или как то иначе?
9 miniconda
 
06.11.19
10:01
(2) (6) И если я смотрю то значение ВременнаяТаблицаЗначений, то у меня вот так:

http://ipic.su/img/img7/fs/Snimok2.1573023607.png

В эту переменную точно заносится таблица значений?
10 Ёпрст
 
06.11.19
10:07
(9) F11
11 hhhh
 
06.11.19
10:07
(8) да, корректным (9) да, точно
12 miniconda
 
06.11.19
10:31
(11) Свернуть вроде как получается, но во вторую ТЧ на форме все равно значения не заносятся:

http://ipic.su/img/img7/fs/Snimok3.1573025447.png

Я свернул, получилось по 3 поставщикам. Появились 3 строки без текста. Как занести значения?)

Извините уж, только учусь
13 catena
 
06.11.19
10:46
(12)Проверить, что имена колонок совпадают и все колонки нужного типа.
14 Ёпрст
 
06.11.19
10:51
(0)


ТЧВторая.Загрузить(ТЧПервая);
ТЧВторая.Свернуть("Контрагент","Сумма");
15 miniconda
 
06.11.19
10:54
(13) А если имена колонок не совпадают? Как сделать так, чтобы колонка "Поставщик" занеслась в колонку "Контрагент"?
16 mc lammer
 
06.11.19
10:57
(15) ВременнаяТаблицаЗначений.Колонки.Поставщик.Имя = "Контрагент";
17 catena
 
06.11.19
11:07
(15)Либо пстрочно, либо перименовывать. Загрузить() не знает о ваших синонимах.
18 lEvGl
 
гуру
06.11.19
11:08
зопросом

Запрос = Новый Запрос;
Запрос.Текст = "Выбрать ТЧ.Поставщик Как Контрагент, ТЧ.Сумма Поместить ВТ Из &ТЧ Как ТЧ; Выбрать ВТ.Контрагент, Сумма(ВТ.Сумма) Как Сумма Из ВТ Как ВТ Сгруппировать По ВТ.Контрагент"
Запрос.УстановитьПараметр("ТЧ", ПерваяТЧ)
ВтораяТЧ.Загрузить(Запрос.Выполнить.Выгрузить())
19 lEvGl
 
гуру
06.11.19
11:09
если бизнес процесс твой а не типовой, то имена сделать колонок одинаковыми, об этом надо думать сразу на этапе добавления метаданных
20 miniconda
 
06.11.19
11:26
(17) А как это реализовать построчно?

Для Каждого Строка Из ВременнаяТаблицаЗначений Цикл
    Объект.Оплата.Контрагент = Строка.Поставщик;
КонецЦикла;


Но я ведь так не бегу по строчкам ТЧ Оплата. Как правильно?
21 hhhh
 
06.11.19
11:36
(20) правильно в (16)
22 catena
 
06.11.19
11:36
(20)Иногда полезно кроме форума читать и справку.
стр =  Объект.Оплата.Добавить();
стр.Контрагент = Строка.Поставщик;
23 miniconda
 
06.11.19
11:51
(22) Сделал вот так, работает. Но как сделать так, чтобы значения не заносились второй раз, если они уж есть?

Для Каждого Строка Из ВременнаяТаблицаЗначений Цикл
        НоваяСтрокаТЧ = Объект.Оплата.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрокаТЧ, Строка);
        НоваяСтрокаТЧ.Контрагент = Строка.ПоставщикИнициатор;
        НоваяСтрокаТЧ.Сумма = Строка.СуммаИнициатор;
КонецЦикла


(21) Как в (16) не сработало у меня
24 hhhh
 
06.11.19
12:02
(23) Объект.Оплата.Очистить()
25 catena
 
06.11.19
12:03
(23)С таким уровнем, переименовать колонки будет правильнее. Ну или запросом, как чуть выше показали.
26 lEvGl
 
гуру
06.11.19
12:51
(21) костыльная тема, хотя и будет работать
27 hhhh
 
06.11.19
13:22
(26) значит в типовых куча костылей
28 lEvGl
 
гуру
06.11.19
14:16
(27) не новость)
29 тарам пам пам
 
06.11.19
15:42
(26) Вот ты лучше бы вообще молчал насчет костылей со своей перегонкой таблиц между сервером 1с и СУБД в (18).
30 lEvGl
 
гуру
06.11.19
16:00
(29) мухаха
2 + 2 = 3.9999999999999999999999999999999...