Коллеги, приветствую!
После недавних рефакторингов подсистемы ИС МП от вендора (переход на «Конструктор видов продукции») многие столкнулись с тем, что кастомные расширения, доп. проверки марок или собственные алгоритмы обработки номенклатуры перестали видеть маркируемый товар.
Старый реквизит УдалитьВидМаркировки в карточке номенклатуры очистился/ушел в разряд устаревших, а в дальнейшем его скорее всего удалят (в новых релизах).
При этом штатные механизмы и сторонние решения (тот же DataMobile) к этим изменениям уже адаптированы, а вот наши собственные доработки потребовали оперативного перехода на новую логику.
Ниже собрана шпаргалка по работе с актуальной архитектурой:
-
Связь «Номенклатура → Ключ → Вид продукции».
-
Как получать ключ и вид через запросы и программный интерфейс 1С.
-
Как правильно проверять признак объемно-сортового учета (ОСУ) штатными методами подсистемы.
1. Связь «Номенклатура → Ключ → Вид продукции»
Раньше связь между номенклатурой и видом маркировки была прямой (до обновления: Номенклатура.ВидМаркировки).
В свежих релизах 1С использует промежуточный регистр сведений и справочник ключей:
-
РегистрСведений.ОписаниеНоменклатурыИС— связывает конкретную позицию номенклатуры и ееКлючВидовПродукции. -
Справочник.КлючиВидовПродукцииИС— хранит комбинацию видов продукции для разных систем (ГИСМТ, ВЕТИС, ЕГАИС и т.д.). -
Справочник.ВидыПродукцииИС— непосредственный вид продукции (Упакованная вода, Молочная продукция, БАДы и т.п.).
Важно: Один и тот же
КлючВидовПродукцииможет объединять ссылки сразу для нескольких подсистем учета. Поэтому для работы с Честным Знаком нужно извлекать вид продукции строго по подсистеме"ГИСМТ".
2. Способы получения Вида продукции ИСМП
Вариант А: Запрос к БД (для отчетов, динамических списков и пакетных обработок)
Если вам нужно получить данные сразу для массива номенклатуры или модифицировать текст запроса в динамическом списке:
ВЫБРАТЬ
ОписаниеНоменклатуры.Номенклатура КАК Номенклатура,
ОписаниеНоменклатуры.КлючВидовПродукции КАК КлючВидовПродукции,
ОписаниеНоменклатуры.КлючВидовПродукции.ВидПродукцииГИСМТ КАК ВидПродукцииГИСМТ
ИЗ
РегистрСведений.ОписаниеНоменклатурыИС КАК ОписаниеНоменклатуры
ГДЕ
ОписаниеНоменклатуры.Номенклатура В(&мНоменклатура)
Вариант Б: Программное получение через штатный кэш и API 1С
Если работа идет в коде с точечным объектом или строкой документа, можно использовать существующие методы из общего модуля «КонструкторИСОбщегоНазначенияКлиентСервер»:
// 1. Получаем описание номенклатуры через кэш подсистемы ИС
ДанныеНоменклатуры = ОбщегоНазначенияИС.ОписаниеНоменклатуры(НоменклатураСсылка);
ОписаниеНоменклатуры = ДанныеНоменклатуры[НоменклатураСсылка];
ВидПродукцииГИСМТ = Справочники.ВидыПродукцииИС.ПустаяСсылка();
// 2. Извлекаем Вид продукции ГИСМТ из полученного ключа
Если ЗначениеЗаполнено(ОписаниеНоменклатуры.КлючВидовПродукции) Тогда
ВидПродукцииГИСМТ = КонструкторИСОбщегоНазначенияКлиентСервер.ВидПродукцииКлючаПоПодсистеме(
ОписаниеНоменклатуры.КлючВидовПродукции,
"ГИСМТ"
);
КонецЕсли;
// 3. Штатная проверка: использует ли этот вид продукции объемно-сортовой учет (ОСУ)
ЭтоОСУ = КонструкторИСОбщегоНазначенияКлиентСервер.ВидПродукцииИспользуетОбъемноСортовойУчет(ВидПродукцииГИСМТ);
Полученный флаг ЭтоОСУ или ссылку на ВидПродукцииГИСМТ далее уже можно использовать в любой своей кастомной логике — например, для ветвления алгоритмов проверки кодов маркировки, особых сценариев подбора на ТСД или формирования собственных отборов.
3. Быстрое получение всех видов продукции ГИСМТ (для форм настроек)
Если на форме вашей обработки или расширения требуется дать пользователю выбор видов продукции, относящихся строго к подсистеме ГИСМТ, используйте штатный метод справочника:
&НаСервере
Функция ПолучитьМассивВидовГИСМТ()
Запрос = Новый Запрос;
// Формируем текст запроса с отбором по подсистеме "ГИСМТ" через метод справочника
Запрос.Текст = Справочники.ВидыПродукцииИС.ТекстЗапросаВидовПродукцииСОтборомПоПодсистеме("ГИСМТ");
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка");
Иначе
Возврат Новый Массив;
КонецЕсли;
КонецФункции
Резюме
При рефакторинге своих модулей под свежие релизы БП 3.0 не нужно мудрить с прямыми чтениями старых реквизитов. Вендор предоставил понятную структуру: РегистрСведений.ОписаниеНоменклатурыИС для запросов и модуль КонструкторИСОбщегоНазначенияКлиентСервер для программной работы, но мы предполагаем что он (вендор) забыл это описать в документации.
Переведя свои алгоритмы на эти методы, вы гарантируете корректную работу своих доработок независимо от дальнейших обновлений формы карточки номенклатуры.
— Материал завершен —
Подробную информацию об авторе и других разработках вы можете найти в моем профиле Инфостарта.
Материал подготовлен автором Решетник Никита Сергеевич / ИП Решетник Н.С. (Балалайка-Софт).
Все последующие ссылки, блоки и рекламные интеграции ниже этого блока добавлены автоматически платформой Infostart и не имеют отношения к автору.
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.202.14
Вступайте в нашу телеграмм-группу Инфостарт