Почему при создании новой номенклатуры розничная цена сохраняется с некорректной датой в 1С 7.7?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

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

Выясняем причину проблемы: окно столетия

Данная проблема связана с механизмом «окна столетия» (проблема 2000 года). Поскольку в ранних версиях платформы 1С 7.7 год часто вводился двумя цифрами (например, «20»), платформе необходимо «догадаться», какой именно это век — девятнадцатый, двадцатый или двадцать первый. Для этого в параметрах системы существует настройка «Дата начала рабочего столетия».

Если этот параметр установлен некорректно (например, в 2001 год), то при вводе двухзначного числа года система может интерпретировать его как дату из глубокого прошлого. Например, ввод «20» при настройке 2001 года приводит к записи даты 01.01.1920 вместо желаемого 2020 года. Естественно, формы списка, настроенные на отображение актуальных цен, такую запись просто не показывают.

Разбираем по шагам: как изменить настройку

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

  1. Откройте меню «Сервис».
  2. Перейдите в пункт «Параметры».
  3. Найдите поле «Дата начала рабочего столетия».
  4. Установите значение года, которое будет «разделителем» веков. Например, если вы установите значение 1960:
    • Даты с годами от 01 до 59 будут относиться к 2000-м годам (2001, 2002... 2059).
    • Даты с годами от 60 до 99 будут относиться к 1900-м годам (1960, 1961... 1999).

Анализируем влияние изменений на базу данных

Важно понимать, что изменение этого параметра влияет на то, как платформа интерпретирует ввод даты пользователем. Однако, если в вашей базе уже существуют документы или записи в периодических реквизитах (таких как Цены или УчетнаяЦена), созданные с некорректными датами, они не исправятся автоматически. Вам потребуется провести аудит накопленных данных.

Рассмотрим, как можно программно обратиться к периодическому реквизиту, чтобы проверить наличие «битых» записей. Для этого мы используем объект Справочник и метод ПолучитьЗначение. Если вам нужно увидеть историю изменений, независимо от фильтров формы, можно воспользоваться кодом:


// Пример получения истории изменения цены для элемента справочника
НоменклатураОбъект = СоздатьОбъект("Справочник.Номенклатура");
// Позиционируемся на нужном элементе
Если НоменклатураОбъект.НайтиПоКоду("00001") = 1 Тогда
    Периодический = СоздатьОбъект("Периодический");
    Периодический.ИспользоватьОбъект("Цена", НоменклатураОбъект.ТекущийЭлемент());
    Периодический.ВыбратьЗначения();
    Пока Периодический.ПолучитьЗначение() = 1 Цикл
        Сообщить("Дата: " + Периодический.ДатаЗнач + " Значение: " + Периодический.Значение);
    КонецЦикла;
КонецЕсли;

Проверяем иерархию справочника «Цены»

Часто в конфигурациях вроде «Альфа-Авто» форма списка подчиненного справочника Цены может быть программно ограничена. Если вы не видите список цен, обратите внимание на настройки иерархии. Иногда в процедуре ПриОткрытии жестко задается режим отображения:


Процедура ПриОткрытии()
    // Программное принудительное включение иерархии
    ИерархическийСписок(1, 1);
КонецПроцедуры

Если вы хотите увидеть все записи без привязки к владельцу для отладки, можно временно закомментировать этот вызов или использовать обработку, которая отключает режим иерархии в форме, чтобы вывести все записи справочника в один список. Это поможет вам быстро обнаружить, есть ли цены, записанные в 1920 году, и при необходимости скорректировать их даты программным способом.

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

← На главную