gifts2017

Три кита работы с COM-объектами. Работать через COM-соединение проще, чем вы думаете.

Опубликовал Валерий Гайдабура (director04) в раздел Программирование - Практика программирования

Данная статья будет полезна как начинающим, так и продвинутым  программистам, которые по каким – либо причинам до сего времени не сталкивались с работой COM-соединением.
Дочитав эту статью до конца, уже через 15 минут, вы сможете напрямую  «вытягивать» данные из другой информационной базы.

ps: Хочу заранее оговориться, данная статья не претендует на звание полного и исчерпывающего мануала. Скорее всего - это просто указатель движения в правильном направлении, для быстрого освоения работы с Com-соединением.

Когда вам это пригодится.

 

Приведу всего два реальных примера из своей практики:

1.   При работе в типовой конфигурации «Бухгалтерия предприятия 2.0» необходимо получать данные первичных документов из сторонней самописной конфигурации. На основании полученных данных, автоматически создаются документы поступлений. При этом, пользователь работает исключительно в одной базе данных.

2.   Пользователь работает в переферийном узле распределенной ИБ. Необходимо, в режиме Он-Лайн, синхронизировать справочник контрагентов. На этом примере и разберем правила работы с Com – объектами.


Чем отличаются COM и OLE. Почему все же COM.

 

1.   При запуске приложения 1С:

-   OLE использует  модуль обычного приложения. Запуск занимает весьма продолжительно время.

-   Com использует модуль внешнего соединения, который содержит минимальное количество процедур и функций.

    В результате, запуск Com в типовой «Бухгалтерии предприятия 2.0» занимает в 6 раз меньше времени.

2.   При запуске Com – соединения  не создается отдельного процесса 1cv8. По отзывам пользователей партнерского форума 1С, завершение работы Ole происходит не всегда корректно.   И в этом случае наблюдаются ощутимые проблемы с производительностью рабочей станции.

Не вдаваясь в дальнейшие сравнения, даже на основании двух вышеизложенных моментов, я однозначно выбираю COM.

 

Три кита и Кит первый.

 

Создаем соединение к другой базе

Сервер = "Kappa";
БазаДанных   = "Acc";
Пользователь = "Администратор";
Пароль = "123456";

V82 = Новый COMобъект("V82.ComConnector");

СтрокаПодключения "srvr='" + СокрЛП(Сервер)
+
"'; ref='" + СокрЛП(БазаДанных)
+
"'; usr='" + СокрЛП(Пользователь)
+
"'; pwd='" + СокрЛП(Пароль) + "';";

БазаИсточник = V82.Connect(СтрокаПодключения);

Подключение к базе, работающей в файловом режиме, приведено в комментариях к данной публикации.


Кит второй

 

Все объекты, которые вы получаете через Com (у нас это БазаИсточник) имеют тип Com-объект.

Поэтому, непосредственно, мы можем использовать только реквизиты примитивных типов:

- Булево

- Строка

- Число

- Дата

 

Остальные реквизиты мы можем идентифицировать в текущей базе, через поиск:

-  по коду

-  по наименованию

-  по ИНН

-  а для узлов РИБ, наиболее точно, по внутреннему идентификатору.

 

Все Com – объекты обладают полным набором свойств и характеристик языка программирования 1С.

Пример:

СсылкаНаКонтрагента = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН);

Где, СсылкаНаКонтрагента – тип Com-объект.

КонтрагентГоловной = БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();

Исключение: в отладчике, у Com-объекта, предопределенные реквизиты имеют только англоязычную транскрипцию. Обычные реквизиты – русскую транскрипцию.

Пример:

КонтрагентСОМ = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН);

Код = КонтрагентСОМ.Code;
Наименование = КонтрагентСОМ.Description;
НаименованиеПолное = КонтрагентСОМ.НаименованиеПолное;

Все предопределенные реквизиты вы сможете получить и в рускоязычном представлении. Но, в некоторых случаях может не корректно отработать метод:


БазаИсточник.ЗаполнитьЗначениеСвойств(ТекущийКонтрагент, КонтрагентCom);

где, ТекущийКонтрагент - имеет тип обычной переменной, а 

КонтрагентCom - Com-объект.


Кит третий

 

Все конструкторы в базе-источнике создаются через метод NewObject.

Пример 1:

КонтрагентГоловной = БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();
КонтрагентГоловной.УстановитьСсылкуНового(БазаИсточник.Справочники.Контрагенты.ПолучитьСсылку(БазаИсточник.NewObject("УникальныйИдентификатор", ТекущийUID)));

Пример 2: 

СтрокаUID = БазаИсточник.XMLСтрока(СсылкаНаКонтрагента);
Запрос = БазаИсточник.NewObject("Запрос");
Запрос.УстановитьПараметр("UID", БазаИсточник.NewObject("УникальныйИдентификатор", СтрокаUID));
Запрос.Текст = "........";

Все глобальные методы в базе-источнике вызываются через Сom – соединение

Пример: UID = БазаИсточник.XMLСтрока(СсылкаНаКонтрагента);

Пример 2:БазаИсточник.ЗначениеЗаполнено(Контрагент)

Пример 3: БазаИсточник.ЗаполнитьЗначениеСвойств(Приемник, Источник);

Пример 4 (получение имени значения перечисления Com-соединения): ИмяПеречисления = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СтавкиНДС.НДС10);

 

Теперь, вы знаете три простых правила работы с Com- объектами. Получение данных удаленной базы в режиме Он-Лайн – очень востребованная и одновременно простая задача. Желаю успехов в работе.

 





См. также

Подписаться Добавить вознаграждение

Комментарии

1. Anatolii Karasev (KapasMordorov) 24.01.13 11:54
Исключение: у Com-объекта, предопределенные реквизиты имеют только англоязычную транскрипцию. Обычные реквизиты – русскую транскрипцию.

Пример:

КонтрагентСОМ = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН);

Код = КонтрагентСОМ.Code;
Наименование = КонтрагентСОМ.Description;

Неужели?
Код = КонтрагентСОМ.Код;
Наименование = КонтрагентСОМ.Наименование;

прекрасно работает.

А каков замах:
статья будет полезна как начинающим, так и продвинутым программистам
.
Gray-SV-02; AlexO; CaSH_2004; +3 Ответить 3
2. Валерий Гайдабура (director04) 24.01.13 12:07
(1) KapasMordorov, добрый день.

А каков замах:


Не знаю, как к вам обратиться по имени ))))
Поясню "таков замах": дело в том, что многие, даже и сильно продвинутые кодеры, могут многие годы прекрасно обходиться без механизмов Com-соединений (ну просто не было нужды). Пример - я.

Это не значит, что данные прогеры, ни на что остальное не годны. Просто - не было случая.
А вот случай настал, и надо с чего то начать.
В этом случае не плохо прочитать чей-то опыт. Что бы не изобретать велосипед.

С огромным уважением отношусь к замечаниям всех участников обсуждения. Уверен, что и мне и другим участникам форума они будут полезны.
Поделитесь своим опытом, и внесите свой полезный вклад в обсуждение данного вопроса.

Спасибо за понимание.
Itkonstantine; +1 Ответить
3. Илья Кравченко (hohmankia) 24.01.13 12:20
Полностью согласен с автором статьи, т.к. сам такой же: 5 работаю с 1С и только совсем недавно столкнулся с необходимостью com-соединения и сходу не знал куда смотреть и как делать.
Автору спасибо!
kentavr27; lemilk; Niberu; director04; +4 Ответить 2
4. jamirza emirbekov (jamirza) 24.01.13 12:52
А мне понравилось - всё чётко и по делу.
lemilk; Onemany; director04; +3 Ответить
5. Доржи Балбаров (Angeros) 24.01.13 13:10
по-моему комы прошлый век - медленно, топорно. web рулит!!!
6. Валерий Гайдабура (director04) 24.01.13 13:45
по-моему комы прошлый век - медленно, топорно. web рулит!!!


Все новые типовые решения от 1С (на управляемых формах) для интеграции используют Com-соединения.
Да и веб-серверы подняты далеко не у всех.
7. Олег Шалимов (CaSH_2004) 24.01.13 14:16
(0) Странная статья, мало того что (1) прав, так еще и "поиск по ИНН" - это что за такой типовой реквизит?
Есть ПоискПоКоду(), ПоискПоНаименованию(), и ПоискПоРеквизиту() - никаких поисков по ИНН не существует, что вы и сами показываете в примере
После комментария (0) могли бы и поправить статью.
Вообще те истины которые тут изложены не тянут на публикацию, таких публикации можно клепать каждые пол года т.к. люди то новые появляются, а искать в интернете не умеют. Для людей которые "не в курсе" как работать с ОЛЕ - скачайте книжки "1С Предприятие системное программирование (Михайлов)", "ЕСИС 8.0", и был еще толмут по моему Радченко размером с энцеклопедию:) ее даже читать можно только в электронном т.к. сложно листать. Там расписано все что что нужно.
А то странные программисты появляются - даже документацию скачать и прочитать не хотят, что же там можно в 1С делать 5 лет и не сталкиваться с ОЛЕ? Я как то видел разработку на 7-ке где разработчики ничего не знали про такой объект как "Документ" и задачи по товаро-движению реализованы через объект "Справочник"! Это просто надо видеть!

PS: Если уж говорить про "поделитесь опытом" то вот вам интересный момент который я нигде не видел что бы был освещен, а стоило бы: по ОЛЕ не всегда корректно можно получить дробные числа. Иногда вместо 2.24 можно спокойно получить 2.23999999999999, поэтому правильно получать тип реквизита откуда береться число, его точность и округлять до дробного числа, иначе можете потерять копейку.
mentozavr; Andreyyy; AlexO; Yakud3a; sanches; +5 Ответить 5
8. Сергей Лещин (Slon1c) 24.01.13 14:35
А еще есть внешние источники данных ... использую COM и OLE. Если нужно просто прочитать то COM, для интерактивной работы OLE ...
9. Сергей Лещин (Slon1c) 24.01.13 14:36
(7)Да тип нужно получать через метаданные ...
10. sanches (sanches) 24.01.13 17:38
(7) Да, сам недавно ломал голову почему так происходит.
Причем, если получать данные запросом, то от такой проблемы не спасает даже использование функции
ВЫРАЗИТЬ (Сумма КАК ЧИСЛО(15,2))
(0)
КонтрагентГоловной = БазаИсточник.Справочники.Контрагенты.СоздатьЭлемент();
КонтрагентГоловной.УстановитьСсылкуНового(БазаИсточник.Справочники.Контрагенты.ПолучитьСсылку(БазаИсточник.NewObject("УникальныйИдентификатор", ТекущийUID)));

У вас не хватает определения переменной ТекущийUID
11. naus (Danil.Potapov) 24.01.13 17:47
статья про COM на картинке OLE
12. Юрий Осипов (yuraos) 24.01.13 18:26
Плюс автору за простоту и ясность мысли,
которой так не хватает в 1С-ных мануалов!
Как раз то, что нужно для новичков!!!

Более продвинутым советую пройтись по этой ссылке.
:)
13. Юрий Осипов (yuraos) 24.01.13 18:53
(12)
впрочем и для новичков будет полезно, поскольку
технология COM далеко не исчерпывается
COM-подключениями к 1C или EXCEL.
14. Юрий Осипов (yuraos) 24.01.13 18:59
(5)(6) Angeros,
а управляемое приложение, как не откроею - все тупит и тормозит.

Там даже редактор управляемых форм и тот тормозной! :)
15. ZERO_ 24.01.13 22:54
(0)
Не вдаваясь в дальнейшие сравнения, даже на основании двух вышеизложенных моментов, я однозначно выбираю COM.

Ну, я бы не был столь категоричен... Com имеет свои преимущества и свои недостатки (как и Ole)...
Все зависит от конкретной задачи (хотя из моей личной практики Com применял в десяток раз чаще, чем Ole).
Еще забыли про важное отличие в виде доступа к интерфейсным возможностям 1СПредприятие...
Также неплохо было бы акцентировать внимание на передачу параметров (например в виде параметра запроса), что ссылки на объекты текущей базы передавать нельзя! :-) А ссылки, полученые из базы-источника, - можно...
Также, если статья для новичков,(которые не хотят лазить по Нетам) можно было бы дополнить строкой (или даже написать функцию, возвращающую "БазаИсточник") для обоих вариантов (Файл-серверного и клиент-серверного).
А так, - понравилась структуризация материала... :-)
director04; +1 Ответить 1
16. Доржи Балбаров (Angeros) 25.01.13 04:21
(14) yuraos, Я не понимаю причем тут управляемые формы? я имею введу веб сервис. Установить апатч дело 2ух минут настроек он не требует. главное чтобы в сети был виден всем участникам обмена.
17. Николай Зайцев (Zero_nv) 25.01.13 06:52
Эх... эту бы статью да на пару дней пораньше. Массу времени съэкономил бы. Понадобилось перенести доки через com, пришлось в инете по крупицам собирать
18. Валерий Гайдабура (director04) 25.01.13 09:27
Также неплохо было бы акцентировать внимание на передачу параметров (например в виде параметра запроса), что ссылки на объекты текущей базы передавать нельзя! :-) А ссылки, полученые из базы-источника, - можно...
Также, если статья для новичков,(которые не хотят лазить по Нетам) можно было бы дополнить строкой (или даже написать функцию, возвращающую "БазаИсточник") для обоих вариантов (Файл-серверного и клиент-серверного).
А так, - понравилась структуризация материала... :-)


Спасибо, очень ценное замечание. Да, действительно упустил это из вида.
Спешу исправить. Пример универсальной процедуры ниже.

Функция ВыполнитьПодключение(Файловый)

    Отказ = Ложь;

    Если НЕ ЗначениеЗаполнено(Пользователь) ИЛИ НЕ ЗначениеЗаполнено(Пароль) Тогда
        Отказ = Истина;
    ИначеЕсли Файловый И НЕ ЗначениеЗаполнено(КаталогИБ) Тогда
        Отказ = Истина;
    ИначеЕсли НЕ ЗначениеЗаполнено(ИмяКластера) ИЛИ НЕ ЗначениеЗаполнено(ИмяБазы) Тогда
        Отказ = Истина;
    КонецЕсли;

    Если Отказ Тогда
        Предупреждение("Настройте параметры соединения.", 10, "Соединение невозможно.");
        Возврат Отказ;
    КонецЕсли;

    СтрокаСоединения = "";

    V81 = Новый COMОбъект("V81.ComConnector");

    Если Файловый Тогда
        СтрокаСоединения = "File=""" + СокрЛП(КаталогИБ) + """";
    Иначе
        СтрокаСоединения = "Srvr=" + СокрЛП(ИмяКластера) + ";Ref=" + СокрЛП(ИмяБазы);
    КонецЕсли;

    Если НЕ ПустаяСтрока(Пользователь) Тогда
        СтрокаСоединения = СтрокаСоединения + ";Usr=" + СокрЛП(Пользователь);
    КонецЕсли;

    Если НЕ ПустаяСтрока(Пароль) Тогда
        СтрокаСоединения = СтрокаСоединения + ";Pwd=" + СокрЛП(Пароль);
    КонецЕсли;

    Попытка
        БазаИсточник = V81.Connect(СтрокаСоединения);
    Исключение
        Сообщить("Не удалось подключиться с заданными настройками!" + ОписаниеОшибки(), СтатусСообщения.Важное);
        Отказ = Истина;
    КонецПопытки;

    Возврат Отказ;

КонецФункции

...Показать Скрыть


Пояснение БазаИсточник - переменная модуля, или переменная обработки, доступная из всех процедур и функций.
19. Алексей Роза (DoctorRoza) 25.01.13 12:22
Норм статья .. может пригодиться!
21. Александр Федоров (Sasha255n) 25.01.13 15:46
Все прекрасно работает спасибо остался очень доволен.
director04; +1 Ответить
22. VasiL` (VasiL0587) 25.01.13 17:46
Отличная статья, коротко и по делу. Автору респект!
23. Алекс Ю (AlexO) 25.01.13 17:48
(3) hohmankia,
тоже только ПФ лепили? :)
24. Алекс Ю (AlexO) 25.01.13 17:50
(0)
2. При запуске Com – соединения не создается отдельного процесса 1cv8.

а что, по-вашему, в таком случае создается? Облако тегов?
25. Алекс Ю (AlexO) 25.01.13 17:53
(18) director04,
Да, действительно упустил это из вида.

да вы и так многое упустили из вида, и вместо этого написали "работать через COM проще".
И проще, и сложнее, но прежде чем писать подобное - разузнали бы проблемы.
Если сами только столкнулись ("могут многие годы прекрасно обходиться без механизмов Com-соединений").
Хотя бы, сколько нужно всего учесть, чтобы загрузить "обычное" ТЗ из другой базы.
26. Алекс Ю (AlexO) 25.01.13 17:55
(22) VasiL`,
да?
ну попробуйте на реальном деле что-то сделать.
27. Валерий Гайдабура (director04) 25.01.13 19:29
да?
ну попробуйте на реальном деле что-то сделать.


Алекс, от ваших постов так веет безысходностью и неудачей ))))) Дерзайте, и все получится!
Еще раз - удачи. :)
28. TMV 25.01.13 21:55
(27) director04,
Алекс, от ваших постов так веет безысходностью и неудачей ))))) Дерзайте, и все получится!
Еще раз - удачи. :)

Не слишком ли бодрое пожелание для "продвинутого прогера"?)
29. Юрий Осипов (yuraos) 26.01.13 07:52
Не слишком ли бодрое пожелание для "продвинутого прогера"?)

(28) TMV,
продвинутость достигается через преодаление гем-мороев платформы...

великая продвинутость обрачена великой печалью
:)
30. Юрий Осипов (yuraos) 26.01.13 08:27
(24)
а что, по-вашему, в таком случае создается? Облако тегов?

AlexO,
что создается, это конечно вопрос интересный и архиважный с познавательной точки зрения.
Но это, как говаривали вожди-классики, есть суровая объективная реальность.,
"данная нам в ощущениях, копируемая и фотографируемая" (смотри ниже):

При COM-соединении просесс 1cv8 остается один, но при этом сжирает больше памяти мегабайт на 25.
При OLE-соединении появляется еще один процесс 1cv8, который к стати отжирает чуть меньше - 22 мегабайта.

При желании любой это может проверить.
Нужный план обмена можно взять здесь.
Прикрепленные файлы:
31. Юрий Осипов (yuraos) 26.01.13 17:11
(18)(30)
... Пример универсальной процедуры ниже.

PS:
Если использовать план обмена "Обмен данными COM"
то код для создания соединения можно несколько упростить,
поскольку все необходимые параметры и алгоритм подключения
хранятся в узле плана обмена:
КоннекторCOM = Неопределено;
ОбъектCOM = Неопределено;
ЕррорИнфор = "";
НужныйУзел = ПланыОбмена.ОбменДаннымиCOM.НайтиПоКоду("КодНужногоУзла");
НужныйУзел.СоздатьОбъект().Connect(КоннекторCOM,ОбъектCOM,,ЕррорИнфор);
Если ЗначениеЗаполнено(ЕррорИнфор) Тогда
   ВызватьИсключение(ЕррорИнфор);
КонецЕсли;
// далее используем полученное COM-соединение через переменную ОбъектCOM
...Показать Скрыть
director04; +1 Ответить 1
32. Илья Кравченко (hohmankia) 27.01.13 13:41
(23) AlexO, очень смешно)) Петросян прям отдыхает... Поддержу автора: "От ваших постов так веет безысходностью и неудачей ))))) Дерзайте, и все получится!"
33. Аркадий Кучер (Abadonna) 28.01.13 09:46
(1), (7) Мужики, ну при чем тут автор? Меня больше удивляет (беспокоит) количество плюсов.
Странно, что никто еще не написал расхожую фразу "Оказывается, всё гениальное - просто".
Yashazz; AlexO; +2 Ответить 1
34. Алекс Ю (AlexO) 28.01.13 09:48
(27) director04,
я по COM перекрестные синхронизации делаю, а вы мне про "дерзайте"! :)
посмеялся.
35. Алекс Ю (AlexO) 28.01.13 09:51
(30) yuraos,
При COM-соединении просесс 1cv8 остается один

да неужели?
и какой такой процесс "остается", когда организуешь соединение по COM к базе?
Разобрались бы сначала с автором, что и когда подключается.
И когда наиболее оптимально производить подключение к другой базе.
PS. если только и умеете "включать в другую базу" пользователя во время работы - то ужас-ужас вам и вашим пользователям.
36. Алекс Ю (AlexO) 28.01.13 09:53
(32) hohmankia,
сочинить свое не хватает? :)
37. Алекс Ю (AlexO) 28.01.13 09:54
(31) yuraos,
а можно вообще все в одну строку и максимум вложенностей в параметрах команд...
1С - она именно для такого раздолбайства и создана ;)
38. Алекс Ю (AlexO) 28.01.13 09:56
(33) Abadonna,
Странно, что никто еще не написал расхожую фразу "Оказывается, всё гениальное - просто".

да пусть студенты америки открывают...
хоть так самолюбие потешат :))
39. Алекс Ю (AlexO) 28.01.13 09:58
(7) CaSH_2004,
и был еще толмут по моему Радченко размером с энцеклопедию:)

"толмут" не Радченко, а группы авторов, среди которых Радченко разве что вступления к главам писал :)
40. Алекс Ю (AlexO) 28.01.13 09:59
(7) CaSH_2004,
что же там можно в 1С делать 5 лет и не сталкиваться с ОЛЕ?

что-что - печатные формы и постоянно тусоваться среди студентов со своими "достижениями".
Так и 10 лет ни с чем не столкнутся... :)
41. Алекс Ю (AlexO) 28.01.13 10:03
(15) ZERO_,
А так, - понравилась структуризация материала...

кино дрянь, но спецэффекты красивые..
42. Алекс Ю (AlexO) 28.01.13 10:04
(11) naus,
да ладно, тут народ вообще разницы не понимает - COM, OLE, ADO..
буковки какие-то...
43. Алекс Ю (AlexO) 28.01.13 10:06
(6) director04,
Все новые типовые решения от 1С (на управляемых формах) для интеграции используют Com-соединения.

для какой такой интеграции, и что за типовые от 1С в данном конкретном случае?
44. Владимир Каракозов (karakozov) 28.01.13 10:19
Полезная статья, хоть и вызвала столько дополнений и даже критики. К сожалению все время сталкиваешься с проблемами при создании чего нить через COM соединение.Причем все сложности обычно это само COM соединение.Данный обзор обновляет уже имеющуюся информацию, а самое интересное что до каких то вещей пришлось додуматься самому, и теперь было интересно почитать об этом в данной статье. Плюс автору.
director04; +1 Ответить 1
45. Валерий Гайдабура (director04) 28.01.13 10:20
AlexO, да угомонись ты, блин со своим словесным поносом.... Слушать уже надоело. Судя по такой богатой коллекции твоих публикаций , так ты вообще ничего путного за жизнь не написал
Если интереса нет - иди мимо....

Люди на ИС голосуют кто плюсом, кто рублем. Но не словесным поносом ведь....
Иди мимо родненький.... иди уже..... :)
NFEZDURE; orfos; olbu; Дмитрий74Чел; RuslanKhanow; NittenRenegade; sanches; tomvlad; +8 Ответить
46. Валерий Гайдабура (director04) 28.01.13 10:25
(44) karakozov,
Полезная статья, хоть и вызвала столько дополнений и даже критики. К сожалению все время сталкиваешься с проблемами при создании чего нить через COM соединение.Причем все сложности обычно это само COM соединение.Данный обзор обновляет уже имеющуюся информацию, а самое интересное что до каких то вещей пришлось додуматься самому, и теперь было интересно почитать об этом в данной статье. Плюс автору.


Я рад, что данная публикация очень многим понравилось и показалась востребованной.
Именно на эту аудиторию и на эту реакцию я и рассчитывал.

Что касается критиков....
Их я всегда делю на:
  • Конструктивных. Эти люди обсуждают тему, изучают, дают ценные советы и предлагают решения.
  • Болтунов. Эти просто ктитикуют не предлагая ничего. Им и предложить скорее всего нечего. Наверное это просто люди с заниженной самооценкой. Пользы от них - ноль.


Лично мне гораздо интереснее и полезней показалось обсуждение yuraos (30). Спасибо ему, что не пожалел времени на тестирование. Позитив налицо. А AlexO, простите - простая балаболка. :)
47. Валерий Гайдабура (director04) 28.01.13 11:02
AlexO, иди мальчик.... Не мешай, родной, взрослым дядям серьезные вещи обсуждать... :)
Прикрепленные файлы:
48. Илья Кравченко (hohmankia) 28.01.13 11:54
(36) AlexO, я ж говорю Петросян! )) Расслабься! Тебе поговорить не с кем что-ли?! Ну так в другом месте ищи свободные уши.
tomvlad; director04; +2 Ответить
49. Алекс Ю (AlexO) 28.01.13 12:09
(46) director04,
балаболка и неуч - это вы.
Ваш уровень - кружок студентов возглавить.
50. Владислав Томашевич (tomvlad) 28.01.13 12:13
(42) AlexO, судя по вашим словам Вы знаете все на свете гораздо лучше остальных.

Предлагаю Вам описать предмет, изложенный в этой статье с Вашей точки зрения, а потом уже остальные оценят Ваш уровень.

Иначе начинает складываться впечатление о студенте, страдающем комплексом неполноценности (уж извините, но в профиле никакой информации о Вас я не вижу, да и список публикаций не впечатляет).
director04; +1 1 Ответить 2
51. Алекс Ю (AlexO) 28.01.13 12:20
(50) tomvlad,
мелчают 1сники, мельчают.. а как звездили вначале..
Предлагаю Вам описать предмет

предмет чего?
взялся писать статью - пиши статью. А не впечатления о кино по афише: "оказывается, как просто там все!".
52. Алекс Ю (AlexO) 28.01.13 12:22
(50) tomvlad,
судя по вашим словам Вы знаете все на свете гораздо лучше остальных.

т.е. вы уже не знаете многого?!
судя по вашим словам.
53. Владислав Томашевич (tomvlad) 28.01.13 12:25
(52) AlexO, ОК, то есть Вы не в состоянии написать статью, описывающую методику работы с COM?
54. Алекс Ю (AlexO) 28.01.13 12:27
(53) tomvlad,
пусть я статью "не в состоянии".
А вы - даже оценить не в состоянии. ОК?
55. Аркадий Кучер (Abadonna) 28.01.13 12:32
56. Алекс Ю (AlexO) 28.01.13 12:35
(55) Abadonna,
ну у многих амнезия... мельчают, стареют...
только ветераны не сдаются и пытаются учить молодежь ))
57. Владислав Томашевич (tomvlad) 28.01.13 12:37
(56) AlexO, охотно верю, что Вы знаете предмет гораздо лучше чем сам Сергей Нуралиев.

Но...

Что мы знаем про вас. Никаких серъезных разработок за душой не числится. Рейтинг LIFE в 3.43 раза (!!!! болтун?) превышает рейтинг за публикации. Никакой дополнительной информации в профиле нет.

Только брызги слюны и вопли обиженного.

Конечно, я могу ошибаться. Ну так поправьте. Напишите хоть что-нибудь кроме невоздержанных комментариев.
the1; director04; +2 1 Ответить 2
58. Алекс Ю (AlexO) 28.01.13 12:39
При запуске Com – соединения не создается отдельного процесса 1cv8. В результате, происходит ощутимая экономия ресурса рабочей станции.

автор даже не в курсе, как работает COM, и что такое "OLE Automation". И откуда экономия в одном случае, и больше возможностей - в другом.
Видимо, tomvlad тоже не в курсе, раз так рьяно поддерживает такой уровень понимания.
59. Алекс Ю (AlexO) 28.01.13 12:41
(57) tomvlad,
лучше чем сам Сергей Нуралиев.

спасибо, посмеялся.
Это тот, который после 3х лет "типа коммерческой" эксплутации 8.2 писал, что перевод "средней <типовой> конфы" на УФ - неделя за глаза?
Не говоря уж о том, что он, вот как вы - у своих разработок, "стоял у истоков создания УФ"...
60. Алекс Ю (AlexO) 28.01.13 12:42
(57) tomvlad,
Только брызги слюны и вопли обиженного.

как низко мы пали... а ведь был такой подающий надежды молодой человек...
Напишите хоть что-нибудь кроме невоздержанных комментариев.

это ко мне разве?
А у вас вообще ваши публикации, или нет? А то что-то сомнения появились - ну не мог человек так быстро... съехать вниз...
61. Владислав Томашевич (tomvlad) 28.01.13 12:47
(58) AlexO, вот честно говоря меня в настоящий момент совсем не интересует COM, т.к. много другой работы.

Но автора я знаю, и знаю, насколько это уважаемый человек. А вот о вас кроме болтовни на форуме мы не знаем ничего.

Судя по всему, у Вас масса свободного времени.

Еще раз предлагаю - вместо пустопорожней болтовни взять и написать статью, в которой подробно изложить методику работы с COM. Если судить по вашим комментариям, это должно занять у вас не более нескольких минут.

Результат - общая польза, вместо взаимных оскорблений.
62. Яков Коган (Yashazz) 28.01.13 13:00
Может, я чего-то глобально не понимаю, но такое количество плюсов за обрывки цитат из штатной документации и общедоступных учебников - это не вполне нормально. Это вообще не статья. Заметки на полях от силы.
Жаль я в своё время отказался баянить, глядишь, кой-что новое людЯм открыл бы...

Автор, а расскажешь о том, как через com определить тип значения переменной, или получить объект типа "Тип"? Или как произвольный код выполнить? Или про тонкую настройку com+, и чем оно от dcom отличается, или как мирить разные минорные релизы?
63. Сергей Лещин (Slon1c) 28.01.13 13:03
Вопрос к автору : Как вы синхронизировали перечисления ?
64. Сергей Лещин (Slon1c) 28.01.13 13:07
(62)да здесь же на инфостарте ответы и лежат :)
65. sanches (sanches) 28.01.13 13:12
66. Валерий Гайдабура (director04) 28.01.13 13:17
(63) Slon1c,
Вопрос к автору : Как вы синхронизировали перечисления ?


Перечисления - та же суть, что и строки. Определите имя перечисления, и по его значению, выберите необходимое перечисление в текущей БД.
67. Сергей Лещин (Slon1c) 28.01.13 13:34
(66)Вопрос как раз в определении имени ... Просто мне пришлось перебором его получать, есть ли более короткий способ ? Вот фрагмент кода :
Для каждого лкстрока из Свойства.ПорядокВключенияСтоимостиВСоставРасходовНУ.Metadata().EnumValues Цикл
Если лкстрока.Synonym = соединение.string(Свойства.ПорядокВключенияСтоимостиВСоставРасходовНУ) Тогда
НоваяСтрока.ПорядокВключенияСтоимостиВСоставРасходовНУ =
Перечисления.ПорядокВключенияСтоимостиОСВСоставРасходовНУ[лкстрока.Name];
КонецЕсли;
КонецЦикла;
68. Вячеслав_163 (Perfekt) 28.01.13 13:48
а можно поподробнее про com-соединение
69. Валерий Гайдабура (director04) 28.01.13 14:24
(67) Slon1c, да, там есть один секрет. :)

ИмяПеречисления = БазаИсточник.XMLСтрока(БазаИсточник.Перечисления.СтавкиНДС.НДС10)

PS: Имя перечисления вернет например "НДС 10"
70. Валерий Гайдабура (director04) 28.01.13 14:26
(68) Вячеслав_163, а что конкретно вас интересует?
71. Олег Шалимов (CaSH_2004) 28.01.13 14:36
В принципе данную статью можно считать за тест на знание (и умение их искать) местной аудитории.
Жаль что администрация не ввела более расширенный способ голосования за статью. Думаю для профессионального сайта уже стоило-бы ввести несколько рейтингов по публикациям что-то типа:
- оценка за оформление от -5 до +5
- оценка за новизну от -5 до +5
- оценка за содержание (полезность/актуальность) от -5 до +5
В общем цель чтобы публикация оценивалась по разным критериям и показывала полезность, а то иногда просто удивляет что все меряется количеством плюсов. Это как-то однобоко. Ведь как получается: прочитало 100 человек, из них 40 плюсануло, т.к. тема новая для них, а остальные 60 не стали минусовать, т.к. вроде автор хороший человек, а минус ассоциируется с отрицательным отношением к статье в целом (и переносится не осознано на автора) и соответственно неприятно ставить его. В итоге статья вроде как по рейтингу отличная, а толку для меня никакого.
(0) Вот скажи автор тебя бы обидело если бы я поставил "минус"? А если бы без объяснения? А если поставят его 60 из 100 людей без объяснения причин? Ведь реально для людей кто занимается 1С профессионально тут прописные истины которые иногда в день по несколько штук приходится решать. Но для начинающих может это действительно откровение.
К сожалению рейтинг составляют разные люди. Было бы удобно видеть какое-то различие (не читая имен) проголосовали разработчики, или просто товарищи которые скачивают. Статус то пользователям тут никак не меняют, на других ресурсах прямо под ником пишут статус/рейтинг, и понятно кто есть кто, а так приходится лазить в профиль пользователя.
Наверно где то такое обсуждалось уже с администрацией сайта, киньте ссылку если кто знает - буду благодарен.
OerlandHue; +1 Ответить 1
72. Валерий Гайдабура (director04) 28.01.13 15:03
(71) CaSH_2004, ответить. Правда несколько повторюсь.

На данном ресурсе я видел много публикаций, которые меня явно восхитили.
Глядя на одни, я говорил "как жалко, что пока я так не могу".
Глядя на другие я думал, "а ведь решение лежало на виду,а я его не увидел".

Но, далеко не все из таких публикаций были оценены должным образом.
Разве от этого они потеряли свою привлекательность? - НЕТ!
Просто аудитория, к тому времени оказалась неготовой к данной теме.

Оказаться в нужный момент и в нужном месте - это не главное в продвижении чего-либо?

Одновременно, я видел не раз, когда просто "взлетали" публикации которые, по моему мнению, не тянули даже на 10 баллов.
Почему так происходило? Видимо потому, что кому то они явно пришлись по душе.
И я считал себя не вправе поливать автора и его идею грязью.
Я просто переходил к иной публикации (а одновременно делал для себя выводы).

Для чего появилась данная публикация. И для кого она здесь?

Повторюсь еще раз.
Во-первых. Уже несколько лет приходится заниматься Сom-соединениями.
Иногда некоторые моменты меня ставили в тупик. Приходилось перерыть масссу интернет-ресурсов, что бы докопаться до истины.
Со временем появилось желание поделиться своим видением данной проблемы.

Как видите, эта публикация показалась интересной многим посетителям сайта.
Кто-то для себя открыл, что-то новое.
Кто-то более системно посмотрел на известное.
Кто-то ухмыльнулся и прошел мимо...

Эта статья обращена именно к первым и вторым. Я рад, что помог им в чем то.

Вот и все.... А плюсы и минусы... - это всего лишь некое "спасибо" за потраченное время и труд..... Вот и все....
Не надо эти плюсы воспринимать как нечно иное.
73. Сергей Лещин (Slon1c) 28.01.13 15:42
(69)о, xml "рулит", еще сюда сериализацию и схемы добавить и все ок :)
74. Олег Шалимов (CaSH_2004) 28.01.13 15:54
(72)Все верно
Одновременно, я видел не раз, когда просто "взлетали" публикации которые не тянули даже на 10 баллов.
Почему так происходило? Видимо потому, что кому то они явно пришлись по душе.

Я про это и говорю, что было бы неплохо не читая статью по рейтингу понять насколько она тебе нужна, или оценить ее не так примитивно +/-. Насчет пришлась по душе я бы скорректировал так: она так много набрала из-за того что так звезды сложились и на сайте собралось много народу и многим понравилось, сами понимаете это дело случая т.к. как только статья уходит с главной страницы то ее уже можно найти только по запросу, а так голосуют все мимо проходящие. И поддерживать на главной, насколько я понимаю, позволяют как раз постоянные комментарии = раскрутка статьи.
Именно для этого и ставят магазины на проходных улицах - ведь часто важно не качество и актуальность товара, а проходимость места, люди гуляя часто покупают то что выкинут на следующий день, просто ради процесса. Это давно всем известная болезнь - шопомания. Или просто увеличения потока увеличивает вероятность нужного покупателя.
А плюсы и минусы... - это всего лишь некое "спасибо" за потраченное время и труд

Т.е. минус тоже считается за "спасибо"? Я вот и хотел узнать ваше отношение к тому нужно ли ставить в таких случаях его, и как интересно считают другие? Ставить ли его когда статья вредная/плохая или когда она тебе просто бесполезная/пустая.
На мой взгляд статья смахивает на просто повышение рейтинга, т.к.:
1. Приведенные мной проблема с типами вообще проигнорирована автором, хотя он не поленился написать кучу комментов.
2. В статье явная неточность: сказано что можно только так
V82 = Новый COMобъект("V82.ComConnector");
Код = КонтрагентСОМ.Code;

а вот я спокойно делаю при помощи обработки http://infostart.ru/public/93097/ вот так:
Сообщить(База.Справочники.Контрагенты.НайтиПоНаименованию("ООО").Код);

и все нормально! А подключение выбираю V82.ComConnector
Странно как-то что автору совершенно плевать на то что его статья содержит такие проблемы на которые указали, а он не реагирует никак.
3. А ведь есть еще проблема когда выскакивает ошибка "Класс не существует"
4. А есть проблема когда установлена 8.2, а потом установлена 8.1 - попробуйте-ка обменяться по ОЛЕ/COM типовым обменом УТ-БП!
5. Могли бы указать основные обработки на сайте которые позволяют универсально подключаться по ОЛЕ/COM чтобы новички не тратили времени, вы же для них пишите! Та же http://infostart.ru/public/93097/ кстати ее картинка почему то у вас красуется, с чего бы?. А в результате 2 слова по существу, и еще 6 за кадром.

В общем, я не поливаю грязью, а указываю на конкретные пробелы, но реакции ноль. Если это тот опыт которым вы делитесь то он какой-то ошибочный и неполный.
Я к тому что если бы у автора было бы желание собрать все глюки то он бы мог хотя бы прислушаться к чужому опыту, а не огрызаться на комменты. Тут же складывается ситуация когда тот кто прочел ее знают больше чем автор, говорят ему (иногда и некорректно), а он еще и отбивается. В итоге вся информация не в статье, а в коментах! Забавно! Так часто бывает, но не нужно при этом упирать на то что хотели как лучше - я же показываю как лучше, и другие показывают! Включите это в статью и она будет стоящая, не всем же интересно читать эту перепалку.
AlexO; Skimen; +2 Ответить 1
75. Валерий Гайдабура (director04) 28.01.13 16:50
(74) CaSH_2004, уважаемый.
Если бы я ставил свою статью в ранг совершенного и законченного проекта (ну типа как продукты Apple), я бы просто отключил возможность комментариев.

Считаете возможным дополнить сведения - дополните. Я буду вам признателен.
Считаете это не нужным вам - не дополняйте. Пройдите мимо.

Еще раз говорю: есть люди, которые почерпнули для себя что-то важное.
Есть люди, которые узнали из вашего предыдущего поста, что -то дополнительно для себя.

Если бы не было этой статьи, то не было бы и вашего поста.
Кто-то шел бы до своих открытий чуточку дольше.
Не заморачивайтесь лишнего. Те кто придет после вас - найдет и у вас кучу недочетов и недостатков.

Если руководствоваться вашими постулатами, то наверное человечество не написало бы ни одной книги.
Вы согласны?

Разговор далее, по этому поводу, считаю неконструктивным.
Лучше потрачу время на помощь тем, кто этого желает. Допустим 67 и 68.

Вы не против?
76. Олег Шалимов (CaSH_2004) 28.01.13 23:55
(75)Да пожалуйста, однако странное игнорирование вопросов и собственных ошибок. Я собственно выразил свое мнение и если вы считаете что писать то чего нет - нормально, а то что есть не стоит, то значит такая публикация заслуживает минус. Жаль что вместо желания изменить статью вы предпочитаете общение в комментариях, а по существу ничего не меняете: вроде и против ничего не имеете, но и менять не хотите.
77. Аркадий Кучер (Abadonna) 29.01.13 06:36
(0)
Исключение: у Com-объекта, предопределенные реквизиты имеют только англоязычную транскрипцию. Обычные реквизиты – русскую транскрипцию.
Пример:
КонтрагентСОМ = БазаИсточник.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ИНН);
Код = КонтрагентСОМ.Code;
Наименование = КонтрагентСОМ.Description;
НаименованиеПолное = КонтрагентСОМ.НаименованиеПолное;

Не вводи в заблуждение неокрепшие умы.
Соединение=ОбщСМ.ComConnect(КаталогИБ,Имя,Пароль); 
Спр=Соединение.Справочники.ДолжностиОрганизаций.СоздатьЭлемент();
Спр.Наименование="Тест";
Спр.Записать();
...Показать Скрыть

Работает, только шуба заворачивается
Равно как и
Выборка=Соединение.Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
   Сообщить(Выборка.Наименование);
КонецЦикла;
...Показать Скрыть
78. Валерий Гайдабура (director04) 29.01.13 07:55
(76) CaSH_2004,
Да пожалуйста, однако странное игнорирование вопросов и собственных ошибок.


Ни кто их и не игнорирует. Ваши посты - это очень удачное дополнение в поиск истины. Если они конструктивны (а ваши посты именно конструктивны), то читатель от этого только выигрывает.

Изменять публикацию каждые пять минут - дело очень не продуктивное, так как бесплатные публикации подлежат обязательной модерации. Поэтому, все исправления и дополнения будут однажды добавлены. Но все враз.

Я собственно выразил свое мнение и если вы считаете что писать то чего нет - нормально, а то что есть не стоит, то значит такая публикация заслуживает минус.


я искренне рад вашему минусу. Поясню:
  • После того как вы поставили эту точку в ваших претензиях, надеюсь, что остальные ваши посты будут только по существу вопроса
  • Так как вы поставили оценку, значит вы не остались равнодушны к данной публикации. А для меня это уже есть весьма высокая оценка. Еще раз - Спасибо.
79. Юрий Осипов (yuraos) 29.01.13 16:02
(37) AlexO,
а у вас увожаемый смотру всего одна статейка и
рейтинг за трёп превышает реальный рейтинг в 4 раза

и это не смотря на то , что многие ваши комментарии "минусят" на этой ветке.

Значить - еще больше народу ставить вам "минусы" просто лень
или у них нет времени врубаться что к чему.
;)
80. Роман (Raminus) 29.01.13 16:10
нормальная статейка, полезно.
director04; +1 Ответить 1
81. Валерий Гайдабура (director04) 29.01.13 18:16
(80) Raminus, Спасибо всем, кто оценил.

Редкая публикация обходится одними благодарностями. Я к этому уже привык. :)

Пишите, делитесь опытом. Реальная польза будет всем
82. Яков Коган (Yashazz) 29.01.13 22:27
Да, и ещё: упомяните хотя б, что с файловыми базами тоже так работать можно, а то у вас лишь клиент-серверное подключение описано.
83. Валерий Гайдабура (director04) 30.01.13 08:43
(82) Yashazz,
Да, и ещё: упомяните хотя б, что с файловыми базами тоже так работать можно, а то у вас лишь клиент-серверное подключение описано.


Спасибо, уже учел. В примере подключения к БД указал, что пример подключения к файловой БД приводится в комментариях (см. несколько выше).

Хотел задать встречный вопрос: ранее вы спрашивали"
Автор, а расскажешь о том, как через com определить тип значения переменной, или получить объект типа "Тип"? Или как произвольный код выполнить? Или про тонкую настройку com+, и чем оно от dcom отличается, или как мирить разные минорные релизы?


Вопрос: удалось ли вам решить проблему определения типа значения переменной?
Лично мне приходит на ум только лишь обращение к метаданным объекта, а через них определения типа.
Может быть есть более изящное решение?
84. Олег Шалимов (CaSH_2004) 01.02.13 12:09
(78)Вот буквально на днях тоже встал вопрос как вытянуть запросом в 8-ку из 7-ки данные по регистрам с указанием даты.
Помучался сам часок, для интереса чтобы проверить угадаю ли как это сделать, но понял что не выходит и решил обратится к интернету, запросил Яндекс: "1С как сделать запрос через ОЛЕ", в 4-й строке получил нужный ответ. На поиск и прочтение потратил 2 минуты.
Вот делюсь ссылками:
Взаимодействие через OLE ч.1
Взаимодействие через OLE ч.2
Это я к вашему:
Иногда некоторые моменты меня ставили в тупик. Приходилось перерыть масссу интернет-ресурсов, что бы докопаться до истины.

Странно, но если есть решение то я его всегда нахожу в интернете и достаточно быстро, чего и всем советую, а заодно показываю КАК ЭТО ДЕЛАТЬ. Это пример статей за каторые я бы даже приплатил бы автору (если бы не пришлось на это тратить пол дня на его поиск и способ перевода). Т.е. статья имеет кучу информации полезной, в вашей же статье самое ценное - комментарии. Потому что описывать 3 приема, из которых 1-е - как подключиться, а 2-е вообще частично неверное, и вам еще в лом его исправить:
Изменять публикацию каждые пять минут - дело очень не продуктивное, так как бесплатные публикации подлежат обязательной модерации.

это очень плохой пример который вы показываете другим. Странно но только на Инфстарте народ пишет по несколько строчек в качестве статьи. И чем дальше тем короче становяться статьи. Стараниями таких авторов-минималистов скоро статьи будут выглядеть например так:
Проблема такая-то, решение я нашел в книге такой-то или на сайте таком то

Естественно при таких статьях приходится перерыть их кучу чтобы собрать что-то внятное. Вы сами это испытали на себе (с ваших же слов) и сами же создали такую же пустую публикацию.

Как я уже говорил, если вам влом опичывать все подробно, понадергали бы ссылок из разных мест, выложили бы их, и вывели бы из них свои 3 ВЕЛИКИХ КИТА. И думаю придирок было бы минимум.
85. Валерий Гайдабура (director04) 01.02.13 12:19
(84),

Вот делюсь ссылками:
Взаимодействие через OLE ч.1
Взаимодействие через OLE ч.2


Если я правильно понял, при быстром просмотре, то в этих статьях речь идет исключительно про OLE.
На данном форуме, мы рассматриваем исключительно Com.
Если я сделал не верный вывод - поправьте меня, и прямо здесь выложите код, отвечающий на мой (и ваш) вопрос.

По поводу качества статьи, извините уважаемый, уже достали.
Лично одно ваше мнение, для массы пользователей - не авторитет.
Хотите убедиться - посмотрите на оценку статьи (на сегодня 78 баллов).
Вполне возможно, что вы будете способны написать свой шедевр, и набрать баллов 700.
Желаю удачи. А лазить здесь, и вместо конструктива плеваться и поносить, вам это надо?

Есть желание исправить ситуацию - хватит брызгать слюной. Просто добавьте информации в комментариях и изложите ваше видение вопроса.
86. Олег Шалимов (CaSH_2004) 01.02.13 12:40
(85)
идет исключительно про OLE

конечно, это как пример, причем для 7-ки а не 8-ки, и что тут такого? Статья от этого не хуже. Пользы на порядка 3 больше чем от этой статьи. Если люди плючуют за вас, пусть почитают побольше чем просто про 3-х ПОКАЛЕЧЕННЫХ КИТОВ :)
Есть желание исправить ситуацию - хватит брызгать слюной. Просто добавьте информации в комментариях и изложите ваше видение вопроса.

Я так и сделал, как смог. Не нужно так нервничать, если вы решили написать статью вам придеться выслушать как положительные так и отрицательные отзывы, и не один раз. Я же не просто пишу из-за сугубо своего мнения ни на чем не основанного, а привожу примеры. Не нравиться - не пишите плохие статьи, снимайте статью, обращайтесь к модератору или просто игнорируйте. Не нравиться вам мои комменты, понравиться другим, это ваши же слова!
Не вижу ничего плохого в том что я выложил ссылки.
Лично одно ваше мнение, для массы пользователей - не авторитет.

Да вроде как не один если есть глаза и мозг, просто мне одному больше нужно наверно :)
Кстати Галилео Гагилей насколько помниться тоже почти в одиночку утверждал что Земля крутиться, а все вокруг решили что он ненормальный. Это сравнение к тому что если баранов много то это значит что они априоре умнее пастуха! Никого не хочу обидеть, но ссылаться на количество плюсов - глупое утверждение. Плюсуют те для кого информация новая, остальные идут мимо, и таких на 2 порядка больше, если вы умеете думать то гяньте: просмотров 1745, а плюсов 80! Конечно там идет накрутка на каждое обновление страницы, но суть вы должны уловить. Просматривают те кто пишет комменты, а их еденицы, а не сотни, так что вывод что остальные также считают публикацию не стоящей внимание и плюса, просто не считают нужным минусовать, а почему я уже ранее писал.
87. Валерий Гайдабура (director04) 01.02.13 12:52
(86) CaSH_2004,
если вы умеете думать то гяньте: просмотров 1751, а плюсов 80!


А разве это слабый процент? ))) Считайте КПД = 1745/80 = 21.8875 (кол. просмотров к количеству кликов)

Посмотрите на свою топовую публикацию : http://infostart.ru/public/86911/

КПД = 1847/113 = 16,345

а в этой и того хуже : http://infostart.ru/public/137694/ Всего 28,57

Ну и что, намного лучше? )))))

Кстати Галилео Гагилей насколько помниться тоже почти в одиночку утверждал что Земля крутиться


Желаю удачи Галилео.... Только чаще в свой глаз заглядывайте. Вдруг там бревно, а вы соломинки в чужих глазах рассматриваете )))

Может хватит пиписьками меряться?
88. Олег Шалимов (CaSH_2004) 01.02.13 13:20
(87)Да никто не меряется, я просто высказываю мнение, и полагаю что корректно. Имею право. Найдите у меня в публикациях недостатки, изложите как я внятно свои пожелания, я проанализирую и либо исправлю их либо обоснованно отвечу.
http://infostart.ru/public/137694/ - это кстати экспромт, я так в комментах и сказал, что это по сути черновой вариант т.к. время не было. Так же как наверно и у вас. Согласен что других легче критиковать, но критика полезна, так что я вам помагаю, не обижусь на вашу помощь.
Возможно после такой статьи как ваша и сам свою допилю - т.к. мне она тоже не нравиться.
Кстати откуда такая интересная формула успеха 1745/80? А где переменная кол-во комментариев? Вроде как они вияют на просмотры.
И мои публикации не планировались на плюсы, а на решение конкретной проблемы, я ее решил - нареканий нет, какие были все доработал. И если начинаете делить (да не делимы будете) то сначала замерьте время. Есть понятие как актуальный материал и как устаревший. Мой все уже скачали и поплюсовали кому нужно, смотрят наверно за обновлениями. Ваш пока на стадии актуальности. Когда все поплюсуют (месяца через 2-3) увидите как быстро ваш коэффициент пойдет вниз. Я даже не преполагаю что закончаться неграмотные кто станет плюсовать, у меня пока иногда плюсуют за ГОСиД.
89. Валерий Гайдабура (director04) 01.02.13 13:42
(88) CaSH_2004, я вас понял. Предлагаю уже замять эти тему и работать дальше. Дела насущные есть у нас у всех.
Ок?

ps: Время рассудит все статьи этого форума.
90. Юрий Косяков (Yuriko) 18.02.13 18:45
Извините, может я - не в тему ?
Я не буду высказывать своё мнение.
И не буду никого ругать или хвалить.
Я хочу привести (работающий) код синхронизации Контрагентов из УТ-11 в УТ-10 и БП 1.6
Возможно, кто-то найдёт его полезным.
Я в своё время изрядно намучался - всё было внове :)

&НаСервере
Перем ИмяСервера Экспорт;
Перем ИмяБазы Экспорт;
Перем Пользователь Экспорт;
Перем Пароль Экспорт;
Перем СтрокаСоединения Экспорт;

////////////////////////////////////////////////////////////­////////////////////
// ПРОЦЕДУРЫ СИНХРОНИЗАЦИИ КОНТРАГЕНТОВ

&НаСервере
Функция ПравоСинхронизацииКонтрагентов()
    //+++ YuriKo bgn [2012.12.06] начало 27
	Если РольДоступна(Метаданные.Роли.ПравоВводаИнформацииПоПартнеруБезКонтроля) Тогда
		Возврат Истина;
    Иначе    
		Возврат Ложь;
    КонецЕсли;	
    //--- YuriKo end [2012.12.06] конец  27
КонецФункции   // ПравоСинхронизацииКонтрагентов()

&НаКлиенте
Процедура Синхронизировать(Команда)
	//+++ YuriKo bgn [2012.05.05] начало 2
    Ответ = Вопрос("Копировать текущего Контрагента в УТ-10 ?", РежимДиалогаВопрос.ДаНет);
    Если Ответ = КодВозвратаДиалога.Да Тогда
        ИмяСервера = УТ10_ПолучитьИмяСервера();
        ИмяБазы = УТ10_ПолучитьИмяБазы();
        Пользователь = УТ10_ПолучитьПользователя();
        Пароль = УТ10_ПолучитьПароль();
        Если НЕ ЗначениеЗаполнено(ИмяСервера) ИЛИ НЕ ЗначениеЗаполнено(ИмяБазы) ИЛИ НЕ ЗначениеЗаполнено(Пользователь) ИЛИ НЕ ЗначениеЗаполнено(Пароль) Тогда
            Предупреждение("Не заполнены параметры обмена с УТ-10. Откройте форму Констант и введите недостающие...");
            Возврат;
        Иначе    
            //СтрокаСоединения = "File=""c:\1c\ak@ut""; Usr =""Админ"";";
            СтрокаСоединения = "Srvr=""" + ИмяСервера + """;Ref=""" + ИмяБазы + """;Usr=""" + Пользователь + """;Pwd=""" + Пароль + """";
        КонецЕсли;
    	УТ10_Выгрузить(СтрокаСоединения);
    КонецЕсли;
    
    Ответ = Вопрос("Копировать текущего Контрагента в БП ?", РежимДиалогаВопрос.ДаНет);
    Если Ответ = КодВозвратаДиалога.Да Тогда
        ИмяСервера = БП16_ПолучитьИмяСервера();
        ИмяБазы = БП16_ПолучитьИмяБазы();
        Пользователь = БП16_ПолучитьПользователя();
        Пароль = БП16_ПолучитьПароль();
        Если НЕ ЗначениеЗаполнено(ИмяСервера) ИЛИ НЕ ЗначениеЗаполнено(ИмяБазы) ИЛИ НЕ ЗначениеЗаполнено(Пользователь) ИЛИ НЕ ЗначениеЗаполнено(Пароль) Тогда
            Предупреждение("Не заполнены параметры обмена с БП. Откройте форму Констант и введите недостающие...");
            Возврат;
        Иначе    
            //СтрокаСоединения = "File=""c:\1c\ak@ut""; Usr =""Админ"";";
            СтрокаСоединения = "Srvr=""" + ИмяСервера + """;Ref=""" + ИмяБазы + """;Usr=""" + Пользователь + """;Pwd=""" + Пароль + """";
        КонецЕсли;
    	БП16_Выгрузить(СтрокаСоединения);
    КонецЕсли;
	//--- YuriKo end [2012.05.05] конец  2
КонецПроцедуры   // Синхронизировать()

&НаСервере
Процедура ПолучитьФормуСинхро()
    //+++ YuriKo bgn [2012.12.04] начало 18
    ПолучитьОбщуюФорму("НО_ПараметрыСинхронизации").ОткрытьМодально();
    //--- YuriKo end [2012.12.04] конец  18
КонецПроцедуры   // ПолучитьОбщФорму()

&НаСервере
Функция ПолучитьСправочникОбъектПоСсылке(Объект_Ссылка)
    //+++ YuriKo bgn [2012.12.04] начало 9
    Спр = Объект_Ссылка.ПолучитьОбъект();
    Возврат Спр;
    //--- YuriKo end [2012.12.04] конец  9
КонецФункции   // ПолучитьСправочникОбъектПоСсылке()

/////////////////////////////// Бухгалтерия

&НаСервере
Функция БП16_ПолучитьИмяСервера()
    //+++ YuriKo bgn [2012.12.05] начало 22
    ИмяСервера = Константы.НО_БП16_ИмяСервера.Получить();
    Возврат ИмяСервера;
    //--- YuriKo end [2012.12.05] конец  22
КонецФункции   // ПолучитьИмяСервера()
 
&НаСервере
Функция БП16_ПолучитьИмяБазы()
    //+++ YuriKo bgn [2012.12.05] начало 23
    ИмяБазы = Константы.НО_БП16_ИмяБазы.Получить();
    Возврат ИмяБазы;
    //--- YuriKo end [2012.12.05] конец  23
КонецФункции   // ПолучитьИмяБазы()

&НаСервере
Функция БП16_ПолучитьПользователя()
    //+++ YuriKo bgn [2012.12.05] начало 24
    Пользователь = Константы.НО_БП16_Пользователь.Получить();
    Возврат Пользователь;
    //--- YuriKo end [2012.12.05] конец  24
КонецФункции   // ПолучитьПользователя()

&НаСервере
Функция БП16_ПолучитьПароль()
    //+++ YuriKo bgn [2012.12.05] начало 25
    Пароль = Константы.НО_БП16_Пароль.Получить();
    Возврат Пароль;
    //--- YuriKo end [2012.12.05] конец  25
КонецФункции   // ПолучитьПароль()

&НаСервере
Функция БП16_СоздатьНовогоКонтрагента(мКод, СтрокаСоединения)
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных БП не открыта!!!  Невозможно передать Контрагента из УТ 11 - Функция БП16_СоздатьНовогоКонтрагента() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат "";
	КонецПопытки;
	Контрагент = Объект;
    
    Попытка
		ноКонтр = СОМсоединение.Справочники.Контрагенты.СоздатьЭлемент();
        Если ЗначениеЗаполнено(мКод) Тогда
            ноКонтр.Код = мКод;
        КонецЕсли;
		ноКонтр.Наименование = Контрагент.Наименование;
		ноКонтр.НаименованиеПолное = Контрагент.НаименованиеПолное;
		ноКонтр.ИНН = Контрагент.ИНН;
		ноКонтр.КПП = Контрагент.КПП;
		ноКонтр.КодПоОКПО = Контрагент.КодПоОКПО;
        ноКонтр.Комментарий = ?(ПустаяСтрока(Контрагент.ДополнительнаяИнформация), "передан из УТ-11   [" + ТекущаяДата() + "]",
                              Контрагент.ДополнительнаяИнформация + "     передан из УТ-11   [" + ТекущаяДата() + "]");
		Если Контрагент.ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮрФизЛицо.ЮрЛицо") Тогда
			ноКонтр.ЮрФизЛицо = СОМсоединение.Перечисления.ЮрФизЛицо.ЮрЛицо;
		Иначе
			ноКонтр.ЮрФизЛицо = СОМсоединение.Перечисления.ЮрФизЛицо.ФизЛицо;
        КонецЕсли;
		ноКонтр.Записать();
        ноКонтр.ГоловнойКонтрагент = ноКонтр.Ссылка;
		ноКонтр.Записать();
        
        КонтраКом = ноКонтр.Ссылка;
		GUID_БП16 = КонтраКом.УникальныйИдентификатор();
		ГУИД = СОМсоединение.String(КонтраКом.УникальныйИдентификатор());
		GUID = Строка(ГУИД);
    	Попытка 
        	КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID));
    	Исключение
    		Сообщить("Не могу найти Контрагента в БП по ГУИД = <" + GUID + "> - Функция БП16_СоздатьНовогоКонтрагента() - вызывайте программиста ...");
    		Выполнено = Ложь;
    		Возврат Ложь;
    	КонецПопытки;
		мКод = Строка(КонтраКом.Код);
        КонтраОбъект = Контрагент.Ссылка.ПолучитьОбъект();
        КонтраОбъект.НО_GUID_БП16 = GUID;
        КонтраОбъект.НО_Код_БП16 = мКод;
        КонтраОбъект.Записать();
		V8 = 0;   СОМсоединение = 0;
		Возврат GUID;
	Исключение
		Сообщить("Не удалось записать в БП контрагента " + Контрагент.НаименованиеПолное + Символы.ПС + ОписаниеОшибки());
		КонтраКом = Неопределено;
		V8 = 0;   СОМсоединение = 0;
		Возврат "";
	КонецПопытки;
КонецФункции   // БП16_СоздатьНовогоКонтрагента()

&НаСервере
Функция БП16_НайтиКонтрагентаПоГУИД(GUID_БП16, мКод, СтрокаСоединения)
    мКод = "";
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных БП не открыта!!!  Невозможно передать Контрагента из УТ 11 - Функция БП16_НайтиКонтрагентаПоГУИД() - вызывайте программиста ...");
        мКод = "База данных не открыта";
		Возврат "";
	КонецПопытки;
	Попытка 
    	КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID_БП16));
	Исключение
		Сообщить("Не могу найти Контрагента в БП по ГУИД = <" + GUID_БП16 + "> - Функция БП16_НайтиКонтрагентаПоГУИД() - вызывайте программиста ...");
		Выполнено = Ложь;
   		Возврат Ложь;
	КонецПопытки;
	мКод = Строка(КонтраКом.Код);
	V8 = 0;   СОМсоединение = 0;
	Если ЗначениеЗаполнено(мКод) Тогда Возврат Истина Иначе Возврат Ложь КонецЕсли;
КонецФункции   // БП16_НайтиКонтрагентаПоГУИД(Цель)

&НаСервере
Функция БП16_НайтиКонтрагентаПоИНН(Контрагент, мКод, мГУИД, СтрокаСоединения)
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных БП не открыта!!!  Невозможно передать Контрагента из УТ 11 - Функция БП16_НайтиКонтрагентаПоИНН() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат "";
	КонецПопытки;
	Попытка 
    	КонтраКом = СОМсоединение.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", Контрагент.ИНН);
	Исключение
		Сообщить("Не могу найти Контрагента в БП по ИНН = <" + Контрагент.ИНН + "> - Функция БП16_НайтиКонтрагентаПоГУИД() - вызывайте программиста ...");
		Выполнено = Ложь;
   		Возврат Ложь;
	КонецПопытки;
	GUID_БП16 = КонтраКом.УникальныйИдентификатор();
	ГУИД = СОМсоединение.String(КонтраКом.УникальныйИдентификатор());
    мГУИД = Строка(ГУИД);
	мКод = Строка(КонтраКом.Код);
	V8 = 0;   СОМсоединение = 0;
	Если ЗначениеЗаполнено(мКод) Тогда Возврат Истина Иначе Возврат Ложь КонецЕсли;
КонецФункции   // БП16_НайтиКонтрагентаПоИНН(Цель)

&НаСервере
Функция БП16_НайтиКонтрагентаПоНаименованию(Контрагент, мКод, мГУИД, СтрокаСоединения)
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных БП не открыта!!!  Невозможно передать Контрагента из УТ 11 - Функция БП16_НайтиКонтрагентаПоНаименованию() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат "";
	КонецПопытки;
	Попытка 
    	КонтраКом = СОМсоединение.Справочники.Контрагенты.НайтиПоНаименованию(Контрагент.Наименование);
	Исключение
		Сообщить("Не могу найти Контрагента в БП по Наименованию = <" + Контрагент.Наименование + "> - Функция БП16_НайтиКонтрагентаПоНаименованию() - вызывайте программиста ...");
		Выполнено = Ложь;
   		Возврат Ложь;
	КонецПопытки;
	GUID_БП16 = КонтраКом.УникальныйИдентификатор();
	ГУИД = СОМсоединение.String(КонтраКом.УникальныйИдентификатор());
    мГУИД = Строка(ГУИД);
	мКод = Строка(КонтраКом.Код);
	V8 = 0;   СОМсоединение = 0;
	Если ЗначениеЗаполнено(мКод) Тогда Возврат Истина Иначе Возврат Ложь КонецЕсли;
КонецФункции   // БП16_НайтиКонтрагентаПоНаименованию()

&НаСервере
Процедура БП16_ЗаписатьКонтактыКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения)
	Выполнено = Истина;   // заготовка
КонецПроцедуры   // БП16_ЗаписатьКонтактыКонтрагента()

&НаСервере
Процедура БП16_ПолучитьБанкСчетаКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения)
    Выполнено = Ложь;
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных БП не открыта!!!  Невозможно передать Контрагента из УТ 11 - Процедура БП16_ПолучитьБанкСчетаКонтрагента()- вызывайте программиста ...");
		Возврат;
	КонецПопытки;
    Попытка 
    	КонтрНовый = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",НовыйКонтрагентГУИД));
    Исключение
        Сообщить("Не могу найти Контрагента в БП по ГУИД = <" + НовыйКонтрагентГУИД + "> - Процедура БП16_ПолучитьБанкСчетаКонтрагента() - вызывайте программиста ...");
        Выполнено = Ложь;
        Возврат;
    КонецПопытки;
	Контрагент = Объект;
    
    ВыборкаБухСчётовКонтры = Справочники.БанковскиеСчетаКонтрагентов.Выбрать( , Контрагент.Ссылка, , );
    Пока ВыборкаБухСчётовКонтры.Следующий() Цикл
        Если ВыборкаБухСчётовКонтры.ЭтоГруппа ИЛИ ВыборкаБухСчётовКонтры.ПометкаУдаления Тогда
            Продолжить;
        КонецЕсли;
        Счёт = ВыборкаБухСчётовКонтры;
        Счёт_Наимен = ВыборкаБухСчётовКонтры.Наименование;
        Счёт_Номер  = ВыборкаБухСчётовКонтры.НомерСчета;
        Счёт_Банк   = ВыборкаБухСчётовКонтры.Банк;
        Счёт_РсБанк = ВыборкаБухСчётовКонтры.БанкДляРасчетов;
        Счёт_Валюта = ВыборкаБухСчётовКонтры.ВалютаДенежныхСредств;
        Счёт_Контра = ВыборкаБухСчётовКонтры.Владелец;
        Счёт_ТеКорр = ВыборкаБухСчётовКонтры.ТекстКорреспондента;
        Счёт_ТеНазн = ВыборкаБухСчётовКонтры.ТекстНазначения;
        Счёт_изБП16 = СОМсоединение.Справочники.БанковскиеСчета.НайтиПоНаименованию(Счёт_Наимен, , , КонтрНовый);
        мСчёт       = Строка(Счёт_изБП16.НомерСчета);
        Если Счёт_Номер = мСчёт Тогда
        	Выполнено = Истина;
            Продолжить;
        Иначе
            НовыйСчёт = СОМсоединение.Справочники.БанковскиеСчета.СоздатьЭлемент();
            НовыйСчёт.Владелец = КонтрНовый;
            НовыйСчёт.НомерСчета = Счёт_Номер;
            НовыйСчёт.Наименование = Счёт_Наимен;
            НовыйСчёт.ВидСчета = "Расчетный";
            Если Счёт_Валюта.Код = "643" Тогда        // Российский рубль
    			НовыйСчёт.ВалютаДенежныхСредств = СОМсоединение.Справочники.Валюты.НайтиПоКоду("810");
    		ИначеЕсли Счёт_Валюта.Код = "978" Тогда   // Евро
    			НовыйСчёт.ВалютаДенежныхСредств = СОМсоединение.Справочники.Валюты.НайтиПоКоду("978");
    		ИначеЕсли Счёт_Валюта.Код = "840" Тогда   // Доллар США
    			НовыйСчёт.ВалютаДенежныхСредств = СОМсоединение.Справочники.Валюты.НайтиПоКоду("840");
    		Иначе
    			НовыйСчёт.ВалютаДенежныхСредств = СОМсоединение.Справочники.Валюты.НайтиПоКоду("810");
    		КонецЕсли;
            мБанк = СОМсоединение.Справочники.Банки.НайтиПоКоду(Счёт_Банк.Код);
            Если ЗначениеЗаполнено(мБанк.Code) Тогда
                НовыйСчёт.Банк = мБанк;
            Иначе
                Сообщить("В БП отсутствует банк [" + Счёт_Банк.Наименование + "] с кодом <" + Счёт_Банк.Код + ">, счёт [" +
                          Счёт.Наименование + "] записан не будет");
                Продолжить;
            КонецЕсли; 
            Попытка
                НовыйСчёт.Записать();
            	Выполнено = Истина;
            Исключение
            	Сообщить("В БП не удалось записать банковский счёт <" + Счёт_Номер + ">");
            	Выполнено = Ложь;
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;
	V8 = 0;   СОМсоединение = 0;
КонецПроцедуры   // БП16_ПолучитьБанкСчетаКонтрагента()

&НаСервере
Процедура БП16_ЗаписатьДоговорыКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения)
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных БП не открыта!!!  Невозможно передать Контрагента из УТ 11 - Процедура БП16_ЗаписатьДоговорыКонтрагента() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат;
	КонецПопытки;
    Попытка 
    	КонтрНовый = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",НовыйКонтрагентГУИД));
    Исключение
        Сообщить("Не могу найти Контрагента в БП по ГУИД = <" + НовыйКонтрагентГУИД + "> - Процедура БП16_ЗаписатьДоговорыКонтрагента() - вызывайте программиста ...");
        Выполнено = Ложь;
        Возврат;
    КонецПопытки;
	Контрагент = Объект;
	
	Отбор = Новый Структура("Контрагент");
	Контр = Контрагент.Ссылка;
	Отбор.Контрагент = Контр;
	Выборка = Справочники.ДоговорыКонтрагентов.Выбрать( , , Отбор, );
	Пока Выборка.Следующий() Цикл
		Если (НЕ Выборка.Статус = Перечисления.СтатусыДоговоровКонтрагентов.Действует) ИЛИ (Выборка.ПометкаУдаления = Истина) ИЛИ Выборка.Ссылка.ЭтоГруппа Тогда
			Продолжить;
		КонецЕсли;
        
        // искать договор по ГУИД
        GUID = Выборка.НО_GUID_БП16;
        Если ЗначениеЗаполнено(GUID) Тогда
            ДогКом = СОМсоединение.Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID));
    		мКод = Строка(ДогКом.Код);
        Иначе    
    		мКод = "";
        КонецЕсли;
        Если ЗначениеЗаполнено(мКод) Тогда
            ДоговорОбъект = ПолучитьСправочникОбъектПоСсылке(Выборка.Ссылка);
            ДоговорОбъект.НО_Код_БП16 = мКод;
            ДоговорОбъект.Записать();
            Продолжить;
        КонецЕсли;
        
        Если ЗначениеЗаполнено(Выборка.НО_Код_БП16) Тогда
            мКод = Выборка.НО_Код_БП16;
        Иначе
            Если ЗначениеЗаполнено(Выборка.НО_Код_УТ10) Тогда
                мКод = Выборка.НО_Код_УТ10;
            КонецЕсли;
        КонецЕсли;
        Дог = СОМсоединение.Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
        Если ЗначениеЗаполнено(мКод) Тогда
            Дог.Код = мКод;
        КонецЕсли;
		Дог.Наименование = Выборка.Наименование;
		Дог.Комментарий = Выборка.Комментарий;
        
        // в БП с одним ИНН введено много организаций М и Р (для отчётности), поэтому ищем организацию по коду
        Если Выборка.Организация.ИНН = "7722706542" Тогда
    		Дог.Организация = СОМсоединение.Справочники.Организации.НайтиПоКоду("OFB000001");   // ООО "Новый "Детский мир" (новый)
        ИначеЕсли Выборка.Организация.ИНН = "7722706609" Тогда
    		Дог.Организация = СОМсоединение.Справочники.Организации.НайтиПоКоду("OFB000003");   // ООО «Новый «Детский мир М»
        ИначеЕсли Выборка.Организация.ИНН = "7722706581" Тогда
    		Дог.Организация = СОМсоединение.Справочники.Организации.НайтиПоКоду("OFB000002");   // ООО «Новый «Детский мир Р1»
        Иначе
    		Дог.Организация = СОМсоединение.Справочники.Организации.НайтиПоКоду("OFB000001");   // ООО "Новый "Детский мир" (новый)
        КонецЕсли; 

        Если Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиенту Тогда
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
        ИначеЕсли Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию Тогда
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером;
        ИначеЕсли Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика Тогда
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком;
        ИначеЕсли Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаКомиссию Тогда
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.СКомитентом;
        Иначе
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.Прочее;
        КонецЕсли; 
        
        Если Выборка.ВалютаВзаиморасчетов.Код = "643" Тогда        // Российский рубль
			Дог.ВалютаВзаиморасчетов = СОМсоединение.Справочники.Валюты.НайтиПоКоду("810");
		ИначеЕсли Выборка.ВалютаВзаиморасчетов.Код = "978" Тогда   // Евро
			Дог.ВалютаВзаиморасчетов = СОМсоединение.Справочники.Валюты.НайтиПоКоду("978");
		ИначеЕсли Выборка.ВалютаВзаиморасчетов.Код = "840" Тогда   // Доллар США
			Дог.ВалютаВзаиморасчетов = СОМсоединение.Справочники.Валюты.НайтиПоКоду("840");
		Иначе
			Дог.ВалютаВзаиморасчетов = СОМсоединение.Справочники.Валюты.НайтиПоКоду("810");
		КонецЕсли;
        
		Дог.Владелец = КонтрНовый;
		Дог.ВедениеВзаиморасчетов = СОМсоединение.Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
        Попытка
            Дог.Записать();
        Исключение
            // Возможно, такой код элемента ужЕ существует
            Попытка
                Дог.Код = "";
                Дог.Записать();
            Исключение
        		Сообщить("Не удалось записать договор контрагента " + Дог + Символы.ПС + ОписаниеОшибки());
            КонецПопытки;
        КонецПопытки;
        
        ДогКом = Дог.Ссылка;
		GUID_БП16 = ДогКом.УникальныйИдентификатор();
		ГУИД = СОМсоединение.String(ДогКом.УникальныйИдентификатор());
		GUID = Строка(ГУИД);
		ДогКом = СОМсоединение.Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID));
		мКод = Строка(ДогКом.Код);
        
        Если ЗначениеЗаполнено(мКод) Тогда
            ДоговорОбъект = ПолучитьСправочникОбъектПоСсылке(Выборка.Ссылка);
            ДоговорОбъект.НО_GUID_БП16 = GUID;
            ДоговорОбъект.НО_Код_БП16 = мКод;
            ДоговорОбъект.Записать();
            Продолжить;
        КонецЕсли;
	КонецЦикла;
	Выполнено = Истина;
	V8 = 0;   СОМсоединение = 0;
КонецПроцедуры   // БП16_ЗаписатьДоговорыКонтрагента()

&НаСервере
Процедура БП16_ЗаполнитьКонтактнуюИнформацию(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения)
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных БП не открыта!!!  Невозможно передать Контрагента из УТ 11 - Процедура БП16_ЗаполнитьКонтактнуюИнформацию() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат;
	КонецПопытки;
	Контрагент = Объект;
	Попытка 
    	КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",НовыйКонтрагентГУИД));
	Исключение
		Сообщить("Не могу найти Контрагента в БП по ГУИД = <" + НовыйКонтрагентГУИД + "> - Процедура БП16_ЗаполнитьКонтактнуюИнформацию() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат;
	КонецПопытки;
	
	Для ы = 0 По Контрагент.КонтактнаяИнформация.Количество()-1 Цикл
		Если Строка(Контрагент.КонтактнаяИнформация[ы].Вид) = "Юридический адрес" Тогда
			ЮрАдр = Контрагент.КонтактнаяИнформация[ы].Представление;
		ИначеЕсли Строка(Контрагент.КонтактнаяИнформация[ы].Вид) = "Фактический адрес" Тогда
			ФкАдр = Контрагент.КонтактнаяИнформация[ы].Представление;
		ИначеЕсли Строка(Контрагент.КонтактнаяИнформация[ы].Вид) = "Телефон" Тогда
			Телфн = Контрагент.КонтактнаяИнформация[ы].Представление;
		ИначеЕсли Строка(Контрагент.КонтактнаяИнформация[ы].Вид) = "Email" Тогда
			Email = Контрагент.КонтактнаяИнформация[ы].Представление;
		КонецЕсли; 
	КонецЦикла; 
	
	АдрИнф = СОМсоединение.РегистрыСведений.КонтактнаяИнформация;
	НаборАдр = АдрИнф.СоздатьНаборЗаписей();
	
	НаборАдр.Отбор.Объект.Установить(КонтраКом);
	НаборАдр.Отбор.Вид.Установить(СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00010"));   //НайтиПоНаименованию("Юридический адрес"));
	НаборАдр.Отбор.Тип.Установить(СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Адрес);
	НаборАдр.Прочитать();
	Если НаборАдр.Количество() = 0 Тогда
		Адр = НаборАдр.Добавить();
		Адр.Объект = КонтраКом;
		Адр.Тип = СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Адрес;
		Адр.Вид = СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00010");
		Адр.Представление = ЮрАдр;
		НаборАдр.Записать();
	КонецЕсли;
		
	НаборАдр.Отбор.Объект.Установить(КонтраКом);
	НаборАдр.Отбор.Тип.Установить(СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Адрес);
	НаборАдр.Отбор.Вид.Установить(СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008"));   //НайтиПоНаименованию("Фактический адрес"));
	НаборАдр.Прочитать();
	Если НаборАдр.Количество() = 0 Тогда
		Адр = НаборАдр.Добавить();
		Адр.Объект = КонтраКом;
		Адр.Тип = СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Адрес;
		Адр.Вид = СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00008");
		Адр.Представление = ФкАдр;
		НаборАдр.Записать();
	КонецЕсли;
		
	НаборАдр.Отбор.Объект.Установить(КонтраКом);
	НаборАдр.Отбор.Тип.Установить(СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Телефон);
	НаборАдр.Отбор.Вид.Установить(СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00005"));   //НайтиПоНаименованию("Телефон"));
	НаборАдр.Прочитать();
	Если НаборАдр.Количество() = 0 Тогда
		Адр = НаборАдр.Добавить();
		Адр.Объект = КонтраКом;
		Адр.Тип = СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Телефон;
		Адр.Вид = СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00005");
		Адр.Представление = Телфн;
		НаборАдр.Записать();
	КонецЕсли;
		
	НаборАдр.Отбор.Объект.Установить(КонтраКом);
	НаборАдр.Отбор.Тип.Установить(СОМсоединение.Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
	НаборАдр.Отбор.Вид.Установить(СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес электронной почты контрагента для обмена электронными документами"));
	НаборАдр.Прочитать();
	Если НаборАдр.Количество() = 0 Тогда
		Адр = НаборАдр.Добавить();
		Адр.Объект = КонтраКом;
		Адр.Тип = СОМсоединение.Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
		Адр.Вид = СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес электронной почты контрагента для обмена электронными документами");
		Адр.Представление = Email;
		НаборАдр.Записать();
	КонецЕсли;
	Выполнено = Истина;
	V8 = 0; СОМсоединение = 0;
КонецПроцедуры   // БП16_ЗаполнитьКонтактнуюИнформацию()

&НаСервере
Процедура БП16_ЗаписатьРеквизитыКонтрагента(ОСсылка, GUID_БП16, Код_БП16)
    КонтраОбъект = Объект.Ссылка.ПолучитьОбъект();
    КонтраОбъект.НО_GUID_УТ16 = GUID_БП16;
    КонтраОбъект.НО_Код_УТ16  = Код_БП16;
    КонтраОбъект.Записать();
КонецПроцедуры   // БП16_ЗаписатьРеквизитыКонтрагента()

&НаСервере
Процедура БП16_ПерезаполнитьОсновныеРеквизитыКонтрагента(НовыйКонтрагентГУИД, СтрокаСоединения)
    мКод = "";
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных БП не открыта!!!  Невозможно перезаполнить реквизиты Контрагента - Процедура БП16_ПерезаполнитьОсновныеРеквизитыКонтрагента() - вызывайте программиста ...");
		Возврат;
    КонецПопытки;
    Контрагент = Объект;
    
    Попытка 
        КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",НовыйКонтрагентГУИД));
    Исключение
        Сообщить("Не могу найти Контрагента в БП по ГУИД = <" + НовыйКонтрагентГУИД + "> - Процедура БП16_ПерезаполнитьОсновныеРеквизитыКонтрагента() - вызывайте программиста ...");
        Выполнено = Ложь;
        Возврат;
    КонецПопытки;
	мКод = Строка(КонтраКом.Код);
    
    ноКонтр = КонтраКом.ПолучитьОбъект();
    Если ЗначениеЗаполнено(Объект.НО_Код_БП16) Тогда
        ноКонтр.Код = Объект.НО_Код_БП16;
    КонецЕсли;
    ноКонтр.Наименование = Контрагент.Наименование;
    ноКонтр.НаименованиеПолное = Контрагент.НаименованиеПолное;
    ноКонтр.ИНН = Контрагент.ИНН;
    ноКонтр.КПП = Контрагент.КПП;
    ноКонтр.КодПоОКПО = Контрагент.КодПоОКПО;
    ноКонтр.Комментарий = ?(НЕ ЗначениеЗаполнено(ноКонтр.Комментарий), "передан из БП   [" + ТекущаяДата() + "]", ноКонтр.Комментарий);
    Если Контрагент.ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮрФизЛицо.ЮрЛицо") Тогда
        ноКонтр.ЮрФизЛицо = СОМсоединение.Перечисления.ЮрФизЛицо.ЮрЛицо;
    Иначе
        ноКонтр.ЮрФизЛицо = СОМсоединение.Перечисления.ЮрФизЛицо.ФизЛицо;
    КонецЕсли;
    ноКонтр.ГоловнойКонтрагент = ноКонтр.Ссылка;
    ноКонтр.Записать();
    
    КонтраКом = ноКонтр.Ссылка;
    GUID_БП16 = КонтраКом.УникальныйИдентификатор();
    ГУИД = СОМсоединение.String(КонтраКом.УникальныйИдентификатор());
    GUID = Строка(ГУИД);
    Попытка 
        КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID));
    Исключение
        Сообщить("Не могу найти Контрагента в БП по ГУИД = <" + GUID + "> - Процедура БП16_ПерезаполнитьОсновныеРеквизитыКонтрагента() - вызывайте программиста ...");
        Выполнено = Ложь;
        Возврат;
    КонецПопытки;
    мКод = Строка(КонтраКом.Код);
    КонтраОбъект = Контрагент.Ссылка.ПолучитьОбъект();
    КонтраОбъект.НО_GUID_БП16 = GUID;
    КонтраОбъект.НО_Код_БП16  = мКод;
    КонтраОбъект.Записать();
    V8 = 0;   СОМсоединение = 0;
КонецПроцедуры   // БП16_ПерезаполнитьОсновныеРеквизитыКонтрагента()

&НаКлиенте
Процедура БП16_Выгрузить(СтрокаСоединения)
	//+++ YuriKo bgn [2012.05.05] начало 4
	// процедура ищет Контрагента в БП по ГУИД, или ИНН, или Наименованию
	// - если не нашла - создаёт ноаого, со всеми реквизитами и сопутствующими (контакты, договоры, счета ... )
	НовыйКонтрагентГУИД = "";
	Контрагент = Объект;
	КонтрагентНайден = Ложь;
	мКод = "";
	
	GUID_БП16 = Объект.НО_GUID_БП16;
    Если НЕ ПустаяСтрока(GUID_БП16) Тогда
    	КонтрагентНайден = БП16_НайтиКонтрагентаПоГУИД(GUID_БП16, мКод, СтрокаСоединения);
        Если мКод = "База данных не открыта" Тогда
            // неправильные данные для соединения, или проблемы с открытием базы
            Возврат;
        КонецЕсли;
        Если ЗначениеЗаполнено(GUID_БП16) И НЕ КонтрагентНайден Тогда
            БП16_ЗаписатьРеквизитыКонтрагента(Объект.Ссылка, "", "");
        	GUID_БП16 = "";
        КонецЕсли;
    	Если КонтрагентНайден Тогда
            БП16_ЗаписатьРеквизитыКонтрагента(Объект.Ссылка, GUID_БП16, мКод);
            Ответ = Вопрос("Контрагент с таким ГУИД,  и с Кодом = <" + мКод + ">  -  найден в БП:" + Символы.ПС +
                           "перезаписать  <<Да>>  или ничего не делать  <<Нет>> ?", РежимДиалогаВопрос.ДаНет);
			Если Ответ = КодВозвратаДиалога.Да Тогда
                // перезаписать существующего
                НовыйКонтрагентГУИД = GUID_БП16;
            Иначе
				Возврат;
			КонецЕсли;
    	КонецЕсли;
    КонецЕсли;
	
	// поиск по ИНН
    Если НЕ ЗначениеЗаполнено(НовыйКонтрагентГУИД) И ЗначениеЗаполнено(Контрагент.ИНН) Тогда
        мГУИД = "";
		КонтрагентНайден = БП16_НайтиКонтрагентаПоИНН(Контрагент, мКод, мГУИД, СтрокаСоединения);
        Если КонтрагентНайден Тогда
            Ответ = Вопрос("Контрагент с таким ИНН,  и с Кодом = <" + мКод + ">  -  найден в БП:" + Символы.ПС +
                           "Создать нового (да), перезаписать (нет) или ничего не делать (отмена) ?", РежимДиалогаВопрос.ДаНетОтмена);
			Если Ответ = КодВозвратаДиалога.Отмена Тогда
                // ничего не делать
				Возврат;
			ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда
                // создать нового
                НовыйКонтрагентГУИД = БП16_СоздатьНовогоКонтрагента(мКод, СтрокаСоединения);
				Если ПустаяСтрока(НовыйКонтрагентГУИД) Тогда
					Предупреждение("Контрагент в БП не создан  :(");
				КонецЕсли; 
            ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
                // перезаписать существующего
                НовыйКонтрагентГУИД = мГУИД;
			Иначе
			КонецЕсли;
		Иначе	
		КонецЕсли;
	КонецЕсли;
	
	// поиск по Наименованию
	Если НЕ ЗначениеЗаполнено(НовыйКонтрагентГУИД) Тогда
        Если НЕ (мКод = "База данных не открыта" ИЛИ мКод = "         ") Тогда
    		КонтрагентНайден = БП16_НайтиКонтрагентаПоНаименованию(Контрагент, мКод, мГУИД, СтрокаСоединения);
            Если КонтрагентНайден Тогда
                Ответ = Вопрос("Контрагент с таким Наименованием,  и с Кодом = <" + мКод + ">  -  найден в БП:" + Символы.ПС +
                        "Создать нового <<Да>>, перезаписать существующего <<Нет>>, или ничего не делать <<Отмена>> ?",
        			    РежимДиалогаВопрос.ДаНетОтмена);
                Если Ответ = КодВозвратаДиалога.Да Тогда
                    // создать нового
        			НовыйКонтрагентГУИД = БП16_СоздатьНовогоКонтрагента(мКод, СтрокаСоединения);
        			Если ПустаяСтрока(НовыйКонтрагентГУИД) Тогда
        				Предупреждение("Контрагент в БП не создан  :(");
        			КонецЕсли; 
                ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
                    // перезаписать существующего
                    НовыйКонтрагентГУИД = мГУИД;
                Иначе
                    // ничего не делать
                    Возврат;
                КонецЕсли;
            КонецЕсли; 
        КонецЕсли;
	КонецЕсли;
	
	// если не найден по ГУИД или ИНН или Наименованию - создаём нового
    Если НЕ ЗначениеЗаполнено(НовыйКонтрагентГУИД) Тогда
        Если НЕ ЗначениеЗаполнено(мКод) Тогда
            Если ЗначениеЗаполнено(Объект.НО_Код_УТ10) Тогда
                мКод = Объект.НО_Код_УТ10;
            КонецЕсли;
        КонецЕсли;
		НовыйКонтрагентГУИД = БП16_СоздатьНовогоКонтрагента(мКод, СтрокаСоединения);
		Если ПустаяСтрока(НовыйКонтрагентГУИД) Тогда
			Предупреждение("Контрагент в БП не создан  :(");
			Возврат;
		Иначе
			Сообщить("Создан контрагент в БП с кодом <" + мКод + "> и ГУИД = <" + НовыйКонтрагентГУИД + ">");
		КонецЕсли;
    Иначе
    	// Контрагент найден в УТ-10, перезаполним основные рекквизиты
        БП16_ПерезаполнитьОсновныеРеквизитыКонтрагента(НовыйКонтрагентГУИД, СтрокаСоединения);
    КонецЕсли;
	
	
	// адреса и телефоны Контрагента
	Выполнено = Ложь;
	БП16_ЗаполнитьКонтактнуюИнформацию(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения);
    Если НЕ Выполнено Тогда
        Сообщить("Не удалось записать адреса и телефоны Контрагента в БП... ");
	КонецЕсли;
	
	// контактные лица Контрагента
	Выполнено = Ложь;
	БП16_ЗаписатьКонтактыКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения);
	Если НЕ Выполнено Тогда
        Сообщить("Не удалось записать контактные лица Контрагента в БП... ");
	КонецЕсли;
	
	// договоры Контрагента
	Выполнено = Ложь;
	БП16_ЗаписатьДоговорыКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения);
	Если НЕ Выполнено Тогда
        Сообщить("Не удалось записать договоры Контрагента в БП... ");
	КонецЕсли;

	// Банковские счета Контрагента
	Выполнено = Ложь;
    БП16_ПолучитьБанкСчетаКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения);
	Если НЕ Выполнено Тогда
        Сообщить("Не удалось записать Банковские счета Контрагента в БП... ");
	КонецЕсли;
	//--- YuriKo end [2012.05.05] конец  4
КонецПроцедуры   // БП16_Выгрузить()

/////////////////////////////// Торговля

&НаСервере
Функция УТ10_ПолучитьИмяСервера()
    //+++ YuriKo bgn [2012.12.04] начало 14
    ИмяСервера = Константы.НО_УТ10_ИмяСервера.Получить();
    Возврат ИмяСервера;
    //--- YuriKo end [2012.12.04] конец  14
КонецФункции   // ПолучитьИмяСервера()
 
&НаСервере
Функция УТ10_ПолучитьИмяБазы()
    //+++ YuriKo bgn [2012.12.04] начало 15
    ИмяБазы = Константы.НО_УТ10_ИмяБазы.Получить();
    Возврат ИмяБазы;
    //--- YuriKo end [2012.12.04] конец  15
КонецФункции   // ПолучитьИмяБазы()

&НаСервере
Функция УТ10_ПолучитьПользователя()
    //+++ YuriKo bgn [2012.12.04] начало 16
    Пользователь = Константы.НО_УТ10_Пользователь.Получить();
    Возврат Пользователь;
    //--- YuriKo end [2012.12.04] конец  16
КонецФункции   // ПолучитьПользователя()

&НаСервере
Функция УТ10_ПолучитьПароль()
    //+++ YuriKo bgn [2012.12.04] начало 17
    Пароль = Константы.НО_УТ10_Пароль.Получить();
    Возврат Пароль;
    //--- YuriKo end [2012.12.04] конец  17
КонецФункции   // ПолучитьПароль()

&НаСервере
Функция УТ10_СоздатьНовогоКонтрагента(мКод, СтрокаСоединения)
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных УТ-10 не открыта!!!  Невозможно передать Контрагента из УТ 11 - Функция УТ10_СоздатьНовогоКонтрагента() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат "";
	КонецПопытки;
	Контрагент = Объект;
    
    Попытка
		ноКонтр = СОМсоединение.Справочники.Контрагенты.СоздатьЭлемент();
        Если ЗначениеЗаполнено(мКод) Тогда
            ноКонтр.Код = Объект.НО_Код_УТ10;
        КонецЕсли;
		ноКонтр.Наименование = Контрагент.Наименование;
		ноКонтр.НаименованиеПолное = Контрагент.НаименованиеПолное;
		ноКонтр.ИНН = Контрагент.ИНН;
		ноКонтр.КПП = Контрагент.КПП;
		ноКонтр.КодПоОКПО = Контрагент.КодПоОКПО;
        Если Контрагент.Партнер.Поставщик Тогда
		    ноКонтр.Поставщик = Истина;
        КонецЕсли; 
        Если Контрагент.Партнер.Клиент Тогда
		    ноКонтр.Покупатель = Истина;
        КонецЕсли; 
        ноКонтр.Комментарий = ?(ПустаяСтрока(Контрагент.ДополнительнаяИнформация), "передан из УТ-11   [" + ТекущаяДата() + "]",
                              Контрагент.ДополнительнаяИнформация + "     передан из УТ-11   [" + ТекущаяДата() + "]");
		Если Контрагент.ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮрФизЛицо.ЮрЛицо") Тогда
			ноКонтр.ЮрФизЛицо = СОМсоединение.Перечисления.ЮрФизЛицо.ЮрЛицо;
		Иначе
			ноКонтр.ЮрФизЛицо = СОМсоединение.Перечисления.ЮрФизЛицо.ФизЛицо;
		КонецЕсли;
		ноКонтр.Записать();
        
        КонтраКом = ноКонтр.Ссылка;
		GUID_УТ10 = КонтраКом.УникальныйИдентификатор();
		ГУИД = СОМсоединение.String(КонтраКом.УникальныйИдентификатор());
		GUID = Строка(ГУИД);
    	Попытка 
        	КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID));
    	Исключение
    		Сообщить("Не могу найти Контрагента в УТ 10 по ГУИД = <" + GUID + "> - Функция УТ10_СоздатьНовогоКонтрагента() - вызывайте программиста ...");
    		Выполнено = Ложь;
    		Возврат Ложь;
    	КонецПопытки;
		мКод = Строка(КонтраКом.Код);
        КонтраОбъект = Контрагент.Ссылка.ПолучитьОбъект();
        КонтраОбъект.НО_GUID_УТ10 = GUID;   // полученный GUID как строку сохраняем в УТ-11
        КонтраОбъект.НО_Код_УТ10 = мКод;    // полученный из УТ-10 код сохраняем в УТ-11
        КонтраОбъект.Записать();
		V8 = 0;   СОМсоединение = 0;
		Возврат GUID;
	Исключение
		Сообщить("Не удалось записать контрагента " + Контрагент.НаименованиеПолное + Символы.ПС + ОписаниеОшибки());
		Сообщить("Контрагент не был скопирован. Обратитесь к программисту...");
		КонтраКом = Неопределено;
		V8 = 0;   СОМсоединение = 0;
		Возврат "";
	КонецПопытки;
КонецФункции   // УТ10_СоздатьНовогоКонтрагента()

&НаСервере
Функция УТ10_НайтиКонтрагентаПоГУИД(GUID_УТ10, мКод, СтрокаСоединения)
    //+++ YuriKo bgn [2012.12.04] начало 13
    мКод = "";
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных УТ-10 не открыта!!!  Невозможно передать Контрагента из УТ 11 - Функция УТ10_НайтиКонтрагентаПоГУИД() - вызывайте программиста ...");
        мКод = "База данных не открыта";
		Возврат "";
	КонецПопытки;
	Попытка 
    	КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID_УТ10));
	Исключение
		Сообщить("Не могу найти Контрагента в УТ 10 по ГУИД = <" + GUID_УТ10 + "> - Функция УТ10_НайтиКонтрагентаПоГУИД() - вызывайте программиста ...");
		Выполнено = Ложь;
   		Возврат Ложь;
	КонецПопытки;
	мКод = Строка(КонтраКом.Код);
	V8 = 0;   СОМсоединение = 0;
	Если ЗначениеЗаполнено(мКод) Тогда Возврат Истина Иначе Возврат Ложь КонецЕсли;
    //--- YuriKo end [2012.12.04] конец  13
КонецФункции   // УТ10_НайтиКонтрагентаПоГУИД(Цель)

&НаСервере
Функция УТ10_НайтиКонтрагентаПоИНН(Контрагент, мКод, мГУИД, СтрокаСоединения)
    //+++ YuriKo bgn [2012.12.04] начало 19
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных УТ-10 не открыта!!!  Невозможно передать Контрагента из УТ 11 - Функция УТ10_НайтиКонтрагентаПоИНН() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат "";
	КонецПопытки;
	Попытка 
    	КонтраКом = СОМсоединение.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", Контрагент.ИНН);
	Исключение
		Сообщить("Не могу найти Контрагента в УТ 10 по ИНН = <" + Контрагент.ИНН + "> - Функция УТ10_НайтиКонтрагентаПоГУИД() - вызывайте программиста ...");
		Выполнено = Ложь;
   		Возврат Ложь;
	КонецПопытки;
	GUID_УТ10 = КонтраКом.УникальныйИдентификатор();
	ГУИД = СОМсоединение.String(КонтраКом.УникальныйИдентификатор());
    мГУИД = Строка(ГУИД);
	мКод = Строка(КонтраКом.Код);
	V8 = 0;   СОМсоединение = 0;
	Если ЗначениеЗаполнено(мКод) Тогда Возврат Истина Иначе Возврат Ложь КонецЕсли;
    //--- YuriKo end [2012.12.04] конец  19
КонецФункции   // УТ10_НайтиКонтрагентаПоИНН(Цель)

&НаСервере
Функция УТ10_НайтиКонтрагентаПоНаименованию(Контрагент, мКод, мГУИД, СтрокаСоединения)
    //+++ YuriKo bgn [2012.12.04] начало 12
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных УТ-10 не открыта!!!  Невозможно передать Контрагента из УТ 11 - Функция УТ10_НайтиКонтрагентаПоНаименованию() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат "";
	КонецПопытки;
	Попытка 
    	КонтраКом = СОМсоединение.Справочники.Контрагенты.НайтиПоНаименованию(Контрагент.Наименование);
	Исключение
		Сообщить("Не могу найти Контрагента в УТ 10 по Наименованию = <" + Контрагент.Наименование + "> - Функция УТ10_НайтиКонтрагентаПоНаименованию() - вызывайте программиста ...");
		Выполнено = Ложь;
   		Возврат Ложь;
	КонецПопытки;
	GUID_УТ10 = КонтраКом.УникальныйИдентификатор();
	ГУИД = СОМсоединение.String(КонтраКом.УникальныйИдентификатор());
    мГУИД = Строка(ГУИД);
	мКод = Строка(КонтраКом.Код);
    
	V8 = 0;   СОМсоединение = 0;
	Если ЗначениеЗаполнено(мКод) Тогда Возврат Истина Иначе Возврат Ложь КонецЕсли;
    //--- YuriKo end [2012.12.04] конец  12
КонецФункции   // УТ10_НайтиКонтрагентаПоНаименованию()

&НаСервере
Процедура УТ10_ЗаписатьКонтактыКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения)
	Выполнено = Истина;   // заготовка
КонецПроцедуры   // УТ10_ЗаписатьКонтактыКонтрагента()

&НаСервере
Процедура УТ10_ПолучитьБанкСчетаКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения)
	//+++ YuriKo bgn [2012.12.04] начало 6
    Выполнено = Ложь;
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных УТ-10 не открыта!!!  Невозможно передать Контрагента из УТ 11 - Процедура УТ10_ПолучитьБанкСчетаКонтрагента()- вызывайте программиста ...");
		Возврат;
	КонецПопытки;
    Попытка 
    	КонтрНовый = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",НовыйКонтрагентГУИД));
    Исключение
        Сообщить("Не могу найти Контрагента в УТ 10 по ГУИД = <" + НовыйКонтрагентГУИД + "> - Процедура УТ10_ПолучитьБанкСчетаКонтрагента() - вызывайте программиста ...");
        Выполнено = Ложь;
        Возврат;
    КонецПопытки;
	Контрагент = Объект;
    
    ВыборкаБухСчётовКонтры = Справочники.БанковскиеСчетаКонтрагентов.Выбрать( , Контрагент.Ссылка, , );
    Пока ВыборкаБухСчётовКонтры.Следующий() Цикл
        Если ВыборкаБухСчётовКонтры.ЭтоГруппа ИЛИ ВыборкаБухСчётовКонтры.ПометкаУдаления Тогда
            Продолжить;
        КонецЕсли;
        Счёт = ВыборкаБухСчётовКонтры;
        Счёт_Наимен = ВыборкаБухСчётовКонтры.Наименование;
        Счёт_Номер  = ВыборкаБухСчётовКонтры.НомерСчета;
        Счёт_Банк   = ВыборкаБухСчётовКонтры.Банк;
        Счёт_РсБанк = ВыборкаБухСчётовКонтры.БанкДляРасчетов;
        Счёт_Валюта = ВыборкаБухСчётовКонтры.ВалютаДенежныхСредств;
        Счёт_Контра = ВыборкаБухСчётовКонтры.Владелец;
        Счёт_ТеКорр = ВыборкаБухСчётовКонтры.ТекстКорреспондента;
        Счёт_ТеНазн = ВыборкаБухСчётовКонтры.ТекстНазначения;
        Счёт_изУт10 = СОМсоединение.Справочники.БанковскиеСчета.НайтиПоНаименованию(Счёт_Наимен, , , КонтрНовый);
        мСчёт       = Строка(Счёт_изУт10.НомерСчета);
        Если Счёт_Номер = мСчёт Тогда
        	Выполнено = Истина;
            Продолжить;
        Иначе
            НовыйСчёт = СОМсоединение.Справочники.БанковскиеСчета.СоздатьЭлемент();
            НовыйСчёт.Владелец = КонтрНовый;
            НовыйСчёт.НомерСчета = Счёт_Номер;
            НовыйСчёт.Наименование = Счёт_Наимен;
            НовыйСчёт.ВидСчета = "Расчетный";
            Если Счёт_Валюта.Код = "643" Тогда        // Российский рубль
    			НовыйСчёт.ВалютаДенежныхСредств = СОМсоединение.Справочники.Валюты.НайтиПоКоду("810");
    		ИначеЕсли Счёт_Валюта.Код = "978" Тогда   // Евро
    			НовыйСчёт.ВалютаДенежныхСредств = СОМсоединение.Справочники.Валюты.НайтиПоКоду("978");
    		ИначеЕсли Счёт_Валюта.Код = "840" Тогда   // Доллар США
    			НовыйСчёт.ВалютаДенежныхСредств = СОМсоединение.Справочники.Валюты.НайтиПоКоду("840");
    		Иначе
    			НовыйСчёт.ВалютаДенежныхСредств = СОМсоединение.Справочники.Валюты.НайтиПоКоду("810");
    		КонецЕсли;
            мБанк = СОМсоединение.Справочники.Банки.НайтиПоКоду(Счёт_Банк.Код);
            Если ЗначениеЗаполнено(мБанк.Code) Тогда
                НовыйСчёт.Банк = мБанк;
            Иначе
                Сообщить("В УТ-10 отсутствует банк [" + Счёт_Банк.Наименование + "] с кодом <" + Счёт_Банк.Код + ">, счёт [" +
                          Счёт.Наименование + "] записан не будет");
                Продолжить;
            КонецЕсли; 
            Попытка
                НовыйСчёт.Записать();
            	Выполнено = Истина;
            Исключение
            	Сообщить("В УТ-10 не удалось записать банковский счёт <" + Счёт_Номер + ">");
            	Выполнено = Ложь;
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;
	V8 = 0;   СОМсоединение = 0;
	//--- YuriKo end [2012.12.04] конец  6
КонецПроцедуры   // УТ10_ПолучитьБанкСчетаКонтрагента()

&НаСервере
Процедура УТ10_ЗаписатьДоговорыКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения)
	//+++ YuriKo bgn [2012.06.25] начало 7
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных УТ-10 не открыта!!!  Невозможно передать Контрагента из УТ 11 - Процедура УТ10_ЗаписатьДоговорыКонтрагента() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат;
	КонецПопытки;
    Попытка 
    	КонтрНовый = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",НовыйКонтрагентГУИД));
    Исключение
        Сообщить("Не могу найти Контрагента в УТ 10 по ГУИД = <" + НовыйКонтрагентГУИД + "> - Процедура УТ10_ЗаписатьДоговорыКонтрагента() - вызывайте программиста ...");
        Выполнено = Ложь;
        Возврат;
    КонецПопытки;
	Контрагент = Объект;
	
	Отбор = Новый Структура("Контрагент");
	Контр = Контрагент.Ссылка;
	Отбор.Контрагент = Контр;
	Выборка = Справочники.ДоговорыКонтрагентов.Выбрать( , , Отбор, );
	Пока Выборка.Следующий() Цикл
		Если (НЕ Выборка.Статус = Перечисления.СтатусыДоговоровКонтрагентов.Действует) ИЛИ (Выборка.ПометкаУдаления = Истина) ИЛИ Выборка.Ссылка.ЭтоГруппа Тогда
			Продолжить;
		КонецЕсли;
        
        // искать договор по ГУИД
        GUID = Выборка.НО_GUID_УТ10;
        Если ЗначениеЗаполнено(GUID) Тогда
            ДогКом = СОМсоединение.Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID));
    		мКод = Строка(ДогКом.Код);
        Иначе    
    		мКод = "";
        КонецЕсли;
        Если ЗначениеЗаполнено(мКод) Тогда
            ДоговорОбъект = ПолучитьСправочникОбъектПоСсылке(Выборка.Ссылка);
            ДоговорОбъект.НО_Код_УТ10 = мКод;
            ДоговорОбъект.Записать();
            Продолжить;
        КонецЕсли;
        
        Если ЗначениеЗаполнено(Выборка.НО_Код_УТ10) Тогда
            мКод = Выборка.НО_Код_УТ10;
        Иначе
            Если ЗначениеЗаполнено(Выборка.НО_Код_БП16) Тогда
                мКод = Выборка.НО_Код_БП16;
            КонецЕсли;
        КонецЕсли;
        Дог = СОМсоединение.Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
        Если ЗначениеЗаполнено(мКод) Тогда
            Дог.Код = мКод;
        КонецЕсли;
		Дог.Наименование = Выборка.Наименование;
		Дог.Комментарий = Выборка.Комментарий;
		Дог.Организация = СОМсоединение.Справочники.Организации.НайтиПоРеквизиту("ИНН", Выборка.Организация.ИНН);
		Дог.Номер = Выборка.Номер;
		Дог.Дата = Выборка.Дата;
        
        //+++ YuriKo bgn [2012.12.04] начало 11
        Если Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиенту Тогда
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
        ИначеЕсли Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию Тогда
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером;
        ИначеЕсли Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика Тогда
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком;
        ИначеЕсли Выборка.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПриемНаКомиссию Тогда
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.СКомитентом;
        Иначе
    		Дог.ВидДоговора = СОМсоединение.Перечисления.ВидыДоговоровКонтрагентов.Прочее;
        КонецЕсли; 
        //--- YuriKo end [2012.12.04] конец  11
        
        Если Выборка.ВалютаВзаиморасчетов.Код = "643" Тогда        // Российский рубль
			Дог.ВалютаВзаиморасчетов = СОМсоединение.Справочники.Валюты.НайтиПоКоду("810");
		ИначеЕсли Выборка.ВалютаВзаиморасчетов.Код = "978" Тогда   // Евро
			Дог.ВалютаВзаиморасчетов = СОМсоединение.Справочники.Валюты.НайтиПоКоду("978");
		ИначеЕсли Выборка.ВалютаВзаиморасчетов.Код = "840" Тогда   // Доллар США
			Дог.ВалютаВзаиморасчетов = СОМсоединение.Справочники.Валюты.НайтиПоКоду("840");
		Иначе
			Дог.ВалютаВзаиморасчетов = СОМсоединение.Справочники.Валюты.НайтиПоКоду("810");
		КонецЕсли;
        
		Дог.СрокДействия = Выборка.ДатаОкончанияДействия;
		Дог.Владелец = КонтрНовый;
		Дог.ДопустимоеЧислоДнейЗадолженности = Выборка.НО_КоличествоДнейОтсрочкиПлатежа;
		Дог.ВедениеВзаиморасчетов = СОМсоединение.Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом;
		Дог.Записать();
        
        ДогКом = Дог.Ссылка;
		GUID_УТ10 = ДогКом.УникальныйИдентификатор();
		ГУИД = СОМсоединение.String(ДогКом.УникальныйИдентификатор());
		GUID = Строка(ГУИД);
		ДогКом = СОМсоединение.Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID));
		мКод = Строка(ДогКом.Код);
        
        Если ЗначениеЗаполнено(мКод) Тогда     // в БП найден ново-созданный Договор по ГУИД
            ДоговорОбъект = ПолучитьСправочникОбъектПоСсылке(Выборка.Ссылка);
            ДоговорОбъект.НО_GUID_УТ10 = GUID;
            ДоговорОбъект.НО_Код_УТ10 = мКод;
            ДоговорОбъект.Записать();
            Продолжить;
        КонецЕсли;
	КонецЦикла;
	Выполнено = Истина;
	V8 = 0;   СОМсоединение = 0;
	//--- YuriKo end [2012.06.25] конец  7
КонецПроцедуры   // УТ10_ЗаписатьДоговорыКонтрагента()

&НаСервере
Процедура УТ10_ЗаполнитьКонтактнуюИнформацию(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения)
    //+++ YuriKo bgn [2012.12.01] начало 20
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных УТ-10 не открыта!!!  Невозможно передать Контрагента из УТ 11 - Процедура УТ10_ЗаполнитьКонтактнуюИнформацию() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат;
	КонецПопытки;
	Контрагент = Объект;
	Попытка 
    	КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",НовыйКонтрагентГУИД));
	Исключение
		Сообщить("Не могу найти Контрагента в УТ 10 по ГУИД = <" + НовыйКонтрагентГУИД + "> - Процедура УТ10_ЗаполнитьКонтактнуюИнформацию() - вызывайте программиста ...");
		Выполнено = Ложь;
		Возврат;
	КонецПопытки;
	
	Для ы = 0 По Контрагент.КонтактнаяИнформация.Количество()-1 Цикл
		Если Строка(Контрагент.КонтактнаяИнформация[ы].Вид) = "Юридический адрес" Тогда
			ЮрАдр = Контрагент.КонтактнаяИнформация[ы].Представление;
		ИначеЕсли Строка(Контрагент.КонтактнаяИнформация[ы].Вид) = "Фактический адрес" Тогда
			ФкАдр = Контрагент.КонтактнаяИнформация[ы].Представление;
		ИначеЕсли Строка(Контрагент.КонтактнаяИнформация[ы].Вид) = "Телефон" Тогда
			Телфн = Контрагент.КонтактнаяИнформация[ы].Представление;
		ИначеЕсли Строка(Контрагент.КонтактнаяИнформация[ы].Вид) = "Email" Тогда
			Email = Контрагент.КонтактнаяИнформация[ы].Представление;
		КонецЕсли; 
	КонецЦикла; 
	
	АдрИнф = СОМсоединение.РегистрыСведений.КонтактнаяИнформация;
	НаборАдр = АдрИнф.СоздатьНаборЗаписей();
	
	НаборАдр.Отбор.Объект.Установить(КонтраКом);
	НаборАдр.Отбор.Вид.Установить(СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Юридический адрес организации"));
	НаборАдр.Отбор.Тип.Установить(СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Адрес);
	НаборАдр.Прочитать();
	Если НаборАдр.Количество() = 0 Тогда
		Адр = НаборАдр.Добавить();
		Адр.Объект = КонтраКом;
		Адр.Тип = СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Адрес;
		Адр.Вид = СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Юридический адрес организации");
		Адр.Представление = ЮрАдр;
		НаборАдр.Записать();
	КонецЕсли;
		
	НаборАдр.Отбор.Объект.Установить(КонтраКом);
	НаборАдр.Отбор.Тип.Установить(СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Адрес);
	НаборАдр.Отбор.Вид.Установить(СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Фактический адрес организации"));
	НаборАдр.Прочитать();
	Если НаборАдр.Количество() = 0 Тогда
		Адр = НаборАдр.Добавить();
		Адр.Объект = КонтраКом;
		Адр.Тип = СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Адрес;
		Адр.Вид = СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Фактический адрес организации");
		Адр.Представление = ФкАдр;
		НаборАдр.Записать();
	КонецЕсли;
		
	НаборАдр.Отбор.Объект.Установить(КонтраКом);
	НаборАдр.Отбор.Тип.Установить(СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Телефон);
	НаборАдр.Отбор.Вид.Установить(СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Телефон контрагента"));
	НаборАдр.Прочитать();
	Если НаборАдр.Количество() = 0 Тогда
		Адр = НаборАдр.Добавить();
		Адр.Объект = КонтраКом;
		Адр.Тип = СОМсоединение.Перечисления.ТипыКонтактнойИнформации.Телефон;
		Адр.Вид = СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Телефон контрагента");
		Адр.Представление = Телфн;
		НаборАдр.Записать();
	КонецЕсли;
		
	НаборАдр.Отбор.Объект.Установить(КонтраКом);
	НаборАдр.Отбор.Тип.Установить(СОМсоединение.Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
	НаборАдр.Отбор.Вид.Установить(СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес электронной почты контрагента для обмена электронными документами"));
	НаборАдр.Прочитать();
	Если НаборАдр.Количество() = 0 Тогда
		Адр = НаборАдр.Добавить();
		Адр.Объект = КонтраКом;
		Адр.Тип = СОМсоединение.Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
		Адр.Вид = СОМсоединение.Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес электронной почты контрагента для обмена электронными документами");
		Адр.Представление = Email;
		НаборАдр.Записать();
	КонецЕсли;
	Выполнено = Истина;
	V8 = 0; СОМсоединение = 0;
    //--- YuriKo end [2012.12.01] конец  20
КонецПроцедуры   // УТ10_ЗаполнитьКонтактнуюИнформацию()

&НаСервере
Процедура УТ10_ЗаписатьРеквизитыКонтрагента(ОСсылка, GUID_УТ10, Код_УТ10)
    КонтраОбъект = Объект.Ссылка.ПолучитьОбъект();
    КонтраОбъект.НО_GUID_УТ10 = GUID_УТ10;
    КонтраОбъект.НО_Код_УТ10  = Код_УТ10;
    КонтраОбъект.Записать();
КонецПроцедуры   // УТ10_ЗаписатьРеквизитыКонтрагента()

&НаСервере
Процедура УТ10_ПерезаполнитьОсновныеРеквизитыКонтрагента(НовыйКонтрагентГУИД, СтрокаСоединения)
    //+++ YuriKo bgn [2012.12.05] начало 10
    мКод = "";
	V8 = Новый COMОбъект("V82.ComConnector");
	Попытка 
		СОМсоединение = V8.Connect(СтрокаСоединения);
	Исключение
		Сообщить("База данных УТ-10 не открыта!!!  Невозможно перезаполнить реквизиты Контрагента - Процедура УТ10_ПерезаполнитьОсновныеРеквизитыКонтрагента() - вызывайте программиста ...");
		Возврат;
    КонецПопытки;
    Контрагент = Объект;
    
    Попытка 
        КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",НовыйКонтрагентГУИД));
    Исключение
        Сообщить("Не могу найти Контрагента в УТ 10 по ГУИД = <" + НовыйКонтрагентГУИД + "> - Процедура УТ10_ПерезаполнитьОсновныеРеквизитыКонтрагента() - вызывайте программиста ...");
        Выполнено = Ложь;
        Возврат;
    КонецПопытки;
	мКод = Строка(КонтраКом.Код);
    
    ноКонтр = КонтраКом.ПолучитьОбъект();
    Если ЗначениеЗаполнено(Объект.НО_Код_УТ10) Тогда
        ноКонтр.Код = Объект.НО_Код_УТ10;
    КонецЕсли;
    ноКонтр.Наименование = Контрагент.Наименование;
    ноКонтр.НаименованиеПолное = Контрагент.НаименованиеПолное;
    ноКонтр.ИНН = Контрагент.ИНН;
    ноКонтр.КПП = Контрагент.КПП;
    ноКонтр.КодПоОКПО = Контрагент.КодПоОКПО;
    Если Контрагент.Партнер.Поставщик Тогда
        ноКонтр.Поставщик = Истина;
    КонецЕсли; 
    Если Контрагент.Партнер.Клиент Тогда
        ноКонтр.Покупатель = Истина;
    КонецЕсли; 
    ноКонтр.Комментарий = ?(НЕ ЗначениеЗаполнено(ноКонтр.Комментарий), "передан из УТ-11   [" + ТекущаяДата() + "]", ноКонтр.Комментарий);
    Если Контрагент.ЮрФизЛицо = ПредопределенноеЗначение("Перечисление.ЮрФизЛицо.ЮрЛицо") Тогда
        ноКонтр.ЮрФизЛицо = СОМсоединение.Перечисления.ЮрФизЛицо.ЮрЛицо;
    Иначе
        ноКонтр.ЮрФизЛицо = СОМсоединение.Перечисления.ЮрФизЛицо.ФизЛицо;
    КонецЕсли;
    ноКонтр.Записать();
    
    КонтраКом = ноКонтр.Ссылка;
    GUID_УТ10 = КонтраКом.УникальныйИдентификатор();
    ГУИД = СОМсоединение.String(КонтраКом.УникальныйИдентификатор());
    GUID = Строка(ГУИД);
    Попытка 
        КонтраКом = СОМсоединение.Справочники.Контрагенты.ПолучитьСсылку(СОМсоединение.NewObject("УникальныйИдентификатор",GUID));
    Исключение
        Сообщить("Не могу найти Контрагента в УТ 10 по ГУИД = <" + GUID + "> - Процедура УТ10_ПерезаполнитьОсновныеРеквизитыКонтрагента() - вызывайте программиста ...");
        Выполнено = Ложь;
        Возврат;
    КонецПопытки;
    мКод = Строка(КонтраКом.Код);
    КонтраОбъект = Контрагент.Ссылка.ПолучитьОбъект();
    КонтраОбъект.НО_GUID_УТ10 = GUID;   // полученный GUID как строку сохраняем в УТ-11
    КонтраОбъект.НО_Код_УТ10 = мКод;    // полученный из УТ-10 код сохраняем в УТ-11
    КонтраОбъект.Записать();
    
    V8 = 0;   СОМсоединение = 0;
    //--- YuriKo end [2012.12.05] конец  10
КонецПроцедуры   // УТ10_ПерезаполнитьОсновныеРеквизитыКонтрагента()

&НаКлиенте
Процедура УТ10_Выгрузить(СтрокаСоединения)
    
    //+++ YuriKo bgn [2012.06.20] начало 1
	// процедура ищет Контрагента в УТ-10 по ГУИД, или ИНН, или Наименованию
	// - если не нашла - создаёт ноаого, со всеми реквизитами и сопутствующими (контакты, договоры, счета ... )
	НовыйКонтрагентГУИД = "";
	Контрагент = Объект;
	КонтрагентНайден = Ложь;
	мКод = "";
	
	GUID_УТ10 = Объект.НО_GUID_УТ10;
    Если НЕ ПустаяСтрока(GUID_УТ10) Тогда
    	КонтрагентНайден = УТ10_НайтиКонтрагентаПоГУИД(GUID_УТ10, мКод, СтрокаСоединения);
        Если мКод = "База данных не открыта" Тогда
            // неправильные данные для соединения, или проблемы с открытием базы
            Возврат;
        КонецЕсли;
        Если ЗначениеЗаполнено(GUID_УТ10) И НЕ КонтрагентНайден Тогда
            УТ10_ЗаписатьРеквизитыКонтрагента(Объект.Ссылка, "", "");
        	GUID_УТ10 = "";
        КонецЕсли;
    	Если КонтрагентНайден Тогда
            УТ10_ЗаписатьРеквизитыКонтрагента(Объект.Ссылка, GUID_УТ10, мКод);
            Ответ = Вопрос("Контрагент с таким ГУИД,  и с Кодом = <" + мКод + ">  -  найден в УТ-10:" + Символы.ПС +
                           "перезаписать  <<Да>>  или ничего не делать  <<Нет>> ?", РежимДиалогаВопрос.ДаНет);
			Если Ответ = КодВозвратаДиалога.Да Тогда
                // перезаписать существующего
                НовыйКонтрагентГУИД = GUID_УТ10;
            Иначе
				Возврат;
			КонецЕсли;
    	КонецЕсли;
    КонецЕсли;
	
	// поиск по ИНН
    Если НЕ ЗначениеЗаполнено(НовыйКонтрагентГУИД) И ЗначениеЗаполнено(Контрагент.ИНН) Тогда
        мГУИД = "";
		КонтрагентНайден = УТ10_НайтиКонтрагентаПоИНН(Контрагент, мКод, мГУИД, СтрокаСоединения);
        Если КонтрагентНайден Тогда
            Ответ = Вопрос("Контрагент с таким ИНН,  и с Кодом = <" + мКод + ">  -  найден в УТ-10:" + Символы.ПС +
                           "Создать нового (да), перезаписать (нет) или ничего не делать (отмена) ?", РежимДиалогаВопрос.ДаНетОтмена);
			Если Ответ = КодВозвратаДиалога.Отмена Тогда
                // ничего не делать
				Возврат;
			ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда
                // создать нового
                НовыйКонтрагентГУИД = УТ10_СоздатьНовогоКонтрагента(мКод, СтрокаСоединения);
				Если ПустаяСтрока(НовыйКонтрагентГУИД) Тогда
					Предупреждение("Контрагент в УТ-10 не создан  :(");
				КонецЕсли; 
            ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
                // перезаписать существующего
                НовыйКонтрагентГУИД = мГУИД;
			Иначе
			КонецЕсли;
		Иначе	
		КонецЕсли;
	КонецЕсли;
	
	// поиск по Наименованию
	Если НЕ ЗначениеЗаполнено(НовыйКонтрагентГУИД) Тогда
        Если НЕ (мКод = "База данных не открыта" ИЛИ мКод = "         ") Тогда
    		КонтрагентНайден = УТ10_НайтиКонтрагентаПоНаименованию(Контрагент, мКод, мГУИД, СтрокаСоединения);
            Если КонтрагентНайден Тогда
                Ответ = Вопрос("Контрагент с таким Наименованием,  и с Кодом = <" + мКод + ">  -  найден в УТ-10:" + Символы.ПС +
                        "Создать нового <<Да>>, перезаписать существующего <<Нет>>, или ничего не делать <<Отмена>> ?",
        			    РежимДиалогаВопрос.ДаНетОтмена);
                Если Ответ = КодВозвратаДиалога.Да Тогда
                    // создать нового
        			НовыйКонтрагентГУИД = УТ10_СоздатьНовогоКонтрагента(мКод, СтрокаСоединения);
        			Если ПустаяСтрока(НовыйКонтрагентГУИД) Тогда
        				Предупреждение("Контрагент в УТ-10 не создан  :(");
        			КонецЕсли; 
                ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
                    // перезаписать существующего
                    НовыйКонтрагентГУИД = мГУИД;
                Иначе
                    // ничего не делать
                    Возврат;
                КонецЕсли;
            КонецЕсли; 
        КонецЕсли;
	КонецЕсли;
	
	// если не найден по ГУИД или ИНН или Наименованию - создаём нового
	Если НЕ ЗначениеЗаполнено(НовыйКонтрагентГУИД) Тогда
		НовыйКонтрагентГУИД = УТ10_СоздатьНовогоКонтрагента(мКод, СтрокаСоединения);
		Если ПустаяСтрока(НовыйКонтрагентГУИД) Тогда
			Предупреждение("Контрагент в УТ-10 не создан  :(");
			Возврат;
		Иначе
			Сообщить("Создан контрагент в УТ-10 с кодом <" + мКод + "> и ГУИД = <" + НовыйКонтрагентГУИД + ">");
		КонецЕсли;
    Иначе
    	// Контрагент найден в УТ-10, перезаполним основные рекквизиты
        УТ10_ПерезаполнитьОсновныеРеквизитыКонтрагента(НовыйКонтрагентГУИД, СтрокаСоединения);
    КонецЕсли;
	
	
	// адреса и телефоны Контрагента
	Выполнено = Ложь;
	УТ10_ЗаполнитьКонтактнуюИнформацию(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения);
    Если НЕ Выполнено Тогда
        Сообщить("Не удалось записать адреса и телефоны Контрагента в УТ-10... ");
	КонецЕсли;
	
	// контактные лица Контрагента
	Выполнено = Ложь;
	УТ10_ЗаписатьКонтактыКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения);
	Если НЕ Выполнено Тогда
        Сообщить("Не удалось записать контактные лица Контрагента в УТ-10... ");
	КонецЕсли;
	
	// договоры Контрагента
	Выполнено = Ложь;
	УТ10_ЗаписатьДоговорыКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения);
	Если НЕ Выполнено Тогда
        Сообщить("Не удалось записать договоры Контрагента в УТ-10... ");
	КонецЕсли;

	//+++ YuriKo bgn [2012.12.04] начало 8
	// Банковские счета Контрагента
	Выполнено = Ложь;
    УТ10_ПолучитьБанкСчетаКонтрагента(НовыйКонтрагентГУИД, Выполнено, СтрокаСоединения);
	Если НЕ Выполнено Тогда
        Сообщить("Не удалось записать Банковские счета Контрагента в УТ-10... ");
	КонецЕсли;
	//--- YuriKo end [2012.12.04] конец  8
    
	//--- YuriKo end [2012.06.20] конец  1
КонецПроцедуры   // УТ10_Выгрузить()
...Показать Скрыть
mpak77; kevlanik; asdfr16; DAnry; myr4ik07; Rokky78; vasiliy_b; Ktyfa; binex; Snezha; DiegoLidabo; Dvornik; Gonja; pizhenkov; +14 Ответить
91. Валерий Гайдабура (director04) 18.02.13 21:27
Спасибо, именно такого конструктива и жду... )))))
Лучше один конструктивный отзыв, чем сто никчемных комментария. Спасибо ....
92. Алексей Ко (Жолтокнижниг) 21.02.13 23:45
Есть предложение к автору, если он не хочет думать и сам выдавать конструктив, можно перепостить интересные моменты из ЖК, новичкам это понравиться, да и бывалым прогерам тоже, не все же читают книжки и умеют искать в интернетах. И будет радость, и куча плюсов.
93. Елена Пименова (Bukaska) 22.02.13 00:08
2. При запуске Com – соединения не создается отдельного процесса 1cv8. По отзывам пользователей партнерского форума 1С, завершение работы Ole происходит не всегда корректно. И в этом случае наблюдаются ощутимые проблемы с производительностью рабочей станции.


да ладно...
V82 = Новый COMобъект("V82.ComConnector");

Вот если бы здесь не ComConnector, а ComApplication - то второй процесс бы был, во всяком случае мне говорил один из франей, что должен быть второй процесс, но если использовать именно ComConnector, то второго процесса не будет.
Хотя опять же напрашивается вопрос, а когда каким из COM-соединений лучше пользоваться?
94. Валерий Гайдабура (director04) 22.02.13 00:09
Есть предложение к автору, если он не хочет думать и сам выдавать конструктив, можно перепостить интересные моменты из ЖК, новичкам это понравиться, да и бывалым прогерам тоже, не все же читают книжки и умеют искать в интернетах. И будет радость, и куча плюсов.


Спасибо за пожелание. ))) В принципе, благодарностей и так хватает (посмотрите на количество плюсов). А зануд и критиканов всегда было достаточно. Посвистели и сдулись.... Теперь читают только те, кому нужна суть, а не языком потрясти.... )))

За предложение все одно - спасибо!
95. СИТЕК ООО (sitec-it) 01.05.13 10:06
По делу добавлю - нельзя сравнивать два СОМ-объекта, даже если это ссылки на один и тот же объект в базе, они всегда будут неравны. Приходится сравнивать по коду, наименованию или идентификатору.
KAPACEB.AA; +1 Ответить 1
96. Валерий Гайдабура (director04) 01.05.13 14:30
(95) sitec-it,
По делу добавлю - нельзя сравнивать два СОМ-объекта, даже если это ссылки на один и тот же объект в базе, они всегда будут неравны. Приходится сравнивать по коду, наименованию или идентификатору.


Это и логично: потому как для 1С это всегда два разных объекта. Аналогично тому, если вы будете сравнивать один и тот же справочник-объект одной базы данных. Они тоже все время не равны. Равны только его ссылки.
97. СИТЕК ООО (sitec-it) 01.05.13 16:10
И, к вопросу о выборе различных методов (OLE, COM, WEB, XML): все зависит от решаемой задачи. Когда необходимо в отчете вывести сравнение данных двух разных баз (после того же XML-обмена), без СОМ-соединения не обойтись.
98. Василий Казьмин (awk) 04.05.13 23:59
(97) sitec-it, Ух, не поверите, но еще как обойтись... Статья для начинающих. Для не начинающих - только скука...


P.S.
(0) На АлексвО зря набросились. Он хоть и злой, но по делу говорит.
99. СИТЕК ООО (sitec-it) 05.05.13 10:17
Тогда просвятите и меня, как обойтись, поскольку я не знаю более быстрого с точки зрения разработки и удобного с точки зрения отладки механизма получения данных из другой базы в режиме он-лайн (абсолютно без всякого сарказма)
100. Василий Казьмин (awk) 05.05.13 17:23
(99) sitec-it,
Вариант №1 Тривиальный. Выгружаем данные в MXL(csv) из обеих баз и сравниваем штатным средством сравнения файлов.
Вариант №2 Внешние источники данных. Подключаемся к базам (используем конфу "Фабрика отчетов", что бы карму баз не портить).
Ваприант №3 Извращенный. Web-service.
Вариант №4 Без единой строки кода. Открываем две базы (желательно два монитора) - смотрим, сверяем.

Ну это на вскидку.

Условия на применения COM(DCOM) - гомогенная лвс на базе вынь. Не то что бы вынь плох, но не всегда базы в такой среде находятся.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа