В практике разработчика 1С часто встречается загадочная ситуация: одна и та же внешняя обработка на разных компьютерах (или под разными пользователями) ведет себя совершенно по-разному. Особенно странно выглядит баг, когда вместо привычных текстовых данных (например, адреса сервера, логина или домена) в полях ввода внезапно появляется значение «Да». При этом стандартные действия, такие как перезагрузка компьютера или даже полная очистка локального кэша в папке AppData, не приносят никакого результата. Проанализируем, почему это происходит, и разберем механизмы платформы «1С:Предприятие 8.3», отвечающие за это поведение.
Для начала разберем природу появления надписи «Да» (или «Yes» в англоязычном интерфейсе). В системе 1С это строковое представление булева значения Истина. Если в текстовое поле, которое ожидает строку, попадает логическая единица, платформа пытается интерпретировать её для пользователя, выводя «Да». Но как логическое значение попадает в настройки?
Рассмотрим основные причины возникновения такой подмены типов:
ХранилищеОбщихНастроек.Сохранить(), передав туда результат выполнения функции (например, успешность подключения), вместо самих данных.Сохраняемые значения. Если оно включено, платформа автоматически записывает содержимое реквизитов в базу данных при закрытии формы.Многие специалисты путают локальный кэш конфигурации и хранилища настроек пользователя. Проанализируем разницу:
Разберем, какими инструментами пользуется платформа для хранения этой «фигни»:
ХранилищеСистемныхНастроек — здесь «живут» положения окон, настройки колонок таблиц и видимость кнопок.ХранилищеОбщихНастроек — часто используется для хранения произвольных данных, таких как токены авторизации или пути к каталогам обмена.ХранилищеНастроекДанныхФорм — сюда попадают значения, отмеченные галочкой «Сохранять» в свойствах реквизитов формы.Если пользователь столкнулся с тем, что форма «запомнила» некорректные данные, и интерактивно их изменить не удается, нам необходимо прибегнуть к программной очистке. Посмотрим на пример кода, который поможет сбросить настройки для конкретной внешней обработки.
Предположим, наша обработка называется ОбменСОблаком. Чтобы полностью «обнулить» её состояние для текущего пользователя, выполним следующий код в консоли кода или в специальном модуле:
// Определяем ключ объекта для внешней обработки
КлючОбъекта = "ВнешняяОбработка.ОбменСОблаком";
// 1. Очищаем системные настройки (положение окон, состав колонок)
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, Неопределено, ИмяПользователя());
// 2. Очищаем настройки данных формы (сохраненные значения реквизитов)
// Обычно ключ формируется как ПутьКФорме
КлючФормы = "ВнешняяОбработка.ОбменСОблаком.Форма.Форма";
ХранилищеНастроекДанныхФорм.Удалить(КлючФормы, Неопределено, ИмяПользователя());
// 3. Если разработчик использовал общее хранилище для параметров подключения
ХранилищеОбщихНастроек.Удалить(КлючОбъекта, "ПараметрыПодключения", ИмяПользователя());
Сообщить("Настройки успешно сброшены. Попробуйте открыть обработку заново.");
Важно помнить, что в параметре Неопределено во втором аргументе методов Удалить мы указываем, что удаляем настройки для всех ключей настроек данного объекта. Если вы хотите удалить настройки только для конкретного пользователя, обязательно укажите его имя в третьем параметре.
Проанализируем шаги, которые должен предпринять разработчик, чтобы пользователи не страдали от «прилипших» некорректных значений:
КлючСохраненияПоложенийОкна в свойствах формы. Платформа воспримет это как новую форму и создаст чистые настройки.ПриЗагрузкеДанныхИзНастроекНаСервере. В нем можно проверить, что именно пришло из хранилища. Разберем пример:
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
// Проверяем, не пришло ли булево значение в текстовое поле
Если ТипЗнч(Настройки.Вставить("Домен", "")) = Тип("Булево") Тогда
// Если пришло Булево, заменяем его пустой строкой
Настройки.Вставить("Домен", "");
КонецЕсли;
КонецПроцедуры
Мы выяснили, что странное поведение обработки и появление значения «Да» вместо текста — это следствие работы механизмов кэширования настроек внутри базы данных 1С. Мы рассмотрели, чем настройки отличаются от кэша конфигурации, и научились их чистить с помощью методов ХранилищеСистемныхНастроек и ХранилищеНастроекДанныхФорм. Помните: если что-то выглядит одинаково, но работает по-разному — ищите ответ в сохраненных данных пользователя внутри БД.