Как исправить ошибки при установке и отмене тарифов в конфигурации «1С:Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК» от Раруса

Программист 1С v8.3 (Управляемые формы) Управленческий учет Сфера услуг, туризм и социальный сектор
← На главную

Разработчики и внедренцы отраслевых решений от компании «1С-Рарус» (в частности, популярного продукта «1С:Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК») регулярно сталкиваются со специфической логикой работы механизмов начисления и установки тарифов. Наиболее острой проблемой является возникновение ошибок дублирования записей в регистрах сведений при попытке изменить тариф или отменить его действие.

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

Сформулируем основные проблемы, с которыми сталкиваются пользователи и программисты 1С, и разберем пути их совместного решения.

1. Архитектура регистра «КВП_Тарифы» и логика работы с тарифами

Для начала проанализируем структуру хранения информации о тарифах. В конфигурации «1С:ЖКХ» сведения о действующих тарифах хранятся в периодическом регистре сведений КВП_Тарифы. Измерениями этого регистра являются:

Ресурсом выступает непосредственно числовое значение — Тариф. Проблема заключается в том, что при изменении тарифа в один и тот же день система часто пытается записать новую строку, которая конфликтует с уже существующими записями по ключевым измерениям.

Рассмотрим стандартный блок формирования движений в документе УстановкаТарифов:


Для Каждого ТекОбъект Из СписокОбъектов Цикл
    Движение = Движения.КВП_Тарифы.Добавить();
    Движение.Период      = Дата;
    Движение.Организация = Организация;
    Движение.Услуга      = Услуга;
    Движение.Объект      = ?(ТекОбъект.Помещение.Пустая(), ТекОбъект.Здание, ТекОбъект.Помещение);
    Движение.ВидТарифа   = ТекВидТарифа.ВидТарифа;
    Движение.Тариф       = ТекВидТарифа.Тариф;
    Движение.Действует   = Истина;
КонецЦикла;

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


// Свертка ТЧ отключена, пока проверка уникальности выполняется средствами платформы
// при записи данных в регистр сведений.

//Если СписокОбъектов.Количество() > 0 Тогда
//    Если (ВидОперации = Перечисления.УПЖКХ_ВидыОперацийУстановкиТарифов.УстановкаТарифа И УстанавливатьНаОбъекты)
//     ИЛИ (ВидОперации = Перечисления.УПЖКХ_ВидыОперацийУстановкиТарифов.ОтменаТарифа И НЕ УстанавливатьНаОбъекты) Тогда
//        СписокОбъектов.Свернуть("Здание, Помещение");
//    Иначе
//        СписокОбъектов.Очистить();
//    КонецЕсли;
//КонецЕсли;

Решение проблемы с дублями: Чтобы избежать фатальных ошибок при проведении документа, нам необходимо раскомментировать или переписать этот блок кода, обеспечив принудительную свертку таблицы СписокОбъектов по ключевым колонкам (здание и помещение) перед началом цикла формирования движений. Также крайне важно обучить конечных пользователей не вводить несколько документов установки тарифов по одной организации и услуге на одну и ту же дату.

Если пользователи сначала отменили тариф (например, документом от прошлых периодов), а затем пытаются провести установку нового тарифа без учета хронологии, система также выдаст ошибку. В таком случае необходимо проанализировать историю записей в регистре КВП_Тарифы с помощью консоли запросов и устранить временные накладки.

Что касается неинтуитивной отмены тарифов, когда программа требует проводить документ отмены строго датой первоначальной установки: рекомендуется использовать штатные механизмы прекращения действия тарифа через создание нового документа с флагом прекращения начисления, четко контролируя дату начала действия изменений.

2. Особенности защиты кода и работы СЛК (Системы лицензирования)

Большинство отраслевых решений Рарус защищены с помощью Системы лицензирования и защиты конфигураций (СЛК). Значительная часть расчетных механизмов (включая функции распределения услуг ЖКХ, расчет ОДН и пени) вынесена в закрытые двоичные данные или внешние библиотеки, которые невозможно отладить стандартными средствами конфигуратора 1С.

Это накладывает жесткие ограничения на доработку и диагностику:

  1. При возникновении ошибок в закрытых модулях разработчик не может зайти внутрь функции отладчиком. Единственный способ локализовать проблему — детально анализировать входящие параметры, передаваемые в защищенный метод, и проверять возвращаемый результат.
  2. Фоновые и регламентные задания (например, автоматический расчет начислений ночью) могут аварийно завершаться из-за того, что сессия фонового задания не может получить лицензию от сервера СЛК. По умолчанию СЛК использует порты 15201 или 9099. Убедитесь, что данные порты открыты на сервере приложений 1С и брандмауэр не блокирует к ним доступ.

3. Ошибки в других отраслевых решениях: пример с опечатками

Проблемы с качеством кода встречаются и в смежных конфигурациях, таких как «1С:Управление автотранспортом» (УАТ) или 1С:TMS. Примером может служить невнимательное использование переменных при копировании участков кода (копипаст). Рассмотрим фрагмент кода, где из-за банальной опечатки в имени переменной программа совершает двойное присвоение одной и той же переменной, игнорируя расстояние:


Если мсвПункты.Количество() Тогда
   ПробегСГрузом = мсвПуктны[0].Расстояние; // Здесь опечатка в имени переменной: мсвПуктны вместо мсвПункты
   ПробегСГрузом = мсвПуктны[0].Время;       // В итоге переменная ПробегСГрузом перезаписывается временем!
КонецЕсли;

Такие ситуации требуют от программиста 1С регулярного проведения синтаксического контроля при обновлении конфигураций и оперативного исправления подобных ошибок во внешних модулях или расширениях конфигурации.

4. Исправление нестабильности обработки «Загрузка реестра платежей»

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

Чтобы исправить это поведение, необходимо обернуть вызов проверки существования каталога в защищенный блок Попытка... Исключение в модуле формы обработки:


ПутьККаталогу = ВосстановитьЗначение("ПутьЗагрузкиРеестра");
Если ЗначениеЗаполнено(ПутьККаталогу) Тогда
    Попытка
        КаталогФайлов = Новый Файл(ПутьККаталогу);
        Если НЕ КаталогФайлов.Существует() Тогда
            Предупреждение("Сохраненный каталог импорта более не существует. Выберите новый путь.");
            ПутьККаталогу = "";
        КонецЕсли;
    Исключение
        // Обработка непредвиденных ошибок файловой системы
        ПутьККаталогу = "";
    КонецПопытки;
КонецЕсли;

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

5. Интеграция с ГИС ЖКХ и бизнес-модель «Отраслевого ИТС»

Учитывая высокую динамику изменений в требованиях Минстроя РФ, форматы обмена с ГИС ЖКХ постоянно меняются. Программные продукты Раруса требуют регулярной установки обновлений для поддержания интеграции в актуальном состоянии.

Для получения своевременных патчей и исправлений описанных выше ошибок требуется наличие активной подписки «1С:КП Отраслевой». Рекомендуем своевременно обновлять конфигурацию на тестовых базах, проверять корректность сопоставления ФИАС-адресов в справочниках зданий и помещений, так как малейшие расхождения в уникальных идентификаторах приводят к отклонению выгружаемых пакетов со стороны портала ГИС ЖКХ.

← На главную