Возьму для разбора пример сложнее:
1 ящ. = 7 уп.
1 уп. = 6 р.
С минимальным дописыванием предлагаю такой вариант.
Базовая единица -- самая мелкая, т.е. рулон. Остальные единицы добавляем в справочник единиц с коэффициентами перерасчета из базовой. А именно:
для упаковки коэффициент равен 6, для ящика -- 6 х 7 = 42.
При оприходовании, списании, возврате можно выбирать любое к-во в любых единицах. Вероятно, если захотите пользоваться стандартным подбором в разных единицах измерения, придется немного подкорректировать. Но если пользоваться сканером, можно обойтись без дописок.
Думаю, что функция перерасчета из единицы в единицу в глобальном модуле есть.
Поскольку весь учет ведется в базовых единицах, в них и выводятся результаты. Чтобы получить отчеты (печформы накладных и пр.), необходимо в глобальный модуль закинуть функцию типа такой:
//*********************************************************************
Функция ВыбратьЕдиницы(Товар,ТаблЕд)
Если ТаблЕд.ТипЗначенияСтр()<>"ТаблицаЗначений" Тогда
Возврат 0;
КонецЕсли; // ТаблЕд.ТипЗначенияСтр()<>"ТаблицаЗначений"
Если ТаблЕд.КоличествоКолонок()<>0 Тогда
ТаблЕд.УдалитьСтроки();
Иначе
таблЕд.НоваяКолонка("ед","Справочник.ЕдиницыИзмерения",,);
ТаблЕд.НоваяКолонка("ИмяЕд","Строка",5,);
ТаблЕд.НоваяКолонка("Коэф","Число",10,3);
КонецЕсли; // ТаблЕд.КоличествоКолонок()<>0
СпрЕд=СоздатьОбъект("Справочник.ЕдиницыИзмерения");
СпрЕд.ИспользоватьВладельца(Товар);
Если СпрЕд.ВыбратьЭлементы()=0 Тогда
Возврат 0;
КонецЕсли; // СпрЕд.ВыбратьЭлементы()=0
Пока СпрЕд.ПолучитьЭлемент()=1 Цикл
ТаблЕд.НоваяСтрока();
ТаблЕд.Ед=Спр.ТекущийЭлемент();// на всякий случай
ТаблЕд.ИмяЕд=Спр.Наименование; // это сокращенное наименование для печати
ТаблЕд.Коэф=Спр.Коэффициент;
КонецЦикла;
ТаблЕд.Сортировать("-Коэф");
Возврат 1;
КонецФункции //ВыбратьЕдиницы
//*********************************************************************
Функция ДобавитьРазделитель(Стр,Разделитель)
Если ПустоеЗначение(СкорЛП(Стр))=1 Тогда
Возврат Стр;
Иначе
Возврат Стр+Разделитель;
КонецЕсли; // ПустоеЗначение(СкорЛП(Стр))=1
КонецФункции //ДобавитьРазделитель
// надо обратить внимание на обработку таких ошибок, как
// наличие нескольких единиц с одинаковым коэф;
//*********************************************************************
Функция ФорматКвоВоВсехЕд(Товар,Кво)
Перем ТаблЕд,РезФормат;
Если Кво<0 Тогда
Возврат Кво;
КонецЕсли; // Кво<0
Если ПустоеЗначение(Товар)=1 Тогда
Возврат Кво;
КонецЕсли; // ПустоеЗначение(Товар)=1
РезФормат="";
Разделитель="+";
ТаблЕд=СоздатьОбъект("ТаблицаЗначений");
Если ВыбратьЕдиницы(Товар,ТаблЕд)=0 Тогда
Возврат Кво;
КонецЕсли; // ВыбратьЕдиницы(Товар,ТаблЕд)=0
Если Кво=0 Тогда
РезФормат=РезФормат+Кво+" "+ТаблЕд.ПолучитьЗначение(ТаблЕд.КоличествоСтрок(),"ИмяЕд");
Возврат РезФормат;
КонецЕсли; // Кво=0
ТаблЕд.ВыбратьСтроки();
ОстКво=Кво;
Пока ТаблЕд.ПолучитьСтроку()=1 Цикл
к=ТаблЕд.Коэф;
Если к=0 Тогда
Продолжить;
КонецЕсли; // ТаблЕд.Коэф=0
имяЕд=ТаблЕд.ИмяЕд;
Если ОстКво>0 Тогда
ТекКво=Цел(ОстКво/к);
Если ТаблЕд.НомерСтроки=ТаблЕд.КоличествоСтрок() Тогда
РезФормат=ДобавитьРазделитель(РезФормат,Разделитель)+ОстКво+ИмяЕд;
Возврат РезФормат;
ИначеЕсли ТекКво=0 Тогда
Продолжить;
КонецЕсли; // ТаблЕд.НомерСтроки=ТаблЕд.КоличествоСтрок()
ОстКво=ОстКво-ТекКво;
РезФормат=ДобавитьРазделитель(РезФормат,Разделитель)+ТекКво+ИмяЕд;
КонецЕсли; // ОстКво>0
КонецЦикла;
Если ПустоеЗначение(СокрЛП(РезФормат))=1 Тогда
Возврат Кво;
Иначе
Возврат РезФормат;
КонецЕсли; // ПустоеЗначение(СокрЛП(РезФормат))=1
КонецФункции //ФорматКвоВЕд
Значения Кво печатных форм заменить на ФорматКвоВоВсехЕд(Товар,Кво).
Писала на скорую руку в качестве примера, а не рабочего образца, т.е. возможны неточности и ошибки. Понятно, что все можно сделать гораздо красивше.
Видимые минусы:
-- будут нюансы, когда начнут распаковывать упаковки до того, как продадут уже распакованные остатки;
-- не знаю, насколько увеличится время формирования отчетов (останется ли оно удовлетворительным при наличии большого ассортимента);
-- к-во всегда пересчитывается в единицы, начиная с крупных, т.е. учет может не отвечать факту: взяли не 1 ящик, а 7 разрозненных упаковок;
-- почие -.
Видимые плюсы:
-- простейшая доработка;
-- не затрагивает ни структуру базы, ни структуру учета.