|   |   | 
| 
 | Добавить колонку из одной таблицы значений к другой | ☑ | ||
|---|---|---|---|---|
| 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(ВТ.ФИО,ВТПредДата.ФИО) КАК ФИО, Что-нибудь вроде этого в последнем запросе | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |