Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 25 мар 2017, 01:51

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


Размещение файлов в формате vsd (а не vsdx/vsdm), увеличивает вероятность ответа стремительным домкратом !!!



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 12:49 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Делаю рамку ГОСТ. Первичная задача - создание общих данных на уровне документа и возможность изменения их, чтобы листы в документе могли пользоваться ими.
Представляю окончательный вариант для первичной задачи.

Описание.
Значения по умолчанию хранятся в User-defined cell документа VSS. Там хранятся только константы. Формулы с указателями на другие ячейки хранить не следует. Могут "разъезжаться" - т.е. буквально изменяться (уже на эти грабли наступал!).

Для управления и отображения данными сделан шейп-группа. В EventsDrop находится формула, которая делает 2 основные функции:
1. Переносит из User-defined TheDoc!User.XXX документа значения в Prop.xxx.value. Т.е. переносит значения документа в объект для редактирования.
Ex. SETF(GetRef(Prop.N1),TheDoc!User.N1)
2. Устанавливает управляющие функции для изменения User-defined свойств документа, в зависимости от изменения свойств шейпа
Ex. SETF(GetRef(User.N1),"=SETF(GetRef(TheDoc!User.N1);Prop.N1)")

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

Далее все просто, поля группы-шейпа отображают свойства документа через формулы.

Есть одна тонкость, связанная со страницами. Если пользователь хочет - он может ввести свое количество страниц, иначе будет браться значение PAGECOUNT()-1.
("-1" - т.к я подразумемаю, что на 1 странице будет шейп управления данными документа).
Для этого в поле, которое отображает количество страниц я использую формулу: IF(TheDoc!User.N7=0,PAGECOUNT()-1,TheDoc!User.N7).

Для отображения редактора свойств я использую EventDblClick: =DOCMD(1658)
Это позволяет обойти ограничение в 20 полей, которое есть при использовании =DOCMD(1213)

Вот и все!

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

Таким образом мы получили инструмент для управления и отображения свойств документа!

Есть только один вопрос. При установке формул я в строке использую разделитель ";" - "=SETF(GetRef(TheDoc!User.N1);Prop.N1)")
Как мне говорили ранее этот разделитель зависит от локальных установок Visio.
Т.е. может изменяться. Можно ли сделать механизм присвоения формулы универсальным.
Ну например так:
"=SETF(GetRef(TheDoc!User.N1)" & "локальный_разделитель" & "Prop.N1)")
или как-то иначе.


Вложения:
3.rar [15.27 Кб]
Скачиваний: 28
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 13:51 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 774
Очков репутации: 100567

Добавить очки репутацииУменьшить очки репутации
Попробуйте приспособить функцию =LISTSEP()


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 13:54 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3172
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
vin писал(а):
Поясню, почему я устанавливаю формулы в EventDrop:
Дело в том, что если бы формулы уже первоначально были в шейпе, то сразу же после создания шейпа (еще до события EventDrop) они бы выполнялись и переносили из пустых свойств шейпа данные в документ.
1. у меня ссылки на ВСЕ НУЖНЫЕ ЯЧЕЙКИ и TheDoc которые есть в vss есть ввставлены в виде полей групповом шейпе для редактирования свойств документа. Поэтому при дропе данного шейпа на лист, ВСЕ значения прописываются в TheDoc целевого документа.
2. Я не пытаюсь загнать в TheDoc документа формулы, только значения
vin писал(а):
Поясню, почему я устанавливаю формулы в EventDrop:
Дело в том, что если бы формулы уже первоначально были в шейпе, то сразу же после создания шейпа (еще до события EventDrop) они бы выполнялись и переносили из пустых свойств шейпа данные в документ.
3. До того как я стал использовать способ описанный мной в п. 1, я в этот групповой шейп для редактирование в ячейку EventDrop прописывал формулу типа
SETF(TheDoc!User.ololo,"")+SETF(GetRef(TheDoc!User.ololo),NOW())+SETF(TheDoc!User.trololo,"")+SETF(GetRef(TheDoc!User.trololo),422222)
где перечислялись все свойства из TheDoc которые я хотел перенести в целевой файл, первый раз без ковычек для создание одноименной ячейки в TheDoc, второй раз для подстановки в созданную ячейку некоторого значения. После дропа в этой ячейке в формуле, будет ошибка. Но это не страшно, ведь нужные ячейки в целевом файле созданы
vin писал(а):
Есть одна тонкость, связанная со страницами. Если пользователь хочет - он может ввести свое количество страниц, иначе будет браться значение PAGECOUNT()-1.
("-1" - т.к я подразумемаю, что на 1 странице будет шейп управления данными документа).
4. в своей предыдущей редакции трафарета (vss) шейп управления размещал на последнем листе, этот лист был Background. Т.е. не печатался.
"-1" было и в моей формуле, т.к. я делал в визио весь документ в т.ч. и обложку. А она по ГОСТ не нумеруется
vin писал(а):
Есть только один вопрос. При установке формул я в строке использую разделитель ";" - "=SETF(GetRef(TheDoc!User.N1);Prop.N1)")
Как мне говорили ранее этот разделитель зависит от локальных установок Visio.
Т.е. может изменяться. Можно ли сделать механизм присвоения формулы универсальным.
Ну например так:
"=SETF(GetRef(TheDoc!User.N1)" & "локальный_разделитель" & "Prop.N1)")
или как-то иначе.
5. В шейпшите используя LangID можно выяснить какая установлена локаль. Список ID, зная этот LangID можно подобрать подходящий разделитель.

PS в новой (незавершенной, возможно коммерческой) версии шаблона (файл vst) я сделал ленточный интерфейс, управление данными на уровне данных сделал на VBA используя пользовательскую форму. Все работает только в файлах созданных на базе этого шаблона, нет возможности в любой файл добавлять нужные свойства.
VBA не позволяет работать на уровне приложения. Неизвестно когда, я допилю всю задуманную автоматизацию для безошибочной работы макросов (работа со спецификацией и автоматизированной ведомостью рабочих чертежей). Ну а дальше, если я доживу до этого сделаю надстройку в Visual Studio. И попытаюсь продавать, но до получения реальных доходов я уже точно не доживу Изображение


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 14:03 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 774
Очков репутации: 100567

Добавить очки репутацииУменьшить очки репутации
Цитата:
зная этот LangID можно подобрать подходящий разделитель.

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 14:09 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 774
Очков репутации: 100567

Добавить очки репутацииУменьшить очки репутации
Цитата:
И попытаюсь продавать

Как мне кажется, в России продавать такие вещи может только фирма, способная навязывать предприятиям свои продукты. А обычные пользователи ничего не купят (почти).
Так что частному разработчику лучше ориентироваться на западный рынок. Там люди действительно способны покупать программы.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 14:28 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 422
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100595

Добавить очки репутацииУменьшить очки репутации
Увы-увы. Все что связано с Visio, продается в основном компаниям, также и "на западе", т.е. покупается в основном "по работе" а не "котиков порисовать" ... :(

А компании предпочитают покупать у больших компаний, пофик что там хуже, просто из тех соображений, что
"вдруг на разработчика завтра кирпич упадет - кто будет это поддерживать?"

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

_________________
Инструменты для облегчения создания диаграмм, и статьи по Visio:
http://unmanagedvisio.com/


Последний раз редактировалось nbelyh 30 июл 2015, 14:43, всего редактировалось 2 раз(а).

Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 14:29 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3172
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
Tumanov писал(а):
Как мне кажется, в России продавать такие вещи может только фирма, способная навязывать предприятиям свои продукты. А обычные пользователи ничего не купят (почти).
Например ИЧП проводящий семинары по ЦОД, СКС на своих семинарах продает желающим слушателям шаблон от Digitall™ (он получал свои авторские отчисления).
Другой ИЧП тоже продает, другие продукты этого товарища продает серьезная компания из МСК занимающаяся САПР
Отзывы с благодарностью на своих сайтах на 90% пишут сам авторы или манагеры…
Tumanov писал(а):
Так что частному разработчику лучше ориентироваться на западный рынок. Там люди действительно способны покупать программы.
думаю на западе очень нужны наши документы с оформлением по ГОСТ. правда недавно на мой сайт ребята из NASA заходили, вербовать не пытались Изображение


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 14:47 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Surrogate писал(а):
1. у меня ссылки на ВСЕ НУЖНЫЕ ЯЧЕЙКИ и TheDoc которые есть в vss есть ввставлены в виде полей групповом шейпе для редактирования свойств документа. Поэтому при дропе данного шейпа на лист, ВСЕ значения прописываются в TheDoc целевого документа.

Насколько я понимаю речь идет о Visio_document.vss?
У меня ссылки на ВСЕ ячейки прописаны в полях шейпов, которые входят в групповой шейп. За счет этого и происходит их копирование.

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

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 14:57 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3172
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Связь
Должность: Бывший проектировщик
Уровнь квалификации: ShapeSheet, VBA
vin писал(а):
Насколько я понимаю речь идет о Visio_document.vss?
да, про него.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: хранение данных на уровне документа и управление ими
СообщениеДобавлено: 30 июл 2015, 15:15 
Не в сети
Постоянный участник

Зарегистрирован: 19 июн 2015, 22:18
Сообщений: 67
Использую Visio c: 2013
Очков репутации: 18

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Попробуйте приспособить функцию =LISTSEP()

Попробовал - работает! Спасибо!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB