Здравствуйте, я начинающий программист в 1С. Версия, с которой приходится работать сейчас - 8.1.15.14. "Управление торговлей для Украины", редакция 2.3. Разработка конфигурации: "ABBYY Ukraine", 2003-2008 (2.3.3.4)
Нужно написать достаточно сложный отчет и выгрузить это в эксель. Просто СКД сама не справится с необходимой кастомизацией, да и выгрузка нужна, поэтому пишу вручную через Запрос = Новый Запрос
Вопрос заключается в следующем: мне нужно помимо всего - отобрать остатки по всем складам номенклатуры и все категории к каждой (у одной номенклатуры много складов и много категорий). Если я делаю это в СКД, то через детальные записи я могу создать своеобразную вложенность так сказать, чтобы группировало и не дублировало записи, в обычном же запросе я не понимаю, возможно ли это? Подскажите пожалуйста лучший вариант выбора, чтобы в запросе можно было потом всё это дело обойти и выгрузить в эксель? Спасибо за ваше внимание заранее.
есть в запросах такая конструкция ИТОГИ...ПО...
прописываете агрегатные функции для полей и поля группирования
получаете выборку и обходите результат запроса по группировкам
смотрите Выбрать(...) для результата запроса
sava1 @ Сегодня, 10:16
,
Спасибо вам большое за ответ! Ознакомился с вашим предложением и это действительно то, что нужно! Я решил отдельно потренироваться на более простом запросе, прежде чем вернусь в сложный отчет.
Я решил выбрать для каждого кода номенклатуры каждый склад с остатком и категориями и обойти их по группировкам:
Запрос = Новый Запрос("ВЫБРАТЬ
| КатегорииОбъектов.Объект.Код КАК ОбъектКод,
| КатегорииОбъектов.Категория.Наименование КАК КатегорияНаименование,
| ПартииТоваровНаСкладахОстатки.Склад.Наименование КАК СкладНаименование,
| ПартииТоваровНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.Остатки КАК ПартииТоваровНаСкладахОстатки
| ПО (ПартииТоваровНаСкладахОстатки.Номенклатура = КатегорииОбъектов.Объект)
|
|СГРУППИРОВАТЬ ПО
| КатегорииОбъектов.Объект.Код,
| КатегорииОбъектов.Категория.Наименование,
| ПартииТоваровНаСкладахОстатки.Склад.Наименование,
| ПартииТоваровНаСкладахОстатки.КоличествоОстаток
|ИТОГИ
| КОЛИЧЕСТВО(ОбъектКод),
| КОЛИЧЕСТВО(КатегорияНаименование),
| КОЛИЧЕСТВО(СкладНаименование),
| СУММА(КоличествоОстаток)
|ПО
| ОбъектКод");
Результат = Запрос.Выполнить();
ВыборкаПервогоУровня = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПервогоУровня.Следующий() цикл
ВыборкаВторогоУровня = ВыборкаПервогоУровня.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаВторогоУровня.Следующий() цикл
читаю_дебаггер = Истина;
КонецЦикла;
КонецЦикла;
helluinn @ Вчера, 16:12
,
так логика работы/обхода данных такая. Как по другому?
sava1 @ Сегодня, 10:13
,
Понял, я думал, что оно как-то одновременно будет обходить, меняя и склад с количеством и категорию. А если категорий больше, чем складов, то повторит несколько раз эти значения прошлые. Ну если так всё и задумано, то тогда спасибо вам большое, буду парсить это, досрочно прерывая цикл, чтобы не ждать прохода для каждой категории. Очень благодарен!
Пока ВыборкаВторогоУровня.Следующий() цикл
Vofka @ Сегодня, 11:59
,
Категории никак не связаны со складами. У номенклатуры просто есть категории и просто есть склады. Нет такого, что у склада свои категории или у категории свои склады.
Сейчас оно просто проходит по каждой категории и пишет "Склад1" - 2 шт, "Склад2" - 3 шт, "Склад3" - 4 шт. Всё, склады закончились. Оно берёт следующую категорию уже и давай опять то же самое мне: "Склад1" - 2 шт, "Склад2" - 3 шт, , "Склад3" - 4 шт. - это я уже и понял
Прерывать цикл, чтобы просто листать категории, а не ждать, пока оно мне все склады опять перечислит, одно и то же же выводит. Вот что я имел ввиду под прерывать.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua