Имя: Пароль:
1C
 
Запрос из таблицы значений. Выборка всех всех полей + одно определенное.
,
0 Dunstan
 
23.08.19
18:54
Вечер добрый господа!
Не очень удачно  озаглавил. Попробую тут разъяснить.
Задача: Добавить счета с новой обновленной базы в нашу с "испорченным" планом счетов. Сначала надо выяснить что добавилось. Отличия ищем по коду счета.  Нужно сравнить два плана счетов из 2 баз. Одна наша с "испорченным" планом счетов и эталонная с "девственным" планом.
В двух базах запускаю один и тот же запрос. Эталонная база подключается через СОМ. Далее результаты запроса выгружаю в таблицы. Далее по этим двум таблицам выясняю какие счета появились в обновленной эталонной базе и каких нет у нас.
Начал с сотворения мира....
Я еще не знаю, что за данные мне будут нужны из этих запросов. Единственное точно знаю что буду сравнивать планы счетов по коду. Другими словами, состав колонок результата запроса по планам счетов не известен. Ясно только что поле код там точно есть.
Как написать запрос со "*".  Этакий такой... универсальный текст запроса.
Изначально текст был таким:


ЗапросТудаСюда = Новый Запрос("ВЫБРАТЬ
                                  |    НашиСчета.Код КАК Код,
                                  |    НашиСчета.Наименование КАК Наименование
                                  |ПОМЕСТИТЬ ВТ_НашиСчета
                                  |ИЗ
                                  |    &НашиСчета КАК НашиСчета
                                  |;
                                  |
                                  |////////////////////////////////////////////////////////////////////////////////
                                  |ВЫБРАТЬ
                                  |    ИхСчета.Код КАК Код,
                                  |    ИхСчета.Наименование КАК Наименование
                                  |ПОМЕСТИТЬ ВТ_ИхСчета
                                  |ИЗ
                                  |    &ИхСчета КАК ИхСчета
                                  |;
                                  |
                                  |////////////////////////////////////////////////////////////////////////////////
                                  |ВЫБРАТЬ
                                  |    ВТ_ИхСчета.Код КАК Код,
                                  |    ВТ_ИхСчета.Наименование КАК Наименование
                                  |ИЗ
                                  |    ВТ_ИхСчета КАК ВТ_ИхСчета
                                  |ГДЕ
                                  |    НЕ ВТ_ИхСчета.Код В
                                  |                (ВЫБРАТЬ
                                  |                    ВТ_НашиСчета.Код КАК Код
                                  |                ИЗ
                                  |                    ВТ_НашиСчета КАК ВТ_НашиСчета)");

Программно формировать текст запроса не хочется.

ТекстТудаСюда = "ВЫБРАТЬ
                    |    НашиСчета.Код КАК Код,*
                    |ПОМЕСТИТЬ ВТ_НашиСчета
                    |ИЗ
                    |    &НашиСчета КАК НашиСчета
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    ИхСчета.Код КАК Код,*
                    |ПОМЕСТИТЬ ВТ_ИхСчета
                    |ИЗ
                    |    &ИхСчета КАК ИхСчета
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    ВТ_ИхСчета.Код КАК Код,*
                    |ИЗ
                    |    ВТ_ИхСчета КАК ВТ_ИхСчета
                    |ГДЕ
                    |    НЕ ВТ_ИхСчета.Код В
                    |                (ВЫБРАТЬ
                    |                    ВТ_НашиСчета.Код КАК Код
                    |                ИЗ
                    |                    ВТ_НашиСчета КАК ВТ_НашиСчета)";

Вот что-то такого плана. Но этот текст не работает.
1 GGDots
 
23.08.19
19:22
Почему не работает? Такой синтаксис будет работать:

ВЫБРАТЬ
    Контрагент.Ссылка,*

ИЗ
    Справочник.Контрагент КАК Контрагент

Единственное что у тебя вытащится  "Ссылка", и за счет того что указал еще раз все поля (*), то будет и дубль "Ссылка1" + все остальные поля...
2 Dunstan
 
26.08.19
10:29
Тут нюанс. Данные берем из подставленной в качестве параметра таблицы значений
3 GGDots
 
26.08.19
10:41
Да вроде работает:


    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Код"   , Новый ОписаниеТипов("Строка"));
    ТЗ.Колонки.Добавить("Товар1", Новый ОписаниеТипов("Строка"));
    ТЗ.Колонки.Добавить("Товар2", Новый ОписаниеТипов("Строка"));
    
    НС = ТЗ.Добавить();
    НС.Код    = "123123";
    НС.Товар1 = "Ковш";
    НС.Товар2 = "Вода";

    НС = ТЗ.Добавить();
    НС.Код    = "689789789";
    НС.Товар1 = "Стакан";
    НС.Товар2 = "Воздух";
    
    ТекстЗапроса = "ВЫБРАТЬ
                   |    ТЗ.Код, *
                   |ПОМЕСТИТЬ ВременнаяТЗ
                   |ИЗ
                   |    &ВнешняяТЗ КАК ТЗ
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ВременнаяТЗ.Код, *
                   |ИЗ
                   |    ВременнаяТЗ КАК ВременнаяТЗ";
    Запрос = Новый Запрос(ТекстЗапроса);    
    Запрос.УстановитьПараметр("ВнешняяТЗ", ТЗ);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        Сообщить(Выборка.Код);
        Сообщить(Выборка.Код1);
        Сообщить(Выборка.Товар1);
        Сообщить(Выборка.Товар2);
        
    КонецЦикла;
4 GGDots
 
26.08.19
10:41
Опиши типы значений колонок таблицы значений
5 ZDenis
 
26.08.19
10:46
(0) "Сравнить, объединить ..." не проще запустить? Там выдаст подробно что добавилось, что убавилось
6 Dunstan
 
26.08.19
10:55
(0) Хочу автоматизировать чтобы заранее добавить новые счета программно.
7 Галахад
 
гуру
26.08.19
11:20
По COM только простые данные можно передавать.
8 ZDenis
 
26.08.19
11:23
(6) Как правило 1С не просто так добавляет счета, а еще и новые виды субконто под них. Или меняет существующие (которые составной тип данных имеют). Так что не уверен, что программно все получиться автоматизировать
9 Dunstan
 
26.08.19
11:42
(8) Согласен Ну хотя бы частично.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан