Где в УТ 11.4.13.123 размещается алгоритм формирования ключа аналитики учёта номенклатуры?

1. user1486086 30.06.21 17:56 Сейчас в теме
Приветствую коллеги!

Есть необходимость проверить
- корректность ключей аналитики учёта номенклатуры,
- финансовые и складские остатки товаров по ключам,
- соответствие аналитик документов, применяющих ключи, и аналитики самих ключей...

ну и прочее. Думаю, многие сталкивались с проблемой мусора в ключах после переноса базы со старым релизом УТ в более новую без применения штатных обработок в силу различных причин.

Поэтому есть следующие вопросы:

1. Где посмотреть алгоритм поиска существующего и формирования нового ключа (ну и аналитик в регистре значений)?

2. Предполагаю, что механизм поиска / создания ключей стандартизирован для различных документов конфигурации, где-то должен быть «сборщик» аналитик из табличных частей или шапок документов для дальнейшего поиска / создания. Где этот алгоритм находится?

Спасибо.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1486086 30.06.21 20:43 Сейчас в теме
Конкретно в моем случае наблюдалась проблема отсутствия остатков в отчёте «Ведомость по товарам организаций» (ВедомостьПоТоварамОрганизаций). Движения в РН ТоварыОрганизацийесть, а в отчёте движения за период не появлялись.

Причина оказалась в частичном отсутствии в справочнике КлючиАналитикиУчетаНоменклатуры данных в реквизитах:
- ТипМестаХранения
- СкладскаяТерритория
- Подразделение
- Партнер
- Организация

...при заполненном реквизите МестоХранения. А отёт ВедомостьПоТоварамОрганизаций (да и другие отчёты) применяют эти данные.

Для решения в подсистеме Инструментарий разработчика (версия 5.81.1) в консоли запросов написал запрос,

Код
ВЫБРАТЬ
   КлючиАналитикиУчетаНоменклатуры.Ссылка КАК Ссылка,
   КлючиАналитикиУчетаНоменклатуры.МестоХранения КАК МестоХранения,
   ТИПЗНАЧЕНИЯ(КлючиАналитикиУчетаНоменклатуры.МестоХранения) КАК ТипЗначенияМестаХранения,
   КлючиАналитикиУчетаНоменклатуры.ТипМестаХранения КАК ТипМестаХранения,
   ВЫБОР
      КОГДА ТИПЗНАЧЕНИЯ(КлючиАналитикиУчетаНоменклатуры.МестоХранения) = ТИП(Справочник.Склады)
         ТОГДА ЗНАЧЕНИЕ(Перечисление.ТипыМестХранения.Склад)
      КОГДА ТИПЗНАЧЕНИЯ(КлючиАналитикиУчетаНоменклатуры.МестоХранения) = ТИП(Справочник.Организации)
         ТОГДА ЗНАЧЕНИЕ(Перечисление.ТипыМестХранения.Организация)
      КОГДА ТИПЗНАЧЕНИЯ(КлючиАналитикиУчетаНоменклатуры.МестоХранения) = ТИП(Справочник.Партнеры)
         ТОГДА ЗНАЧЕНИЕ(Перечисление.ТипыМестХранения.Партнер)
      КОГДА ТИПЗНАЧЕНИЯ(КлючиАналитикиУчетаНоменклатуры.МестоХранения) = ТИП(Справочник.СтруктураПредприятия)
         ТОГДА ЗНАЧЕНИЕ(Перечисление.ТипыМестХранения.Подразделение)
      ИНАЧЕ NULL
   КОНЕЦ КАК УстановитьТип,
   КлючиАналитикиУчетаНоменклатуры.СкладскаяТерритория КАК СкладскаяТерритория,
   КлючиАналитикиУчетаНоменклатуры.Подразделение КАК Подразделение,
   КлючиАналитикиУчетаНоменклатуры.Партнер КАК Партнер,
   КлючиАналитикиУчетаНоменклатуры.Контрагент КАК Контрагент,
   КлючиАналитикиУчетаНоменклатуры.Договор КАК Договор,
   КлючиАналитикиУчетаНоменклатуры.Организация КАК Организация
ПОМЕСТИТЬ ВТ_СверкаКлючей
ИЗ
   Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЛОЖЬ КАК Отработан,
   ВТ_СверкаКлючей.Ссылка КАК Ссылка,
   ВТ_СверкаКлючей.МестоХранения КАК МестоХранения,
   ВТ_СверкаКлючей.ТипЗначенияМестаХранения КАК ТипЗначенияМестаХранения,
   ВТ_СверкаКлючей.ТипМестаХранения КАК ТипМестаХранения,
   ВТ_СверкаКлючей.УстановитьТип КАК УстановитьТип,
   ВТ_СверкаКлючей.СкладскаяТерритория КАК СкладскаяТерритория,
   ВТ_СверкаКлючей.Подразделение КАК Подразделение,
   ВТ_СверкаКлючей.Партнер КАК Партнер,
   ВТ_СверкаКлючей.Контрагент КАК Контрагент,
   ВТ_СверкаКлючей.Договор КАК Договор,
   ВТ_СверкаКлючей.Организация КАК Организация
ИЗ
   ВТ_СверкаКлючей КАК ВТ_СверкаКлючей
ГДЕ
   ВТ_СверкаКлючей.ТипМестаХранения <> ВТ_СверкаКлючей.УстановитьТип
Показать полностью


выявляющий ломаные ключи и во вкладке «Обработка строки результата» написал простенький алгоритм для заполнения этих свойств.

КлючОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект();

КлючОбъект.ТипМестаХранения = СтрокаРезультата.УстановитьТип;
Если ТипЗнч(СтрокаРезультата.МестоХранения) = Тип("СправочникСсылка.Склады") Тогда
	КлючОбъект.СкладскаяТерритория = СтрокаРезультата.МестоХранения;
ИначеЕсли ТипЗнч(СтрокаРезультата.МестоХранения) = Тип("СправочникСсылка.СтруктураПредприятия") Тогда
	КлючОбъект.Подразделение = СтрокаРезультата.МестоХранения;
ИначеЕсли ТипЗнч(СтрокаРезультата.МестоХранения) = Тип("СправочникСсылка.Партнеры") Тогда
	КлючОбъект.Партнер = СтрокаРезультата.МестоХранения;
ИначеЕсли ТипЗнч(СтрокаРезультата.МестоХранения) = Тип("СправочникСсылка.Организации") Тогда
	КлючОбъект.Организация = СтрокаРезультата.МестоХранения;
ИначеЕсли ТипЗнч(СтрокаРезультата.МестоХранения) = Тип("СправочникСсылка.Контрагенты") Тогда
	КлючОбъект.Контрагент = СтрокаРезультата.МестоХранения;
КонецЕсли;

Попытка
	КлючОбъект.Записать();
	СтрокаРезультата.Отработан = Истина;
Исключение
	ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки());
КонецПопытки;
Показать


Прикладываю файл.

(!) Будьте осторожны! Защиты от дурака - не делал, тестового режима как такового нет.

Запрос можно спокойно запускать, но алгоритм кнопкой «Выполнить» - только при полном понимании что он выполнит с каждой строкой из результата запроса.
Прикрепленные файлы:
ЗаполнениеТипаИМестаХранения.sel
EvgeniyOlxovskiy; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот