|
Добавить колонку из одной таблицы значений к другой | ☑ | ||
---|---|---|---|---|
0
dft2014
28.08.18
✎
17:28
|
Есть две таблицы значений — «ПерваяТЗ» и «ВтораяТЗ».
ПерваяТЗ (колонки): ФИО Остаток на 31.07.18 Иванов 10 Петров 15 ВтораяТЗ (колонки): ФИО Остаток на 30.06.18 Иванов 8 Сидоров 3 Необходимо получить третью таблицу или добавить колонку с остатками, чтобы получилась таблица в виде: ФИО Остатки на 30.06.2018 Остатки на 31.07.2018 |
|||
1
ejikbeznojek
28.08.18
✎
17:30
|
(0) Покажи код, как пытаешься.
|
|||
2
ejikbeznojek
28.08.18
✎
17:32
|
(1) А так я бы передал параметром обе таблицы в запрос и сделал бы полное соединение.
|
|||
3
Cyberhawk
28.08.18
✎
17:37
|
(1) С чего ты взял, что пытается?
|
|||
4
ejikbeznojek
28.08.18
✎
17:38
|
(3) Ну надо же думать о человеке хорошо, пока он не дал повод думать обратное)
|
|||
5
dft2014
28.08.18
✎
18:01
|
(1)
//собираем данные на отчетную дату ДатаРасчетаОстатковОтпусков = КонецДня(Объект.ДатаОтчета); ПерваяТЗ = тзСотрудникиСОстаткамиНаДату(ДатаРасчетаОстатковОтпусков); //собираем данные на отчетную дату минус месяц ДатаРасчетаОстатковОтпусковМинусМесяц = КонецДня(ДобавитьМесяц(Объект.ДатаОтчета,-1)); ВтораяТЗ = тзСотрудникиСОстаткамиНаДату(ДатаРасчетаОстатковОтпусковМинусМесяц); //собираем все в одну ТЗ тзВсеВместе = ЗаполнимИтоговуюТЗДанными(ПерваяТЗ,ВтораяТЗ); //вот здесь у меня стопор!!! |
|||
6
dft2014
28.08.18
✎
18:05
|
+(5) Обе ТЗ - идентичные, отличаются только "остатком", и вот только этот "остаток" надо присоединить из второй ТЗ.
Структура обеих ТЗ: тзОстатки = Новый ТаблицаЗначений; тзОстатки.Колонки.Добавить("ФИО",Новый ОписаниеТипов("СправочникСсылка.Сотрудники")); тзОстатки.Колонки.Добавить("Остаток",Новый ОписаниеТипов("Число")); тзОстатки.Колонки.Добавить("Подразделение",Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций")); тзОстатки.Колонки.Добавить("Должность",Новый ОписаниеТипов("СправочникСсылка.Должности")); тзОстатки.Колонки.Добавить("Состояние",Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияСотрудника")); |
|||
7
dft2014
28.08.18
✎
18:48
|
Ап!
|
|||
8
МихаилМ
28.08.18
✎
18:58
|
из сп:
ТаблицаЗначений (ValueTable) ВыгрузитьКолонку (UnloadColumn) Синтаксис: ВыгрузитьКолонку(<Колонка>) Параметры: <Колонка> (обязательный) Тип: Число; Строка; КолонкаТаблицыЗначений. Колонка, значения которой необходимо выгрузить. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка. Возвращаемое значение: Тип: Массив. Описание: Создает массив и копирует в него значения, содержащиеся в колонке таблицы значений. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Пример: ТаблицаЗначений.Свернуть("Номенклатура"); Запрос.УстановитьПараметр("МассивНоменклатуры", ТаблицаЗначений.ВыгрузитьКолонку("Номенклатура")); ТаблицаЗначений (ValueTable) ЗагрузитьКолонку (LoadColumn) Синтаксис: ЗагрузитьКолонку(<Массив>, <Колонка>) Параметры: <Массив> (обязательный) Тип: Массив. Массив значений, который выступает в качестве источника данных для колонки. <Колонка> (обязательный) Тип: Число; Строка; КолонкаТаблицыЗначений. Колонка, в которую будут загружены значения из массива. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка. Описание: Загружает колонку таблицы значений из массива значений. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Примечание: Значения из массива загружаются в колонку в порядке индексов. Пример: ТаблицаРезультат = Новый ТаблицаЗначений; Для каждого ИмяКолонки Из МассивИменКолонок Цикл ТаблицаРезультат.Колонки.Добавить(ИмяКолонки); КонецЦикла; // Создадим пустые строки таблицы Для Н=1 По СтрокиДереваЗначений.Количество() Цикл ТаблицаРезультат.Добавить(); КонецЦикла; // Скопируем значения колонок Для каждого ИмяКолонки Из МассивИменКолонок Цикл ЗначенияКолонки = СтрокиДереваЗначений.ВыгрузитьКолонку(ИмяКолонки); ТаблицаРезультат.ЗагрузитьКолонку(ЗначенияКолонки, ИмяКолонки); КонецЦикла; |
|||
9
МихаилМ
28.08.18
✎
19:02
|
извините.
дополните обе таблицы нужными колонками объедините таблицы, сверните. |
|||
10
Chameleon1980
28.08.18
✎
19:36
|
запросом
|
|||
11
catena
29.08.18
✎
05:02
|
(8)Ничего, что у него состав строк может быть разный?)))
|
|||
12
dft2014
29.08.18
✎
10:43
|
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать * ПОМЕСТИТЬ ВремТабл Из &ТабЗнач1 как ТабЗнач1; | Выбрать * ПОМЕСТИТЬ ВремТабл1 Из &ТабЗнач как ТабЗнач; | Выбрать * ИЗ ВремТабл ОБЪЕДИНИТЬ ВСЕ Выбрать * ИЗ ВремТабл1"; Запрос.УстановитьПараметр("ТабЗнач",ПерваяТЗ); Запрос.УстановитьПараметр("ТабЗнач1",ВтораяТЗ); ИтоговаяТаблица = Запрос.Выполнить().Выгрузить(); В результате получаю не то, что надо: обе таблицы объединяются, а мне надо добавить одну колонку из ВторойТЗ в ПервуюТЗ. |
|||
13
catena
29.08.18
✎
10:48
|
(12)Так сказали же СОЕДИНИТЬ, а не объединить.
|
|||
14
dft2014
29.08.18
✎
10:53
|
(13) Поподробнее, плиз... Я не поняла...
|
|||
15
catena
29.08.18
✎
10:56
|
(14)из тз1 полное соединение тз2 по тз1.фио=тз2.фио
и не забыть про естьNULL |
|||
16
dft2014
29.08.18
✎
11:02
|
(15) Т.е. ТЗ1 и ТЗ2 надо поместить в запрос? Каким образом?!
|
|||
17
Zmich
29.08.18
✎
11:06
|
(12). Если хочешь через ОБЪЕДИНИТЬ ВСЕ, придется иначе обозвать поля с остатками. Примерно так:
Запрос.Текст = "Выбрать * ПОМЕСТИТЬ ВремТабл Из &ТабЗнач1 как ТабЗнач1; | Выбрать * ПОМЕСТИТЬ ВремТабл1 Из &ТабЗнач как ТабЗнач; | Выбрать ВложенныйЗапрос.ФИО КАК ФИО, | СУММА(ВложенныйЗапрос.Остаток1) КАК Остаток1, | СУММА(ВложенныйЗапрос.Остаток2) КАК Остаток2 | ИЗ | ( | Выбрать ВремТабл.ФИО КАК ФИО | ВремТабл.Остаток КАК Остаток1, | 0 КАК Остаток2 | ИЗ ВремТабл КАК ВремТабл |ОБЪЕДИНИТЬ ВСЕ |Выбрать ВремТабл1.ФИО КАК ФИО, | 0 КАК Остаток1, | ВремТабл1.Остаток КАК Остаток2 | ИЗ ВремТабл1 КАК ВремТабл1 | ) КАК ВложенныйЗапрос |СГРУППИРОВАТЬ ПО ВложенныйЗапрос.ФИО"; Но лучше способ с полным соединением. |
|||
18
catena
29.08.18
✎
11:09
|
(16)эээ... а в (12) вы, простите, их в запрос не помещаете?
|
|||
19
dft2014
29.08.18
✎
11:12
|
(18) Если я вместо:
| Выбрать * ИЗ ВремТабл ОБЪЕДИНИТЬ ВСЕ Выбрать * ИЗ ВремТабл1"; напишу: | Выбрать * ИЗ ВремТабл СОЕДИНИТЬ ВСЕ Выбрать * ИЗ ВремТабл1"; то выдает ошибку: "Синтаксическая ошибка "ВСЕ"" |
|||
20
dchumak
29.08.18
✎
11:14
|
(16) как параметр запроса
А в запросе уже пишешь Выбрать... Из &ТабЗнач как ТабЗнач |
|||
21
catena
29.08.18
✎
11:15
|
(19)Почему вы так выборочно читаете? Покажите хоть одно сообщение в теме, где советовали СОЕДИНИТЬ ВСЕ. Это же не сочинение, нельзя писать примерно подходящее по смыслу.
|
|||
22
dchumak
29.08.18
✎
11:15
|
(19) надо писать ОБЪЕДИНИТЬ ВСЕ
|
|||
23
dft2014
29.08.18
✎
11:17
|
(22) я так и написала в (12), в результате обе таблицы объединяются, а мне надо добавить одну колонку из ВторойТЗ в ПервуюТЗ.
|
|||
24
catena
29.08.18
✎
11:18
|
(23)И опять же, вы пропустили в теме корректный пример с объединить.
|
|||
25
dft2014
29.08.18
✎
11:19
|
(24) где этот пример? я не увидела...
|
|||
26
catena
29.08.18
✎
11:22
|
(25)Тема не такая уж длинная, советую перечитать и думать.
|
|||
27
dft2014
29.08.18
✎
11:29
|
(26) Читаю, думаю.
Не получается!!! |
|||
28
ПегийЛунь
29.08.18
✎
11:33
|
читайте еще
Запрос.Текст = "Выбрать * ПОМЕСТИТЬ ВремТабл Из &ТабЗнач как ТабЗнач; | ВЫБРАТЬ * ПОМЕСТИТЬ ВремТабл1 Из &ТабЗнач1 как ТабЗнач1; | ВЫБРАТЬ | ЕСТЬNULL(ВремТабл.ФИО, ВремТабл1.ФИО) КАК ФИО | ВремТабл.Остаток, | ВремТабл1.ОстатокСледМесяца | ИЗ | ВремТабл КАК ВремТабл | ПОЛНОЕ СОЕДИНЕНИЕ ВремТабл1 КАК ВремТабл1 | ПО ВремТабл.ФИО = ВремТабл1.ФИО"; |
|||
29
ПегийЛунь
29.08.18
✎
11:34
|
Запрос примерно такой (в 28 намерено сделаны ошибки).
|
|||
30
dft2014
29.08.18
✎
11:45
|
(26), (28), (29) что же вы за люди-то такие!!!
(28) ошибку выдает: Синтаксическая ошибка "ВремТабл.Остаток," |
|||
31
Лефмихалыч
29.08.18
✎
11:51
|
(30) значит в таблице значений, которую та передаешь в параметре &ТабЗнач, нет колонки с именем "Остаток"
|
|||
32
dft2014
29.08.18
✎
11:54
|
(31) есть колонка "Остаток" - см. (6)
|
|||
33
Лефмихалыч
29.08.18
✎
11:58
|
(32) нет колонки Остаток, см (30)
|
|||
34
ПегийЛунь
29.08.18
✎
11:59
|
(30) Угу. Видишь не хватает запятой в предыдущей строке.
|
|||
35
Лефмихалыч
29.08.18
✎
11:59
|
а, стоп, это СИНТАКСИЧЕСКИЙ контроль.
Замени "ВЫБРАТЬ *" на "ВЫБРАТЬ <перечисление, всех, полей, таблицы>" |
|||
36
catena
29.08.18
✎
12:06
|
"что же вы за люди-то такие!!! "
В смысле? Вы не то что учебник или справку, даже советы целиком прочитать не хотите, синтаксис самостоятельно проверить ленитесь, а мы люди "такие"... |
|||
37
dft2014
29.08.18
✎
14:11
|
Вот такой запрос ниже у меня получился. Посмотрите пож-та, все ли верно? Вроде данные выгружаются так, как мне надо...
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗ.ФИО КАК ФИО, | ТЗ.Подразделение КАК Подразделение, | ТЗ.Должность КАК Должность, | ТЗ.ОстатокТекДата КАК ОстатокТекДата |ПОМЕСТИТЬ ВТ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗПредДата.ФИО КАК ФИО, | ТЗПредДата.ОстатокПредДата КАК ОстатокПредДата |ПОМЕСТИТЬ ВТПредДата |ИЗ | &ТЗПредДата КАК ТЗПредДата |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ.ФИО КАК ФИО, | ВТ.Подразделение КАК Подразделение, | ВТ.Должность КАК Должность, | ВТ.ОстатокТекДата КАК ОстатокТекДата, | ВТПредДата.ОстатокПредДата КАК ОстатокПредДата |ИЗ | ВТ КАК ВТ | ПОЛНОЕ СОЕДИНЕНИЕ ВТПредДата КАК ВТПредДата | ПО ВТ.ФИО = ВТПредДата.ФИО"; Запрос.УстановитьПараметр("ТЗ",тзОстатки_ДатаОтчета); Запрос.УстановитьПараметр("ТЗПредДата",тзОстатки_ДатаОтчетаМинусМесяц); ИтоговаяТаблица = Запрос.Выполнить().Выгрузить(); ИтоговаяТаблица = Запрос.Выполнить().Выгрузить(); |
|||
38
ПегийЛунь
29.08.18
✎
14:42
|
(37) Не все нормально. Может оказаться так, что в таблице ВТПредДата есть ФИО которых нет в таблице ВТ.
|
|||
39
dft2014
29.08.18
✎
14:52
|
(38) А как это обойти?
|
|||
40
ejikbeznojek
29.08.18
✎
15:35
|
(39)
|ВЫБРАТЬ | естьNull(ВТ.ФИО,ВТПредДата.ФИО) КАК ФИО, Что-нибудь вроде этого в последнем запросе |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |