При переходе с системы 1С:Бухгалтерия (БП) на 1С:ERP Управление предприятием многие разработчики и аналитики сталкиваются с неожиданной проблемой: в справочнике Контрагенты отсутствует привычный реквизит ОсновнойДоговор. Это вызывает сложности при построении отчетов или написании обработок, где требуется автоматически подставить договор по умолчанию. Рассмотрим подробнее, почему так сделано и как решить задачу получения «основного» договора с помощью запроса.
В 1С:Бухгалтерии учет обычно строится вокруг одной организации и одного основного договора для расчетов. В 1С:ERP логика иная. Система рассчитана на крупные холдинги, где один контрагент может выступать одновременно и поставщиком, и покупателем, работать с несколькими филиалами (организациями) компании по десяткам разных договоров. Поэтому понятие «основной» здесь становится относительным: договор может быть основным для конкретной сделки или конкретной организации, но не для контрагента в целом.
Проанализируем основные способы получения данных, которые заменяют функционал «основного договора» в ERP.
В 1С:ERP первичным звеном взаимодействия часто является Соглашение (типовое или индивидуальное). Именно в соглашении фиксируются условия продаж или закупок, и там же может быть указан конкретный договор, который должен использоваться. Если в вашей базе ведется учет по соглашениям, то запрос должен обращаться именно к ним.
Рассмотрим пример логики запроса для получения договора через индивидуальное соглашение с клиентом:
ВЫБРАТЬ
СоглашенияСКлиентами.Договор КАК Договор
ИЗ
Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
ГДЕ
СоглашенияСКлиентами.Владелец = &Контрагент
И СоглашенияСКлиентами.Организация = &Организация
И СоглашенияСКлиентами.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыСоглашенийСКлиентами.Действует)
Если соглашения не используются или в них не указан договор, нам необходимо обратиться напрямую к справочнику ДоговорыКонтрагентов. Поскольку явного флага «Основной» нет, мы должны имитировать логику системы по подбору договора. Выясним причину, по которой договор может считаться «основным» в текущем контексте: это должен быть действующий договор по конкретной организации и конкретному типу (например, закупка).
Разберем по шагам создание такого запроса:
СтатусыДоговоровКонтрагентов. Нам нужны только те, что имеют значение Действует.Пример запроса для получения «первого подходящего» договора:
ВЫБРАТЬ ПЕРВЫЕ 1
ДоговорыКонтрагентов.Ссылка КАК Договор
ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.Владелец = &Контрагент
И ДоговорыКонтрагентов.Организация = &Организация
И ДоговорыКонтрагентов.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыДоговоровКонтрагентов.Действует)
И ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ
УПОРЯДОЧИТЬ ПО
ДоговорыКонтрагентов.ДатаНачалаДействия УБЫВ,
ДоговорыКонтрагентов.Код
В типовой конфигурации ERP нет регистра «Основные договоры». Однако, как отмечалось в дискуссии, пользователи часто просят внедрить такой функционал. Посмотрим на ситуацию, когда в системе реализовано расширение или используется отраслевое решение. В этом случае может существовать регистр сведений (например, НастройкиЗаполненияОбъектов или созданный вручную ОсновныеДоговорыКонтрагентов).
Если вы обнаружили, что в вашей базе такой регистр есть, запрос упрощается:
ВЫБРАТЬ
ОсновныеДоговоры.Договор
ИЗ
РегистрСведений.НазваниеВашегоРегистра КАК ОсновныеДоговоры
ГДЕ
ОсновныеДоговоры.Контрагент = &Контрагент
И ОсновныеДоговоры.Организация = &Организация
Проанализируем дополнительные условия, которые критически важны для корректной работы отчета:
ТипДоговора или ХозяйственнаяОперация, иначе вы рискуете вытащить договор на закупку в отчет по продажам.ДатаНачалаДействия и ДатаОкончанияДействия. Рекомендуется добавлять в запрос проверку текущей даты на вхождение в этот интервал.ПЕРВЫЕ 1.Подводя итог, можно сказать следующее: чтобы «вытащить» основной договор в 1С:ERP, нельзя просто обратиться к одному полю. Необходимо программно или запросом реализовать алгоритм выбора, исходя из организационной структуры и статуса договора. В большинстве случаев наиболее надежным методом является выборка из Справочник.ДоговорыКонтрагентов с фильтрацией по организации, контрагенту, типу операции и статусу Действует.