Имя: Пароль:
1C
1С v8
Выгрузка данных из таблицы SQL в табличные части нового документа
0 MrFilO
 
15.07.16
11:38
Товарищи, в разработке пока плаваю...
В общем, есть таблица в БД SQL, туда высыпается история продаж из БелмагКассир, нужно выгрузить данные из этой таблицы в новый док Z-отчеты, с заполнением табличных частей данными из таблицы SQL,
причем создание дока с текущей датой, формированием номера для дока и т.п. Я так понимаю, что проще выгрузить все данные из БД в ТЗ, а затем уже выбирать нужные поля и забивать в соответствующую ТЧ. С созданием документа вроде разобрался, описать ТЗ вроде тоже получилось, а вот как пройтись по строкам из таблицы БД, да выгрузить их в ТЗ, а затем в ТЧ...тут я в тупике, вариантов в гугле масса, но как-то под мою задачу ничего похожего не нашел, хотя и процедура вроде бы популярная...
Помогите кто чем может, вот набросал
...

Попытка
        Соединение  = Новый COMОбъект("ADODB.Connection");
        Команда     = Новый COMОбъект("ADODB.Command");
        Выборка     = Новый COMОбъект("ADODB.RecordSet");
        Соединение.ConnectionString =
            "driver={SQL Server};" +
            "server="+ИмяСервераSQL+";"+
            "uid="+ПользовательSQL+";"+
            "pwd="+ПарольSQL+";"+
            "database="+БазаДанныхSQL+";";
        Соединение.ConnectionTimeout = 30;
        Соединение.CommandTimeout = 600;
        //Открытие соединение
        Соединение.Open();
        Команда.ActiveConnection   = Соединение;
        Сообщить("Успешное подключение!");
            
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;

    
    Продажи = Новый ТаблицаЗначений ();
    Продажи.Колонки.Добавить("Дата");    
    Продажи.Колонки.Добавить("КодТовара");
    Продажи.Колонки.Добавить("Количество");
    Продажи.Колонки.Добавить("ЕдиницаИзмерения");
    Продажи.Колонки.Добавить("СтавкаНДС");
    Продажи.Колонки.Добавить("СуммаНДС");
    Продажи.Колонки.Добавить("Сумма");
    Продажи.Колонки.Добавить("Склад");
    Продажи.Колонки.Добавить("ТипКарты");
    Продажи.Колонки.Добавить("ПОС");
    Продажи.Колонки.Добавить("Смена");
    Продажи.Колонки.Добавить("ДатаСмены");
    Продажи.Колонки.Добавить("СуммаНал");
    Продажи.Колонки.Добавить("Фирма");

Команда.CommandText =
    "SELECT * FROM dbo.history";                
    Попытка
    Выборка = Команда.Execute();
1 Горогуля
 
15.07.16
11:44
предлагаю начать с освоения документации
2 Горогуля
 
15.07.16
11:46
а прокладка в виде ТЗ - это ради увеличения числа строк кода?
3 MrFilO
 
15.07.16
11:46
(1) это, конечно, само собой подразумевается, но сейчас есть конкретно поставленный вопрос
4 MrFilO
 
15.07.16
11:47
(2) Нет, а есть другие варианты?
5 Горогуля
 
15.07.16
11:47
(3) конкретный ответ на который есть в той самой документации.  от чтения умнеют
6 HEKPOH
 
15.07.16
11:47
Выборка = Команда.Execute();

Пока Не Выборка .EOF Цикл
        
НС = Продажи.Добавить();
НС.Дата = Выборка.Fields("Дата").Value;
...
Выборка.MoveNext();
КонецЦикла;
7 Горогуля
 
15.07.16
11:47
(4) есть: не использовать прокладку в виде ТЗ
8 Горогуля
 
15.07.16
11:48
(6) а MoveFirst() на всякий пожарный не надо?
9 HEKPOH
 
15.07.16
11:49
(8) не-а
10 HEKPOH
 
15.07.16
11:50
+(9) код на 100% рабочий
11 MrFilO
 
15.07.16
11:51
(6) шикарно, благодарю, а можно вместо многоточия одну строку для примера? или аналогично "Дата" перебирать остальные? Просто в доке несколько ТЧ, хочу глянуть, как будет происходить выгрузка в разные ТЧ
12 HEKPOH
 
15.07.16
11:53
(11) аналогично "дата" перебрать все поля выборки
13 MrFilO
 
15.07.16
11:56
А запись в ТЧ аналогично этой конструкции делать?

Докум = Документы.Zотчет.СоздатьДокумент();
                
Для каждого Стр Из Продажи Цикл
Докум.Дата = ТекущаяДата();
                                
НоваяСтрока = Докум.Состав.Добавить();
НоваяСтрока.СМС = Выборка...;
14 lEvGl
 
гуру
15.07.16
11:57
не сталкивался с zотчетом, но разве там в таб частях все поля строковые/числовые? ссылочных нет ?
15 Горогуля
 
15.07.16
11:59
а ещё бывает на свете КД...
16 MrFilO
 
15.07.16
11:59
(14) попахивает новой головной болью)
17 Горогуля
 
15.07.16
12:00
(16) попахивать начнёт, когда потребуется из плоской внешней таблицы перетаскивать, к примеру, номенклатуру с сохранением иерархии и отсутствием дублей
18 MrFilO
 
15.07.16
12:01
Так а что касательно, конструкции загрузки данных уже в ДОК?
19 Горогуля
 
15.07.16
12:02
(18) между пятым и седьмым постом
20 MrFilO
 
15.07.16
12:04
(19) Так это же вроде заполнение ТЗ? Не?
21 Горогуля
 
15.07.16
12:05
НС = ОченьНовыйДокумент.Продажи.Добавить();
22 lEvGl
 
гуру
15.07.16
12:06
(17) все здесь уже есть, нельзя просто так взять и перенести данные одной базы в другую(с)
(20)он говорит, что ТЗ можно не использовать, а грузить сразу в ТЧ, что эта временная ТЗ не нужна
23 MrFilO
 
15.07.16
12:08
(22) аа, т.е. лабуду, что я набросал можно вполне заменить кодом "из поста между 5 и 7"?)
24 Горогуля
 
15.07.16
12:12
(23) в твоей лабуде ценного - соединение с внешней БД. остальное у Некрона
25 MrFilO
 
15.07.16
12:13
(24) Пасибо, буду вкуривать)
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой