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


1С:Предприятие ::

Метки: 

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

Я
   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 или кнопку "Обновить" в браузере.
Рекламное место пустует