Последний номер документа 1с

Сортируем документы по убыванию даты и используем конструкцию «ВЫБРАТЬ ПЕРВЫЕ 1»:
Код 1C v 8.х
В результате запрос вернёт одну строку, с данными последнего документа по одному контрагенту.

А как сделать запрос, который вернёт последние документы по всем контрагентам, а не по одному конкретному?

Используем функцию МАКСИМУМ в запросе для решения данной задачи.
Код 1C v 8.х
Этот запрос выбирает последние документы по всем контрагентам.

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

Документы

Описание:

Документ — одно из основных понятий системы 1С:Предприятие. При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях, а также ее просмотр и корректировка.

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

Структура каждого конкретного вида документа определяется при его создании в конфигураторе. У любого вида документа существуют реквизиты, которые создаются автоматически — это "Дата" и "Номер". Номер создается, если при конфигурировании длина номера указана больше 0. Другие реквизиты документа определяются в конфигураторе отдельно для каждого создаваемого вида документа.

Документы в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Читайте также  После установки касперского синий экран

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Как-то на работе возникла проблема с нумерацией документов. Пользователь ввёл номер нового документа вручную, причём вместо "000000675" указал "00_000675". После этого все последующие документы стали нумероваться с префиксом "00_". При этом ни банальное пересохранение объекта с номером "правильного" формата, ни пометка на удаление, ни удаление его из базы не помогли исправить ситуацию. Пришлось разбираться с механизмом автонумерации 1С.

Прежде всего я, естественно, обратился к ресурсам ИТС (благо фирма предоставляет такую возможность). Максимум, что я смог найти по своей тематике, — это две статьи Автонумерация и Особенности работы механизма автонумерации. Данные в них, мягко говоря, не свежие и где-то даже противоречащие реальности (например, там утверждается, что для восстановления нумерации достаточно удалить объекты), но общие представления о механизме дают. Из них стало понятно, что одним из решений вставшей проблемы является установка настройки конфигурации "Режим автонумерации объектов" в значение "Освобождать автоматически". Но, во-первых, это неприменимо в случае использования типовой конфигурации "на поддержке", а, во-вторых, противоречит продвигаемому 1С "новому" режиму нумерации. Поэтому я продолжил рыть дальше.

Как выяснилось, типовых механизмов работы с автонумерацией , как-то обработки, отчёты и прочее, нет. Но, слава Нуралиеву, нам предоставили методы встроенного языка: ОбновитьНумерациюОбъектов, УстановитьНовыйКод и УстановитьНовыйНомер.

ОбновитьНумерациюОбъектов, согласно СП, "выполняет обновление номеров в соответствии с номерами, записанными в базе данных. После вызова данного метода все выданные, но не записанные номера, становятся невалидными, т.к. не гарантируется их уникальность." Соотнеся это описание со статьями по этой тематике и тестовыми данными, становится понятно, что в базе хранится таблица выданных номеров, которые независимо от того, существуют объекты, для которых они были записаны в таблицу или нет, повторно быть выданы уже не могут, если не осуществить "сброс". Как раз процедура ОбновитьНумерациюОбъектов и применяется для "выправления" нумерации объектов. Главное, перед запуском не забудьте удалить из базы объекты с "неправильными" номерами. Это может быть как реальное удаление, так и перезапись их с предварительным присвоением "правильных" номеров.

Читайте также  Программа для создания и печати визиток

В принципе, умения использовать вышеуказанную процедуру достаточно, чтобы, в случае необходимости, выправить нумерацию, но хочется упомянуть ещё о "максимальном номере". Под "максимальным номером" я подразумеваю номер, исходя из значения которого система выдаёт следующее значение. Как пример его знание необходимо, чтобы определить, выправлена ли нумерация или нет.

В 1С нет возможности напрямую получить текущий максимальный номер объекта метаданных. Решить эту проблему можно двумя способами:

  • использовать запрос;
  • получить следующий номер, используя методы УстановитьНовыйКод или УстановитьНовыйНомер .

При формировании запроса система считывает данные базы данных. Можно отсортировать объекты по коду/номеру по убыванию, т.о. верхним в списке окажется обладатель максимального номера. Тут существуют следующие "загвоздки":

  • результат не будет содержать данные о занятых номерах, а только о записанных ;
  • сортировка не всегда выводит наверх "максимальные" с точки зрения системы номера (например, объект с номером "0_01" в результате запроса будет расположен ниже номера "0001", но при вводе нового объекта ему будет присвоен номер с префиксом "0_" ).

УстановитьНовыйКод и УстановитьНовыйНомер устанавливают код или номер соответственно и заносят это значение в таблицу номеров. При этом неважно, будет ли записан объект или нет, "максисальный номер" всё равно будет обновлён на выданный. Таким образом, если использовать эти методы для проверки, то после этого необходимо обновить нумерацию объектов.

К публикации прикреплена обработка обновления нумерации. В ней:

  • кнопка "Обновить" запускает выполнение метода Обновить нумерацию объектов;
  • список объектов содержит результат динамически формируемого запроса;
  • на результат запроса накладывается отбор согласно свойствам объектов метаданных: по владельцу, родителю или периоду;
  • поле "номер содержит" накладывает отбор на данные кода или номера;
  • флаг в колонке "Макс." указывает на то, какой номер на момент обновления будет считаться максимальным, все вышерасположенные объекты получат номер согласно указанному максимальному;
  • при установке флага "Макс." во всех вышерасположенных строках автоматически рассчитывается новый номер, но запись происходит только после нажатия кнопки "Обновить";
  • добавление объектов в список недоступно, но возможно ручное перераспределение строк, т.о. для выправления нумерации необходимо переместить объекты с номерами, требующими коррекции в позицию над строкой с установленным флагом "Макс.".
Ссылка на основную публикацию
Adblock
detector