Пользователь прислал ошибку.
Ну из описания ошибки все понятно, длина файла больше 260 символов. Добавляю усечение имени до 260, нет ошибка сохраняется.
А ну сказано меньше, значит до 259 - тоже нет.
А полное имя, значит с расширением .txt, значит, все таки 260-4=256 и число красивое. Уменьшаю до 256. Не работает.
Пошел гуглить. На сайте Microsoft опять говорится про 260. На StackOverfliow много версий. 259, 257, 255, 256, 240.
Попробовал 240 - работает. Стало интересно, какое все-таки, попробовал 255 - ошибки нет. А при чем тут тогда 260???
Пошел снова читать документацию. Оказывается Windows добавляет к имени файла невидимую сроку <NUL> 🙂 Отсюда и получается 260-5=255.
Ну и все таки даже с учетом этого <NUL>, длина должна быть не "
Все таки важно грамотно составлять текст ошибки. Берегите время других разработчиков! 😉
Ну из описания ошибки все понятно, длина файла больше 260 символов. Добавляю усечение имени до 260, нет ошибка сохраняется.
А ну сказано меньше, значит до 259 - тоже нет.
А полное имя, значит с расширением .txt, значит, все таки 260-4=256 и число красивое. Уменьшаю до 256. Не работает.
Пошел гуглить. На сайте Microsoft опять говорится про 260. На StackOverfliow много версий. 259, 257, 255, 256, 240.
Попробовал 240 - работает. Стало интересно, какое все-таки, попробовал 255 - ошибки нет. А при чем тут тогда 260???
Пошел снова читать документацию. Оказывается Windows добавляет к имени файла невидимую сроку <NUL> 🙂 Отсюда и получается 260-5=255.
Ну и все таки даже с учетом этого <NUL>, длина должна быть не "
меньше 260
", а "не больше 260
".Все таки важно грамотно составлять текст ошибки. Берегите время других разработчиков! 😉
👍7😁3
Столкнулся с очередным детективом в разработке 😱
Над этой проблемой я бился уже очень очень долго, периодически возвращался к ней, но безрезультатно.
Задача: определить масштабирование для каждого монитора в системе (т.е. 100%, 125% и т.д.)
Это нужно для того, чтобы правильно размещать элементы TurboConf в конфигураторе 1С.
Задача непростая. Как таковой готовой функции в WinApi и .NET нет. В последних версиях .NET появилось что-то похожее, но работает только для Windows 10 и выше, и то не на всех билдах и в определенных условиях.
Для Window 7 свой метод получения, для 8 тоже, для 10 разных версий тоже, ну и для 11 конечно по своему. А еще есть разные флаги, которые тоже влияют на это, в общем как обычно.
Получилось написать библиотеку, которая должна вроде работать во всех случаях. Если возможно она получает виртуальное разрешение монитора и сравнивает с реальным, если нет то другими способами, вплоть до реестра с разными ключами.
Но она никак не работала в TurboConf...
В этот раз я решил не сдаваться и довести дело до конца. 🔍
Чтобы способ заработал, приложению нужно выйти из песочницы. Для этого требуется настроить манифест программы, чтобы система знала, что можно отдавать реальный DPI приложению, а не виртуальный.
Добавил манифест - не заработало.
Я создал тестовое приложение из одной формы и манифестом. Тоже.
Я выяснил, что для моего типа приложений (WinForms) оказывается нужен не манифест, а app.confg. ОК.
Не заработало.
Попробовал на тестовом приложении с app.confg - работает! Интересно.
Я начал сравнивать и менять все настройки приложений на одинаковые. Не помогает.
Я начал удалять из проекта все что можно, все зависимости, библиотеки т.д. Безрезультатно.
Я удалил практически все, оставил одну форму как в тестовом. Результат тот же.
Я заменил форму, файл проекта полностью и т.д. из тестового. Приложения уже были полностью идентичны. Но нет.
Я создал, новую чистую папку для проекта, и заново собрал - не работает. 😥
В чем же дело?! Это были две полностью одинаковые копии, кроме одного различия...
Названия сборки!
Одно называлось TestDpi.exe, а второе TurboConf.Application.exe
Убираю точку из названия и все работает!!! 😅
Что это было??? Из-за точки в названии я никак не мог долгое время заставить работать функцию! Мораль - никогда не сдавайтесь!
В общем хеппи энд, работаем дальше... 😉
Над этой проблемой я бился уже очень очень долго, периодически возвращался к ней, но безрезультатно.
Задача: определить масштабирование для каждого монитора в системе (т.е. 100%, 125% и т.д.)
Это нужно для того, чтобы правильно размещать элементы TurboConf в конфигураторе 1С.
Задача непростая. Как таковой готовой функции в WinApi и .NET нет. В последних версиях .NET появилось что-то похожее, но работает только для Windows 10 и выше, и то не на всех билдах и в определенных условиях.
Для Window 7 свой метод получения, для 8 тоже, для 10 разных версий тоже, ну и для 11 конечно по своему. А еще есть разные флаги, которые тоже влияют на это, в общем как обычно.
Получилось написать библиотеку, которая должна вроде работать во всех случаях. Если возможно она получает виртуальное разрешение монитора и сравнивает с реальным, если нет то другими способами, вплоть до реестра с разными ключами.
Но она никак не работала в TurboConf...
В этот раз я решил не сдаваться и довести дело до конца. 🔍
Чтобы способ заработал, приложению нужно выйти из песочницы. Для этого требуется настроить манифест программы, чтобы система знала, что можно отдавать реальный DPI приложению, а не виртуальный.
Добавил манифест - не заработало.
Я создал тестовое приложение из одной формы и манифестом. Тоже.
Я выяснил, что для моего типа приложений (WinForms) оказывается нужен не манифест, а app.confg. ОК.
Не заработало.
Попробовал на тестовом приложении с app.confg - работает! Интересно.
Я начал сравнивать и менять все настройки приложений на одинаковые. Не помогает.
Я начал удалять из проекта все что можно, все зависимости, библиотеки т.д. Безрезультатно.
Я удалил практически все, оставил одну форму как в тестовом. Результат тот же.
Я заменил форму, файл проекта полностью и т.д. из тестового. Приложения уже были полностью идентичны. Но нет.
Я создал, новую чистую папку для проекта, и заново собрал - не работает. 😥
В чем же дело?! Это были две полностью одинаковые копии, кроме одного различия...
Названия сборки!
Одно называлось TestDpi.exe, а второе TurboConf.Application.exe
Убираю точку из названия и все работает!!! 😅
Что это было??? Из-за точки в названии я никак не мог долгое время заставить работать функцию! Мораль - никогда не сдавайтесь!
В общем хеппи энд, работаем дальше... 😉
🔥16👍9❤1🤯1👾1
Продолжение (окончание??) детектива с поддержкой масштабирования 😱
Мне все таки стало интересно почему же присутствие точки влияло на правильную работу настроек масштабирования.
Я поискал информацию, но ничего не нашел. Потыкался туда-сюда и решил, ладно пусть будет название сборки без точки.
Но через некоторое время все опять перестало правильно отображаться, хотя я ничего не менял 😥
Я уже понял, что точка не причем. Поменял название на TurboConf.Application123 и все заработало. Но через некоторое время опять перестало.
Видимо где-то кэшируется какая-то настройка. Почистил все кэши которые только можно, поискал в реестре ничего.
Первое время работает правильно, потом перестает.
Запустил Process Explorer и добавил колонку DpiAwareness. Тут я заметил интересную вещь, первое время после запуска приложения настройка показывается та которую я задавал (Unaware), но через некоторое время сама меняется на PerMonitorV2.
Я полез в свойства приложения и увидел что флаг в настройках совместимости Dpi установился на "Приложение".
Я снял его и все заработало, через некоторое время флаг опять установился 😓
После некоторых изысканий, я выяснил что в недрах Windows 10 есть такая чудесная настройка "Исправление масштабирования для приложений". Если система считает, что приложение отображается неправильно, она сама начинает пытаться исправлять это. Тем самым мешая мне правильно определять координаты в конфигураторе для вывода элементов. 😡
Заставлять пользователей искать и отключать этот флаг не хотелось, поэтому решил переписать систему масштабирования чтобы работала с учетом этой функции.
Но это уже отдельная история, заслуживающая отдельного рассказа 😉
Мне все таки стало интересно почему же присутствие точки влияло на правильную работу настроек масштабирования.
Я поискал информацию, но ничего не нашел. Потыкался туда-сюда и решил, ладно пусть будет название сборки без точки.
Но через некоторое время все опять перестало правильно отображаться, хотя я ничего не менял 😥
Я уже понял, что точка не причем. Поменял название на TurboConf.Application123 и все заработало. Но через некоторое время опять перестало.
Видимо где-то кэшируется какая-то настройка. Почистил все кэши которые только можно, поискал в реестре ничего.
Первое время работает правильно, потом перестает.
Запустил Process Explorer и добавил колонку DpiAwareness. Тут я заметил интересную вещь, первое время после запуска приложения настройка показывается та которую я задавал (Unaware), но через некоторое время сама меняется на PerMonitorV2.
Я полез в свойства приложения и увидел что флаг в настройках совместимости Dpi установился на "Приложение".
Я снял его и все заработало, через некоторое время флаг опять установился 😓
После некоторых изысканий, я выяснил что в недрах Windows 10 есть такая чудесная настройка "Исправление масштабирования для приложений". Если система считает, что приложение отображается неправильно, она сама начинает пытаться исправлять это. Тем самым мешая мне правильно определять координаты в конфигураторе для вывода элементов. 😡
Заставлять пользователей искать и отключать этот флаг не хотелось, поэтому решил переписать систему масштабирования чтобы работала с учетом этой функции.
Но это уже отдельная история, заслуживающая отдельного рассказа 😉
🔥20
Вот такая вакансия от 1С подъехала 🙂
🟡 Вакансия: C++ разработчик
Ищем C++ разработчика в команду разработки 1С:Предприятие для работы над улучшением и развитием IDE (Конфигуратора).
🔸Задачи:
Развитие Конфигуратора / IDE для разработчиков 1С
Работая над IDE вы будете облегчать труд большого числа прикладных разработчиков
Ну вот, а я только на днях добавил Избранное в Навигатор по метаданным, а сегодня стал встраивать Избранное в дерево конфигурации. Может тогда не стоит делать и нужно подождать, когда в 1С это реализуют 😉
Как думаете?
🟡 Вакансия: C++ разработчик
Ищем C++ разработчика в команду разработки 1С:Предприятие для работы над улучшением и развитием IDE (Конфигуратора).
🔸Задачи:
Развитие Конфигуратора / IDE для разработчиков 1С
Работая над IDE вы будете облегчать труд большого числа прикладных разработчиков
Ну вот, а я только на днях добавил Избранное в Навигатор по метаданным, а сегодня стал встраивать Избранное в дерево конфигурации. Может тогда не стоит делать и нужно подождать, когда в 1С это реализуют 😉
Как думаете?
🔥4😁4👍2🗿2
Кто не делал свою 1С, тот не программист 😄
Откопал свою старую разработку - фреймворк для создания бизнес приложений. Делал лет 15 назад.
Были реализованы справочники, документы, отчеты. Все это можно было легко конфигурировать в редакторе Visual Studio.
Интерфейс старался делать приближенным к 1С. Т.к. было написано на WPF C#, можно было легко создать стиль элементов такой же как в 1С, но руки не дошли.
На нем создал пару приложений для себя, работают до сих пор 🙂
Откопал свою старую разработку - фреймворк для создания бизнес приложений. Делал лет 15 назад.
Были реализованы справочники, документы, отчеты. Все это можно было легко конфигурировать в редакторе Visual Studio.
Интерфейс старался делать приближенным к 1С. Т.к. было написано на WPF C#, можно было легко создать стиль элементов такой же как в 1С, но руки не дошли.
На нем создал пару приложений для себя, работают до сих пор 🙂
👍13🔥2
Часто приходится проходить квесты, чтобы добавить какой-то новый удобный функционал в TurboConf 😉
Например, уже давно никак не получалось решить задачу открытия объекта конфигурации при установленном отборе. Бился и так и так, но проблему не удавалось решить.
Но недавно нашел решение как это реализовать.
Если TurboConf не может отобразить объект в дереве конфигурации он показывает свойства объекта и предлагает открыть сам объект.
Дальше программа открывает окно "Сравнения конфигурации с файлом", подсовывает пустой файл cf или cfe для расширения.
Далее вызывает поиск в этом окне и через окно Результаты поиска активирует объект в дереве сравнения.
И затем через контекстное меню открывает уже сам объект.
После этого закрывает все эти вспомогательные окна.
Весь процесс происходит автоматически и занимает несколько секунд даже на больших конфигурациях 🙂
Например, уже давно никак не получалось решить задачу открытия объекта конфигурации при установленном отборе. Бился и так и так, но проблему не удавалось решить.
Но недавно нашел решение как это реализовать.
Если TurboConf не может отобразить объект в дереве конфигурации он показывает свойства объекта и предлагает открыть сам объект.
Дальше программа открывает окно "Сравнения конфигурации с файлом", подсовывает пустой файл cf или cfe для расширения.
Далее вызывает поиск в этом окне и через окно Результаты поиска активирует объект в дереве сравнения.
И затем через контекстное меню открывает уже сам объект.
После этого закрывает все эти вспомогательные окна.
Весь процесс происходит автоматически и занимает несколько секунд даже на больших конфигурациях 🙂
👍7🫡4❤2
Я вот сегодня первый раз во всем проекте GOTO использовал.
Как теперь в глаза смотреть другим разработчикам? 🙈
На самом деле, правильное использование goto в некоторых случаях гораздо проще и удобнее, чем городить выход по какому-то флагу. Например в двойных циклах.
Кстати посмотрел на гитхабе ради интереса репозитарий Microsoft, там этих goto... Да и в типовых 1С тоже встречаются 😉
Как теперь в глаза смотреть другим разработчикам? 🙈
На самом деле, правильное использование goto в некоторых случаях гораздо проще и удобнее, чем городить выход по какому-то флагу. Например в двойных циклах.
Кстати посмотрел на гитхабе ради интереса репозитарий Microsoft, там этих goto... Да и в типовых 1С тоже встречаются 😉
👍9🔥3❤1
Вот такое северное сияние возникло ровно через год и 1 месяц пользования монитора MSI 27'' 😢
Гарантия DNS конечно только что закончилась.
На сайте десятки отзывов с подобной проблемой. Покупатели в отзывах пишут, что пробовали обращаться в MSI, но там отказывают, типа это не брак 🤔 DNS также отказывает.
Интересно, как должен действовать производитель в таких случаях? Все таки отзывать проблемную партию или смириться с потерей клиентов. Ведь я уже вряд ли буду брать мониторы этой фирмы.
Кстати вспомнил, как WD прислали мне новый NAS, после того как старый превратился в кирпич, даже после окончания гарантийного срока 😉
Гарантия DNS конечно только что закончилась.
На сайте десятки отзывов с подобной проблемой. Покупатели в отзывах пишут, что пробовали обращаться в MSI, но там отказывают, типа это не брак 🤔 DNS также отказывает.
Интересно, как должен действовать производитель в таких случаях? Все таки отзывать проблемную партию или смириться с потерей клиентов. Ведь я уже вряд ли буду брать мониторы этой фирмы.
Кстати вспомнил, как WD прислали мне новый NAS, после того как старый превратился в кирпич, даже после окончания гарантийного срока 😉
😢9😱2