Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91

Объединение двух колонок в запросе в одну

16.12.2025, 08:14. Показов 2642. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья и коллеги, всем привет! Столкнулся со следующей проблемой, думаю не очень сложной для тех кто сталкивался с этим, но я немного запнулся на ней.
Итак, есть задача. В 1С УТ 8.3 вывести общий журнал операций включающий в себя несколько типов документов:

1. Списание безналичных денежных средств.
2. Поступление безналичных денежных средств.
3. Документы закупки.
4. Склад - Внутренние документы.
5. Документы продажи.
6. Заказы клиентов.

Причем последние два в разрезе определенных пользователей в данном случае авторов документов.

Сразу оговорюсь, делаю все постепенно, по этому пока в запросе только одна таблица.

Вопрос достаточно простой, в таблице списание безналичных средств есть как контрагенты юридические лица, так подотчетники

Требуется, чтобы поля «СписаниеБезналичныхДенежныхСредств.Подо тчетноеЛицо» и «СписаниеБезналичныхДенежныхСредств.Конт рагент.НаименованиеПолное» попадали в одну колонку «Контрагент». Естественно по порядку в соответствие с теми полями к которым имеют отношения. Не получается это сделать. Пытался по разному, через «Объединение», но там приходилось делать второй точно такой же запрос, исключая только поле «СписаниеБезналичныхДенежныхСредств.Конт рагент.НаименованиеПолное» и все поля объединять. На выходе получаю какую-то абракадабру, половина столбцов пустая, в других заполнено только одно или несколько значений, остальные пустые.

Каким образом это можно реализовать?

Скриншоты все прикладываю. Два скриншота кода и формы обработки. Также приложены скриншоты настроек в конструкторе запроса, всех разделов, которые затронуты на данный момент.
Миниатюры
Объединение двух колонок в запросе в одну   Объединение двух колонок в запросе в одну   Объединение двух колонок в запросе в одну  

Объединение двух колонок в запросе в одну   Объединение двух колонок в запросе в одну  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2025, 08:14
Ответы с готовыми решениями:

Запрос в 1С: объединение значений двух полей в одно
Подскажите, как правильно сформировать запрос, чтобы была одна строка ( план и факт были во одной...

Как получить значение строки (состоящей из нескольких или одной колонок) таблицы на форме 1С:Предприятие 8.3?
Как получить значение строки (состоящей из нескольких или одной колонок) таблицы на форме(причем...

Программное создание колонок в двух ТЧ
Делаю обрабтку. Задача сравнивать два одинаковых отчета выгруженных в эксель на разность измерений...

38
Модератор
Эксперт 1С
 Аватар для Yulunga
4767 / 963 / 269
Регистрация: 22.04.2013
Сообщений: 6,644
Записей в блоге: 1
17.12.2025, 16:26
Студворк — интернет-сервис помощи студентам
понял. ну тогда +- норм. бояться "больших" запросов не надо. тем более таких, который Вы привели. никаких там соединений левых внутренних с неведомой зверушкой нет. перечисляем необходимые поля, на закладке объединение если механизм сам не связал - помогаем ему. всё.
1
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91
17.12.2025, 17:00  [ТС]
А ничего, что столбцов в таблице, где идет объединение может быть и 20 и 30? У меня их 10 и уже плохо читаются наименования.
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4767 / 963 / 269
Регистрация: 22.04.2013
Сообщений: 6,644
Записей в блоге: 1
17.12.2025, 17:01
ну так вы - исполнитель. раз заказчик сказал хочу 195 колонок - пусть читает как хочет
0
Эксперт 1С
7175 / 1777 / 648
Регистрация: 16.01.2015
Сообщений: 7,346
17.12.2025, 17:42
Цитата Сообщение от vitty Посмотреть сообщение
Вот мне и интересно, если мне данные надо запросить из большого количества документов, как в этом случае сделать правильно?
Так как сейчас у вас, при выборе достаточно длительного периода (например, месяц) и большого товарооборота (количества документов покупки продажи, складских и пр), вы завесите выполнение отчета на несколько часов, а то и суток.
Берите данные из регистров а не из документов. Например Движение денежных средств даст и приходы и расходы по расч счетам, а Выручка и сбестоимость продаж учтет все документы прихода и расхода по товарам и т.д. В итоге получите запрос к 4-5 регистрам максимум (может и меньше) и выбор из виртуальных таблиц, что работает на порядок быстрей. Хотя и такой вариант при большом периоде и количества доков, может нехило подвесить систему.

Не по теме:

ЗЫ Как-то выполнял работу фирме на ЕРП, у которых отчет по валовой прибыли за месяц выполнялся стандартно более суток. Ваш запрос объемнее

2
Модератор
Эксперт 1С
 Аватар для Yulunga
4767 / 963 / 269
Регистрация: 22.04.2013
Сообщений: 6,644
Записей в блоге: 1
17.12.2025, 18:55
дополню коллегу polax . я бы посмотрел на движения всех вышеперечисленных документов и определился с регистрами, по которым они делают движения. и да, брал бы оттуда. но если Вы утверждаете, что никаких движений не делается (а вы утверждаете?) то иногда в редких случаях можно брать из документов. но всякие там суммы и контрагенты должны быть не в документе, ибо такова философия 1С
1
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9717 / 5554 / 648
Регистрация: 13.03.2013
Сообщений: 19,196
Записей в блоге: 64
17.12.2025, 20:37
Цитата Сообщение от vitty Посмотреть сообщение
Вот мне и интересно, если мне данные надо запросить из большого количества документов, как в этом случае сделать правильно?
Я же Вам про это сказал выше:
Цитата Сообщение от Maks Посмотреть сообщение
Вообще строить запрос на выборку из документов такое себе занятие, лучше создать регистр, настроить движения документа по созданному регистру и уже оттуда выдёргивать данные запросом.
Через строки читаете?
0
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91
18.12.2025, 06:58  [ТС]
Если я правильно понял, то если много документов, то лучше создать дополнительный регистр сведений через расширение. Затем делаем его подчиненным регистраторам нужных мне документов, к примеру "Реализация товаров и услуг", "Поступление товаров" и т.д. Документы тоже добавляем в расширение и там прописываем алгоритм регистрации документа в регистр, при проведении.

Тогда не будет запрашиваться много различных документов, обращения будут к одному регистру. И не нужно будет городить огород из запросов. Соответственно программа будет работать быстрее, как Вы мне и сказали.

Еще раз благодарю за советы и объяснения!

P.S. Обычно алгоритм регистрации какого-либо документа в регистр делаю сначала через конструктор, потом если требуется редактирую уже руками.

Добавлено через 1 час 20 минут
Попутно возник еще один вопрос. Сразу оговорюсь, что если выполнять несколько запросов последовательно и выгружать данные во временную таблицу, то каждый следующий запрос затрет результат предыдущего. Равно каки если их выгружать последовательно в табличную часть документа.

Такимс образом, мне понадобился еще документ добавить в запрос - "Таможенная декларация". Чтобы не делать уже совсем много запросов в одном, я сделал отдельный запрос на получения данных по этому документу в табличную часть обработки.
Все поля заполняются, но почему-то поле "ТипДокумента" не заполняется, хоть тресни.

Вот код:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Запрос2 = Новый Запрос;
    
    ТекстЗапроса2 =   "ВЫБРАТЬ
                      | ТаможеннаяДекларацияИмпорт.Дата КАК Дата,
                      | ТаможеннаяДекларацияИмпорт.Номер КАК Номер,
                      | ТаможеннаяДекларацияИмпорт.СуммаДокумента КАК СуммаДокумента,
                      | ТаможеннаяДекларацияИмпорт.Ссылка КАК ТипДокумента,
                      | ТаможеннаяДекларацияИмпорт.Автор.Наименование КАК Автор,
                      | ТаможеннаяДекларацияИмпорт.Контрагент.НаименованиеПолное КАК Контрагенты
                      |ИЗ
                      | Документ.ТаможеннаяДекларацияИмпорт КАК ТаможеннаяДекларацияИмпорт
                      |ГДЕ
                      | ТаможеннаяДекларацияИмпорт.Дата МЕЖДУ &НачалоПериода И &КонецПериода
                      |
                      |УПОРЯДОЧИТЬ ПО
                      | Дата"; 
    
    Запрос2.Текст = ТекстЗапроса2;   
    
    Запрос2.УстановитьПараметр("НачалоПериода",Объект.НачалоПериода);
    Запрос2.УстановитьПараметр("КонецПериода",Объект.КонецПериода);
    
    РезультатЗапроса2 = Запрос2.Выполнить();
    
    ВременнаяТаблица2 = РезультатЗапроса2.Выгрузить();
    
    НоваяВременнаяТаблица = Новый ТаблицаЗначений; 
    
    НоваяВременнаяТаблица = ВременнаяТаблица.СкопироватьКолонки();
        
    Для Каждого Строка Из ВременнаяТаблица Цикл
        
        Если Строка.Автор = "Galina" Или Строка.Автор = "Admin" Или Строка.Автор = "Malygina" 
            Или Строка.Автор = "Konovalenko"
            
            Тогда 
            
            НоваяСтр = НоваяВременнаяТаблица.Добавить();
            
            ЗаполнитьЗначенияСвойств(НоваяСтр, Строка);
            
        КонецЕсли; 
        
    КонецЦикла;
    
    Для Каждого Строка Из ВременнаяТаблица2 Цикл
        
    Если Строка.Автор = "Galina" Или Строка.Автор = "Admin" Или Строка.Автор = "Malygina" 
            Или Строка.Автор = "Konovalenko"
            
            Тогда 
            
            НоваяСтр = НоваяВременнаяТаблица.Добавить();
            
            ЗаполнитьЗначенияСвойств(НоваяСтр, Строка); 
            
        КонецЕсли;
        
    КонецЦикла;
При этом остальные данные все попадают в свои поля, кроме поля "Ссылка". Тип поля в ТЧ - "Ссылка". То что какая-то буква может псевдонима может быть написана на другом языке отпадает, т.к. псевдоним поля копировал из прошлого запроса. Из него все данные попадают куда надо. Если пишу псевдоним поля "Ссылка" - "Контрагенты", туда ссылка приходит без проблем. Почему так может быть?

P.S. Какой поставить тэг на код, чтобы он был виден лучше? А то мне правили сообщения, указав на это, а я не пойму какой конкретно тэк ставить?
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4767 / 963 / 269
Регистрация: 22.04.2013
Сообщений: 6,644
Записей в блоге: 1
18.12.2025, 08:33
возможно потому, что ЗаполнитьЗначенияСвойств заполняет только то, что совпадает по имени. сам он догадаться, что в колонку на форме под именем "контрагент" надо запихнуть "ссылка" оно не может
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    ТекстЗапроса2 =   "ВЫБРАТЬ
                      | ТаможеннаяДекларацияИмпорт.Дата КАК Дата,
                      | ТаможеннаяДекларацияИмпорт.Номер КАК Номер,
                      | ТаможеннаяДекларацияИмпорт.СуммаДокумента КАК СуммаДокумента,
                      | ТаможеннаяДекларацияИмпорт.Ссылка КАК ТипДокумента,
                      | ТаможеннаяДекларацияИмпорт.Автор.Наименование КАК Автор,
                      | ТаможеннаяДекларацияИмпорт.Контрагент.НаименованиеПолное КАК Контрагенты
                      |ИЗ
                      | Документ.ТаможеннаяДекларацияИмпорт КАК ТаможеннаяДекларацияИмпорт
                      |ГДЕ
                      | ТаможеннаяДекларацияИмпорт.Дата МЕЖДУ &НачалоПериода И &КонецПериода
|И ТаможеннаяДекларацияИмпорт.Автор.Наименование В (&МассивАвторов)
                      |
                      |УПОРЯДОЧИТЬ ПО
                      | Дата"; 
    
    Запрос2.Текст = ТекстЗапроса2;   
    
    Запрос2.УстановитьПараметр("НачалоПериода",Объект.НачалоПериода);
    Запрос2.УстановитьПараметр("КонецПериода",Объект.КонецПериода);
МассивАвторов = Новый Массив;
МассивАвторов.Добавить("Вася");
МассивАвторов.Добавить("Петя");
МассивАвторов.Добавить("Пупкин Василий Иванович");
Запрос2.УстановитьПараметр("МассивАвторов", МассивАвторов);
 
ТЗ.Загрузить(Запрос2.Выполнить().Выгрузить());
раз уж Вы не хотите слушать советов и всё равно всех по строкам засовываете
и в таком случае не надо обходить выборку ещё раз и тратить драгоценное время
0
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91
18.12.2025, 08:48  [ТС]
Так с авторами то все нормально, не приходит ссылка в столбец "ТипДокумента". Сейчас по пробовал еще с Заказом клиента. Результат - тоже самое. Колонка "ТипДокумента" - пустая. Остальные все заполнены. При этом первый запрос отрабатывает все нормально. Почему так? Не могу понять, все везде правильно, ссылка не приходит? При этом в отладке все попадает во "ВременнаяТаблица".

Если делать условие, как Вы предлагаете, мне в каждом запросе по отдельности надо это прописывать. А их у меня двенадцать штук. А так только один раз в коде.

P.S. Я могу конечно пробежаться циклом по таблице и заполнить эту колонку, но не вижу смысла огород городить, когда есть штатный механизм с Псевдонимами.
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4767 / 963 / 269
Регистрация: 22.04.2013
Сообщений: 6,644
Записей в блоге: 1
18.12.2025, 09:05
мы на разных языках говорим.
если вы настаиваете на 12-ти запросах, то необходимо это вынести в функцию
передавать, например, текст запроса. получать таблицу значений или даже там её и заполнять
просто неправильно получать данные из запроса, а потом опять обходить результат и делать отбор. запрос для того и запрос, чтобы можно было группировать, отбирать, соединять. а построитель сам разберётся, как ему лучше оптимизировать это
0
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91
18.12.2025, 09:21  [ТС]
Да, я планирую вынести это в отдельную функцию и там обработать. Вопрос, почему не заполняется "ТипДокумента" со второго запроса?

Добавлено через 9 минут
Причем, если я эту колонку копирую из второй таблицы, тогда она заполняется из второго запроса, который туда выгружается, но с первого опять же не встает. Заколдованный круг какой-то.
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4767 / 963 / 269
Регистрация: 22.04.2013
Сообщений: 6,644
Записей в блоге: 1
18.12.2025, 10:02
если настаиваете и не можете разобраться (такое бывает, это не наезд), то можно написать так, дополнив код:
1C
1
2
ЗаполнитьЗначенияСвойств(НоваяСтр, Строка);
Новаястр.КакоетоПоле = Строка.ТакоежеПолеТолькодругое;
потому что мне кажется, что проблема в именовании колонок

п.с. всё можно отладить, остановившись отладчиком и посмотрев, что хранится в нов строке и в строке
1
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91
18.12.2025, 11:16  [ТС]
Все знать не возможно и у всех нас бывают свои вопросы и не понимание каких-то аспектов разных наук, в данном случае встроенного языка 1С. Это совершенно нормально, по этому никакого наезда нет и быть не может. Я в принципе Вам всем тут благодарен, потому что Вы отзываетесь и пытаетесь помочь! И спасибо за отличный ресурс (Этот Форум), который позволяет это сделать!

Теперь к нашему вопросу. Я тоже грешил на название, даже пересоздавал реквизит в табличной части и программа мне сразу писала, что реквизит "ТипДокумента" используется в коде и давала мне две ссылки на первый запрос и второй. Т.е. тут все хорошо.

Ваш вариант по пробовал - тоже самое. Посмотрел отладчиком эту часть кода:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
Для Каждого Строка Из ВременнаяТаблица2 Цикл
        
    Если Строка.Автор = "Galina" Или Строка.Автор = "Admin" Или Строка.Автор = "Malygina" 
            Или Строка.Автор = "Konovalenko"
            
            Тогда 
            
            НоваяСтр = НоваяВременнаяТаблица.Добавить();       
            ЗаполнитьЗначенияСвойств(НоваяСтр, Строка); 
                        
        КонецЕсли;
        
    КонецЦикла;
В параметр "Строка.ТипДокумента" приходит как раз ссылка и все связанное с ней. В параметр "НоваяСтр.ТипДокумента" не приходит ничего. Просто стоит "Не определено". В любую другую колонку, на-пример "Строка.Контрагенты", как я писал выше все приходило без проблем. Это я в качестве эксперимента пробовал.
0
Модератор
Эксперт 1С
 Аватар для Yulunga
4767 / 963 / 269
Регистрация: 22.04.2013
Сообщений: 6,644
Записей в блоге: 1
18.12.2025, 11:59
Цитата Сообщение от vitty Посмотреть сообщение
НоваяВременнаяТаблица = ВременнаяТаблица.СкопироватьКолонки();
ну у вас во временной таблице была ссылка на не знаю что. допустим на фрукты
а тут вы получаете овощи
и говорите - запихни в ящик с фруктами картошку
ессно, что она туда не пихается.
0
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91
18.12.2025, 13:56  [ТС]
Так все остальное то попадает без проблем. Колонок то в переменной "ВременнаяТаблица" больше чем в "ВременнаяТаблица2", но те что есть во второй полностью совпадают с первой. Это я к тому, что колонки все копируются с первой в переменную "НоваяВременнаяТаблица".

И все остальное приходит - еще пять колонок.

Добавлено через 1 час 35 минут
Да, хотел отменить еще один момент, относительно Регистра Сведений. Да, его можно создать, но чтобы документы являющиеся регистраторами этого регистра, туда попадали необходимо их все перепровести. А это не реально так взять и к примеру за год перепровести. Все полетит, причем в двух базах, в УТ и Бухгалтерии, поскольку у нас связка. Другой вопрос, это можно сделать на будущее и потихоньку, своим чередом они будут туда попадать.
0
Эксперт 1С
7175 / 1777 / 648
Регистрация: 16.01.2015
Сообщений: 7,346
18.12.2025, 14:01
Цитата Сообщение от vitty Посмотреть сообщение
Да, хотел отменить еще один момент, относительно Регистра Сведений
Какой регистр сведений? Зачем? не занимайтесь ерундой, да еще связанной с непомерным раздутием базы. Берите готовые регистры накопления по которым идут движения нужных доков, пример приводил.
0
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91
19.12.2025, 10:27  [ТС]
Запрос все из регистра сведений "Реестр документов", там есть все. Теперь код стал гораздо меньше и работать стало быстрее. Все оптимизировал и разбил все по функциям и процедурам. Спасибо большое!
0
19.12.2025, 11:52

Не по теме:

ура. наконец-то. молодец. мои поздравления. половина работы сделана. теперь осталось уйти от процедур и функций и сразу получать из запроса.

0
2 / 2 / 2
Регистрация: 08.06.2014
Сообщений: 91
19.12.2025, 12:27  [ТС]
Да, мне знакомый программист объяснил, что лучше все условия делать в запросе. (Как и Вы выше). А если запросов несколько и сделаны объединения полей, тогда все выгружается все во временную таблицу (классическая временная таблица в запросе) и там настраивается условие. Тогда не надо делать отдельное условие в каждом запросе. Еще он мне показал, как это делается через СКД, чтобы было еще проще.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.12.2025, 12:27

Сделать запрос на объединение двух регистров накопления
Здравствуйте! Есть 2 регистра накопления: ДвиженияТоваровСЗ и ДвиженияТоваровЮЗ. В них по 2 поля,...

Объединение двух запросов в отчете
Здравствуйте, целый день мучаюсь, помогите с задачкой: делаю отчет, с помощью которого формируются...

Объединение две формы в одном окне
Можно ли программно объединить две формы в одном окне? Если кликнуть ПКМ по заголовку формы, то там...

Объединение двух процедур в одну
Приветствую, коллеги! Имеются следующие процедуры: &НаКлиенте Процедура...

Как зафиксировать область просмотра колонок(1c7.7), т.е. как закрепить столбец у справочника...
Добрый день. Помогите пожалуйста, как можно зафиксировать область просмотра, например, у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru