Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

28 Май 2017, 13:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4   Вниз
  Печать  
Автор Тема: Глобальная переменная  (Прочитано 2377 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alex16
Постоялец
***
Offline Offline

Сообщений: 114


« Ответ #45: 25 Ноябрь 2016, 13:38 »

ты пока глянешь, как я поизмывался над TestList
Спасибо. Прикольно. Нашел для себя полезное. Спасибо за фишку;) Но по моей задаче - переделка пока не в тему. Хотя я пока только бегло просмотрел.
По порядку:
Цитата:
'Global LastUserID%   - не нужен он для этой задачи, не нужен и всё тут
Все таки нужен. Повторяюсь. Нет необходимости вызывать ColoredRep при переходе от пользователя к пользователю. Только от пользователя к общему и наоборот.
Цитата:
Rem Константы перенес сюда, чтобы не терялись среди кода
.....
' Sub Main - это плохое имя для процедуры события. Обычно словом Main обозначают Главное Действие, а подготовка списка - это не оно
согласен на 100%
Цитата:
'   I = GetCtrl("SpisUsr").SelectedItems(0) ' Отыскать контрол, который только что сработал?
'   LoadRep(I)
' Можно проще   LoadRep(oEvent.Selected)
' Но можно передать в LoadRep не индекс элемента, а прямо его текст. Мало ли, вдруг в какой-то момент
' поменяется порядок элементов в списке? Поэтому
А тут я не согласен Улыбка Мне, как раз,  не важен порядок в списке, более того и список(кол-во) и имена могут меняться. Единственно - "общий" всегда будет первым.
Чуть позже продолжу.... отвлекают на работе...
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 264


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #46: 25 Ноябрь 2016, 13:46 »

по моей задаче - переделка пока не в тему.
Как не в тему? Ты ж говорил тормозит? Значит переделка нужна. Может быть и не такая, как в TestList, но нужна.
Нет необходимости вызывать ColoredRep при переходе от пользователя к пользователю. Только от пользователя к общему и наоборот.
Мне, как раз,  не важен порядок в списке, более того и список(кол-во) и имена могут меняться. Единственно - "общий" всегда будет первым.
Прости моё тугодумие - а на фига тогда вообще этих юзеров в списке перечислять? Дал один переключатель-радиокнопку "Общий/Пользовательский" и до свидания!
И зачем ты вообще этот список прилепил? Ты же изначально вроде бы хотел по системному имени пользователя ориентироваться? То есть, прямо при открытии книги "Ты кто такой?" и ОДИН РАЗ ЗА ВЕСЬ СЕАНС заблокировался и перекрасился...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 089


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #47: 25 Ноябрь 2016, 14:00 »

Может тогда на момент долгой работы макроса, как-то блокировать (например ListBox.Enabled = False <ColoredRep> ListBox.Enabled = True) И выводить окошко <Идет загрузка данных...>?
Если это так, то каким способом это лучше сделать, не усугубив ситуацию?
1. Выводить окошко <Идет загрузка Шокирован реактора Шокирован ...>
2. Запускать макрос на ночь, утром будет готово Показывает язык ...

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

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

Структура документа (листы, диапазоны и т.д.) DailyRep.ods сохранится или будут революционные изменения?
Записан

Alex16
Постоялец
***
Offline Offline

Сообщений: 114


« Ответ #48: 25 Ноябрь 2016, 15:02 »

на фига тогда вообще этих юзеров в списке перечислять? Дал один переключатель-радиокнопку "Общий/Пользовательский" и до свидания!
И зачем ты вообще этот список прилепил? Ты же изначально вроде бы хотел по системному имени пользователя ориентироваться?
Не все так просто. Привязка к системному имени пользователя - это не основное. Просто для удобства. Есть куча операторов, которые вносят данные в свой отчет, но иногда оператор сидит не под своей учеткой в системе, поэтому отчет запустится с системной утчеткой, и нужно будет выбрать другую. Так же могут несколько пользователей вносить данные в отчет на одном компе, не переходить же для этого в ОС под свою учетку, для того что бы в отчете забить данные. Так же есть человек, который ходит по отчету, ему нужен и общий и всех пользователей....
Попробуйте отказаться от раскраски.
Если уж будет совсем туго, тогда наверное так и сделаю., Но блокировку убрать не вариант.
Помимо этого, макросы слишком усложнены, есть и лишний код и неправильный.
Я не спорю, это не конечный вариант, а только тестирование и в какой-то мере обучение.
Структура документа (листы, диапазоны и т.д.) DailyRep.ods сохранится или будут революционные изменения
Пока на данный момент структура именно так и будет. А диапазоны будут менятся константами в коде, типа:
   
Код:
const StartColRow = 13
const EndColRow = 187
const Col1  = 4
const Col2  = 5
const Col3  = 7
const Col4  = 8
const Col5  = 10
const Col6  = 11
const Col7  = 13
const Col8  = 14
const Col9  = 16
const Col10 = 17
const StrColumns = "E,F,H,I,K,L,N,O,Q,R"
const Pass = "12345"
Потому, как таблица может меняться. Некоторый "лишний" код, типа PrepareRepFirst, на самом деле не лишний. Он выполняется один раз, когда меняется общая таблица. В общем приходит файл с новой таблицей, но немного другой структуры, вот задолбался я ее каждый раз подправлять для наших нужд, поэтому появились макросы "Prepare..."
И как уже говорил ранее, эта книга - еще не конечный вариант, есть еще куча макросов в другом месте, вот теперь начинаю потихоньку их собирать в одной конечной книге.
А по поводу революционных изменений - это зависит от отчета, который нам пришлют сверху в следующий раз, но пока(последние пару лет) изменения были не революционные)
« Последнее редактирование: 25 Ноябрь 2016, 15:17 от Alex16 » Записан
Alex16
Постоялец
***
Offline Offline

Сообщений: 114


« Ответ #49: 25 Ноябрь 2016, 15:19 »

По названию темы: не вижу для чего использовать гоблинные  переменные в вашем документе, вполне хватает обычных.
В общем-то согласен. Исключение только для LastUserID - хотя и этого можно как-то избежать. Но последний выбранный пункт в листе нужно знать Улыбка
И тема немного ушла в другое русло Грустный В этом каюсь...
« Последнее редактирование: 25 Ноябрь 2016, 15:22 от Alex16 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 264


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #50: 25 Ноябрь 2016, 15:54 »

Не все так просто.
Ага, статус "Семейное положение: всё сложно"
Привязка к системному имени пользователя - это не основное. Просто для удобства. Есть куча операторов, которые вносят данные в свой отчет, но иногда оператор сидит не под своей учеткой в системе, поэтому отчет запустится с системной утчеткой, и нужно будет выбрать другую. Так же могут несколько пользователей вносить данные в отчет на одном компе, не переходить же для этого в ОС под свою учетку, для того что бы в отчете забить данные. Так же есть человек, который ходит по отчету, ему нужен и общий и всех пользователей....
Так, может, при открытии файла прямо в лоб его и спросить "Ты кто такой? Чего такой дерзкий? Семки есть?.." Что в ответ введет, то и использовать (если, конечно, проверку пройдет)
Если уж будет совсем туго, тогда наверное так и сделаю., Но блокировку убрать не вариант.
Ну, это если будет совсем туго. Просто для того, чтобы изменить фон у ячейки, совсем необязательно менять ей фоновый цвет. Хм, лихо завернул... Ещё одна попытка: чтобы перекрасить ячейку в нужный цвет не обязательно менять ей бэкграунд колор.
Например, страшное слово "стили" слышал? И что они используются в условном форматировании тоже знаешь? Ну так вот, у меня для тебя хорошая новость. Долгое время флажок "Защита ячейки" в пользовательском стиле не имел значения - Calc смотрел на основное свойство ячейки и ориентировался на её защиту. Я не заметил с каких пор, но теперь поведение изменилось - ячейки действительно защищаются (и раскрашиваются) с помощью условного форматирования. Еще остался маленький "хомут" - кнопка Tab не всегда обеспечивает переход по таким ячейкам. Но тыкать мышкой и менять данные вполне получается.
То есть, создаем два стиля, скажем, с именами "ProtectedCell" и "UnprotectedCell". В их свойствах задаем цвет фона и значение защиты. Для целых диапазонов задаем условное форматирование из двух формул "Если Юзер=Общий то стиль ProtectedCell" и, наоборот, "Если Юзер<>Общий то стиль UnprotectedCell". Сам Юзер может быть хоть той же ячейкой Q4, в которую ты индекс списка выдергиваешь. Защищаешь лист раз и навсегда и вычеркиваешь кучу кода, которая уже больше не нужна.

Помимо этого, макросы слишком усложнены, есть и лишний код и неправильный.
+ (Заметьте, плюсую даже невзирая на то, что часть этого кода моя собственная  Смеющийся )

А диапазоны будут менятся константами в коде...
Не будут они меняться, их там не будет...
Но последний выбранный пункт в листе нужно знать Улыбка
И еще раз - зачем? Или ты о предпоследнем говоришь?
это ... в какой-то мере обучение.
Весьма похвально! Всегда рады помочь

UPD. Пример условного форматирования во вложении - код уже ковырять не стал, только формулы поправил и форматы задал. Ну и список перекинул в Данные-Проверка

* DailyRep форматы.ods (37.21 Кб - загружено 4 раз.)
« Последнее редактирование: 25 Ноябрь 2016, 16:42 от JohnSUN » Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Alex16
Постоялец
***
Offline Offline

Сообщений: 114


« Ответ #51: 25 Ноябрь 2016, 16:47 »

