Pull to refresh

Comments 35

Интересно, планируют ли они сделать из Lua API какое-то No Code решение в итоге.

Ну, судя по никакой динамике, в плане развития всего API (я посмотрел, на С++ как минимум такое же все в недописках каких-то), то я сильно удивлюсь, если они хотя бы в ближайший год редактор форм прикрутят или хотя бы редактор для макросов расширят до редактора ещё и надстроек. Судя по всему, спасение утопающих (кого силой в импортозамещении поставят перед фактом), дело самих утопающих. О чём собственно я и пытался сказать в этих статьях.

А они где-то шарят исходники?

Нет конечно! Там на вопросы то не хотят в письмах отвечать, если не подписываешь с ними ворох бумаг.
В целом, структура GUI у них достаточно примитивная, и в принципе, в том же LuaRT сравнительно несложно будет запилить визуальный редактор его повторяющий. Тем более, там заложены свои модули для этого, начиная с версии 1.2, кажется. Единственное, что у МойОФис всё сделано на QT, на LauRT на wxLUA. Но если не стараться добиваться прямо 100% схожести, а просто хотя бы внешний вид конструировать, то в качестве мокап редактора, думаю, можно было бы сделать что то и в LuaRT.

Другой вопрос - кто этим будет заниматься? И зачем? Финансово это никто не подкрепляет. Самой компании "Новые облачные технологии" видимо и такое положение вещей "как есть" - вполне устраивает, так как контрактов им наверное сейчас и так хватает. А то, что после покупки возникают проблемы у купивших, ну так то проблемы купивших.
Я вполне способен бы был сделать и конвертер форм из MSForfms => Lua Gui, но даром это делать смысла не вижу. А тратить время в надежде, что кто то моё решение будет покупать, может конечно и стоит, но боюсь что для такого эксперимента нет сейчас возможности.

Ну, think-cell как-то живут на нише расширений для офиса, так что кому-нибудь да понадобится. Хотя скорее всего в случае "НОТ" это будет в пределах многочисленных существующих инеграторов, а не как отдельная контора, хотя кто знает.

Не слышал про таких. Ну, расширения это немного иная сфера деятельности, нежели внутренние макросы. Это всё таки нормальные языки программирования (обычно C#) и нормальная область программирования, где ты можешь сделать практически всё, если ты нормально подготовленный программист, так как само SDK позволяет это сделать. А вот в отечественных ПО, с этим мягко говоря всё сложно.
У "НОТ" вообще очень интересная бизнес-модель взаимодействия со сторонними разработчиками оказалась. Их конечно право решать, как им быть! Видимо там вполне хватает того, что их ПО конечному пользователю в госсекторе передаётся практически "насильно" (сам пережил ещё лет 10 назад первую волну, когда часть офисов менялось на отечественное), и потому хочешь-не хочешь, а будешь пользоваться тем что есть. Официально. Типа. А всё остальное время будут продолжать работать "из под полы", на старом, добром "MSО", так как в "МО" ты просто многое сделать в разумное время не сможешь, ибо много чего там просто нет. Вот как вопросе той же автоматизации. А что обидно - на самом деле, там не так много уж и усилий надо, чтобы хотя бы к приемлемому виду привести это всё. Надо просто причесать API, и хотя бы немного поработать на обратной связи с теми, кто реально занимался такими вопросами на практике. И особо этим видимо никто заниматься и не будет, так как в целом - всех всё устраивает на текущий момент.

Не слышал про таких

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

Вот как вопросе той же автоматизации

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

Чуваки из Германии, которые с первых версий реверсят все эти офисы и при помощи такой-то матери и see plus plus делают какие-то отдельные расширения, отчеты, графики и прочее в том же духе.

Да, посмотрел. Спасибо!
Вообще конечно странно, что сами мелкомягкие не предоставили нормальный SDK API именно под PowerPoint. Эта компания не единственная которая подобным занималась. У нас в конторе было какое то похожее решение закуплено, правда больше с упором на плюшки в дизайне (анимации всякие, псевдо 3D), и работало это еще на 2003 офисе.

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

Ну да. Устроится к ним это из разряда сложных задач. По крайней мере, в вопросе автоматизации. Походу там всех всё устраивает, поэтому в этом направлении там никто и не колышится.

Отличная статья, помогла мне почти сделать нужный скрипт, есть только 1 проблема:

doc:getRange():getEnd():insertTable(1, 30, 'z') - не работает в setOnDone. Уже какие только способы не испробовал, ни в какую...

Если использовать Frm.context.doWithDocument, то с текущим документом можно работать, данные редактируются, но вот вставить новый лист не получается, причем и ошибок никаких нет.

Может кто-то знает как это решить?

Спасибо за отзыв!

Не могу сказать в чем причина. Зачастую, даже одна пропущенная запятая может приводить к непонятным итогам. Это же Lua, и с диагностикой ошибок тут порой очень сложно, если не использовать сторонние модули.

Мой пример с простой вставкой параграфа у вас работает? Если да, то скорее всего вы просто что то с синтаксис ом функции путаете что то. Как будет время, посмотрю, но то что таблицы вставляются это точно, так как в моём примере изначально второй строкой вставлял ась таблица 3 на 3, но я её просто убрал, чтобы упростить пример

Я понял что недостаточно дал вводной информации))

Во 1 речь про "эксель" и вставку листа, а не обычной таблицы в текстовый документ.

Во 2 у вас идет вставка в новый (созданный документ), а у меня в текущий

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

В любом случае спасибо за ответ

А! Ну да, с приложением по таблицам я ещё толком не не разбирался. Но вообще, в setondone(), я бы на самом деле не стал такие операции ставить. И конечно не очень помню особенности апи, но разве новый лист (если я правильно понял вашу задачу), добавляется в Таблицах так? Он вроде бы тоже добавляется через секции

Попробуйте для начала навестить на какую нибудь отдельную кнопку. Вполне может статься, что это глюк самого Api МО, коих ну просто неприлично много, как выясняется.

Я бы тоже не стал в setOnDone это делать, но других вариантов пока не придумал))

Задача такова: открыть диалоговое окно, ввести в поле в этом окне число и грубо говоря создать указанное количество листов и заполнить их данными. Все было сделано, все работало, кроме формы (на макрокомандах делал изначально). И вот когда я добрался до форм и надстроек столкнулся с такой проблемой.

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

А что значит навесить на отдельную кнопку? Я так понял все равно это будет форма и на форме кнопка и все равно нужно будет отлавливать клик по кнопке вы это имели в виду?

Я имею ввиду, что смотря какой setondone, использовать. Для кнопки которая закрывает всю форму или для кнопки, которую добавили в форму. Отрабатывают они судя по всему немного по разному. Хотя, утверждать не стану. Я только начал колупаться с автоматизацией МО, и то больше в плане работы с апи форм, а не документов. Так что - творческий эксперемент даст ответы, так как от тех поддержки, кроме ссылок на их pdf, добиться их не удается!

Добрый день, увы та же ситуация, ячейка редактируется а лист не добавляется. Вот листинг на всякий, вроде все правильно сделал...

bu:setOnClick(function ()

Frm.context.doWithDocument(function(document)

local listMPD = document:getBlocks():getTable("MPD TASK") listMPD:getCell(DocumentAPI.CellPosition(1, 1)):setFormattedValue('MISHA') document:getRange():getEnd():insertTable(1, 30, 'z')

end)

end)

Не знаю. У меня всё работает (добавляет таблицы). Но опять же проблема в том, что добавленные листы таблицы в документ не показываются автоматически, после их добавления. Для этого приходится уже в самом открытом документе обновлять всё (получилось только после добавления вручную ещё одного лишнего листа, или повторным вызовом формы надстройки). Насколько я понял, в API надстроек нет возможности установить обновление формы самого приложения, чтобы внесённые в документ изменения обновились принудительно по требованию. Точнее, кое где-это происходит, а кое-где - забыли прописать внутри самого приложения. Я уже в техподдержку про это писал, но увы, там ответ один: "мы передадим ваше предложение разработчикам".

А что ещё добивает, что есть оказывается функции API, которые почему-то доступны (хотя и не описаны в инструкции) в макросах, но почему-то их нет (WTF!?) в API надстроек. Так, если записать в макрос ручное добавление листа и потом посмотреть код, то есть не документированная нигде(!) официально функция EditorAPI.setActiveWorksheet(). Она прекрасно всё открывает! Так, если создать макрос из одной этой строки и вызвать ее после добавления листа своей надстройкой, то добавленный лист открывается! А вот из под самой надстройки, эта функция setActiveWorksheet в EditorAPI не числится, и потому её невозможно вызвать! Ну что за б..во то?!
И так чего не коснись! И потом удивляются, когда нашим софтом ну нереально нормально пользоваться из-за таких вот ляпов повсюду!

ОМГ. Спасибо добрый человек) В жизни бы не догадался сделать еще какие то манипуляции, что бы так сказать "обновилось окно приложения", что бы стали видимыми листы... да уж, рф софт топчик. Ладно будет делать извраты в коде, путь хоть как-нибудь работает)

Да пожалуйста! Не жалко помочь коллеге :)
Кстати (но сам пока не пробовал, просто мыслью делюсь), можно внедрить скрипт макроса с EditorAPI.setActiveWorksheet() в документ таблицы через API надстроек. Запустить оттуда же сам макрос после всех манипуляций с таблицей и по идее должно отработать как надо

Неа, нифига( такая хитрость не сработала, ошибку выдал

Да, попробовал сам и мягко говоря, в очередной раз хочется спросить разработчиков МО: "Ну что за х..ню вы там творите?!" Нет, ну как вот в макросах у вас можно вызвать недокументированную (ну ладно, лишь бы работала!) функцию API а через те же макросы, но в настройках - нельзя!? Чем они там руководствуются то?!

@PeduslikЗдравствуйте. Спасибо за внимание к нашему продукту.

Получили ответ от технической поддержки по вашей ситуации:

Чтобы добавить новый лист в книгу и сделать добавленный лист активным, в нашем продукте предусмотрено два пути автоматизации — макросы и надстройки. В обоих случаях используется один и тот же LUA-движок, но окружение настраивается по-разному (можно использовать разный набор функций). В макросах данная задача без проблем решается следующим кодом:

newSheet = document:getRange():getEnd():insertTable(1, 30, 'z')
EditorAPI.setActiveWorksheet(newSheet:getName())

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

Для создания нового листа в надстройках пользователь может использовать следующий код:

dlg.func = function(context)
    form = ui:Dialog {
        -- ...
    }
    -- ...
    form:setOnDone(function(ret)
        if ret == 1 then
            context.doWithDocument(function(document)
                document:getRange():getEnd():insertTable(1, 30, 'z')
            end)
        end
    end) -- dlg:setOnDone

    context.showDialog(form)
end

Этот код создает новый лист, но интерфейс редактора после этого не обновляется, из-за чего пользователю кажется, что ничего не произошло и лист не добавился.

Спасибо, что обратили внимание на проблему. Мы взяли её в работу и исправим в одном из предстоящих релизов.

Ваша техподдержка прикалывается? Я это уже и так всё сам раскопал и рассказал! (а сколько ещё могу "интересного" рассказать!). Вместо того, чтобы решить проблему, вы её пересказываете!
Вы расскажите лучше, почему у вас API различается в макросах и надстройках(и кстати, в описании к API макросов нет такой функции как EditorAPI.setActiveWorksheet()), и почему оно такое куцое, если вы претендуете на закрытие своим продуктом Офиса от Майкрософта!?

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

Да я то без проблем делился с вашей техподдержкой. Только связь какая то у нас однобокая с ней и в итоге, не особо хочется тратить на неё своё время. Я задаю вопросы, а мне в ответ ссылку на ваше руководство по созданию надстроек, которое с ошибками и множественными не дописками. Да и написано оно как то, мягко говоря, корявым языком. Нет нормально написанных реальных примеров использования. А те примеры которые есть, какие то очень надуманные и куцые. Вы вроде серьезная организация. Неужели нельзя нанять серьёзного технического писателя? Да и смысл писать, когда я передал уже с десяток наверное проблемных вопросов, а никакой особо реакции, кроме того что: "спасибо, передали в отдел разработки и когда-нибудь, что-нибудь, может быть будет сделано по данной проблеме!", я не получал.

Добрый день! Вы справедливо заметили, что мы являемся серьезной компанией, поэтому у нас есть долгосрочное планирование и внутренние процессы, выстроенные по правилам. Ежегодно МойОфис выпускает 4 крупных обновления, и только по итогам 2022 года в них было реализовано более 2000 изменений и улучшений.

Мы ценим конструктивную обратную связь и время, которое вы уделили нашему продукту. Все ваши замечания были переданы коллегам в соответствующие департаменты. Эта информация будет тщательно проанализирована, описанная вами ситуация будет исправлена в одном из будущих релизов. Надеемся на понимание и будем рады ответить на другие вопросы по нашим продуктам.

В данном случае, я критикую работу не всех разработчиков, так как понимаю, что судя по пресс-релизам, вы сейчас активно работаете над допиливанием корпоративной инфраструктурой в целом, а конкретно вашей техподдержки. Они не дают НИКАКИХ полезных ответов, за рамками того, что и так есть в открытом доступе (читайте - вашей документации, которая к тому же весьма корявая).

Добрый день! А вы могли бы указать номер обращения с ответом, который вам не понравился? Номер обращения обычно есть в теме письма.

Да пожалуйста:
1.Обращение по удалённой отладке расширений: (ST-47243). Ответа я не получил, и нашёл свое решение о котором и стал писать в цикле статей
2.Подключение более одного модуля Lua ST-47247 . Аналогично. Решение путем экспериментов нашёл опять сам. Оно опять же описано в статьях.
Далее я общался по ряду вопросов с одним из ваших специалистов техподдержки напрямую, но не в обиду ему, ситуация аналогичная.
У вас всё под каким то странным грифом секретности, и даже на элементарные вопросы по типу: "а в планах у вас есть внедрить то-то и то-то, и исправить там-то и там-то?", общаться можно только после договора о конфиденциальности, хотя я никакой конфиденциальной информации, кроме элементарных технических вопросов и не задавал. Поэтому, я и не хочу больше впустую тратить время, а предпочитаю заниматься делом.

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

А смысл теперь что либо уточнять? Я задавал конкретные вопросы, и сам нашел на всё что хотел ответы. Так у меня опыт программирования более 30 лет и за это время я уже столько видел и знаю! А если взять какого нибудь салагу-программиста?
Я много лет пересекался со службами техподдержки разработчиков очень разного софта. И практически всегда, мне давали весьма конкретный ответ на конкретный технический вопрос, а не просто фиксацию самого вопроса. Она мне не нужна, чаще всего! Мне нужен скорейший ответ, так как в ином случае, я просто буду терять много времени на поиски решения вопросов, которые передо мной стоят как перед эксплуатантом вашего софта, и при этом, может оказаться что пути решения нет вообще, или я просто ищу не там. Ваша техподдержка не делает ни того, ни другого.
У меня к вам, как к организации пишущей софт, нет претензий, ибо вы сами там решаете, как вам работать с клиентами, которым я в данном случае, в общем то, для вас и не являюсь. Просто констатирую: с точки зрения прикладного программиста, который бы опробовал ваш офисный пакет на предмет покупки для дальнейшей типовой эксплуатации в разных государственных или коммерческих организациях, я бы дал скорее негативный ответ.

Дело в том, что ваш интерес, учитывая ваш опыт и знания, выходит за рамки стандартных запросов. Мы сейчас вернулись к указанным обращениям и увидели, что переписка с техподдержкой завершена по вашей инициативе. Также хотим уточнить, а вы не рассматривали для себя возможность трудоустройства в МойОфис? Актуальные вакансии нашей компании можно посмотреть вот здесь: https://myoffice.ru/career/. Свое резюме вы можете направить нам на podbor@myoffice.team с указанием желаемой должности.

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

Но были и случаи, когда мне всё таки отвечали. А ответ, как я в начале и писал обычно был по типу: "А пойдите почитайте руководство по API надстроек!", хотя допустим по отладке или множественным модулям в Lua, там нет ни слова. И так отвечают не только мне, но и тем, кто после статей обращался ко мне по разным вопросам уже в личной переписке. Поэтому, учитывая что из опыта общения оказывается, что я решаю свои вопросы сам быстрее, чем мне отвечают, то я и перестал эти вопросы задавать. И судя по всему - не я один такой.

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

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


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


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

Ок. Будет время - напишу им. Спасибо!

Sign up to leave a comment.

Articles