|   |   | 
| 
 | Выгрузка данных из таблицы 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) Пасибо, буду вкуривать)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |