Добрый день товарищи форума, прошу поделится мудростью. Стоит задача: седлать выборку состоящую из: Артикул, Наименование товара, ШтрихКод, актуальная цена, и остаток на складах 1,2,3. Собсно в чём вопрос как правильно дописать запрос к остаткам так как склад 1 и 2 относятся к одной фирме а склад 3 к другой. Как правильно сделать запрос? Я так понимаю запрос к складам должен быть привязан к фирмам но как ума не приложу так как это не моё направление приходится учится методом проб и ошибок. Спасибо заранее за советы. 1с 7,7 Торговля и склад для Украины 7,70,048
ТекстЗапр = " |Период с ДатаС по ДатаПо;"; |ФирмаО = Регистр.Остатки.Фирма; |Скл = Регистр.Остатки.МестоХранения; |ТМЦ = Регистр.Остатки.ТМЦ; |УчЦена = Регистр.Остатки.ТМЦ.УчетнаяЦена; |Док = Регистр.Остатки.ТекущийДокумент; |Кво = Регистр.Остатки.ОстатокТовара; |Условие (Фир в выбФирма); // якщо пусто, то всим фірмам |Условие (Скл в выбСклад); |Условие (ТМЦ в выбТМЦ); |Группировка ФирмаО; |Группировка Скл без групп; |Группировка ТМЦ упорядочить по ТМЦ.Код; |Функция НОКво = НачОст(Кво); |Функция КОКво = КонОст(Кво); |Функция ПКво = Приход(Кво); |Функция РКво = Расход(Кво); |"; Если Запр.Выполнить(ТекстЗапр) = 0 Тогда Возврат; КонецЕсли;
Таб.ВывестиСекцию("Шапка");
Пока Запр.Группировка("ФирмаО") = 1 Цикл Таб.ВывестиСекцию("Фирма"); Пока Запр.Группировка("Скл") = 1 Цикл Таб.ВывестиСекцию("Склад"); Пока Запр.Группировка("ТМЦ") = 1 Цикл Таб.ВывестиСекцию("ТМЦ"); КонецЦикла; КонецЦикла; КонецЦикла; Таб.Показать();
Сообщение отредактировал denis84 - 25.07.24, 15:49
Profi_1C77 @ Сегодня, 9:43
, Спасибо за вариант но тут свои пара вопросов. Регистр.Остатки.Фирма; Регистр.Остатки.МестоХранения в регистре Остатки не существует, есть только в регистре ОстаткиТоваров и ито не места хранения а Склад. А с ТМЦ = Регистр.Остатки.ТМЦ; вообще вопросы так как в базе такого вообще нет или есть но под другим названием. Меня ещё путает что в Регистры.Остатки там ОстаткиТовара а в просто Регистры.Остатки там количество. Буду благодарен за объяснение.
|Функция ОстатокСклад1 = КонОст(Кво) когда ( Скл = Склад1); |Функция ОстатокСклад2 = КонОст(Кво) когда ( Скл = Склад2);
и тд множественное, Фирма1 + Склад1 ( по фирме и складу остаток)
// тут возможно после Когда надо использвать () для всего условия, точно не скажу |Функция ОстатокСклад1Ф1 = КонОст(Кво) когда ( Скл = Склад1) и (ФирмаО = Фирма1);
и тд множественное, Фирма1 + Склад1 ( по фирме и складу остаток)
// тут возможно после Когда надо использвать () для всего условия, точно не скажу |Функция ОстатокСклад1Ф1 = КонОст(Кво) когда ( Скл = Склад1) и (ФирмаО = Фирма1);
Спасибо это помогло! Да там надо после когда ставить () если больше чем 1 условие. Пришлось помудрить но в итоге всё вышло) Единственное что пришлось добавить артикул как условие группировки иначе в отчёт тянуло название категорий и под категории
Тему можно закрывать вопрос решился. Спасибо участникам форума что не отказываете в помощи новичкам в сией пыт.. то есть прекрасной системе 1с 7.7. Оставляю нуждающимся как скелет для своих наработок мало ли кому то пригодится либо натолкнет на свои мысли.
Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Обрабатывать НеПомеченныеНаУдаление; |Скл = Регистр.ОстаткиТоваров.Склад; |Фирма = Регистр.ОстаткиТоваров.Фирма; |Товар = Регистр.ОстаткиТоваров.Товар.Наименование; |Артикул = Регистр.ОстаткиТоваров.Товар.Артикул; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция КонОст1 = КонОст(ОстатокТовара) когда((Скл.Наименование = ""Название вашего склада"") и (Фирма.Наименование = ""Название вашей фирмы"")); |Функция КонОст2 = КонОст(ОстатокТовара) когда((Скл.Наименование = ""Название вашего склада"") и (Фирма.Наименование = ""Название вашей фирмы"")); |Функция КонОст3 = КонОст(ОстатокТовара) когда((Скл.Наименование = ""Название вашего склада"") и (Фирма.Наименование = ""Название вашей фирмы"")); |Группировка Артикул без упорядочивания; |Группировка Товар упорядочить по КонОст1, КонОст2, КонОст3; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл //Необходимо что бы в отчёт не лезли названия категорий и подкатегорий. Только товар Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей Товар Таб.ВывестиСекцию("Товар"); КонецЦикла; КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры
Группа: Пользователи
Сообщений: 39
Спасибо сказали: 13 раз
Рейтинг: 13
kayfatuch @ 16.08.24, 12:42
,
|Обрабатывать НеПомеченныеНаУдаление;
это лишнее. У Вас регистр, а регистр обычно пишется если документ в статусе проведен; (т.е там только проведенные), кроме этого если б это был нерегистр а просто выборка документов то по этому условию туда в попали документы сохраненные + проведенные
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!