Очистка кэша 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 не будет опубликован. Обязательные поля помечены *