Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 11:44

Выбрать последние записи исходя из количества

Автор skillful, 05 мая 2021, 19:42

0 Пользователей и 1 гость просматривают эту тему.

skillful

Добрый день. Как можно сделать следующее?

Например в БД есть документ "Приход". Созданы пару таких документов.
Код    Дата          Колво
001    01.05.2021    1
002    02.05.2021    2
003    03.05.2021    3
004    04.05.2021    4
005    05.05.2021    10
006    06.05.2021    6
007    07.05.2021    7


Выберем число 10. Нужно запросом или кодом 1С выбрать все последние документы в сумме столбца "Колво" которых будет равно или больше 10.
Примеры:
Для колво = 10 это будут записи 007 и 006
Для колво = 7  это будет запись 007
Для колво = 2  это будет запись 007
Для колво = 15 это будут записи 007 и 006 и 005
Для колво = 13 это будут записи 007 и 006

И т. д. Могу сделать пустую БД для экспериментов. Сам не пойму как сделать такое.

nvj84

Как то так (делал в демо базе поэтому замените на свой документ).

Функция ПолучитьСсылкиРавныеИлиБольшиеЧислу(Число)
Результат = Новый Структура("Статус, МассивСсылок");
Найдено = Ложь;
СчетчикНакопитель = 0;
МассивСсылок = Новый Массив;
Выборка = Документы._ДемоЗаказПокупателя.Выбрать(,,,"Дата Убыв");
Пока Выборка.Следующий() И Не Найдено Цикл
СчетчикНакопитель = СчетчикНакопитель + Выборка.СуммаДокумента;
Если СчетчикНакопитель < Число Тогда
//Добавляем
МассивСсылок.Добавить(Выборка.Ссылка);
ИначеЕсли СчетчикНакопитель = Число Тогда
//Добавляем и результат достигнут
МассивСсылок.Добавить(Выборка.Ссылка);
Статус = СтрШаблон("Достигнут результат по полному совпадению с числом %1, всего добавлено %2 ссылок в массив", Число, МассивСсылок.Количество());
Найдено = Истина;
ИначеЕсли СчетчикНакопитель > Число Тогда
//Добавляем и результат достигнут
МассивСсылок.Добавить(Выборка.Ссылка);
Статус = СтрШаблон("Достигнут результат по превышению числа %1, всего добавлено %2 ссылок в массив", Число, МассивСсылок.Количество());
Найдено = Истина;
КонецЕсли;
КонецЦикла;
Если Не Найдено Тогда
Статус = СтрШаблон("Результат не был достигнут. В результат добавлены все ссылки в количестве %1, их сумма составляет %2 что меньше числа %3",МассивСсылок.Количество(), СчетчикНакопитель, Число);
КонецЕсли;
Результат.Статус = Статус;
Результат.МассивСсылок = МассивСсылок;
Возврат Результат;
КонецФункции

skillful


antoneus


skillful


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск