Пересчет количества

1. user1169791 21.12.22 15:36 Сейчас в теме
Ребят всем привет, подскажите пожалуйста..уже который день бьюсь над задачей...

Есть скажем табличная часть, в ней номенклатура,количество на единицу, количество задания

Свернуть() не подходит сразу скажу..
мне нужен обход строк с проверкой на целое число, что бы если целое пропускало строку
Если  не Окр(мСтр.Количество,0,0) = мСтр.Количество и не мСтр.Количество > 1 тогда

в общем делал вот так ,криво-корявенько но метод работает. Правда на строку таблицы,а надо складывать все значения таблицы по этому принципу
Для каждого мСтр из таб цикл
            Если  не Окр(мСтр.Количество,0,0) = мСтр.Количество и не мСтр.Количество > 1 тогда
                
                Сумма = 0;
                СуммаКолЕд = 0;
                Пока СуммаКолЕд < мСтр.КоличествоЗадания цикл 
                    КолвоЕд = 0;
                    
                    сч =0;
                    Пока сч < 1 цикл
                        Сч = сч + мСтр.Количество;
                        Если не сч > 1 тогда
                            
                            КолвоЕд = КолвоЕд+1;
                            СуммаКолЕд = СуммаКолЕд +1;
                        Иначе
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                    Сумма = Сумма+1;
                    
                КонецЦикла;
                
                мСтр.ИтогоКол = Сумма;
            ИначеЕсли  мСтр.Количество > 1 тогда
                мСтр.ИтогоКол = Ценообразование.ОкруглитьЦену(мСтр.ИтогоКол, Перечисления.ПорядкиОкругления.Окр1, Истина);
            КонецЕсли;     
        КонецЦикла;

Показать



короче нужно получить минимальное количество единиц, методом сложения строк


у меня получилось 10 при сложении, а нужно 8
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. homer_ 79 21.12.22 16:27 Сейчас в теме
ВЫБРАТЬ
    0.3234 КАК Кол,
    1 КАК Зад
ПОМЕСТИТЬ мТаб

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    0.114756,
    1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    0.646798,
    5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    0.542476,
    3
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
    мТаб.Кол,
    мТаб.Зад,
    АВТОНОМЕРЗАПИСИ() КАК Номер
ПОМЕСТИТЬ мТабИтого
ИЗ
    мТаб КАК мТаб
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    МИНИМУМ(мТаб.Зад + мТаб1.Зад) КАК Поле2
ИЗ
    мТабИтого КАК мТаб
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ мТабИтого КАК мТаб1
        ПО мТаб.Номер <> мТаб1.Номер
ГДЕ
    мТаб.Кол + мТаб1.Кол > 1
Показать
8. user1169791 21.12.22 17:31 Сейчас в теме
(2)АВТОМЕРЗАПСИ() я так понял сюда случайно залетел?)
9. homer_ 79 21.12.22 17:39 Сейчас в теме
13. user1169791 22.12.22 07:29 Сейчас в теме
(9)пустой результат
Прикрепленные файлы:
3. mkalimulin 1487 21.12.22 16:38 Сейчас в теме
М-да. Хотел посоветовать тебе chatGPT, но ты так объясняешь... Что надо получить в итоге? Попробуй ещё раз выразить
5. user1169791 21.12.22 17:14 Сейчас в теме
(3) объясню фактическим примером
Есть материал фанера 1шт

Есть продукция
В спецификацию которой входит часть фанеры

Продукция 1- 0.387шт
Продукция 2- 0.456шт
Продукция 3- 0.567шт
Продукция 4- 0.213шт
Итп

Есть задание на производство
Получаю что на рабочем центре таком то нужно напилить
Фанеру на всю продукцию из задания
Но тут загвоздка в том что сотрудник должен увидеть не эти долевые части, а сколько листов фанеры ему нужно изготовить.
Т.е. если я просто сверну таблицу он сложит все количество что даст не верный результат, даже если в конце округлю в большую сторону до целого, количество целых листов получается меньше.
Мне нужно оптимально сложить все количества с учетом количества задания, что выяснить сколько листов фанеры нужно подготовить.
Я пробовал складывать количество по строке на количество задания, с тем учетом что бы количество не превышало единицу.
Например
Нужно 0.3шт на кол задания 4
Делал так 0.3+0.3+0.3 после округлял
Оставалось еще 0.3 тоже округлял
Итого получалось 2 листа фанеры(это верный результат)
Но смог лишь по строке такое получить, а нужен обход каждой строки таким методом, тут весь смысл в том что количество тоже разное
К примеру ловились(0.4,0.5 итп)
Тут уже надо складывать будет другим методом что бы не было лишнего, т.е. как то опитимизирововать сложение по всей таблицы что бы из нужных скажем 9 листов, он не просил 10.
6. user1169791 21.12.22 17:19 Сейчас в теме
(5)на скриншоте как раз видно хорошо, для примера, что можно скажем получить 10 шт если идти как я считал, можно получить на много меньше если свернуть таблицу и ОКР, а нужное количество там 8шт
4. svilsa 13 21.12.22 16:39 Сейчас в теме
Для каждого мСтр из таб цикл
    мСтр.ИтогоКол = Цел(мСтр.Количество*мСтр.КоличествоЗадания) + 1;
  
КонецЦикла;
7. user1169791 21.12.22 17:25 Сейчас в теме
(4)ваш метод да подошел.
Но во всех ли случаях он будет применим?
10. svilsa 13 21.12.22 19:52 Сейчас в теме
(7)Ну, наверное у вас задача сложнее, скорее всего надо учитывать габаритные размеры изделий, габаритные размеры фанеры, чтобы использовать еще и остатки от одних строк в других строках. Это нужен другой алгоритм тогда
11. user856012 14 21.12.22 20:37 Сейчас в теме
(10)
скорее всего надо учитывать габаритные размеры изделий, габаритные размеры фанеры, чтобы использовать еще и остатки от одних строк в других строках.
Угу, у автора вариант классической "Задачи раскроя".
12. dehro 12 21.12.22 21:32 Сейчас в теме
УникальныеКолонки = "....туточки через запятую перечислите имена колонок, задающих уникальность записи..."
СводнаяТаблица = таб.Скопировать(,УникальныеКолонки);  //Если реквизит формы, то выгрузить
СводнаяТаблица.Свернуть(УникальныеКолонки);

Результат = таб.СкопироватьКолонки();  //тут будет результат
СтруктураПоиска = Новый Структура(УникальныеКолонки);
Для Каждого Запись из СводнаяТаблица цикл
    ЗаполнитьЗначенияСвойств(СтруктураПоиска, Запись);
    СтрокиЭтихАналитик = Таб.НайтиСтроки(СтруктураПоиска);
    Для каждого Строчка из СтрокиЭтихАналитик цикл
       //Туточки проверять строку и либо просто добавлять, либо суммировать, либо пропускать.
    КонецЦикла;
КонецЦикла;


Показать


PS Пишу с кулькулятора, оформить код и проверить возможности нет.
Оставьте свое сообщение

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