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









Рассмотрим механизм открытия документа по навигационной ссылке из одной информационной базы в другой в один клик

      Нередко в процессе работы с информационной базой, данные в которую были загружены из другой информационной базы возникает необходимость быстро перейти к документу-источнику чтобы посмотреть, корректно ли прошел обмен и/или внести изменения в исходный документ, если в нем обнаружилась ошибка. К примеру, бухгалтер, работая в программе «1С: Бухгалтерия 8», имеющую настроенный обмен с «1С: Управление торговлей 8», обнаруживает в платежке незаполненной статью ДДС. Для исправления ошибки ей необходимо найти эту платежку в базе-источнике —  «1С: Управление торговлей 8», открыть ее и заполнить данный реквизит, чтобы при повторной синхронизации все встало на свои места. Когда подобных ошибок много, работа по поиску каждого такого документа может занять кучу времени и испортить немало нервов бухгалтеру, а заодно ИТ-службе предприятия 🙂

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

Что мы имеем на входе.

Представим, что у нас есть информационная база для ведения бюджетирования, например, «1С:ВДГБ:УПРАВЛЕНЧЕСКАЯ ОТЧЕТНОСТЬ от бухгалтера», фактические данные в которую загружаются из торговой программы на базе «1С:Управление небольшой фирмой».

Мы храним фактические данные в документе «Хозяйственная операция» в разрезе регистраторов, для чего в каждый «Вид операции» добавили вид аналитики — «Документ».

 


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

 

Задача.

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

Решение.

Для решения задачи мы воспользуемся возможностями, которые нам предоставляет управляемое приложение «1С:8.2» по работе с навигационными ссылками и свободно распространяемую программу для автоматизации выполнения задач в Windows — AutoIt .


1. Скачиваем и устанавливаем программу AutoIt с сайта http://www.autoitscript.com/site/autoit/downloads/

Эта программа понадобится только нам и только на этапе разработки, каждому бухгалтеру на компьютер ставить ее вовсе не обязательно!


2. Запускаем Script Editor и создаем файл ОткрытьСсылкуВДругойБазе.au3 со следующим содержимым:


if WinActivate($CmdLine[1], «») <> 0 Then

ClipPut($CmdLine[2])

Send(«+{F11}»)

Send(«{Enter}»)

EndIf

 


3. Нажимаем Ctrl+F7 (либо Tools -> Compile) и получаем исполняемый файл ОткрытьСсылкуВДругойБазе.exe, который нам останется только поместить в каталог, доступный для пользователя информационной базы. Самые ленивые могут сразу скачать скомпилированный файл, приложенный к данной статье. Если сильно чешутся руки, чтобы в дальнейшем не таскаться с этим файлом при работе пользователей, можете сохранить этот файл прямо в информационной базе, добавив туда константу с типом «Хранилище значения».

 

4. Открываем конфигуратор информационной базы «1С:ВДГБ:УПРАВЛЕНЧЕСКАЯ ОТЧЕТНОСТЬ от бухгалтера» и добавляем в справочник «Пользователи» два строковых реквизита длиной по 512 символов: «КаталогФайлаОткрытияДокумента» и «НазваниеОкнаИБИсточника». 

 

 

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

 

5. Открываем форму документа, где хранятся ссылки, которые нам нужно открыть (данном примере, это документ «Хозяйственная операция») и добавляем туда команду «Открыть документ» и соответствующую ей кнопку. 

6. В модуле формы для обработчика команды размещаем следующий код:


&НаКлиенте
Процедура ОткрытьДокумент(Команда)
Ссылочка = "";
Если Элементы.Операции.ТекущиеДанные.ВидАналитики1.Наименование = "Документ" Тогда
Ссылочка = Элементы.Операции.ТекущиеДанные.Аналитика1.Наименование;
ИначеЕсли Элементы.Операции.ТекущиеДанные.ВидАналитики2.Наименование = "Документ" Тогда
Ссылочка = Элементы.Операции.ТекущиеДанные.Аналитика2.Наименование;
ИначеЕсли Элементы.Операции.ТекущиеДанные.ВидАналитики3.Наименование = "Документ" Тогда
Ссылочка = Элементы.Операции.ТекущиеДанные.Аналитика3.Наименование;
ИначеЕсли Элементы.Операции.ТекущиеДанные.ВидАналитики4.Наименование = "Документ" Тогда
Ссылочка = Элементы.Операции.ТекущиеДанные.Аналитика4.Наименование;
ИначеЕсли Элементы.Операции.ТекущиеДанные.ВидАналитики5.Наименование = "Документ" Тогда
Ссылочка = Элементы.Операции.ТекущиеДанные.Аналитика5.Наименование;
ИначеЕсли Элементы.Операции.ТекущиеДанные.ВидАналитики6.Наименование = "Документ" Тогда
Ссылочка = Элементы.Операции.ТекущиеДанные.Аналитика6.Наименование;
КонецЕсли;


Если ЗначениеЗаполнено(Ссылочка) Тогда
ПерейтиКДокументу(Ссылочка);
КонецЕсли;
КонецПроцедуры



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

ЗапуститьПриложение(ПараметрыСеанса.ТекущийПользователь.КаталогФайлаОткрытияДокумента
+ "ОткрытьСсылкуВДругойБазе.exe "
+ """" + НазваниеОкна + """ " + Ссылочка);

КонецПроцедуры

 

Даже поверхностный анализ данного кода требует высшего академического образования и зашкаливающего показателя IQ, поэтому оставим это на рассмотрение высоколобым ученым профессорам и двинемся дальше. Скажу только, что данная конкретная конфигурация изначально разработчиками делалась, судя по всему, исключительно под толстый клиент, поэтому подобный код там встречается сплошь и рядом 😉

 

7. Открываем информационную базу-источник в режиме пользователя, и запускаем утилиту AutoIt Window Info.

 

8. Нажимаем Ctrl+Alt+F (либо Options -> Freeze), щелкаем по окну информационной базы и копируем в буфер обмена появившийся в утилите заголовок окна.

 

9. Открываем информационную базу-приемник в режиме пользователя и заполняем наши свежедобавленные реквизиты в справочнике «Пользователи». 

10. Наслаждаемся полученным результатом!


6 Comments

  1. Mir-mup

    а есть возможность сделать так, чтобы с рабочего стола по ссылке открывался нужный документ в открытой базе. (ярлык на рабочем столе винды, система в режиме предприятия открыта, при нажатии на ярлык открывается документ)?

    Reply
  2. kraynev-navi

    Если правильно понял задачу «Заранее известный документ открыть в определенной базе», то возможно. Это уже описано по сути. Компилируется файлик со строчками публикации в test.exe

    if WinActivate($CmdLine[1], «») <> 0 Then
    ClipPut($CmdLine[2])
    Send(«+{F11}»)
    Send(«{Enter}»)
    EndIf
    

    Делаем ярлык вида «test.exe e1c://server/servername/dbname#e1cib/navigationpoint/ДокументыИФайлы/Справочник.ВнутренниеДокументы.Команда.СписокВнутреннихДокументов» и все должно работать. Но это не так интересно. Интереснее, когда 1С не открыта ))

    Тогда пишется запускалка (основа идеи)

    Local $path_to_1c=@ProgramFilesDir & «1cv82common1cestart.exe ENTERPRISE /Sservernamedname»
    Run($path_to_1c)
    

    далее отслеживаем появление запущенного приложения и выполняем действия как в статье автора.

    Reply
  3. Mir-mup

    (2) kraynev-navi, не…

    Делаем ярлык вида «test.exe e1c://server/servername/dbname#e1cib/navigationpoint/ДокументыИФайлы/Справочник.ВнутренниеДокументы.Команда.СписокВнутреннихДокументов» как ярлык запускаться будет?

    можно где нибудь в коде добавить (открыть справочник контрагенты «Иванов»)?

    if WinActivate($CmdLine[1], «») <> 0 Then

    ClipPut($CmdLine[2])

    Send(«+{F11}»)

    Send(«{Enter}»)

    EndIf

    Reply
  4. kraynev-navi

    (3)

    Про справочник контрагента Иванова — переходим в контрагенты на карточку Иванова, получаем его ссылку (пример для Документооборота) «e1c://server/servername/basename#e1cib/data/Справочник.Корреспонденты?ref=b547001517611b2111e2c69c3d18c65a». Добавляем его в ярлык вместо «e1c://server/servername/dbname#e1cib/navigationpoint/ДокументыИФайлы/Справочник.ВнутренниеДокументы.Команда.СписокВнутреннихДокументов». Все, теперь ярлык будет открывать Иванова.

    Вопрос про запуск ярлыка не понял. Автор публикации видео сделал — вот так скрипт и должен работать, активировать окно, открывать «подокно», делать вставку и «нажимать» на кнопку перейти.

    Reply
  5. Mir-mup

    (4) kraynev-navi, спасибо уже разобрался. AutoIt v3 справка на русском языке в файле, вдруг кому пригодится,мне очень пригодилась.

    Reply
  6. dyak84

    Спасибо автору очень интересная идея. На выходных попробую реализовать а то нужно нечто похожее зделать а идей никаких а тут ваша публикация, просто бальзам на душу. Так держать. Заслуженое 5 +++++++++++

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *