Очистка кэша 1С из сеанса 1С Предприятие

Очистка кэша 1С из сеанса 1С Предприятие
Обработка для самостоятельной очистки пользователем кэша базы в которой он работает.

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

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

Основное отличие обработки:

1. Очистка производится с помощью bat файла

2. Очищается только каталог в котором находится кэш текущего сеанса работы

3. При очистке кэша я столкнулся с тем, что простое удаление файлов кэша ничего не дает (windows умудряется их восстанавливать и ошибка возникает вновь), поэтому при очистке генерируется новый уникальный идентификатор базы, а старые файлы кэша удаляются вместе с каталогом в котором они находятся.

Разработка выполнялась для себя, поэтому предполагается, что пользователь работает с 1С8.2 и в клиент-серверном варианте работы программы.

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ

// Помещает в массив строки, которые разделены указанным символом
// Параметры
//         Стр — строка, которую необходимо разложить
//         Разделитель — строка, символ разделяющий строки
//
// Возвращаемое значение
//      Массив строк
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = «,»)
    
    МассивСтрок = Новый Массив();
    Если Разделитель = » » Тогда
        Стр = СокрЛП(Стр);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = СокрЛ(Сред(Стр,Поз));
        КонецЦикла;
    Иначе
        ДлинаРазделителя = СтрДлина(Разделитель);
        Пока 1=1 Цикл
            Поз = Найти(Стр,Разделитель);
            Если Поз=0 Тогда
                МассивСтрок.Добавить(Стр);
                Возврат МассивСтрок;
            КонецЕсли;
            МассивСтрок.Добавить(Лев(Стр,Поз-1));
            Стр = Сред(Стр,Поз+ДлинаРазделителя);
        КонецЦикла;
    КонецЕсли;
    
КонецФункции // глРазложить

// Возвращает строку запуска 1С
// Параметры
//         Нет
//
// Возвращаемое значение
//      Строка для запуска 1С
//
Функция ПолучитьСтрокуЗапуска1С()
    
    ПутьКФайлуЗапуска = «»;
    Если КаталогИлиФайлСуществует(«C:Program Files (x86)1cv82common1cestart.exe») Тогда
        ПутьКФайлуЗапуска = «»»C:Program Files (x86)1cv82common1cestart.exe»;
    ИначеЕсли КаталогИлиФайлСуществует(«C:Program Files1cv82common1cestart.exe») Тогда    
        ПутьКФайлуЗапуска = «»»C:Program Files1cv82common1cestart.exe»;
    Иначе    
        Возврат «»;
    КонецЕсли;
    
    ИмяИБ = «»;
    ИмяСервера = «»;
    
    ПодстрокиСтрокиСоединения  = РазложитьСтрокуВМассивПодстрок(СтрокаСоединенияИнформационнойБазы(),«;»);
    Если ПодстрокиСтрокиСоединения.Количество()> 1 и Лев(ПодстрокиСтрокиСоединения[0], 5) = «Srvr=» и Лев(ПодстрокиСтрокиСоединения[1], 4) = «Ref=» Тогда
        
        ИмяСервера = Сред(ПодстрокиСтрокиСоединения[0],7, СтрДлина(ПодстрокиСтрокиСоединения[0]) — 7);
        ИмяИБ      = Сред(ПодстрокиСтрокиСоединения[1],6, СтрДлина(ПодстрокиСтрокиСоединения[1]) — 6);
        
    КонецЕсли;
    
    ИмяТекПользователя = ?(ПользователиИнформационнойБазы.ТекущийПользователь().АутентификацияОС = Истина,«»,ИмяПользователя());
    
    ПараметрыСтрокиЗапуска = «»;
    Если ИмяСервера <> «» И ИмяИБ <> «» Тогда
        ПараметрыСтрокиЗапуска = «»» ENTERPRISE» + » /S»»» + ИмяСервера + «» + ИмяИБ + «»»/N»»» + ИмяТекПользователя + «»»»;
    КонецЕсли;

    Возврат ПутьКФайлуЗапуска + ПараметрыСтрокиЗапуска;    
КонецФункции    

// Проверяет существование каталога
// Параметры
//         Путь — путь к проверяемому каталогу
//
// Возвращаемое значение
//      Булево. Истина, если каталог существует, Ложь, если каталог не существует
//
Функция КаталогИлиФайлСуществует(Путь)
    
    КаталогНаДиске = Новый Файл(Путь);
    
    Если КаталогНаДиске.Существует() Тогда
        Возврат Истина;
    Иначе
        Возврат Ложь;
    КонецЕсли;    

КонецФункции

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ — ДЕЙСТВИЯ ФОРМЫ

// Процедура вызывается при нажатии кнопки «Сформировать» командной панели формы
//
Процедура КнопкаСформироватьНажатие(Кнопка)
    
    //Проверка штука хорошая, однако я столкнулся с ограничениями доступа пользователей. Для
    //того, чтобы все было корректно необходимо положить ее в привелигированный модуль.
    //    
    //МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
    //НомерТекущегоСоединения = НомерСоединенияИнформационнойБазы();
    //ИмяТекПользователя = ИмяПользователя();
    //
    //Для каждого Соединение ИЗ МассивСоединений Цикл                    
    //    Если Соединение.ИмяПриложения <> «Designer»
    //        И Соединение.НомерСоединения <> НомерТекущегоСоединения
    //        И Соединение.Пользователь <> Неопределено
    //        И СокрЛП(Соединение.Пользователь.Имя) = ИмяТекПользователя
    //        Тогда
    //        Предупреждение(«Существует несколько сеансов работы с текущей базой. Закройте их.»);
    //        Возврат;
    //    КонецЕсли;        
    //КонецЦикла;    

    WSH=Новый COMobject(«wscript.shell»);
    ПрофильПользователя = WSH.ExpandEnvironmentStrings(«%APPDATA%»);//Возвращает используемое по умолчанию размещение данных приложений
    
    Каталог = ПрофильПользователя+«1C1CEStart»;    
    КаталогСуществует = КаталогИлиФайлСуществует(Каталог);    
    
    Если КаталогСуществует  = Ложь Тогда
        Сообщить(«Не найден каталог инфрормационной базы. Очистка кеша невозможна. «);
        Возврат;
    КонецЕсли;
    
    Каталог = Каталог + «ibases.v8i»;
    Если КаталогИлиФайлСуществует(Каталог) Тогда
        
        Текст = Новый ТекстовыйДокумент;
        Текст.Прочитать(Каталог);
        
        ТекстФайла = Текст.ПолучитьТекст();
        
        Позиция = Найти(ТекстФайла,СтрокаСоединенияИнформационнойБазы());
        Если Позиция = 0 Тогда
            Сообщить(«GUID информационной базы не найден. Очистка кеша невозможна.»);
            Возврат;
        Иначе    
            ТекстФайла = Прав(ТекстФайла,СтрДлина(ТекстФайла) — Позиция + 1);
            Позиция = Найти(ТекстФайла,«ID=»);
            GUID = Сред(ТекстФайла, Позиция + 3, 36);
            
            НовыйGUID = Новый УникальныйИдентификатор;
            Пока Найти(ТекстФайла,НовыйGUID) > 0 Цикл
                НовыйGUID = Новый УникальныйИдентификатор;
            КонецЦикла;    
            
            Если Вопрос(«Необходимо перезагрузить программу. Перезагружаем?»,РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
                Возврат;
            КонецЕсли;    
            
            //Присвоим базе новый УИД
            ТекстФайла = Текст.ПолучитьТекст();
            ТекстФайла = СтрЗаменить(ТекстФайла,GUID,НовыйGUID);
            Текст.УстановитьТекст(ТекстФайла);
            Текст.Записать(Каталог);
        КонецЕсли;
        
    Иначе
        Сообщить(«Файл «»ibases.v8i»» не найден. Очистка кеша невозможна.»);
        Возврат;
    КонецЕсли;    
    
    Каталог = СтрЗаменить(Каталог,«1CEStartibases.v8i»,«») + «1Cv82» + GUID + «»;
    Если КаталогИлиФайлСуществует(Каталог) Тогда
                
        ПутьКФайлу = Каталог + «1Cv8.lck»;
        
        ТекстBatФайла = «
            |cd
            |cls
            |rem Restart 1C
            |@echo off
            |rem Файл работает следующим образом:
            |rem ждем пока удалится файл 1Cv8_1.lck (удаляется при закрытии 1С) и чистим кэш
            |rem если файл не удаляется в течение 40 сек. завершаем работу программы
            |set /a count=1
            |:flag
            |if %count% gtr 8 goto end
            |if Not exist «»» + ПутьКФайлу + «»» goto go
            |ping -n 5 127.0.0.1 > NUL
            |call set /a count+=1
            |goto flag
            |:go
            |rem Удаляем все файлы
            |Del /F /Q «»» + Каталог + «*.*»»
            |rem Удаляем все каталоги
            |for /d %%i in («»»+ Каталог + «*»») do rmDir /s /q «»%%i»»
            |rem Удаляем основной каталог
            |rmDir «»» + Лев(Каталог,СтрДлина(Каталог)-1) + «»»
            |:end
            |rem Запускаем 1С
            |» + ПолучитьСтрокуЗапуска1С() + «
            |rem Удаляем этот файл
            |del %0″;
            
            
        Текст = Новый ТекстовыйДокумент;
        Текст.УстановитьТекст(ТекстBatФайла);
        Текст.Записать(КаталогВременныхФайлов() + «ClearCache.bat»,КодировкаТекста.OEM);
        ЗапуститьПриложение(«»»» + КаталогВременныхФайлов() + «ClearCache.bat»»»);            
        ЗавершитьРаботуСистемы(Ложь);
        
    Иначе
        Сообщить(«Каталог с GUIDом «»» + GUID + «»» не найден. Очистка кеша невозможна.»);
        Возврат;
    КонецЕсли;    
    
КонецПроцедуры

48 Comments

  1. yuraos

    Интересно, практично.

    Плюс за использование нестандартных для 1С средств.



    А как бы почистить кэш для всех пользователей или для списка отмеченных ?

    😉

    Reply
  2. User80

    Насчет очистки нескольких пользователей я не размышлял. Я попытался сделать обработку, чтобы с ней можно было работать как есть, т.е. например поместить во внешние обработки и запускать когда необходимо. Для очистки нескольких пользователей можно добавить в конфигурацию регистр сведений в котором выбирать нужный людей, а при закрытии программы в процедуре «ПередЗавершениемРаботыСистемы(Отказ)», проверять есть ли пользователь в регистре, в конце процедуры ставить Отказ = Истина, удалять пользователя из регистра и запускать эту обработку в которой заблокировать сообщение о перезапуске 1С. Ну а далее зависит от фантазии, можно подключить обработчик ожидания и сообщать, что необходимо перезапустить 1С и т.д.

    Reply
  3. glek

    1. Судя по приведенному коду, используется файл списка общих баз. Хотя об этом не указано в описании публикации.

    2. Почему то по коду не нашел таких путей (аппдата1с1cestart).

    Наверное, надо допилить описание публикации

    Reply
  4. User80

    Это не общий список баз. У каждого пользователя свой индивидуальный список.

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

    Для Win XP:

    %userprofile%Local SettingsApplication Data1C1Cv82

    %userprofile%Application Data1C1Cv82

    Для Win 7:

    %userprofile%AppDataRoaming1C1Cv82

    %userprofile%AppDataLocal1C1Cv82

    У меня например Win XP

    ПрофильПользователя = «C:Documents and Settings\%userprofile%Application Data»

    добавляем сюда «1C1CEStart» и получается каталог информационной базы.

    Reply
  5. LexSeIch

    Мир этому дому!

    Спасибо за открытый код. Всегда интересно видеть логику решения других людей. Плюс.

    Reply
  6. NazarovV

    http://infostart.ru/public/172791/, правда кода там на 97% меньше)

    Reply
  7. МихаилМ

    удалять файлы кэша конфигурации не нужно. достаточно их очистить.

    это можно сделать в сеансе 1с.

    те без бат файлов, пересоздания списка баз.

    Reply
  8. andrewks
    При очистке кэша я столкнулся с тем, что простое удаление файлов кэша ничего не дает (windows умудряется их восстанавливать и ошибка возникает вновь),

    можно поподробнее? первый раз слышу о таком

    Reply
  9. crosby

    Вот универсальное проверенное средство: http://infostart.ru/public/90572/

    Reply
  10. the1

    (7) Михаил, вот и запили сюда код, а критиковать каждый может. Человек сделал и выложил. А вам слабо?

    З.Ы. Публикацию плюсую

    Reply
  11. User80

    (8) andrewks, Я не могу внятно объяснить как это получается, поэтому напишу как я пришел к такому выводу. Сначала я просто удалял файлы кэша из папки, удалял их на своей машине (Win XP) и все работало прекрасно, затем я попытался почистить кэш на терминальном сервере (Win 7) и требуемого результата не получил. Первая мысль была, что где-то ошибка, поэтому я попробовал не перезапускать базу, каталог с временными файлами был пуст. Запущенная программа 1С опять показала ошибку, затем я удалил файлы в каталоге в котором находился кэш вместе с самим каталогом, убедился что каталога нет, запущенная 1С показала ошибку и уже после изменения уникального идентификатора базы в файле «ibases.v8i» ошибка исчезла. Разработка писалась долго и тестировалась на нескольких пользователях результат был одинаков, пока я не изменил УИД базы ошибка повторялась.

    Reply
  12. МихаилМ

    (8)

    в каталоге

    C:Documents and Settings\%userprofile% Local SettingsApplication Data1C1Cv82

    GUID бдconfig\r

    есть файлы кэша конфигурации : cacheStorage и cacheVersions

    вот их и надо очищать, тк удалить их нельзя.

    если разобраться, что cacheVersions (это не сложно) и где 1с в озу хранит список загруженных метаданных,

    то можно написать обновление метаданных налету.

    и прославится во веки.

    Reply
  13. МихаилМ

    +(12)

    уточнение:

    удалять нельзя при запущенной 1с.

    Reply
  14. the1

    (12) ну вот, а у автора ГУИД сам вычисляет.

    Reply
  15. ksnik

    Спасибо, проверили — работает 🙂

    Reply
  16. glek

    (4) User80, 1. Файл с указанным расширением и есть список баз. Как он будет использоваться (индивидуально, или один файл раскидывается по пользователям) — не важно. В общем случае (если просто создать базу) — этого файла нет. И насчет каталогов. В общем, надо «допилить» описание разработки.

    Reply
  17. ksnik
    Reply
  18. ksnik

    А еще вместо команды «удалить файл» засунул в конец батника «завершить сеанс» команду «logoff /v» 🙂

    Reply
  19. vdovinDS

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

    Reply
  20. User80

    У нас в основном возникает одинаковая ошибка что-то типа «Ошибка SDBL: Ожидается имя таблицы …» и возникает она у нескольких человек одновременно. У организации несколько регионов и бухгалтера работают рядом. Они уже сталкивались с подобными ситуациями, поэтому достаточно одному из них вспомнить о очистке кэша и тут же проверить свою теорию на практике и сразу же об этом узнают остальные. Случалось, что присылали письма со скриншотом ошибки, а после совета почистить кэш остальные уже не беспокоили. Бывало я просто говорил, что когда выскакивает предупреждение об ошибке, то попробуйте сначала почистить кэш, а затем звоните. Я не знаю, может динамическое обновление перестало глючить (что вряд-ли т.к. последние месяцев 10 мы не переходили на новый релиз), а динамически мы можем обновляться раз 30 в день, но уже около полугода я иногда для профилактики чищу кэш только себе.

    Reply
  21. azhilichev

    Добавлю от себя оптимизацию: функцию РазложитьСтрокуВМассивПодстрок можно переписать так

    Функция РазложитьСтрокуВМассивПодстрок(Знач ТекстоваяСтрока, Знач Разделитель)

    СтрокаДанных = ТекстоваяСтрока;

    ЧислоВхождений = СтрЧислоВхождений(СтрокаДанных, Разделитель);

    СтрокаДанных = СтрЗаменить(СтрокаДанных, Разделитель, «»»},{«»S»»,»»» );

    СтрокаДанных = «{«»#»»,51e7a0d2-530b-11d4-b98a-008048da3034,{» + СтрЗаменить(ЧислоВхождений + 1, Символы.НПП, «») + «,{«»S»»,»»» + СтрокаДанных + «»»}}}»;

    Возврат ЗначениеИзСтрокиВнутр(СтрокаДанных);

    КонецФункции

    Reply
  22. dumal

    Спасибо, удобная обработка. Я-то по-старинке чищу все лапками. Может, и впрямь, можно пользователям доверить эту ответственную миссию?

    Reply
  23. User80

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

    Reply
  24. Иной

    Спасибо за открытый код. Чистил по старинке (удаляя базу из списка и прописывая заново), теперь можно будет поэкспериментировать.

    А у всех пользователей можно чистить если запилить обработку в автозапуск по условию (например по флажку в справочнике сотрудников который бы снимался после выполнения)

    Reply
  25. User80

    (24) Иной, нет никаких ограничений, кэш можно чистить у любого пользователя.

    Reply
  26. Иной

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

    Как для типовой — удачное решение.

    Reply
  27. BAMPER

    + за открытый код!

    И за публикацию в целом! =)

    Reply
  28. Bassgood

    (16) glek, ты ошибаешься, файл «1cestart» — это не список баз, это файл автозапуска платформы, который в свою очередь уже обращается к файлу списка баз пользователя, имеющего расширение «*v8i»

    Reply
  29. glek

    (28) Zigfridish, Ты прав, но по листингу ув. автора

    ПрофильПользователя = WSH.ExpandEnvironmentStrings(«%APPDATA%»);//Возвращает используемое по умолчанию размещение данных приложений

    Каталог = ПрофильПользователя+»1C1CEStart»;

    видно, что это еще и каталог у него

    Reply
  30. maverick76

    +,возьму себе на вооружение

    Reply
  31. Ultraunion2005

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

    Reply
  32. User80

    (31) Ultraunion.ru, Спорить не буду, расположение форм, настройки отборов и т.п. штука хорошая, но в своей практике я сталкивался с ошибками при восстановлении настроек и мне приходилось комментировать восстановление настройки и сохранять ее заново, а так я точно уверен, что все чисто. Хотя должен сказать, что подобные ошибки встречаются крайне редко, я лично видел всего 3 штуки. Подумаю над Вашим замечанием, наверно допишу возможность сохранения настроек.

    Reply
  33. Ed111111

    Если рассматривать ее работу на платформах Server 2007, server 2008, server 2008 R2, server 2012

    Прошу рассказать подробнее. Тестировалась ли данная программа на чистке в этих системах?

    Reply
  34. Maxs_1919

    во-первых вот это конечно полная хрень:

    ПутьКФайлуЗапуска = «»;

    Если КаталогИлиФайлСуществует(«C:Program Files (x86)1cv82common1cestart.exe») Тогда

    ПутьКФайлуЗапуска = «»»C:Program Files (x86)1cv82common1cestart.exe»;

    ИначеЕсли КаталогИлиФайлСуществует(«C:Program Files1cv82common1cestart.exe») Тогда

    ПутьКФайлуЗапуска = «»»C:Program Files1cv82common1cestart.exe»;

    Иначе

    Возврат «»;

    КонецЕсли;

    а если не Це системный диск???

    в 1с изобрели уже команду КаталогПрограммы()

    во-вторых Если ПодстрокиСтрокиСоединения.Количество()> 1 и Лев(ПодстрокиСтрокиСоединения[0], 5) = «Srvr=» и Лев(ПодстрокиСтрокиСоединения[1], 4) = «Ref=» Тогда

    ничего сложного нет добавить сюда ИначеЕсли Лев(ПодстрокиСтрокиСоединения[0], 5) = «File=» и т.д.

    в-третих а че в ХР работает такая конструкция WSH.ExpandEnvironmentStrings(«%APPDATA%»)??

    сыровато как то.

    Reply
  35. User80

    (33) Ed111111, тип SQL сервера значения не имеет.

    Reply
  36. User80

    (34) Maxs_1919, вот Вы все знаете, а я не такой умный, поэтому забыл, что команда КаталогПрограммы() может помочь мне в определении каталога.

    «ничего сложного нет добавить сюда ИначеЕсли Лев(ПодстрокиСтрокиСоединения[0], 5) = «File=» и т.д.»

    Да Вы правы это не сложно.

    «в-третих а че в ХР работает такая конструкция WSH.ExpandEnvironmentStrings(«%APPDATA%»)»

    Да, работает.

    Спасибо за комментарий, когда появится свободная минутка я исправлю код и выложу новую обработку.

    Reply
  37. dyak84

    Спасибо автору вещь очень нужная и неоходимая. Чистил руками появятся деньги оюязательно скачаю.Так держать

    Reply
  38. dyak84

    Автор есть такое маленькое замечание после перезапуска сеанса 1С имя пользователя если садержит украинскую букву і замемяется на символ ? как бі хорошо билоб поравить ето дело

    Reply
  39. Aspirant

    Поясните чем хуже /ClearCache в Дополнительных параметрах запуска конкретной базы?

    Reply
  40. spaminfostart

    Немного передалал батник:

    Вместо

    |rem Удаляем все файлы

    |Del /F /Q «»» + Каталог + «*.*»»

    |rem Удаляем все каталоги

    |for /d %%i in («»»+ Каталог + «*»») do rmDir /s /q «»%%i»»

    |rem Удаляем основной каталог

    |rmDir «»» + Лев(Каталог,СтрДлина(Каталог)-1) + «»»

    Достаточно

    |rem Удаляем основной каталог

    |rmDir «»» + Лев(Каталог,СтрДлина(Каталог)-1) + «»» + /s /q

    Плюс убрал запуск 1С в батнике, иначе создаётся папка 0000-000…

    Плюс добавил справку, флажок, обновлять ли GUID, ну и по мелочи подправил.

    Вот дополненный вариант http://infostart.ru/public/202156/

    Reply
  41. AltF1

    Ключ запуска прописать для ярлыка.

    При запуске пользователем ИБ — кэш будет чиститься.

    Reply
  42. dyak84

    Автор подскажите а обстоит ситуация когда профиль 1С размещен не стандартно на диске D: Очистка кеша будет работать или нет. И еще такой вопрос как настройки имя последнего пользователя они тоже по идее будут стерті так ли ето.Зарание спасибо за ответ

    Reply
  43. prog-eg

    (39) Aspirant, поставила параметр /ClearCache — не помогает…

    Reply
  44. prog-eg

    я его поставила для общего ярлыка, попробую поставить для конкретной базы…

    Reply
  45. alexware

    Здесь на самом деле ещё одна проблема. Автор в своём алгоритме определяет строку подключения и затем делает поиск её в файле ibases.v8i. При этом подразумевается, что в файле ibases.v8i каждая строка подключения может встречаться только один раз.

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

    Я сам частенько пользуюсь этой возможностью. Удобно иметь ссылки на одну и ту же базу но с разными другими параметрами режима запуска. Например у меня есть записи для запуска толстого клиента, тонкого, обычного приложения, разного языка интерфейса платформы, с выбором пользователя или с автоматическим запуском под пользователем Windows и т.д. и т.п.

    Reply
  46. Piroman

    (39) Aspirant,

    ClearCache чистит в клиент-серверном варианте только кэш клиент-серверных вызовов, а кэш метаданных, в котором хранятся данные о конфигурации — нет.

    Reply
  47. s.matyukin_visma

    Столкнулся вот с такой проблемой ошибка блокировки участка файла cachestorage. У меня стояла КА 1.1 (1.1.58.4) и платформа 8.3.5.1383. Динамически обновил конфигурацию и после повторного входа вылезла ошибка. Вообще динамическое обновление работает не слишком корректно даже 8.3 вынужден от него отказаться, во избежании проблем с Кэшом. В моем случае помогла очистка Кэша по ссылке http://programmist1s.ru/wp-content/uploads/2013/02/OchistkaKesha-bat.zip

    Reply
  48. Oboron

    (21) 9thlevel, Хорошая оптимизация. В данном случае сработает. а так, еще нужно заменить одну кавычку на две (иначе, если в тексте встретится кавычка, то будет ошибка потока):

    Функция РазложитьСтрокуВМассивПодстрок(Знач ТекстоваяСтрока, Знач Разделитель)
    
    СтрокаДанных = ТекстоваяСтрока;
    ЧислоВхождений = СтрЧислоВхождений(СтрокаДанных, Разделитель);
    ВременнаяЗамена = «#»;
    Пока Найти(СтрокаДанных, ВременнаяЗамена) > 0 Цикл
    ВременнаяЗамена = ВременнаяЗамена + «#»;
    КонецЦикла;
    
    СтрокаДанных = СтрЗаменить(СтрокаДанных, Разделитель, ВременнаяЗамена);
    СтрокаДанных = СтрЗаменить(СтрокаДанных, «»»», «»»»»»); //Меняем одиночную кавычку на двойную везде, кроме разделителя
    СтрокаДанных = «{«»#»»,51e7a0d2-530b-11d4-b98a-008048da3034,
    |{» + Формат(ЧислоВхождений + 1, «ЧГ=0») + «,
    |{«»S»»,»»» + СтрЗаменить(СтрокаДанных, ВременнаяЗамена, «»»},
    |{«»S»»,»»») + «»»}}}»;
    
    Возврат ЗначениеИзСтрокиВнутр(СтрокаДанных);
    
    КонецФункции
    

    Показать

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *