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