[ Вопрос дня ] Как проще реализовать обеспечение уникальности деталей?

Доброго дня, коллеги!

Вопрос про “Обеспечение уникальности комплектов” в рамках курса Подготовка к Аттестации 1С:Специалист по платформе 1С:Предприятие 8.3 – общие приемы и механизмы решения задач поступал неоднократно.

Связано это прежде всего с неоднозначностью решения и необходимостью учесть множество нюансов. Ниже пример решения по шагам от нашего тренера.

Вопрос

Как проще реализовать обеспечение уникальности деталей? Т.е. одна и та же деталь не может относиться к разным стеллажам.

Ответ

Перефразируем условие. Для общего случая оно будет звучать так: “Одна и та же позиция номенклатуры не может быть комплектующей для разных комплектов в данный момент времени”.

Для контроля уникальности комплектующих в запросе нужно выполнить следующее:

  1. Из регистра сведений СоставКомплектов, используя СрезПоследних на момент документа, выбрать все действующие составляющие других комплектов (отличных от указанного в документе), т.е. выбрать значение поля ИзменениеСоставаКомплекта других комплектов. ИзменениеСоставаКомплекта – это ссылка на документ ИзменениеСоставаКомплекта, в табличной части которого хранятся данные о комплектующих для комплекта. Таким образом, мы найдем все таблицы с комплектующими для комплектов, действующих на момент документа.
  2. Выбрать из найденных таблиц с комплектующими других комплектов сами комплектующие (позиции номенклатуры) и сравнить их с комплектующими в табличной части “Состав” текущего документа.
  3. Если найдено совпадение, т.е. какая-то из комплектующих текущего документа уже имеется в действующих комплектах, значит, условие задачи нарушено и проведение документа следует отменить.

Указанную выше проверку можно выполнить и после выполнения и записи движений, чтобы специально не очищать предварительно существующие движения документа. Либо можно при получении среза последних наложить дополнительный фильтр, исключив текущий документ (ИзменениеСоставаКомплекта <> &Ссылка).

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

Комментарии / обсуждение (2):

  1. gusenica1337

    Разве не имеется ввиду, что, например, болт какого-то вида может быть комплектующим только для одного типа стеллажей? И для этого нужно создать РС, где Измерением будет комплектующее, а ресурсом название стеллажа+ ресурс: количество

    • Павел Сериков

      Здравствуйте.

      Имеется несколько способов хранения информации о составе комплектов. Можно также использовать и способ, предложенный Вами (комплектующие (тип: Справочник.Номенклатура) хранятся как измерения регистра сведений, а комплекты (тип: Справочник.Номенклатура) и количество каждой комплектующей в комплекте (тип: число) хранятся как ресурсы регистра. При этом действительно будет обеспечиваться уникальность комплектующих среди комплектов – за счет структуры регистра сведений. Однако у этого способа есть существенный недостаток – он не позволяет получить состав комплектов на заданный момент времени, т.е. не позволяет хранить историю изменения комплектов. А это существенно, т.к. в ряде задач данные о составе комплектов используются при проведении документов (например, когда требуется собирать комплекты из комплектующих “на лету” – при оформлении расходной накладной). Напомню, что требования к экзамену предусматривают возможность перепроведения документов задним числом, при этом результат проведения измениться не должен. Если же сделать этот регистр периодическим, то он уже перестанет обеспечивать (контролировать) уникальность комплектующих, т.к. у регистра будут уже два независимых измерения: Комплектующая и Период. Поэтому предложенный Вами способ использовать можно, но только в ограниченном классе задач – там, где состав комплектов используется справочно, например, только для начального заполнении документа.

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.