В процессе работы с платформой 1С:Предприятие 7.7 пользователи иногда сталкиваются с ситуацией, когда при вводе розничной цены для нового элемента номенклатуры данные «исчезают» или записываются с датой из прошлого века (например, 1920 год вместо 2020). Давайте разберем, почему это происходит и как исправить настройки, чтобы система работала корректно.
Данная проблема связана с механизмом «окна столетия» (проблема 2000 года). Поскольку в ранних версиях платформы 1С 7.7 год часто вводился двумя цифрами (например, «20»), платформе необходимо «догадаться», какой именно это век — девятнадцатый, двадцатый или двадцать первый. Для этого в параметрах системы существует настройка «Дата начала рабочего столетия».
Если этот параметр установлен некорректно (например, в 2001 год), то при вводе двухзначного числа года система может интерпретировать его как дату из глубокого прошлого. Например, ввод «20» при настройке 2001 года приводит к записи даты 01.01.1920 вместо желаемого 2020 года. Естественно, формы списка, настроенные на отображение актуальных цен, такую запись просто не показывают.
Чтобы исправить данное поведение, необходимо выполнить следующие действия в конфигураторе или режиме предприятия:
Важно понимать, что изменение этого параметра влияет на то, как платформа интерпретирует ввод даты пользователем. Однако, если в вашей базе уже существуют документы или записи в периодических реквизитах (таких как Цены или УчетнаяЦена), созданные с некорректными датами, они не исправятся автоматически. Вам потребуется провести аудит накопленных данных.
Рассмотрим, как можно программно обратиться к периодическому реквизиту, чтобы проверить наличие «битых» записей. Для этого мы используем объект Справочник и метод ПолучитьЗначение. Если вам нужно увидеть историю изменений, независимо от фильтров формы, можно воспользоваться кодом:
// Пример получения истории изменения цены для элемента справочника
НоменклатураОбъект = СоздатьОбъект("Справочник.Номенклатура");
// Позиционируемся на нужном элементе
Если НоменклатураОбъект.НайтиПоКоду("00001") = 1 Тогда
Периодический = СоздатьОбъект("Периодический");
Периодический.ИспользоватьОбъект("Цена", НоменклатураОбъект.ТекущийЭлемент());
Периодический.ВыбратьЗначения();
Пока Периодический.ПолучитьЗначение() = 1 Цикл
Сообщить("Дата: " + Периодический.ДатаЗнач + " Значение: " + Периодический.Значение);
КонецЦикла;
КонецЕсли;
Часто в конфигурациях вроде «Альфа-Авто» форма списка подчиненного справочника Цены может быть программно ограничена. Если вы не видите список цен, обратите внимание на настройки иерархии. Иногда в процедуре ПриОткрытии жестко задается режим отображения:
Процедура ПриОткрытии()
// Программное принудительное включение иерархии
ИерархическийСписок(1, 1);
КонецПроцедуры
Если вы хотите увидеть все записи без привязки к владельцу для отладки, можно временно закомментировать этот вызов или использовать обработку, которая отключает режим иерархии в форме, чтобы вывести все записи справочника в один список. Это поможет вам быстро обнаружить, есть ли цены, записанные в 1920 году, и при необходимости скорректировать их даты программным способом.
Рекомендация: после изменения параметра «Дата начала рабочего столетия», обязательно выполните «Тестирование и исправление ИБ» в конфигураторе, выбрав режим проверки логической целостности. Это обеспечит корректную работу индексов и исключит ошибки при работе с датами в дальнейшем.