8.х COM-соединение

Тема в разделе "Установка платформы "1С:Предприятие 8"", создана пользователем admin1C, 17 июн 2008.

  1. TopicStarter Overlay
    admin1C
    Offline

    admin1C

    Регистрация:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    ПОдскажите пожалуйста как вытащить реквизиты документа из удаленной базы в местную? Параметры документа(Вид документа, номер) вводятся пользователем в соответствующие поля. далее прога получает этот документ из удаленной базы. требуется его в местной базе сохранить, а универсального механизма для чтения всех реквизитов документа в оле я не знаю.
  2. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Ну дык и обращаешься к нему как к "родному" объекту. Все реквизиты и методы доступны точно так же (ну конечно же нужно учитывать, что пространство объектов разные. Т.е. Перечисления.РазДваТри.Три не равно OLEПеречисления.РазДваТри.Три - сверять по коду, наименованию или иному реквизиту легко преобразуемому к текстовому, числовому типу, или типу Дата)
  3. TopicStarter Overlay
    admin1C
    Offline

    admin1C

    Регистрация:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Дак у разных документов же реквизиты разные. Плюс я еще из Управление торговлей в Бухгалтерию вытаскиваю, в них документы и сами по себе отличаются набором этих самых реквизитов. Просто хочется думать что можно обойти как нибудь этот цикл условий типа: Если расходник То приемник.реквизит1=источник.реквизит1 ИначеЕсли ПеремещениеТоваров Тогда приемник.реквизит2 = источник.реквизит2. может есть такой способ?
  4. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Ну разный набор реквизитов, ну пропиши программку под эти реквизиты (их же не миллион в конце концов), а универсальное... в семерке это список реквизитов объекта (документы, справочники) можно было тянуть через Метаданные. Но писать универасальные штуки - кода получается не разу не меньше, а сложность получившегося кода - зуть.

    А так, конфу же не меняете каждый день? Да и реквизиты уже имеющиеся не удаляете обычно и не переименовываете. Поэтому нежли париться, лучше написать код под конкретный набор реквизитов, конкретных типов.
  5. TopicStarter Overlay
    admin1C
    Offline

    admin1C

    Регистрация:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Просто очень много документов, если быть точной - 97... у каждого в среднем 5 реквизитов... Это ж убиться под каждый код писать... Еще такая тупость что ни в управлении торговлей ни в бухгалтерии у меня НайтиПоНомеру не работает... Причем именно для документов. Для элементов справочника все нормально. Я уже начинаю сомневаться, правильно ли я делаю, что через СОМ-соединение подключаюсь. Может проще автоматическую выгрузку в удаленной базе написать, и потом уже в местную загружать...
  6. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Во первых все 97 документов тащить врядли придется. А писать обработку руками по любому придется. Только если при СОМ соединении все реквизиты объектов сразу доступны, то при выгрузке-загрузке, вначале придется писать выгрузчик, затем загрузчик. При этом нужно будет учитывать структуру файла обмена и различия в конфе, что ЗНАЧИТЕЛЬНО усложняет дело. + Если нужно будет что-то изменить, то придется править ни одну, а две обработки. Т.е. СОМ путь оптимален, при условии, что базы находятся рядом. Но никто не говорит, что он прост и легок...
  7. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    А в "родной" среде НайтиПоНомеру работает?
    Может где пробелы закрались? Может номер символьный а не цифровой?
    Кстати, 5 реквизитов - они (или часть из них) поди еще и одинаково называются? Тогда можно написать одну общую процедуру, куда на вход документ "родной" и документ олешной базы. И она (процедура) совпадающие реквизиты ать - и перенесет.

    Да, и как заметил предыдущий оратор. Писать не через COM - тоже самое что и через ком + время на формирование файла переноса (+10-15% времени писаниниы) + загрузка файла переноса с его анализом + 10-20% писанины - и того увеличение времени на разроботку до 40% + сложность использования полученного комплекса.
  8. TopicStarter Overlay
    admin1C
    Offline

    admin1C

    Регистрация:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Работает. И в местной и в удаленной базе работает. просто совершенно случайно от безвыходности ситуации написала Документ.Такойто.НайтиПоНомеру(Номер, ТекущаяДата());. Понятия не имею, зачем ему текущая дата, но работает именно с такими параметрами. Дату документа задавать бесполезно - не находит. А если ТекущаяДата - находит как раз тот документ, который надо - в частности, от 17.02.2007. :unsure: А в оле-базе параметр дата(который, как предварительно читала в хелпе, является необязательным, а фактически, без него ничего не работает) идет как Date(ДатаДокумента)...
  9. TopicStarter Overlay
    admin1C
    Offline

    admin1C

    Регистрация:
    17 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Мне все 97 ненада. Просто пользователь должен ввести вид документа сам, так что получается что для меня он рандомом, неизвестный, так что обработку для всех писать придется. ну самое главное что к документу я подключилась, ща осталось только обработать 97 видов документов из УправлениеТорговлей чтоб выгружался любой из выбранных и в принципе задача решена. жесть...
  10. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Все же влезу и со своим предложением :)

    Ну момент универсальности я думаю все же можно внести. Через метаданные получать все реквизиты входящего документа и все реквизиты получаемого документа. Более чем уверен многие из них совпадут. Уже проще. Потом как вариант можно написать некое соотвествие реквизитов входящих документов реквизитам документам получаемым. Ну скажем создать тоже соотвествие. И в цикле уже бегать по этому соотвествию выбирать имена реквизитов и присваивать. Т.е получаетяс нужно будет написать процедурку обработки соотвествия и заполнить само соотвествие. Вроде не много и сильно кода получается. И опять же в будующем достаточно будет дополнять соотвествие и не перепысывать по несколько раз код.

    Вот. Я бы сделал как-то так :)

Поделиться этой страницей