Почему внешняя обработка 1С отображает «Да» вместо текста и как очистить скрытые настройки?

Программист IT и автоматизация бизнеса
← На главную

В практике разработчика 1С часто встречается загадочная ситуация: одна и та же внешняя обработка на разных компьютерах (или под разными пользователями) ведет себя совершенно по-разному. Особенно странно выглядит баг, когда вместо привычных текстовых данных (например, адреса сервера, логина или домена) в полях ввода внезапно появляется значение «Да». При этом стандартные действия, такие как перезагрузка компьютера или даже полная очистка локального кэша в папке AppData, не приносят никакого результата. Проанализируем, почему это происходит, и разберем механизмы платформы «1С:Предприятие 8.3», отвечающие за это поведение.

Выясняем причину: почему появляется значение «Да»?

Для начала разберем природу появления надписи «Да» (или «Yes» в англоязычном интерфейсе). В системе 1С это строковое представление булева значения Истина. Если в текстовое поле, которое ожидает строку, попадает логическая единица, платформа пытается интерпретировать её для пользователя, выводя «Да». Но как логическое значение попадает в настройки?

Рассмотрим основные причины возникновения такой подмены типов:

  1. Ошибки типизации при программном сохранении: Разработчик мог использовать метод ХранилищеОбщихНастроек.Сохранить(), передав туда результат выполнения функции (например, успешность подключения), вместо самих данных.
  2. Сбой структуры настроек при обновлении: Если в новой версии обработки изменился состав реквизитов или их типы, но ключ сохранения настроек остался прежним, платформа может попытаться «натянуть» старые сохраненные данные на новую структуру. В результате данные сдвигаются, и в текстовое поле попадает флаг из другого реквизита.
  3. Автосохранение данных формы: У управляемых форм есть свойство Сохраняемые значения. Если оно включено, платформа автоматически записывает содержимое реквизитов в базу данных при закрытии формы.

Где на самом деле хранятся настройки, если чистка кэша не помогает?

Многие специалисты путают локальный кэш конфигурации и хранилища настроек пользователя. Проанализируем разницу:

Разберем, какими инструментами пользуется платформа для хранения этой «фигни»:

Рассмотрим решение: программная очистка настроек

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

Предположим, наша обработка называется ОбменСОблаком. Чтобы полностью «обнулить» её состояние для текущего пользователя, выполним следующий код в консоли кода или в специальном модуле:


// Определяем ключ объекта для внешней обработки
КлючОбъекта = "ВнешняяОбработка.ОбменСОблаком";

// 1. Очищаем системные настройки (положение окон, состав колонок)
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, Неопределено, ИмяПользователя());

// 2. Очищаем настройки данных формы (сохраненные значения реквизитов)
// Обычно ключ формируется как ПутьКФорме
КлючФормы = "ВнешняяОбработка.ОбменСОблаком.Форма.Форма";
ХранилищеНастроекДанныхФорм.Удалить(КлючФормы, Неопределено, ИмяПользователя());

// 3. Если разработчик использовал общее хранилище для параметров подключения
ХранилищеОбщихНастроек.Удалить(КлючОбъекта, "ПараметрыПодключения", ИмяПользователя());

Сообщить("Настройки успешно сброшены. Попробуйте открыть обработку заново.");

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

Как не допустить подобных проблем в будущем?

Проанализируем шаги, которые должен предпринять разработчик, чтобы пользователи не страдали от «прилипших» некорректных значений:

  1. Уникальность ключей сохранения: Если вы выпускаете масштабное обновление обработки с изменением типов данных, измените КлючСохраненияПоложенийОкна в свойствах формы. Платформа воспримет это как новую форму и создаст чистые настройки.
  2. Проверка типов при загрузке: Используйте обработчик события формы ПриЗагрузкеДанныхИзНастроекНаСервере. В нем можно проверить, что именно пришло из хранилища. Разберем пример:

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
    // Проверяем, не пришло ли булево значение в текстовое поле
    Если ТипЗнч(Настройки.Вставить("Домен", "")) = Тип("Булево") Тогда
        // Если пришло Булево, заменяем его пустой строкой
        Настройки.Вставить("Домен", "");
    КонецЕсли;
КонецПроцедуры
  1. Кнопка «Сброс» в интерфейсе: Хорошим тоном считается добавление кнопки «Сбросить настройки» прямо на форму обработки. Это позволит пользователю самостоятельно решить проблему без привлечения программиста и написания кода в консоли.

Итоги совместной работы

Мы выяснили, что странное поведение обработки и появление значения «Да» вместо текста — это следствие работы механизмов кэширования настроек внутри базы данных 1С. Мы рассмотрели, чем настройки отличаются от кэша конфигурации, и научились их чистить с помощью методов ХранилищеСистемныхНастроек и ХранилищеНастроекДанныхФорм. Помните: если что-то выглядит одинаково, но работает по-разному — ищите ответ в сохраненных данных пользователя внутри БД.

← На главную