Для начала напомню принципы организации единиц измерения товара в 1С УТ и подобных решениях.
Любая единица номенклатуры имеет т.н. Единицу хранения. Термин появился сравнительно недавно, так как соответствующий реквизит справочника именуется как ЕдиицаИзмерения.
Единицу хранения так же именуют базовой единицей. В единицах хранения формируются все движения по регистрам накопления.
Любой количественный отчет по номенклатуре строится в единицах хранения. Отдельные отчеты можно дополнительно сформировать в Единицах отчета.
Предусмотрены так же и метрические единицы, характеризующие номенклатурную позицию (естественно, материальную). Это длина, объем, площадь и вес. Можно задействовать одну или несколько единиц. Для каждой из таких единиц предусмотрен переключатель – единица справочная или ее можно указать в документах.
И наконец, можно организовать учет в упаковках. К каждой номенклатуре можно сопоставить как конкретные упаковки, так и отдельно определенный набор упаковок.
Коэффициенты пересчета всех дополнительных единиц к Единице хранения указываются либо в карточке товара, либо в карточке соответствующей упаковки. При этом можно указать как количество в данной единице единиц хранения, так и наоборот: количество единиц хранения в данной единице. Технически это не имеет значения, все результаты приводятся в двум показателям числитель и знаменатель.
Например, имеем изделие длинной 10 м штука. Для метра запишется числитель 10, знаменатель 1. А если 10 штук составляют 1 м, то числитель = 1, а знаменатель = 10.
При вводе в табличные части документов, а так же некоторых справочников (например, спецификация) можно использовать:
- Единицы хранения.
- Упаковки
- Метрические единицы, для которых разрешено использование в документах.
При использовании способов 2 и 3 в процессе ввода или при записи документа (справочника) производится пересчет используемой единицы в единицу хранения.
Таким образом табличные части, предусматривающие ввод количественных данных по номенклатуре, для отражения количества имеют 3 реквизита:
Количество упаковок = фактически введенные пользователям данные в единицах 1,2,3.
Упаковка = ссылка на единицу измерения
Количество = результат пересчета в единицу хранения.
Реквизит количество обычно не отображается для пользователя. Это понятно, поскольку, это лишняя для него информация.
Но! Я недавно столкнулся со следующей проблемой. Данные реквизита Количество оказались несоответствующими формуле Количество упаковок х Коэффициент.
При штатном функционировании Системы такого, конечно же, возникать не должно. Ведь все пересчеты контролируются, а изменение коэффициентов в справочнике Номенклатура запрещается.
Поэтому, есть основания предполагать, что данные затруднения возникают не без участия наших коллег-программистов. Которые, например, могут обходить контроль изменения коэффициентов в справочнике.
В моем же случае выяснилось, что данные спецификаций вводились пользователем не вручную, а загружались из специально разработанной обработки загрузке.
В коде «без стеснения» значилось примерно следующее:
ТабличнаяЧасть.КоличествоУпаковок = ЗагруженноеКоличество;
ТабличнаяЧасть.Упаковка = ЕдиницаМассы;
ТабличнаяЧасть.Количество = ЗагруженноеКоличество;
То есть количество в упаковке, не равной единице хранения, записывалось в спецификацию без учета коэффициентов. Пользователи далеко не сразу догадались, почему количество списываемого в производство материала не всегда соответствует запланированному.
Для контроля и исправления такого рода ошибок была разработана универсальная обработка табличных частей.
Обработка выявляет в конфигурации табличные части, имеющие реквизиты: Номенклатура, КоличествоУпаковок, Упаковка, Количество.
Найденные объекты и их табличные части (в общем случае у объекта может быть несколько табличных частей, попадающих под условие) по кнопке Вывести список отображаются в верхней таблице.
По кнопке Заполнить таблицу ошибок в нижнюю таблицу выводится список найденных объектов, табличные части которых имеют «проблемы с пересчетом», если таковые есть. Ошибки группируются пообъектно с указанием номера строки.
Напротив каждой строки устанавливается галочка, сняв которую можно отменить исправление.
По кнопке Записать изменения рассчитанные данные количества записываются в информационную базу.
Если в перечне ошибок имеются документы закрытых периодов, требуется заранее открыть период. В случаях, когда запись исправлений связана с большим объемом записей и проведений документов, на работу может потребоваться длительное время.
Запускается в пользовательском режиме по Файл\Открыть.
Тестировалось на 1С:Комплексная автоматизация 2 (2.4.6.189). Должно нормально работать на всех конфигурациях, на базе 1С: УТ 11 редакции.