Коллеги, на ровном месте произошел затык, т.е. застрял в одной простой задачке. Вроде бы элементарно но пока не получается, поомгите советом или направление дайте.
Задача:
Имеем переменную например:
ОпределеннаяСумма = 150000;
Нужно из ТЧ документа собирать в массив построчно товары сумма которых при суммировании либо равно либо не превышает вышеуказанную переменную.
Если при суммировании Сумма превышает переменную, то данная строка попадает в следующую строку массива.
Если в одной строке сумма превышает переменную то эту строчку разбиваем (делим) на переменную и добавляем в массив.
уже 2 часа сижу, идей пока нету =))
Задача:
Имеем переменную например:
ОпределеннаяСумма = 150000;
Нужно из ТЧ документа собирать в массив построчно товары сумма которых при суммировании либо равно либо не превышает вышеуказанную переменную.
Если при суммировании Сумма превышает переменную, то данная строка попадает в следующую строку массива.
Если в одной строке сумма превышает переменную то эту строчку разбиваем (делим) на переменную и добавляем в массив.
уже 2 часа сижу, идей пока нету =))
По теме из базы знаний
- Заполнение календарей в графиках работы (суммированный учет)
- Суммирование выделенных ячеек в столбце для 1С:Предприятие 7.7
- Запросы. Временные Таблицы. Сравнение методов создания ВТ
- Корпоративный мозг на 1С и Python
- История одного админа в мире 1С. Как поиски причины тормозов 1С привели к созданию нового продукта
Найденные решения
Тогда типа такого (массив таблиц значений нужен, как минимум):
МассивТЧ = Новый Массив;
ПределПоСумме = 150000;
СуммаПоТекущейТЧ = 0;
ТекущаяТЧ = Неопределено;
Для Каждого СтрокаТаблицы Из ОбщаяТаблицаТоваров Цикл
Если СуммаПоТекущейТЧ + СтрокаТаблицы.Сумма > ПределПоСумме ИЛИ ТекущаяТЧ = Неопределено Тогда
ТекущаяТЧ = Новый ТаблицаЗначений;
ТекущаяТЧ.Колонки.Добавить("Номенклатура");
ТекущаяТЧ.Колонки.Добавить("Сумма");
МассивТЧ.Добавить(ТекущаяТЧ);
СуммаПоТекущейТЧ = 0;
КонецЕсли;
СтрокаТЧ = ТекущаяТЧ.Добавить();
СтрокаТЧ.Номенклатура = СтрокаТаблицы.Номенклатура;
СтрокаТЧ.Сумма = СтрокаТаблицы.Сумма;
СуммаПоТекущейТЧ = СуммаПоТекущейТЧ + СтрокаТаблицы.Сумма;
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
жесть описание задачи))) в массив что надо складывать? элементы номенклатуры или суммы?
"если при суммировании... в следующую строку массива" - а до этого, в предыдущую строку массива что складывалось?
приведите пример хоть)
"если при суммировании... в следующую строку массива" - а до этого, в предыдущую строку массива что складывалось?
приведите пример хоть)
Обожаю, когда вместо описания задачи пытаются описывать свои потуги ее решить. И потом спрашивают в стиле "что я делаю не так, когда ту штуковину заталдыкиваю в эту ерундовину?"
Что сделать-то хочешь? Сформировать пачку накладных с ограничением по сумме? Сформулируй человеческим языком. Так, чтобы человек с улицы мог понять твою проблему.
Что сделать-то хочешь? Сформировать пачку накладных с ограничением по сумме? Сформулируй человеческим языком. Так, чтобы человек с улицы мог понять твою проблему.
Тогда типа такого (массив таблиц значений нужен, как минимум):
МассивТЧ = Новый Массив;
ПределПоСумме = 150000;
СуммаПоТекущейТЧ = 0;
ТекущаяТЧ = Неопределено;
Для Каждого СтрокаТаблицы Из ОбщаяТаблицаТоваров Цикл
Если СуммаПоТекущейТЧ + СтрокаТаблицы.Сумма > ПределПоСумме ИЛИ ТекущаяТЧ = Неопределено Тогда
ТекущаяТЧ = Новый ТаблицаЗначений;
ТекущаяТЧ.Колонки.Добавить("Номенклатура");
ТекущаяТЧ.Колонки.Добавить("Сумма");
МассивТЧ.Добавить(ТекущаяТЧ);
СуммаПоТекущейТЧ = 0;
КонецЕсли;
СтрокаТЧ = ТекущаяТЧ.Добавить();
СтрокаТЧ.Номенклатура = СтрокаТаблицы.Номенклатура;
СтрокаТЧ.Сумма = СтрокаТаблицы.Сумма;
СуммаПоТекущейТЧ = СуммаПоТекущейТЧ + СтрокаТаблицы.Сумма;
КонецЦикла;
Показать
Если могут быть строки заказов, сами по себе превышающие предел по сумме, то проще всего разбить такие строки заранее на несколько строк, вписывающихся в предел. Если появятся дополнительные условия, то задачка может превратиться в полноценную задачу комбинаторной оптимизации. Т.н. "задачу рюкзака". Так и гуглишь "задача о рюкзаке" или "задача о ранце".
Хотя, если подумать, такой подход я тоже нередко юзаю в комбинации с таким (пусть не сильно оптимальным, зато наглядным):
Для Каждого Критерий Из ПолучитьМассивБезДублей(ИсходнаяТаблица.ВыгрузитьКолонку("Критерий")) Цикл
ТаблицаКритерия = ИсходнаяТаблица.Скопировать(Новый Структура("Критерий", Критерий));
....
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот