Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Добавить колонку из одной таблицы значений к другой

Добавить колонку из одной таблицы значений к другой
Я
   dft2014
 
28.08.18 - 17:28
Есть две таблицы значений — «ПерваяТЗ» и «ВтораяТЗ».

ПерваяТЗ (колонки):
ФИО               Остаток на 31.07.18
Иванов            10
Петров            15


ВтораяТЗ (колонки):
ФИО               Остаток на 30.06.18
Иванов            8
Сидоров           3


Необходимо получить третью таблицу или добавить колонку с остатками, чтобы получилась таблица в виде:
ФИО            Остатки на 30.06.2018            Остатки на 31.07.2018
 
 
   ejikbeznojek
 
1 - 28.08.18 - 17:30
(0) Покажи код, как пытаешься.
   ejikbeznojek
 
2 - 28.08.18 - 17:32
(1) А так я бы передал параметром обе таблицы в запрос и сделал бы полное соединение.
   Cyberhawk
 
3 - 28.08.18 - 17:37
(1) С чего ты взял, что пытается?
   ejikbeznojek
 
4 - 28.08.18 - 17:38
(3) Ну надо же думать о человеке хорошо, пока он не дал повод думать обратное)
   dft2014
 
5 - 28.08.18 - 18:01
(1)

//собираем данные на отчетную дату

    ДатаРасчетаОстатковОтпусков       = КонецДня(Объект.ДатаОтчета);
    ПерваяТЗ = тзСотрудникиСОстаткамиНаДату(ДатаРасчетаОстатковОтпусков);
    
    //собираем данные на отчетную дату минус месяц

    ДатаРасчетаОстатковОтпусковМинусМесяц       = КонецДня(ДобавитьМесяц(Объект.ДатаОтчета,-1));
    ВтораяТЗ = тзСотрудникиСОстаткамиНаДату(ДатаРасчетаОстатковОтпусковМинусМесяц);
    
    //собираем все в одну ТЗ

    тзВсеВместе = ЗаполнимИтоговуюТЗДанными(ПерваяТЗ,ВтораяТЗ);  //вот здесь у меня стопор!!!
   dft2014
 
6 - 28.08.18 - 18:05
+(5) Обе ТЗ - идентичные, отличаются только "остатком", и вот только этот "остаток" надо присоединить из второй ТЗ.

Структура обеих ТЗ:


тзОстатки = Новый ТаблицаЗначений;
    тзОстатки.Колонки.Добавить("ФИО",Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
    тзОстатки.Колонки.Добавить("Остаток",Новый ОписаниеТипов("Число"));
    тзОстатки.Колонки.Добавить("Подразделение",Новый ОписаниеТипов("СправочникСсылка.ПодразделенияОрганизаций"));
    тзОстатки.Колонки.Добавить("Должность",Новый ОписаниеТипов("СправочникСсылка.Должности"));
    тзОстатки.Колонки.Добавить("Состояние",Новый ОписаниеТипов("ПеречислениеСсылка.СостоянияСотрудника"));
   dft2014
 
7 - 28.08.18 - 18:48
Ап!
   МихаилМ
 
8 - 28.08.18 - 18:58
из сп:

ТаблицаЗначений (ValueTable)
ВыгрузитьКолонку (UnloadColumn)
Синтаксис:

ВыгрузитьКолонку(<Колонка>)
Параметры:

<Колонка> (обязательный)

Тип: Число; Строка; КолонкаТаблицыЗначений.
Колонка, значения которой необходимо выгрузить. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка.
Возвращаемое значение:

Тип: Массив.



Описание:

Создает массив и копирует в него значения, содержащиеся в колонке таблицы значений.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:

ТаблицаЗначений.Свернуть("Номенклатура");
Запрос.УстановитьПараметр("МассивНоменклатуры", ТаблицаЗначений.ВыгрузитьКолонку("Номенклатура"));
 

ТаблицаЗначений (ValueTable)
ЗагрузитьКолонку (LoadColumn)
Синтаксис:

ЗагрузитьКолонку(<Массив>, <Колонка>)
Параметры:

<Массив> (обязательный)

Тип: Массив.
Массив значений, который выступает в качестве источника данных для колонки. 
<Колонка> (обязательный)

Тип: Число; Строка; КолонкаТаблицыЗначений.
Колонка, в которую будут загружены значения из массива. В качестве значения параметра может выступать индекс колонки, имя колонки, сама колонка.
Описание:

Загружает колонку таблицы значений из массива значений.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Значения из массива загружаются в колонку в порядке индексов.
Пример:

ТаблицаРезультат = Новый ТаблицаЗначений;
Для каждого ИмяКолонки Из МассивИменКолонок Цикл
    ТаблицаРезультат.Колонки.Добавить(ИмяКолонки);
КонецЦикла; 

// Создадим пустые строки таблицы


Для Н=1 По СтрокиДереваЗначений.Количество() Цикл
    ТаблицаРезультат.Добавить();
КонецЦикла; 

// Скопируем значения колонок


Для каждого ИмяКолонки Из МассивИменКолонок Цикл
    ЗначенияКолонки = СтрокиДереваЗначений.ВыгрузитьКолонку(ИмяКолонки);
    ТаблицаРезультат.ЗагрузитьКолонку(ЗначенияКолонки, ИмяКолонки);
КонецЦикла;
   МихаилМ
 
9 - 28.08.18 - 19:02
извините.

дополните  обе таблицы нужными колонками

объедините таблицы, сверните.
   Chameleon1980
 
10 - 28.08.18 - 19:36
запросом
 
 Рекламное место пустует
   catena
 
11 - 29.08.18 - 05:02
(8)Ничего, что у него состав строк может быть разный?)))
   dft2014
 
12 - 29.08.18 - 10:43
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать * ПОМЕСТИТЬ ВремТабл Из &ТабЗнач1 как ТабЗнач1;
| Выбрать * ПОМЕСТИТЬ ВремТабл1 Из &ТабЗнач как ТабЗнач;
| Выбрать * ИЗ ВремТабл ОБЪЕДИНИТЬ ВСЕ Выбрать * ИЗ ВремТабл1";

Запрос.УстановитьПараметр("ТабЗнач",ПерваяТЗ);
Запрос.УстановитьПараметр("ТабЗнач1",ВтораяТЗ);
ИтоговаяТаблица = Запрос.Выполнить().Выгрузить();


В результате получаю не то, что надо: обе таблицы объединяются, а мне надо добавить одну колонку из ВторойТЗ в ПервуюТЗ.
   catena
 
13 - 29.08.18 - 10:48
(12)Так сказали же СОЕДИНИТЬ, а не объединить.
   dft2014
 
14 - 29.08.18 - 10:53
(13) Поподробнее, плиз... Я не поняла...
   catena
 
15 - 29.08.18 - 10:56
(14)из тз1 полное соединение тз2 по тз1.фио=тз2.фио

и не забыть про естьNULL
   dft2014
 
16 - 29.08.18 - 11:02
(15) Т.е. ТЗ1 и ТЗ2 надо поместить в запрос? Каким образом?!
   Zmich
 
17 - 29.08.18 - 11:06
(12). Если хочешь через ОБЪЕДИНИТЬ ВСЕ, придется иначе обозвать поля с остатками. Примерно так:
Запрос.Текст = "Выбрать * ПОМЕСТИТЬ ВремТабл Из &ТабЗнач1 как ТабЗнач1;
| Выбрать * ПОМЕСТИТЬ ВремТабл1 Из &ТабЗнач как ТабЗнач;
| Выбрать ВложенныйЗапрос.ФИО КАК ФИО,
|         СУММА(ВложенныйЗапрос.Остаток1) КАК Остаток1,
|         СУММА(ВложенныйЗапрос.Остаток2) КАК Остаток2
| ИЗ
| (
| Выбрать ВремТабл.ФИО КАК ФИО
|         ВремТабл.Остаток КАК Остаток1,
|         0 КАК Остаток2
| ИЗ ВремТабл КАК ВремТабл
|ОБЪЕДИНИТЬ ВСЕ 
|Выбрать ВремТабл1.ФИО КАК ФИО,
|        0 КАК Остаток1,
|        ВремТабл1.Остаток КАК Остаток2
| ИЗ ВремТабл1 КАК ВремТабл1
| ) КАК ВложенныйЗапрос
|СГРУППИРОВАТЬ ПО ВложенныйЗапрос.ФИО";

Но лучше способ с полным соединением.
   catena
 
18 - 29.08.18 - 11:09
(16)эээ... а в (12) вы, простите, их в запрос не помещаете?
   dft2014
 
19 - 29.08.18 - 11:12
(18) Если я вместо:
| Выбрать * ИЗ ВремТабл ОБЪЕДИНИТЬ ВСЕ Выбрать * ИЗ ВремТабл1";

напишу:
| Выбрать * ИЗ ВремТабл СОЕДИНИТЬ ВСЕ Выбрать * ИЗ ВремТабл1";
то выдает ошибку: "Синтаксическая ошибка "ВСЕ""
   dchumak
 
20 - 29.08.18 - 11:14
(16) как параметр запроса
А в запросе уже пишешь 
Выбрать... Из &ТабЗнач как ТабЗнач
   catena
 
21 - 29.08.18 - 11:15
(19)Почему вы так выборочно читаете? Покажите хоть одно сообщение в теме, где советовали СОЕДИНИТЬ ВСЕ. Это же не сочинение, нельзя писать примерно подходящее по смыслу.
   dchumak
 
22 - 29.08.18 - 11:15
(19) надо писать ОБЪЕДИНИТЬ ВСЕ
   dft2014
 
23 - 29.08.18 - 11:17
(22) я так и написала в (12), в результате обе таблицы объединяются, а мне надо добавить одну колонку из ВторойТЗ в ПервуюТЗ.
   catena
 
24 - 29.08.18 - 11:18
(23)И опять же, вы пропустили в теме корректный пример с объединить.
   dft2014
 
25 - 29.08.18 - 11:19
(24) где этот пример? я не увидела...
   catena
 
26 - 29.08.18 - 11:22
(25)Тема не такая уж длинная, советую перечитать и думать.
   dft2014
 
27 - 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 намерено сделаны ошибки).
   dft2014
 
30 - 29.08.18 - 11:45
(26), (28), (29) что же вы за люди-то такие!!!

(28) ошибку выдает: Синтаксическая ошибка "ВремТабл.Остаток,"
   Лефмихалыч
 
31 - 29.08.18 - 11:51
(30) значит в таблице значений, которую та передаешь в параметре &ТабЗнач, нет колонки с именем "Остаток"
   dft2014
 
32 - 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
а, стоп, это СИНТАКСИЧЕСКИЙ контроль.
Замени "ВЫБРАТЬ *" на "ВЫБРАТЬ <перечисление, всех, полей, таблицы>"
   catena
 
36 - 29.08.18 - 12:06
"что же вы за люди-то такие!!! "

В смысле? Вы не то что учебник или справку, даже советы целиком прочитать не хотите, синтаксис самостоятельно проверить ленитесь, а мы люди "такие"...
   dft2014
 
37 - 29.08.18 - 14:11
Вот такой запрос ниже у меня получился. Посмотрите пож-та, все ли верно? Вроде данные выгружаются так, как мне надо...

Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ТЗ.ФИО КАК ФИО,
    |    ТЗ.Подразделение КАК Подразделение,
    |    ТЗ.Должность КАК Должность,
    |    ТЗ.ОстатокТекДата КАК ОстатокТекДата
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    |    &ТЗ КАК ТЗ
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    ТЗПредДата.ФИО КАК ФИО,
    |    ТЗПредДата.ОстатокПредДата КАК ОстатокПредДата
    |ПОМЕСТИТЬ ВТПредДата
    |ИЗ
    |    &ТЗПредДата КАК ТЗПредДата
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    ВТ.ФИО КАК ФИО,
    |    ВТ.Подразделение КАК Подразделение,
    |    ВТ.Должность КАК Должность,
    |    ВТ.ОстатокТекДата КАК ОстатокТекДата,
    |    ВТПредДата.ОстатокПредДата КАК ОстатокПредДата
    |ИЗ
    |    ВТ КАК ВТ
    |        ПОЛНОЕ СОЕДИНЕНИЕ ВТПредДата КАК ВТПредДата
    |        ПО ВТ.ФИО = ВТПредДата.ФИО";
    
    Запрос.УстановитьПараметр("ТЗ",тзОстатки_ДатаОтчета);
    Запрос.УстановитьПараметр("ТЗПредДата",тзОстатки_ДатаОтчетаМинусМесяц);
    ИтоговаяТаблица = Запрос.Выполнить().Выгрузить();
    
    ИтоговаяТаблица = Запрос.Выполнить().Выгрузить();
   ПегийЛунь
 
38 - 29.08.18 - 14:42
(37) Не все нормально. Может оказаться так, что в таблице ВТПредДата есть ФИО которых нет в таблице ВТ.
   dft2014
 
39 - 29.08.18 - 14:52
(38) А как это обойти?
   ejikbeznojek
 
40 - 29.08.18 - 15:35
(39)    
 |ВЫБРАТЬ
 |    естьNull(ВТ.ФИО,ВТПредДата.ФИО) КАК ФИО,

Что-нибудь вроде этого в последнем запросе


Список тем форума
Рекламное место пустует  Рекламное место пустует
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Э. Йодан
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует