Установить ссылку нового 1с
Как бы запутанно это не звучало но вот так оно и выглядит. Недостатки таких телодвижений состоят собственно в двойной записи одного объекта справочника Контрагенты ну и запутанности.
Предлагаю обратить внимание на методы ПолучитьСсылку() и УстановитьСсылкуНового() . Информацию о этих методах можно найти в синтаксис помошнике, а я просто приведу пример как обойти двойную запись одного объекта. Более того преимущество этого метода еще и в том, что ненужно использовать ".Ссылка" при использовании которого, система всецело кэширует объект в память.
Для гуру я ничего нового не открыл. Но для новичков я думаю навел на интересные мысли. Просто хочу обратить внимание на использования этого метода, просто зачастую люди забывают о нем и делают лишнюю запись объекта. В моей практике приходилось уже неоднократно применять эти методы и что я могу сказать, что действительно это интересно и решает иногда множество проблем сразу.
Специальные предложения
(1) Gureev, Тут все относительно. Это тоже самое, что сделать обмен данными. Все зависит от целей конечного результата.
(2) что относительного в соблюдении логической целостности БД? Договор не запишется и все! В записанном контрагенте битая ссылка.
(5) fancy, Исключено. Повтор гуида это как сантаклаус - сказка для малышей
П,С, А ни у кого не завалялся готовый код формирования time-based GUID?
Назовите хоть одну цель не уделять внимания контролю ссылочной целостности.
Цель "Неуделение внимания контролю ссылочной целостности" не принимается.
Без транзакции считаю данный код вредным и опасным.
(1)
(32) Например варианты:
1.вар. Уже всё завернуто в транзакцию значительно ранее
2.вар.
ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); ДоговорКонтрагента.УстановитьСсылкуНового(НовыйДоговорСсылка);"
ДоговорКонтрагента.ОбменДанными.Загрузка = Истина;
ДоговорКонтрагента.Записать();
для того что бы не потерять ссылку.
А потом уже заполнение шапки в 30 реквизитов и 15 табличных частей этого Договора (я с такой конфой сталкивался) и там муторный алгоритм со своим ветвлением и запросами. Конечно там нужен рефакторинг - и на него бюджет :) ну или энтузиаст на месяц - полтора за спасибо.
Так что Все зависит от ситуации и от целей .
если не нужны битые ссылки при отказе записи значит нужно писать "пакетом", либо всё либо ничего. Именно это и посоветовал сделать (1) обернуть в транзакцию (это если по настоящему оптимизаровать)
(1) Gureev, Честно говоря не понял почему нужно соблюдать данное условие, ведь даже если транзакция будет зафиксирована после записи контрагента, а потом я в другой транзакции запишу договор, ссылка не должна измениться, ни на справочник контрагенты, ни на справочник договор, или я не прав?
(3) davdykin, но ведь при записи договора может произойти ошибка. А так у метода есть небольшой недостаток - нарушается механизм формирования ссылок. Допустим, нельзя будет по ссылке определить дату создания объекта (минуя журнал регистрации) - на инфостарте есть такая публикация, значит кому-то полезно (мне тоже дважды пригодилось). Можно конечно написать свой генератор гуидов, который сохранит дату.
А что если в момент записи контрагента будет инициировано создание нового объекта спр-ка Договоры (другим пользователем например) и новая ссылка будет сгенерирована используя тот-же уникальный идентификатор. Или это исключено?
(5) Думаю, что это предусмотрели и ссылка, полученная методом ПолучитьСсылку() резервируется платформой
(8) PiccaHut001, потому, что Вам еще не приходилось обслуживать загрузку справочников которые содержат более полутора миллионов записей. Вот тогда и начинаешь задумываться.
(13) DoctorRoza, а разве при КД кто-то отменяет физическую транзакцию!?
Или КД умеет загружать форматы из Екселя? Или дбф научилась читать?
у нас на районе просто делают по требованию клиента и не вырываем слов из контекста для забросок умных фраз. Или Вы полагаете, что имея 15-летний стаж программирования я не знаю что такое Транзакция? или КД? и еще кто тут отписывался решая поумничать. Как Вы полагаете знаю я это или же нет?
(14) ну полноте Вам, застремали меня не по-детски! Я же не в претензию и, тем более, без какого-либо осуждения! В обучающем курсе Дмитрия Шестабитова по мобильной Платформе, модуль 2, используется подобный механизм, но ведь не все его изучали! Предложенную идею нужно знать и помнить, поэтому и плюсанул! А Вы набросились сразу, знаю-не знаю, 15 лет! :|
(17) PiccaHut001, не загружать полтора миллиона, а загружать в справочник где уже есть поллтора миллиона.
Обслуживание билинговых систем.
(21) PiccaHut001, А вы уверены что 5 минут, я вот думаю совсем нет. Т.к. операция записи самая ресурсоемкая для БД (из использованных в примере) , а тут экономия в 2 раза. Если интересно проверьте на БП 3.0.:) Да у способа довольно узкая область применения, но автору однозначный плюс за пример и описание.
(29) Спасибо 1с за детство счастливое версионирование объектов, синхронизацию данных с различными планами обмена, журналирование, разделение данных, контроль на уровне записей, БСП, async/await, infostart
Сильно удивили комментарии, в статье написано, что оно не для гуру, а для новичков, но всё равно не могу не отметить, что
Вы не правы, это не привычная запись это ошибочная запись. В любом мало-мальски адекватном курсе или книге по 1с обязательно рассматривается подобный вопрос и это не какое-то ноу-хау, его в принципе используют повсеместно. В интернете полно примеров работы с этим "методом", если можно так сказать :) удивило, что основы разработки выдаются за нечто новое и особенное.
(8) PiccaHut001, утверждение заслуживающее увольнения, ничего личного.
Что до типовых, то метод используется и используется много где. К примеру в БСП(а она сейчас во всех типовых). Метод используется в подсистеме присоединенных файлов. Это АБСОЛЮТНО ТИПОВОЙ СПОСОБ РЕШЕНИЯ ЗАПИСИ СВЯЗАННЫХ ОБЪЕКТОВ. И никак иначе. Удивляет почему на автора накинулись.
Другой вопрос, что вот конкретно в типовых конкретно в контрагентах и договорах это не используется, потому что сама работа в типовой конфе организована по-другому. Вы сначала создаете контрагента, потом договор. Нету физически ситуации, когда вы из интерфейса делаете запись одновременно двух связанных объектов, это прерогатива обменов и загрузок. Но и в типовых это встречается, к примеру зашел в БП 3.0,
Вот кусок кода запись контрагента + контактное лицо,
(40) insurgut, всё не совсем так. Конкретно в 1С ситуация с битыми ссылками нормальна в определенных условиях, например в РИБ это вообще в норме вещей. Не надо быть столь категоричным. Другой вопрос, что такая запись и правда имеет смысл в транзации, и обычно так и делается.
An-Aleksey; Rudakov_D; CratosX; TeMochkiN; alexscamp; lex2707; worker1c; vozzhaev; ojiojiowka; monkbest; + 10 – Ответить
Одним из способов перенести данные из одной конфигурации 1С в другую является программное подключение с помощью COM. Многие компании используют несколько различных баз, между которыми должны быть определенные связи и зависимости. Если необходимо не только перенести данные, но и выполнить определенную обработку данных, то COM соединение будет оптимальным механизмом. Умение анализировать данные из другой базы 1С пригодиться любому разработчику.
Подключаемся через COM к базе 1С
Помните, что на время COM соединения к базе тратиться лицензия – не стоит увлекаться одновременным выполнением нескольких подключений. Особенно это важно для организаций, у которых количество лицензий ограничено. Решиться этот вопрос может при помощи регламентных заданий, выполняющихся во время отсутствия активных подключений пользователей к информационной базе.
Чтобы иметь возможность подключиться к другой базе и запросить нужную информацию вы должны знать следующие данные:
- Какого она типа – файловая или клиент-серверная;
- Где она располагается;
- Под каким именем и паролем в нее можно зайти;
- Какие данные вас интересуют.
Из первых трех пунктов для реализации COM соединения необходимо сформировать строку параметров. В зависимости от типа ИБ она будет отличаться внешним видом. Используя полученную строку, происходит подключение, с помощью которого можно собирать для анализа и обработки данные из другой базы любыми методами.
Функция подключения проста и не должна вызвать вопросов, если все параметры указаны верно. Для ускорения отладки и анализа возможных ошибок лучше заключить подключение в конструкцию «Попытка». Возвращать функция будет значение типа «COM объект», с которым и предстоит работать, получая нужные данные.
Через COM соединение вы можете не только выбирать данные, но и добавлять их в базу, к которой подключаетесь. Помните, что передавать через COM объект мы можем 4 примитивных типа данных. Другие типы придется задавать с помощью встроенных в платформу функций поиска. Учтите, что глобальные функции платформы вызываются тоже через COM-соединение.
Получаем данные из базы 1С
После того как получили нужный объект, необходимо прочитать данные из другой базы. Для этого мы применяем запрос через COM соединение в 1С 8.3 с помощью полученного значения типа «COM объект» из функции. Важно сначала подключиться к базе, а затем уже выполнять запрос. Выполнение происходит через метод NewObject с указанием в качестве параметра типа объекта в строковом виде – «Запрос».
К примеру, чтобы получить информацию о пользователях определенного подразделения, зададим условие в запрос через параметры. Один параметр будет простого типа – строка, а подразделение – ссылкой элемента справочника «Структура предприятия». Результат запроса является таблицей с перечисленными полями того типа, какого они существуют в базе, к которой произошло COM соединение. Если необходимо их преобразовать в другие типы – воспользуйтесь стандартными функциями платформы:
Если нужно передать в базу массив для отбора по нескольким параметрам, например, подразделениям, тоже используется команда NewObject. Аналогично можно передавать список или таблицу значений, заполняя их элементами другой базы через соединение. Для поиска вам доступны все существующие методы объектов и механизмов платформы.
При переносе документов или элементов справочников всегда возникает вопрос о контроле переноса определенного объекта. С помощью COM соединений можно решить подобные проблемы через уникальный идентификатор. Нужно найти объект в подключаемой базе по идентификатору из текущей ИБ с помощью функции «ПолучитьСсылку», используя идентификатор в виде строки. Если такового не нашлось, вы можете создать его с помощью COM соединения.
Также COM соединение имеет право использовать процедуры и функции из общих модулей 1С с включенным свойством «Внешнее соединение». Кроме этого условия, вызываемая функция или процедура должна быть экспортная и не включать интерактивные действия, выполняемые на сервере. В противоположном случае вы увидите ошибку о недопустимости операции.
Рис.1 Внешнее соединение
Возможности внешнего соединения с другой базой в 1С достаточно обширны и могут позволить выполнить множество задач. Важно уметь правильно оценить инструментарий и выбрать оптимальное решение. В большинстве случаев это умение появляется лишь с опытом или при изучении примеров работ опытных специалистов, поэтому при возникновении потребности в таком подключении мы рекомендуем воспользоваться услугами по обслуживанию и техподдержке 1С.
WS-ссылка в 1С 8.2 и 8.3 — это описание веб-сервиса стороннего производителя, его реквизитов и типов данных для последующей интеграции с ним.
Рассмотрим настройку, свойства, методы использования WS-ссылки на примере ссылки из библиотеки стандартных подсистем 1С — «ОтправкаSMSЧерезМТС».
Свойства, настройки, подключение WS ссылки
Внешний вид WS ссылки:
Модель данных — описывает Пакет XDTO, используемый для работы со ссылкой. Всё дело в том, что разные системы используют разную структуру хранения данных. Для унификации используются Пакеты XDTO, в которых описываются свойства, типы значений, типы объектов.
Web-сервисы — доступные веб-сервисы, их операции и параметры функций.
Например, для отправки смс можно использовать операции «SendMassage», куда передать нужные параметры:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Выполнив этот код, мы отправим смс адресанту:
Как видите, в использовании WS нет ничего трудного.
Пример WS ссылки в 1С
Создать WS ссылку проще простого, для этого достаточно знать URL подключаемого ресурса. При добавлении новой ссылки система спросить адрес и всё сделает самостоятельно:
Подключение к другой базе 1С 8 по COM-соединению — очень полезная вещь. В основном, эта функция необходима для обмена данными между конфигурациями.
Но по каким-то причинам у новичков часто возникают затруднения с этим несложным процессом. Ниже я подскажу способ решения этой проблемы на примере простой задачки.
Поставлена задача:
Из конфигурации «Документооборот» необходимо подключится к базе УПП:
- найти документ по заранее известному коду, допустим «123»;
- получить статус документа;
- если статус изменился, то поменять и в соответствующем документе «документооборота».
Реализация задачи:
Создание подключения к базе 1C по COM
Первым делом необходимо создать подключение к базе 1С 8.3, рассмотрим функцию, которая вернет подключение по ком-объекту к другой базе для файлового режима 1С:
Функция вернет СОМ-объект, с помощью которого можно производить действия с другой базой данных 1С 8.2.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Для клиент-серверного режима строка подключения будет немного отличаться:
Найти документ 1С по COM
Для примера, пусть номер нужного документа будет «1234», а наш Документ-объект — «ДокументОбъект»:
Вот и все: мы подключились по COM, получили нужный документ, прочитали его статус и, если он отличается, установили статус нашему документу.
Другие статьи по 1С:
Видеоурок по подключению 1С 8.3 через COM:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Никогда не сталкивался с такой задачей, а вот понадобилось. Перелопатил интернет, везде одни и те же инструкции как получить ссылку незаписанного документа, но не работатет. Платформа 8.3.9, Надо получить ссылку нового создаваемого документа Приходная накладная, Модуль объекта, код:
Голову уже сломал. СсылкаДок и НашаСсылка возвращают <Объект не обнаружен>Что делаю не так?
Объект>Добавлено через 3 минуты
Возможно, важное уточнение. Все это делаю в расширении
Из одного документа получить данные табличной части другого документа
Добрый день. Сразу оговорюсь 1С только начал изучать, поэтому просьба помидорами не закидывать. .
Получить данные печатающегося документа - имя документа и число страниц
Нужно дописать дополнение, схема состоит в чём: открываем простой word документ и ставим на.
Открыть ссылку из документа в другом браузере
Доброе время, В документе есть ссылки, по нажатию на них Ctrl+ЛКП, сылка открывается в Интернет.
Скачивание документа с облака, имея ссылку
Есть ссылка на скачивание, которая копируется с прямо из браузера. Например: .
Так объект еще не записан в базу, поэтому и не обнаружен.
Что возвращает НашаСсылка.УникальныйИдентификатор()?
Tklwegsd, Только толку никакого. Читаю в инструкции: Иногда надо что-то сделать с еще незаписанным документом в базе. Например, сделать запись в регистр сведений. и далее инструкция. Именно мой случай. Надо сделать запись в регистр сведений. Делаю. И в регистре уже после записи приходной благополучно вместо ссылки на приходную -
Tklwegsd, Точно! Идентификаторы совпадают. Значит как-то по другому надо писать в регистр
Я получаю возврат НашаСсылка и ее записываю в регистр, результат записи Объект не обнаружен. Как тогда писать в регистр?
Решение
Попробовал так, все работает. Ссылка в регистре в итоге связывается с документом.
Это модуль документа:
Tklwegsd, Не получилось у меня. Возможно из-за того, что для моей задачи нельзя писать в регистр в стандартных обработчиках (надо передавать на объект ТЗ, созданную в расширении). Покумекаю сейчас, что к чему. Задам вопросы.
Добавлено через 2 минуты
Да. Смотрю идентификатор полученный до записи дока, потом уже у реальной ссылки, совпадают. Но в регистре запись с необнаруженным объектом
Думаю, в регистр попадает ссылка с другим идентификатором.
Tklwegsd, Все. Понял почему. Я передаю на объект ТЗ из которой делаются записи в регистр из обработчика формы ПередЗаписьюНаСервере и в той же процедуре на объекте пытаюсь установить ссылку, которая появится только после отработки обработчика объекта ПередЗаписью. Т.е. ДА если делать все в ПриЗаписи - должно работать. В моем случае - нет Остается понять возможно ли в ПриЗаписи передать как-то НоваяСсылка. ТЗ не объект, создана в расширении, обратиться к ней из модуля объекта на прямую не получится. Что-то можно придумать?
Добавлено через 3 минуты
Только дошло (((. ПриЗаписи и так, без ПолучитьСсылку() должно все работать, док уже записан в БД и получил реальную ссылку
Добавлено через 5 минут
Передавать НоваяСсылка или ТЗ надо в ПередЗаписью. Задача невыполнима?
А почему бы все не сделать в обработчике события ПриЗаписиНаСервере?
Документ уже записан (не нужны танцы с бубном для получения ссылки), процедура выполняется в единой транзакции записи документа (если что-то пойдет не так, будут отменены все изменения в базе данных).
Tklwegsd, Так и было сделано и без регистра. Смысл задачи - корректировка движений документа. Все работало , но с критическим НО. Работает только, если все делается (изменение, проведение) из формы документа. Если кто-то перепроведет из формы списка или просто групповое перепроведение или закрытие месяца - все слетает. Надо сделать, чтобы таблицы движений заполнялись нужными данными еще до обработчика ОбработкаПроведения. Ну а данные для этих таблиц брались из регистра сведений.
Для уже записанного документа с правильными данными, проблем нет. Надо как-то заставить сделать нужную запись в регистр при создании документа
Добавлено через 52 секунды
Tklwegsd, А как в ПРиЗаписи передать необъектную таблицу или НоваяСсылка?
Вот я болван! Чего проще, при создании нового документа запись в регистр сведений и В РЕГИСТРЫ ДВИЖЕНИЙ делать по старому - в ПриЗаписиНаСервере! А уже у записанного документа заполнять таблицы движений из записи регистра сведений и в регистры накопления записывать штатно ОбработкойПроведения. Муторно конечно, но это выход! Спасибо, Tklwegsd! Когда размышляешь один тяжелей прийти к правильному решению, другое дело - с собеседником, мысли выстраиваются по другому ))) Спасибо!
Ну а если будут еще подсказки от форумчан как оптимальней решить эту задачу - с благодарностью приму
Добавлено через 8 минут
На форму выведена ТЗ, созданная в расширении, т.е. ТЗ не является объектом. В этой таблице некоторые данные для добавления в таблицы движений документа. Т.к. ТЗ не объект, то данные в ней НЕ сохраняются, живут пока живет форма. Чтобы их сохранить, надо записать в регистр сведений. Ключевым полем в регистре - ПриходнаяНакладная.Ссылка. Проблем нет с записанным доком, все можно записать в регистр. При создании дока Приходная накладная, получить ссылку незаписанного можно только на объекте, приходится ТЗ передавать в модуль объекта, чтобы там получить ссылку незаписанного. Получается что либо надо как-то передать ТЗ в модуль объекта в стандартный обработчик ПриЗаписи или там же в ПередЗаписью передать полученную ссылку незаписанного. Путанно объяснил? ))
Добавлено через 1 час 3 минуты
))) Задачу решил по другому! Не стал связываться с получением ссылки незаписанного. В модуле формы заполнил регистр сведений нужными данными, в поле приходная.ссылка установил ПустуюСсылку(). А в модуле объекта в ПриЗаписи отбором по пустой ссылке получил нужные строки регистра и заменил пустую ссылку на ЭтотОбъект.Ссылка
Привязать ссылку к документу, что б при изменении имени документа — ссылка сама обновлялась
Как можно привязать ссылку к документу, что б при изменении имени документа - ссылка сама.
Вводим ссылку для Google документа, а получаем ее уже интегрированную через окошко iframe
Добрый день! Возникла такая задача: мы вводим общую ссылку на любой документ из Гугл диска(ее мы.
Получить ссылку на файл
Здравствуйте! Вы не могли бы мне объяснить как отсюда: $.post("txt.php", < .
Читайте также: