|
|
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Заранее прошу прощения за, возможно, глупый вопрос, но все же: Есть отчет "Журнал ордер по счету 311 Текущие счета в национальной валюте". Стоит задача, вытащить данные о движении по счетам в развернутом виде. Под развернутым видом я понимаю возможность добраться до контрагентов и слагаемых суммы. Также необходимо полностью без каких-либо изменений импортировать в свою базу отчет "Оборотно-сальдовая ведомость" по счетам 361 и 631 (поставщики и покупатели). Опыта работы с 1С нет. Пока что научился только вытаскивать данные из таблиц, а вот как быть с отчетом разобраться не могу. Буду очень рад примерам, Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 14:12 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
если быстро, то сохранить отчет в эксель и оттуда выгрузить/загрузить куда хошь... если правильно, то "разобраться" в 1С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 14:14 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
Dolter, Спасибо за быстрый ответ. Хотелось бы, чтобы импорт мог происходить в одностороннем порядке. Или Вы имеете ввиду сохранение в эксель через ОЛЕ, а потом работа с теоретически созданным внешним файлом (я так понимаю, что можно сохранить и в XML) ? Этот вариант подходит для 361 и 631 счетов, для которых не нужна никакая обработка, а как быть с 311, по которому еще надо получить доступ к контрагентам по каждому субсчету? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 14:26 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
авторХотелось бы, чтобы импорт мог происходить в одностороннем порядке. с какой стороны ? в любом случае вам прийдётся научиться писать запросы к бухгалтерским данным а уже от "стороны" одностороннего порядка зависит прийдётся вам осваивать выгрузку в эксемель или ексель в 1це или же обойдётесь возможностями своего софта учтите что оле воспринимает только примитивные типы данных т.е. контрагентов скажем по ОКПО прийдётся загружать ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 14:41 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
Под односторонним доступом я понимаю доступ из моего приложения так, чтобы бухгалтерам, которые работают с 1С вообще ничего делать не надо было. Last1Cmenв любом случае вам придётся научиться писать запросы к бухгалтерским данным а уже от "стороны" одностороннего порядка зависит придётся вам осваивать выгрузку в эксемель или ексель в 1це или же обойдётесь возможностями своего софта На данный момент меня больше всего интересует, как вообще запустить отчет через ОЛЕ. В том числе, мне не понятно, как взять имя отчета и передать ему какие-либо параметры. Если к справочникам или журналам я могу получить доступ через Код: plaintext Код: plaintext Last1Cmen учтите что оле воспринимает только примитивные типы данных т.е. контрагентов скажем по ОКПО прийдётся загружать ну и т.д. не совсем понял, что именно Вы имеете ввиду, но отвечу как понял: справочники между моей системой и 1С уже более-менее синхронизированы и в 1С даже хранятся идентификаторы контрагентов из моей базы, а если этот идентификатор пустой, то естественно буду сравнивать по ОКПО. В общем, ближайший промежуточный вопрос, как запустить отчет из своего приложения и получить доступ к его результату? Если это проще сделать через сохранение отчета во внешний файл, то буду очень рад примерам или ссылкам на литературу, как это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 16:08 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
Новичок в 1С, ну если я попробую вот привести нечто в иннициаторе обмена есть следущий код Код: plaintext 1. 2. 3. 4. 5. 6. 7. т.е. идёт предача вызова процедуры (только в глобальном модуле) которая возвращает таблицу значений результата в источнике есть следующее в глобальном модуле авторФункция глОбменОле(ДатаС,ДатаПо,КодПоставщика, ОКПОФирмы) Экспорт //блаблабла тбДок = СоздатьОбъект ("ТаблицаЗначений"); стр = ЗначениеВСтроку(тбДок); возврат стр; КонецФункции //глОбменОле в ней выборка необходимых документов и выгрузка и табличных частей т.е. в вашем случае вместо //блаблабла и т.д. можете вставить вызов любого отчета через ОткрытьФорму("Отчет",Парам) (где парам параметры для отчета) и после того как онотработает то получить свой результат в Парам а уже из него вернуть преобразовав в строку которую и примете в базе иннициаторе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2010, 16:27 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
наконец-то вернулся к данному вопросу. Last1Cmen, спасибо за помощь. Теперь мое непонимание продвинулось чуть дальше: 1. Если как передать параметры отчету, я вроде бы понял: Код: plaintext 1. 2. 3. 4. то как их обработать я не представляю. Как я вижу, мне надо дописать в функцию "ПриОткрытии" этого отчета обработку параметров, так? Но когда я пытаюсь выполнить Код: plaintext отладчик выдает ошибки на все обращения к методам или переменным глобального модуля, например: авторЕсли глПроверкаПериода<<?>>(Дата1,Дата2) = 0 Тогда {Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма.Модуль(118)}: Функция не обнаружена (глПроверкаПериода) Если глИспользуетсяРазделительУчета <<?>>= 1 Тогда {Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма.Модуль(122)}: Переменная не определена (глИспользуетсяРазделительУчета) 2. Самое главное, мне ж надо не форму открыть, а получить данные из отчета. Я правильно понимаю, что это можно сделать дописав свою функцию в модуль отчета, которая будет дублировать содержимое обработчика нажатия кнопки "Сформировать" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 02:27 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
Я правильно понимаю, что первой процедурой при открытии отчета методом "ОткрытьФорму", будет метод "ПриОткрытии" ? или метод "Сформировать" ? В общем, помимо того, что модуль ругается на функции и переменные из главного модуля, еще и не отрабатывает код Код: plaintext Да, забыл еще 1 вещь сказать - я вызываю процедуру Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. прямо из главного модуля. Наверное, из-за этого и ругается. Догадываюсь, что так делать не правильно, но подскажите пожалуйста правильный способ трассировать программу. ________________________________________________________________ Last1Cmen в иннициаторе обмена есть следущий код о каком инициаторе Вы говорите? есть какой-то встренный типа-визард или Вы абстрактно говорите о системе, которая будет подключаться к 1С? Last1Cmen в источнике есть следующее в глобальном модуле Функция глОбменОле(ДатаС,ДатаПо,КодПоставщика, ОКПОФирмы) Экспорт //блаблабла тбДок = СоздатьОбъект ("ТаблицаЗначений"); стр = ЗначениеВСтроку(тбДок); возврат стр; КонецФункции //глОбменОле в ней выборка необходимых документов и выгрузка и табличных частей т.е. в вашем случае вместо //блаблабла и т.д. можете вставить вызов любого отчета через ОткрытьФорму("Отчет",Парам) (где парам параметры для отчета) и после того как онотработает то получить свой результат в Парам а уже из него вернуть преобразовав в строку которую и примете в базе иннициаторе не понятно, как увязать запуск отчета по ОткрытьФорму("Отчет",Парам) и ТаблицуЗначений Last1Cmen Функция глОбменОле(ДатаС,ДатаПо,КодПоставщика, ОКПОФирмы) Экспорт ОткрытьФорму("Отчет",Парам) // т.е. что должно быть здесь не понятно тбДок = СоздатьОбъект ("ТаблицаЗначений"); стр = ЗначениеВСтроку(тбДок); возврат стр; КонецФункции //глОбменОле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 04:18 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
Новичок в 1С, мдя... в три строки не объяснишь пока тестировать не буду... попытайтесь проверить следующее 1. кроме самой строки вызова и обработки полученного значения (строка а в ней уже чего вам надо будет) в БД иннициаторе (т.е. откуда вызов будет и куда в ывернёте отработанное значение) ничего нет... задача той базы откуда поключение идет просто передать параметры в базу источник и получить из неё результат а потом уже его обрабатывать в иннициаторе/приёмнике никаких визардов нет 2. в источнике (куда подключаемся) действуем по той же схеме... делаем вызов чего-то в среде уже поключения (там есть ограничения но я про них не скажу т.к. всё не помню) и у нас это будет вызов отчета т.е. в базе источнике Код: plaintext 1. 2. 3. 4. это правильно затем в модуле той формы которую открываете (тут я не тестировал в режиме ОЛЕ но в локальном контексте работает) получаете этот список в процедуре ПриОткрытии() Форма.Параметр - и есть этот список... запускаете внутри отчет на формирование и выводите не в печ. форму а в таблицу которую и присваиваете опять "параметру" формы... после того как она отработает она вернёт в точку вызова таблицу с необходимыми значениями т.е. тут // т.е. что должно быть здесь не понятно будет предварительный разбор полученного значения и ниже перевод его в строку для возврата уже базе откуда было поключение (иннициаторе) схема в итоге такая (БДИн - база иннициатор т.е. откуда подключаемся, БДИст - база источник данных т.е. куда подключаемся, Отчет БДИст - ваш отчет в базе источнике) 1. БДИн -> БДИст (глобальный модуль) 2. БДИст (глобальный модуль) -> вызов Отчета БДИст 3. выполение Отчета БДИст -> возврат результата в БДИст (глобальный модуль) 4. БДИст (глобальный модуль) -> возврат результата в БДИн должно быть что-то типа ЗначениеИзСтрокиВнутр(Парам) (где Парам - возвращаемое значение) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 11:08 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
В общем, продвигаюсь оччень медленно(( Буду спрашивать по-шагово. Собственно тело отчета формируется в методе "Сформировать". Что происходит в этом методе я до конца не понимаю: Процедура Сформировать ( Эту часть я понимаю ) Код: plaintext 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. Продолжение процедуры Сформировать ( здесь многое не понятно ) Код: plaintext 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. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. похоже, что ключевой оператор здесь вот этот Код: plaintext Метод ВывестиСекцию выполняет перенос именованной секции из исход¬ной таблицы-шаблона в результирую-щую таблицу. Имя секции задается стро¬ковым выражением следующего формата: ИдентификаторСекции1[<|>|-][|ИдентификаторСекции2[<|>|-]] Символы "<" , ">" , "-" после идентификатора секции указывают на то, что выбирается только часть секции: < заголовочная часть (с начала секции до начала вложенной сек¬ции). > подвальная часть (с конца вложенной секции до конца секции). — средняя часть (собственно вложенная секция). В выражении <Секция> можно задавать имена двух секций, разделенных зна¬ком "|". При этом перенесена будет область исходной таблицы, являющаяся пересечением первой и второй указанных секций. При этом одна секция может быть горизонтальной (состоять из строк), а другая — вертикальной (состоять из колонок). В результате перенесется прямоугольная область таблицы. Если в качестве параметра метода задано строковое значение имени секции, то при переносе ячейки таблицы, имеющие тип «Шаблон» и «Выражение», будут заполнены соответствующими данными. Метод ВывестиСекцию помещает новую секцию со следующей строки вслед за последней выведенной секцией, начиная с первой колонки. Итак, вопросы: 1. Нафиг нужен объект Код: plaintext 2. Я так понимаю, что тело отчета формируется операторами "ВывестиСекцию". А потом отчет показывается методом "Показать". Как мне сделать, чтоб этот отчет возвращался в качестве результата функции и какой будет тип у этого результата? 3. Как мне вообще распарсить этот отчет в программе-инициаторе? 4. Не будет ли проще, как вроде бы предлагалось в начале, сохранить этот отчет в файл, а в программе-инициаторе парсить уже файл? Если так проще, то все равно не понятно, как сохранить в файл в каком-нибудь простом формате (например XML)? (естественно программно) Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 17:20 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
В отчете идет вывод в печатную форму, тебе этого делать не надо... тебе нужно вернуть таблицу значений, т.е. в большинстве случаев там где идет ВывестиСекцию() тебе необходимо заменять на конструкцию Код: plaintext 1. 2. 3. 4. таким образом к тому моменту когда отчет отработает у тебя будет ТЗ - таблица необходимых тебе значений Параметру формы ты присваиваешь эту таблицу и закрываешь форму Как "выловить" то что сформировать отчет надо как Вам необходимо а не как положено (окрыть нажать на кнопку сформировать и нажать на кнопку закрыть) ? вот перед вызовом формы из глобального модуля вы делаете список параметров для передачи так и передайте туда ещё один параметр... скажем БезОткрытияФормы авторСписокПараметров = СоздатьОбъект( "СписокЗначений" ); СписокПараметров.ДобавитьЗначение( ДатаС, "ДатаС"); СписокПараметров.ДобавитьЗначение( ДатаПо "ДатаПо"); СписокПараметров.ДобавитьЗначение( НомерСчета, "НомерСчета"); СписокПараметров.ДобавитьЗначение( 1, "БезОткрытияФормы"); ОткрытьФорму ("Отчет.ОборотноСальдоваяВедомостьПоСчету", СписокПараметров); далее в модуле отчета уже при открытии получаете этот список (через Форма.параметр.получить(ИмяПараметра)) и если Форма.параметр.получить("БезОткрытияФормы") = 1 присваиваете остальным реквизитам отчета значения из списка и вставляете вызов процедуры формирования Код: plaintext 1. 2. 3. а в теле процедуры Сформировать() в конце добавляем опять же Код: plaintext 1. 2. таким образом отчет отработает без вывода в печатную форму (выводить в таблицу вам необходимую будет) и сам выйдет при этом вернув вам таблицу результата в глобальный модуль вот и всё в принципе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 18:08 |
|
||
|
Импорт данных из 1С77-dbf в Firebird через Delphi.
|
|||
|---|---|---|---|
|
#18+
авторНе будет ли проще, как вроде бы предлагалось в начале, сохранить этот отчет в файл, а в программе-инициаторе парсить уже файл? Если так проще, то все равно не понятно, как сохранить в файл в каком-нибудь простом формате (например XML)? (естественно программно) можно... только не эксемель а в эксель можно... я думаю вам это проще будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2010, 18:09 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=36428039&tid=1522796]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
245ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 596ms |

| 0 / 0 |
