В практической работе с программой «1С:Бухгалтерия предприятия 3.0» пользователи часто сталкиваются с неприятной ситуацией. В справочнике организации заведен новый расчетный счет, ему присвоен статус основного, однако при формировании документов («Счет покупателю», «Реализация товаров и услуг») или при печати договоров система продолжает упорно подставлять старые реквизиты. На первый взгляд это кажется системным сбоем или программным «глюком» платформы.
В этой статье мы подробно разберем, почему возникает данная проблема, рассмотрим ее скрытые технические причины и пошагово пройдемся по методам ее решения — от простых пользовательских настроек до глубокого анализа базы данных.
Прежде чем переходить к сложным техническим манипуляциям, нам необходимо убедиться в корректности базовых настроек справочников и исключить влияние временных файлов платформы.
Выясним, как именно создаются новые документы в базе. Если новые счета покупателям или реализации создаются путем копирования (клавиша F9 или команда «Скопировать») старых документов, автоподстановка нового основного счета работать не будет.
Почему так происходит: В структуре метаданных документов 1С присутствует реквизит БанковскийСчетОрганизации. При копировании документа-источника программа полностью копирует все его реквизиты, включая заполненный старый расчетный счет. Автоматический алгоритм определения основного счета срабатывает только при создании документа «с нуля» кнопкой «Создать».
Рассмотрим, как исправить эту ситуацию в уже созданных документах:
Если проблема возникает непосредственно при печати договора из карточки договора или из счета, проанализируем настройки самого договора.
В программе «1С:Бухгалтерия 3.0» шаблоны договоров заполняются на основании реквизитов, жестко зафиксированных в карточке договора с контрагентом. Если договор был создан до того, как организация сменила расчетный счет, в его свойствах мог закрепиться старый счет.
Откроем карточку договора, развернем разделы с дополнительными реквизитами и параметрами печати. Если там указан старый расчетный счет организации, заменим его на новый. После этого в документах рекомендуется повторно выбрать данный договор, чтобы обновить связи реквизитов.
В некоторых случаях (особенно при переносе данных из других конфигураций, например «1С:Управление торговлей», или при программном создании документов) стандартные алгоритмы заполнения реквизитов дают сбой из-за незаполненных технических полей.
Проанализируем логику работы формы: для подстановки расчетного счета программный код обращается к реквизиту ОрганизацияПолучатель. Если он не заполнен или заполнен некорректно, система не может сопоставить счет с организацией и оставляет старое значение или первый попавшийся счет из списка.
Для исправления этой системной ошибки воспользуемся встроенным инструментом «Групповое изменение реквизитов»:
ОрганизацияПолучатель, установим напротив него флаг и выберем нашу организацию.Программа осуществляет строгую фильтрацию доступных банковских счетов по валюте взаиморасчетов. Если валюта нового счета отличается от валюты документа (или договора), программа проигнорирует новый расчетный счет.
Иногда в справочнике «Валюты» возникают скрытые дубли (например, два элемента с наименованием «руб.» — один предопределенный системный, а второй созданный пользователем вручную). Для пользователя они выглядят одинаково, но для программы это разные элементы справочника с уникальными внутренними идентификаторами (GUID). Нам необходимо запустить встроенный поиск и удаление дублей в разделе «Администрирование» и объединить повторяющиеся валюты.
Если простые пользовательские методы не привели к результату, обратимся к программному коду конфигурации. Посмотрим, как именно в модуле управляемой формы документа отрабатывает процедура при изменении организации или валюты.
Рассмотрим пример кода, отвечающего за автоматическую установку расчетного счета:
&НаСервере
Процедура ОрганизацияПолучательПриИзмененииНаСервере
ОсновнойБанковскийСчетОрганизацииЗаполнен = ПроверкаРеквизитовОрганизации.ОсновнойБанковскийСчетОрганизацииЗаполнен(Объект.ОрганизацияПолучатель);
УчетДенежныхСредствБП.УстановитьБанковскийСчет(Объект.СтруктурнаяЕдиница, Объект.ОрганизацияПолучатель, ВалютаОплаты, Истина);
КонецПроцедуры
В процессе отладки нам следует обратить особое внимание на параметр Объект.СтруктурнаяЕдиница. Именно в него записывается ссылка на конкретный банковский счет организации. Если при пошаговой отладке метод УстановитьБанковскийСчет общего модуля УчетДенежныхСредствБП возвращает старое значение, необходимо проверить, передается ли в функцию корректное значение переменной ВалютаОплаты и заполнена ли ссылка на ОрганизацияПолучатель.
Если логика конфигурации верна, а настройки выполнены корректно, но проблема сохраняется только в одной конкретной базе, причина может крыться в нарушении физической или логической целостности таблиц базы данных SQL / файловой СУБД.
Для восстановления корректных связей между справочниками проведем процедуру тестирования и исправления:
.dt или копированием файла 1Cv8.1CD для файловой версии).Последовательно применив описанные методы, мы гарантированно решим проблему с отображением старого расчетного счета и обеспечим корректную работу печатных форм в вашей программе «1С:Бухгалтерия».