Где хранятся ответственные лица организации в 1С:Бухгалтерия 7.7 и как исправить их историю?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При настройке реквизитов организации через пункт меню Сервис > Сведения об организации > Ответственные лица пользователи указывают руководителя, главного бухгалтера и кассира. Часто возникает необходимость навести порядок в истории этих значений (например, если в печатных формах перестали выводиться подписи или выводятся не те сотрудники), однако найти соответствующий справочник не удается. Выясним причину этой проблемы, проанализируем структуру хранения данных в конфигурации «Бухгалтерский учет 4.5» и рассмотрим штатные и программные способы корректировки истории.

Архитектура хранения данных: справочник или константы?

В комплексных конфигурациях и программе «Торговля и Склад 7.7» реализован многофирменный учет, поэтому данные об организациях и их руководителях хранятся в справочнике СвоиЮрЛица (или аналогичном). Из-за этого многие специалисты по инерции ищут справочники юридических лиц и в бухгалтерской конфигурации.

Однако типовая конфигурация «Бухгалтерский учет 4.5» изначально рассчитана на ведение учета только по одной собственной организации. По этой причине ответственные лица хранятся не в реквизитах справочников, а в периодических константах:

  1. Руководитель — тип данных Справочник.Сотрудники;
  2. ГлавныйБухгалтер — тип данных Справочник.Сотрудники;
  3. Кассир — тип данных Справочник.Сотрудники.

На физическом уровне в файловой базе данных (DBF) эти периодические данные хранятся в единой таблице 1SCONST.DBF (в SQL-версии — таблица _1SCONST). Для констант поле ссылки на объект OBJID остается незаполненным, а привязка осуществляется по внутреннему идентификатору самой константы.

Почему в истории ответственных лиц возникает «бардак»?

Разберем механизм работы диалоговой формы «Сведения об организации». При ее открытии и последующем сохранении программа автоматически записывает выбранные значения констант на текущую дату платформы — РабочаяДата(). Из-за этого регулярно возникают следующие ошибки:

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

Штатный способ просмотра и очистки истории констант

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

  1. Откроем главное меню: Операции > Константы.
  2. В открывшемся списке констант найдем нужную строку — например, Руководитель, ГлавныйБухгалтер или Кассир.
  3. Нажмем клавишу F5 на клавиатуре или кнопку «История» на панели инструментов окна.
  4. В появившемся окне истории мы увидим весь список срезов с указанием даты начала действия каждого значения.
  5. Удалим некорректные, дублирующиеся или пустые записи клавишей Delete, либо скорректируем дату начала действия нужной записи, чтобы она охватывала все проведенные документы.

Программная работа с периодическими константами

Рассмотрим, как получать и устанавливать значения периодических констант в коде, а также как автоматизировать очистку истории.

Для точечного чтения значения на произвольную дату используем конструкцию:

ЗначениеНаДату = Константа.ПолучитьАтрибут("Руководитель").Получить(НужнаяДата);

Для установки нового значения на конкретную дату применяем следующий синтаксис:


Константа.ПолучитьАтрибут("Руководитель").Установить(НужнаяДата, ВыбранныйСотрудник);

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


Пери = СоздатьОбъект("Периодический");
Пери.ИспользоватьОбъект("Руководитель");
Пери.ВыбратьЗначения();

Пока Пери.ПолучитьЗначение() = 1 Цикл
    // Пери.Дата - дата установки значения
    // Пери.Значение - ссылка на элемент справочника Сотрудники
    Если ПустоеЗначение(Пери.Значение) = 1 Тогда
        Пери.Удалить();
    КонецЕсли;
КонецЦикла;

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

← На главную