Ребят всем привет, подскажите пожалуйста..уже который день бьюсь над задачей...
Есть скажем табличная часть, в ней номенклатура,количество на единицу, количество задания
Свернуть() не подходит сразу скажу..
мне нужен обход строк с проверкой на целое число, что бы если целое пропускало строку
Если не Окр(мСтр.Количество,0,0) = мСтр.Количество и не мСтр.Количество > 1 тогда
в общем делал вот так ,криво-корявенько но метод работает. Правда на строку таблицы,а надо складывать все значения таблицы по этому принципу
Для каждого мСтр из таб цикл
Если не Окр(мСтр.Количество,0,0) = мСтр.Количество и не мСтр.Количество > 1 тогда
Сумма = 0;
СуммаКолЕд = 0;
Пока СуммаКолЕд < мСтр.КоличествоЗадания цикл
КолвоЕд = 0;
сч =0;
Пока сч < 1 цикл
Сч = сч + мСтр.Количество;
Если не сч > 1 тогда
КолвоЕд = КолвоЕд+1;
СуммаКолЕд = СуммаКолЕд +1;
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Сумма = Сумма+1;
КонецЦикла;
мСтр.ИтогоКол = Сумма;
ИначеЕсли мСтр.Количество > 1 тогда
мСтр.ИтогоКол = Ценообразование.ОкруглитьЦену(мСтр.ИтогоКол, Перечисления.ПорядкиОкругления.Окр1, Истина);
КонецЕсли;
КонецЦикла;
Показать
короче нужно получить минимальное количество единиц, методом сложения строк
ВЫБРАТЬ
0.3234 КАК Кол,
1 КАК Зад
ПОМЕСТИТЬ мТаб
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
0.114756,
1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
0.646798,
5
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
0.542476,
3
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
мТаб.Кол,
мТаб.Зад,
АВТОНОМЕРЗАПИСИ() КАК Номер
ПОМЕСТИТЬ мТабИтого
ИЗ
мТаб КАК мТаб
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
МИНИМУМ(мТаб.Зад + мТаб1.Зад) КАК Поле2
ИЗ
мТабИтого КАК мТаб
ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТабИтого КАК мТаб1
ПО мТаб.Номер <> мТаб1.Номер
ГДЕ
мТаб.Кол + мТаб1.Кол > 1
Есть задание на производство
Получаю что на рабочем центре таком то нужно напилить
Фанеру на всю продукцию из задания
Но тут загвоздка в том что сотрудник должен увидеть не эти долевые части, а сколько листов фанеры ему нужно изготовить.
Т.е. если я просто сверну таблицу он сложит все количество что даст не верный результат, даже если в конце округлю в большую сторону до целого, количество целых листов получается меньше.
Мне нужно оптимально сложить все количества с учетом количества задания, что выяснить сколько листов фанеры нужно подготовить.
Я пробовал складывать количество по строке на количество задания, с тем учетом что бы количество не превышало единицу.
Например
Нужно 0.3шт на кол задания 4
Делал так 0.3+0.3+0.3 после округлял
Оставалось еще 0.3 тоже округлял
Итого получалось 2 листа фанеры(это верный результат)
Но смог лишь по строке такое получить, а нужен обход каждой строки таким методом, тут весь смысл в том что количество тоже разное
К примеру ловились(0.4,0.5 итп)
Тут уже надо складывать будет другим методом что бы не было лишнего, т.е. как то опитимизирововать сложение по всей таблицы что бы из нужных скажем 9 листов, он не просил 10.
(5)на скриншоте как раз видно хорошо, для примера, что можно скажем получить 10 шт если идти как я считал, можно получить на много меньше если свернуть таблицу и ОКР, а нужное количество там 8шт
(7)Ну, наверное у вас задача сложнее, скорее всего надо учитывать габаритные размеры изделий, габаритные размеры фанеры, чтобы использовать еще и остатки от одних строк в других строках. Это нужен другой алгоритм тогда
УникальныеКолонки = "....туточки через запятую перечислите имена колонок, задающих уникальность записи..."
СводнаяТаблица = таб.Скопировать(,УникальныеКолонки); //Если реквизит формы, то выгрузить
СводнаяТаблица.Свернуть(УникальныеКолонки);
Результат = таб.СкопироватьКолонки(); //тут будет результат
СтруктураПоиска = Новый Структура(УникальныеКолонки);
Для Каждого Запись из СводнаяТаблица цикл
ЗаполнитьЗначенияСвойств(СтруктураПоиска, Запись);
СтрокиЭтихАналитик = Таб.НайтиСтроки(СтруктураПоиска);
Для каждого Строчка из СтрокиЭтихАналитик цикл
//Туточки проверять строку и либо просто добавлять, либо суммировать, либо пропускать.
КонецЦикла;
КонецЦикла;
Показать
PS Пишу с кулькулятора, оформить код и проверить возможности нет.