Так, может, при открытии файла прямо в лоб его и спросить "Ты кто такой? Чего такой дерзкий? Семки есть?.." Что в ответ введет, то и использовать (если, конечно, проверку пройдет)
Я понимаю, что вы видите это со своей стороны, и может быть не менее правы, чем я.Улыбка
Но я пока вижу так как вижу.
Попробую поковыряться со стилями... но, если честно, мне проще код написать, чем разобраться в настройках документа или офиса.... Я ведь потом забуду, где и что наменял...

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

Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 264


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #52: 25 Ноябрь 2016, 16:51 »

Как-как настроил... Да по заголовкам столбцов. Только не столбцов листа, а столбцов отчета - по вон тем дополнительным цифирькам в объединенных ячейках - 3, 4, 5...

Пока ты писал, я проапдейтил предыдущий пост - файл там, смотри. Не тормозит? И вроде как полегче стал?

И не "выкай" тут на меня - не ссорились  Всё хорошо
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Alex16
Постоялец
***
Offline Offline

Сообщений: 114


« Ответ #53: 25 Ноябрь 2016, 16:59 »

И еще раз - зачем? Или ты о предпоследнем говоришь?
Если в моей
Код:
Sub ColoredRep(CommonRep as Boolean)
Dim StrColumnsArr(), N%, Range as String, CellProtection
StrColumnsArr = Split(StrColumns, ",")
ThisReport.lockControllers()
ThisReport.addActionLock()
if shtReport.isProtected() Then shtReport.unprotect(Pass)
For N = LBound(StrColumnsArr) to UBound(StrColumnsArr)
  Range = StrColumnsArr(N) & StartColRow + 1 & ":" & StrColumnsArr(N) & EndColRow + 1
 
  CellProtection = shtReport.getCellRangeByName(Range).CellProtection
  if CommonRep then
    'print "Color Common Rep"
shtReport.getCellRangeByName(Range).CellBackColor = 14540253
CellProtection.IsLocked = True
  else
    'print "Color User"
    shtReport.getCellRangeByName(Range).CellBackColor = 15202046
    CellProtection.IsLocked = False
  endif
  shtReport.getCellRangeByName(Range).CellProtection = CellProtection
Next N
shtReport.protect(Pass)
ThisReport.removeActionLock()
ThisReport.unlockControllers()
End Sub
раскомментировать два print то можно заметить, что они покажутся(правда в цикле несколько раз) только при переходе в списке от пользователя к общему и наоборот.
Как это сделать без запоминания предыдущего выбора?
По всей видимости эту тему нет смысла дальше развивать. Буду сейчас делать дальше свою книгу, с учетом ваших замечаний и предложений, но пока оставлю основную "затею" свою.
С медленной раскраской пока.... наверное пока "забью" на нее.... Сейчас буду собирать все макросы в кучу, а там видно будет)
Записан
Alex16
Постоялец
***
Offline Offline

Сообщений: 114


« Ответ #54: 25 Ноябрь 2016, 17:04 »

И не "выкай" тут на меня - не ссорились
Улыбка Ок.
Пока ты писал, я проапдейтил предыдущий пост - файл там, смотри. Не тормозит? И вроде как полегче стал?
Файл DailyRep форматы.ods У меня открылся и посыпались "не определена переменная" - ну это не страшно, сейчас пройдусь по коду, поубираю лишнее...
Записан
Alex16
Постоялец
***
Offline Offline

Сообщений: 114


« Ответ #55: 25 Ноябрь 2016, 17:21 »

Да, с раскраской в DailyRep форматы.ods быстро. Если честно, я не понял как это сделано Грустный Не силен я в работе офисных приложениях. Стили, проверки данных и все такое для меня темный лес. Другое дело код прочитать Улыбка
Но раскраска больше для удобства, дальше после смены пользователя - нужна загрузка данных.
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 264


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #56: 25 Ноябрь 2016, 17:31 »

...а после того как пользователь поработает нужна будет выгрузка данных?..
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Alex16
Постоялец
***
Offline Offline

Сообщений: 114


« Ответ #57: 25 Ноябрь 2016, 17:50 »

...а после того как пользователь поработает нужна будет выгрузка данных?..
ну в общем то да. Я сделал, с вашими(форумчанами) подсказками, на изменение ячейки, сразу данные меняются в "хранилище данных"(лист дата)
Но будет метод полного сохранения данных.
Выгрузка-Загрузка будет при смене пользователя (в отчете). Так же там еще будут суммироваться по группам и выводится сверху в три строчки(три группы потому что)
ИД группы в колонке "B". Для этого там есть макрос который генерирует и вставит формулы, но константы там не верные - это из другого тестового файла, не успел исправить, сорри...
Этот макрос тоже из группы PrepareXXX.....
« Последнее редактирование: 25 Ноябрь 2016, 23:39 от Alex16 » Записан
Страниц: « 1 2 3 4   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!