Форум пользователей Visio
http://visio.getbb.ru/

Ссылка на ShapeData страницы
http://visio.getbb.ru/viewtopic.php?f=5&t=1122
Страница 1 из 2

Автор:  is308 [ 03 май 2017, 16:34 ]
Заголовок сообщения:  Ссылка на ShapeData страницы

Добрый день, уважаемые форумчане.

Имеется многостраничный документ.
Для первой странице созданы несколько значений ShapeData (Prop.Row_1, Prop.Row_2 и тд).
Необходимо для шейпов, размещенных на разных страницах, менять их свойства в зависимости от значений ShapeData первой страницы.
Если дело касается шейпов первой страницы, то работает ThePage!Prop.Row_1 и ThePage!Prop.Row_2
Но возникает проблема с шейпами на других страницах.
Pages[имя первой страницы]!Prop.Row_1 выдает ошибку "Неправильная формула"

Если ссылаться на ShapeData каких-то шейпов, то все работает. Пример: Pages[имя первой страницы]!Sheet.101!Prop.Row_1 (на примере шейпа Sheet.101)

Но трудность именно с ссылкой на шейпдата страницы.
Прошу помощи.

Автор:  Tumanov [ 03 май 2017, 18:06 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

=Pages[Page-1]!ThePage!Prop.Prop1
или
=Pages[Page-1]!ThePage!Prop.Row_1, если строки не именованные
Кстати, если написать
=Pages[Page-1]!Sheet.0!Prop.Row_1, то оно само переименуется на ThePage. Потому как ThePage - это считай тоже шейп, но нулевой.

Автор:  is308 [ 04 май 2017, 09:39 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Спасибо. Все работает. Фиг догадаешься

Автор:  is308 [ 07 июн 2017, 12:20 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Заметил следующее...
Если шейп, свойства которого зависели от shapedata первой страницы, скопировать и вставить на какую-то страницу, то зачастую вместо формулы =Pages[Page-1]!ThePage!Prop.Row_1 появляется REF() и столь необходимые качества шейпа теряются.
В чем дело, подскажите, пожалуйста?

Автор:  Surrogate [ 07 июн 2017, 12:29 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

на другую страницу в том же документе ?

Автор:  Tumanov [ 07 июн 2017, 12:36 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Visio умный :)
При копировании шейпов он модифицирует формулы, пытаясь сохранить все зависимости. Например, если в группе первый шейп ссылался на второй, то после копирования уже в новой группе такая связка сохранится, но имена шейпов будут уже совсем другими. Это ведь новые шейпы. То есть ссылкам пытаются придать "относительный" характер.
Но иногда (кстати, не часто) такой алгоритм промахивается.
В Вашем случае скорее всего Visio пытался перенаправить ссылку на другую страницу. Но на той странице нужного свойства не оказалось. Появилось REF() - это как признак невозможной ссылки.
-----
Если у Вас шейпы с нескольких страниц должны ссылаться на один источник (например, на первую страницу), то корректнее было бы ставить ссылку не на свойства страницы, а на свойства документа. Такую ссылку Visio не исказил бы.

Автор:  is308 [ 07 июн 2017, 13:18 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Спасибо за ответ.
Да, все шейпы в документе, на всех страницах, ссылаются на несколько ShapeData первого листа. Почему именно на свойства листа? Дело в том, что мне постоянно нужно менять значения этих свойств, что удобно делать через окошко "Данные фигуры", которое я вытащил, и при выборе первого листа я сразу вижу все его свойства и могу их менять. Как отобразить свойства Всего документа, чтобы было удобно их редактировать пользователям не в ShapeSheet, я не знаю.

Автор:  Surrogate [ 07 июн 2017, 13:29 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

is308 писал(а):
Как отобразить свойства Всего документа, чтобы было удобно их редактировать пользователям не в ShapeSheet, я не знаю.
1. можно сделать шейп с ShapeData, которые будут транслироваться в свойства документа. тема где рассматривался подобный вариант - Трафарет оформление РД по ГОСТ Р 21.1101-2013 v.3
vin в сообщении #7429 писал(а):
Фигура "Общие данные" используется как зеркало и корректировщик общих данных документа.

2. создать макрос который будет содержать форму для ввода/коррекции данных.
я не большой любитель использования пользовательских форм. обычно ограничиваюсь формой парой-тройкой кнопок, плюс один-два чекбокса или радиобатона.
Хотелось еще делать сортировку для введенных значений в комбобокс не из списка
мои художества

Автор:  is308 [ 07 июн 2017, 13:56 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Surrogate писал(а):
1. можно сделать шейп с ShapeData, которые будут транслироваться в свойства документа.

Согласен, мой пример с ШейпДата страницы1 - это по сути это же метод.
Я сейчас так и сделал после ваших подсказок. Шейпдата страницы 1 передаются в User-defined Cells документа, а по всему документы разбросаны шейпы, в которых вставлены текстовые поля с формулой TheDoc!User.Row_х (где х - номер того или иного свойства)

Всем спасибо.
p.s. Я не программист, поэтому прошу прощения, если вопросы уж совсем нубские. Просто по работе (инженер-электротехник) приходится сталкиваться с визио, и хочется часть операций автоматизировать, ибо лень - двигатель прогресса

Автор:  Tumanov [ 07 июн 2017, 13:57 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

В документе делаем такие же ShapeData, как и в первой странице и ссылаемся на первую страницу.
А все остальные шейпы пусть ссылаются на документ.
Тогда редактировать можно так же, как сейчас (в окошке данных первой страницы). А транслироваться они будут через документ.
Только создать ShapeData в документе придется вручную через ShapeSheet. Но это же только один раз.
Содержимое спрятано под спойлер ↓
Спойлер:
Вложение:
rr01002.jpg
rr01002.jpg [ 11.14 Кб | Просмотров: 1154 ]
Вложение:
rr01001.jpg
rr01001.jpg [ 21.99 Кб | Просмотров: 1148 ]
Вложение:
rr01000.jpg
rr01000.jpg [ 15.82 Кб | Просмотров: 1149 ]

Автор:  Surrogate [ 07 июн 2017, 14:03 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

is308 писал(а):
Я не программист, поэтому прошу прощения, если вопросы уж совсем нубские. Просто по работе (инженер-электротехник) приходится сталкиваться с визио
та же фигня, но я связист Изображение
Tumanov писал(а):
А транслироваться они будут через документ.
Изображение
последняя картинка меня смущает !!!

Автор:  Tumanov [ 07 июн 2017, 14:14 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

А что смущает?
Это документ ссылается на страницу.

Автор:  Surrogate [ 07 июн 2017, 14:18 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

ссылка на ячейку на странице ! чревато ошибкой #318
Ошибка №318 (Error 318). Самая безобидная ошибка, появляется в определенных случаях, когда перемещение данных, из документа (TheDoc) до фигуры (TheSheet), осуществляется через промежуточные ячейки. Лечится простым удалением «пятого колеса», т.е. этих самых промежуточных ячеек на страницах (ThePage).
Изображение

лучше в ячейке TheDoc хранить значение ячейки Pages[Page-1]!ThePage!Prop.Row_1, а не ссылку на нее !

Автор:  Tumanov [ 07 июн 2017, 14:31 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

И опять не понял, что не нравится.
Формулы ведь одинаковые. Только у меня строка именованная.
Или эти "определенные случаи" связаны с локальными именами?
-------------------------------
Посмотрел первоисточник.
Там упоминается другой случай. Когда передача идет через страницу. Документ - страница - шейп.
У нас же - наоборот. Страница - Документ - шейп.
В первом случае в середине стоит нестабильный (множественный) элемент. Страниц много.
Но документ уникален. Так что в нашем случае вроде все нормально.

Автор:  Surrogate [ 07 июн 2017, 14:39 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Surrogate в ветке Работа над ошибками: Error318 писал(а):
Разбирая свои старые работы нашел документы из которых нельзя ничего скопировать, вылезает ошибка 318
Изображение
Ошибка возникает тогда, когда в TheDoc есть формулы содержащие в себе ссылки на ячейки со страниц документа. Например Pages[Page-1]!sheet.1!prop.row_1
когда-то я имел не осторожность использовать в шаблоне которым пользовалось 12 человек в отделе формулы типа Pages[Page-1]!sheet.1!prop.row_1 !
была масса документов создана. была головная боль с копированием из и в такие документы почти пол-года. пока не пришел к нам на работу Digitall, он объяснил в чем косяк
Дополнено позднее: У меня было Pages[Page-1]!sheet.1!prop.row_1, а у вас Pages[Page-1]!ThePage!prop.row_1 ! возможно я перестраховываюсь Изображение
но тогда был реальный геморой ! Изображение

Автор:  Tumanov [ 07 июн 2017, 14:45 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Цитата:
Pages[Page-1]!sheet.1!prop.row_1

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

Автор:  Surrogate [ 07 июн 2017, 14:54 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

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

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

Автор:  is308 [ 07 июн 2017, 16:39 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Поймал ошибку 318.
Почитал этот форум и не понимаю, каким образом в моем случае SETF решит проблему?

Автор:  Surrogate [ 07 июн 2017, 16:42 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

SETF будет всякий раз при необходимости загонять в ячейку TheDoc значение хранящееся в ячейке Pages[Page-1]!ThePage!prop.row_1. А не ссылку на эту ячейку !!!
как вариант можно еще использовать
9rey в сообщении #6550 писал(а):
Surrogate
можно же через SETATREF: в Prop.Row_1 вписать SETATREF(TheDoc!User.ololo)
тогда ячейки Prop.Row_1, TheDoc.User.ololo свяжутся

просто в ячейке Pages[Page-1]!ThePage!prop.row_1 вбить формулу

ShapeData: Value

Prop.Row_1

=SETATREF(TheDoc!User.Row_1)

 


Изображение

Автор:  is308 [ 07 июн 2017, 16:58 ]
Заголовок сообщения:  Re: Ссылка на ShapeData страницы

Если я вас правильно понял, то незначительно усложняется работа юзера.

Сейчас я вбиваю на первом листе в окошко "Данные фигуры" значения и они сразу появляются в нужных мне шейпах на всех листах.

Вы предлагаете написать макрос, в котором при его запуске будет выполняться SETF("TheDoc!User.Row_1", Pages[Page-1]!ThPage!Prop.Row_1), в результате чего в TheDoc!User.Row_1 будет занесено значение, которое я вбил в окошко "Данных фигуры", а оттуда уже по всем шейпам.
Тогда юзер должен будет запускать макрос при каждой правке значения ШейпДата на пером листе?

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/