Добрий вечір. Створив запрос для отримання залишку товарів по складу на зараз. 1С 77. Торгівля + склад дороблена.
Виводиться товар по складу із НЕНУЛЬОВИМИ ЗАЛИШКАМИ. Будь ласка підкажітть як вивести весь товар по складу (щоб були і нульові залишки але тільки по вибраному складу?)
В 1с створив новий документ ЗаказНаряд.... все працює... А із запросами чогось не виходить. Колись пропустив цю тему при вивченні 1С....
Процедура ВивЗал()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Обрабатывать НеПомеченныеНаУдаление;
|Фирма = Регистр.ОстаткиТоваров.Фирма;
|ФлагУчета=Регистр.ОстаткиТоваров.ФлагУчета;
|Товар = Регистр.ОстаткиТоваров.Товар.Наименование;
|Скл = Регистр.ОстаткиТоваров.Склад;
|ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара;
|Функция КонОст1 = КонОст(ОстатокТовара) когда((Скл = спрСклад.ТекущийЭлемент()) и (Фирма = спрФирма.ТекущийЭлемент()));
|Группировка Товар;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
//Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл //Необходимо что бы в отчёт не лезли названия категорий и подкатегорий. Только товар
// Заполнение полей Товар
Таб.ВывестиСекцию("Товар");
// Сообщить(Запрос.Товар);
КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
//*******************************************
Процедура Сформировать()
Перем ИндСкл;
Запр = СоздатьОбъект("Запрос");
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
ТекстЗапр = "";
Заг = "";
Заг1 = "";
Заг2 = "";
ПозицияОтчета = ДатаПо;
ТекстЗапр = "
|Период с ДатаС по ДатаПо;
|Фир = Регистр.Остатки.Фирма;
|Скл = Регистр.Остатки.МестоХранения;
|ТМЦ = Регистр.Остатки.ТМЦ;
|УчЦена = Регистр.Остатки.ТМЦ.УчетнаяЦена;
|Кво = Регистр.Остатки.ОстатокТовара;
|Условие (Скл.Тип = Перечисление.ТипыМестХранения.Склад);";
Если ПустоеЗначение(выбФирма) = 0 Тогда
ТекстЗапр = ТекстЗапр + "
|Условие (Фир = выбФирма);";
КонецЕсли;
Если ПустоеЗначение(выбСклад) = 0 Тогда
ТекстЗапр = ТекстЗапр + "
|Условие ((Скл в выбСклад) ИЛИ (Скл = выбСклад));";
КонецЕсли;
Если ПустоеЗначение(выбТМЦ) = 0 Тогда
ТекстЗапр = ТекстЗапр + "
|Условие (ТМЦ в выбТМЦ);";
КонецЕсли;
ТекстЗапр = ТекстЗапр + "
|Функция НОКво = НачОст(Кво);
|Функция ПКво = Приход(Кво);
|Функция РКво = Расход(Кво);
|Функция КОКво = КонОст(Кво);
|Группировка Скл Без Групп Упорядочить по Скл.Код;
|Группировка ТМЦ упорядочить по ТМЦ.Код;";
Если ВыбТМЦ.РазмерСписка() = 0 Тогда
Заг1 = Заг1 + "По всім ТМЦ. ";
Иначе
Заг1 = Заг1 + "По ТМЦ зі списку: " + ВыбТМЦ.ВСтрокуСРазделителями() + ". ";
КонецЕсли;
Если ВыбСклад.Выбран() = 0 Тогда
Заг2 = Заг2 + "По всім складам.";
Иначе
Заг2 = Заг2 + "По складу " + ВыбСклад.Наименование + ".";
КонецЕсли;
Если Запр.Выполнить(ТекстЗапр) = 0 Тогда
Возврат;
КонецЕсли;
Таб.ВывестиСекцию("Шапка");
Пока Запр.Группировка("Скл") = 1 Цикл
ИндСкл = 0;
текНом = 0;
Пока Запр.Группировка("ТМЦ") = 1 Цикл
Если Запр.ТМЦ.ЭтоГруппа()=0 Тогда
УчЦена = Запр.ТМЦ.УчетнаяЦена.Получить(ДатаПо);
КвоОст = (Запр.НОКво+Запр.ПКво)-Запр.РКво;
Если КвоОст = 0 Тогда
Если ИндСкл = 0 Тогда
Таб.ВывестиСекцию("Скл");
ИндСкл = 1;
КонецЕсли;
текНом = текНом + 1;
Таб.ВывестиСекцию("ТМЦ");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Таб.Опции(0,0,Таб.ВысотаСекции("Шапка"),0);
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(2,100,,10,5,5,,,,,,);
Таб.Показать("Залишки ТМЦ по складам");
КонецПроцедуры
vovkpro @ Вчера, 22:29
,
Если 0 остаток, его "в регистре не будет" , измените запрос: чтоб делал выборку и по справочнику ( Номенклатура / Товары);
|Товар = Регистр.ОстаткиТоваров.Товар.Наименование,Справочник.Товары.Товар;
СводныйОстаток(<?>,)
Синтаксис:
СводныйОстаток(<Измерен1>,<Измерен2>...,<ИмяРесурса>)
Назначение:
Возвращает значение сводного остатка заданного ресурса регистра.
Параметры:
<Измерен1>,<Измерен2>... - значения измерений регистра;
<ИмяРесурса> - название требуемого ресурса регистра.
denis84 @ Сегодня, 9:24
,
Дякую. Зараз буду пробувати. Мене смущаї тут
Если ПустоеЗначение(выбТМЦ) = 0 Тогда
ТекстЗапр = ТекстЗапр + "
|Условие (ТМЦ в выбТМЦ);";
КонецЕсли;
Если ВыбТМЦ.РазмерСписка() = 0 Тогда
Заг1 = Заг1 + "По всім ТМЦ. ";
vovkpro @ Сегодня, 10:50
,
Можна ченез фокспро або запитом в 1С Вибрати по всій базі по всіх періодах товар який колись був на залишку по цьому складу. Поді пройтися по цьому списку і вибрати залишки на зараз. Якщо товару зараз нема на залишку буде 0....
vovkpro @ Сегодня, 10:50
,
в запросах оператор "в" означає, що по всим ТМЦ буде формуватися
vovkpro @ Сегодня, 10:50
,
Правильно, Вы ж хотите что выводило и 0. Скажем у Вас новый товар который никогда не был в обороте в по этому складу , логично что остаток будет 0.
Что б наверняка используйте функцию СводныйОстаток
Profi_1C77 @ Сегодня, 10:58
,
Скажем у Вас новый товар который никогда не был в обороте в по этому складу
При такому запиті цей товар буде попадати у звіт по кожному складу і показувати залишок 0 ....?
Мені потрібно щоби по кожному складу був ТІЛЬКИ товар який коли небудь (рік тому) був на цьому складі а зараз його немає там І ЗАЛИШКУ 0 ТЕЖ НЕМАЄ В БАЗІ ПО ЦЬОМУ СКЛАДУ ФІЗИЧНО НА ТЕПЕРІШНІЙ ПЕРІОД. Можливо за якийсь ПЕРІОД (місяць) в базі є запис по ньому із залишком 0. А також щоб був товар який є зараз на цьому складу...
vovkpro @ Сегодня, 11:05
,
Тогда, анализируем Все варианты остатка, накидал по - быстрому в конструкторе :
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Фирма = Регистр.ОстаткиТоваров.Фирма;
|Товар = Регистр.ОстаткиТоваров.Товар;
|Склад = Регистр.ОстаткиТоваров.Склад;
|ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара;
|Функция ОстатокТовараНачОст = НачОст(ОстатокТовара);
|Функция ОстатокТовараПриход = Приход(ОстатокТовара);
|Функция ОстатокТовараРасход = Расход(ОстатокТовара);
|Функция ОстатокТовараКонОст = КонОст(ОстатокТовара);
|Группировка Товар;
|Условие(Склад = ВыбСклад);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Товар
Если (Запрос.НачОст<>0) или (Запрос.Приход<>0) или (Запрос.Расход<>0) или (Запрос.КонОст<>0) Тогда
Таб.ВывестиСекцию("Товар");
КонецЕсли;
КонецЦикла;
// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
Profi_1C77 @ Сегодня, 11:17
,
ЦЕ ХОРОША ІДЕЯ !..... Зараз спробую перенести в 1С і запустити...
Profi_1C77 @ Сегодня, 11:02
,
в мене написано запрос під специфіку нашого довідника ТМЦ. Там не важко викинути ті умови, які Вам не підходять і там все працюватиме.
Profi_1C77 @ Сегодня, 11:17
,
Вискочило....
Если (Запрос.НачОст<>0) или (Запрос.Приход<>0) или (Запрос.Расход<>0) или (Запрос.КонОст<>0) Тогда
{Обработка.OstatkiRozprodazhi.Форма.Модуль(188)}: Поле агрегатного объекта не обнаружено (НачОст)
Вже побачив зараз виправлю
vovkpro @ Сегодня, 11:35
,
Ніби працює... Дуже Вам Дякую. Зараз піду до бухів. Хай Глянуть чи їм підходить.... Можливо ще прийдеться вивести ціну у гривні...
Profi_1C77 @ Сегодня, 11:59
,
Дякую Вам Ще раз. Також Дякую всім хто допомагав.
Profi_1C77, Profi_1C77,
Вибачте, що турбую.... Можна ще в запросі зробити так щоби спочатку виводились лінійки товару потім лінійки його підпапок і потім лінійки головних папок товару...
Під час такого виводу я зможу вибрати із довідника цін Закупочну, помножити її на залишок і отримати вартість товару на складі по цій ціні. Потім просумувати по підпапці і потім по головній папці.
vovkpro @ Сегодня, 15:21
,
https://pro1c.org.ua/redirect.php?https://fex.net/uk/s/3mb7d1a
Да, насколько проще все это делать прямыми запросами. Если есть желание, учите, проще писать запросы и работает на порядок быстрее
tibank @ Вчера, 21:54
,
Замість запросів у мене є багато звітів на фокспро якщо мова йде про великі обєми інформаціїї. Фокспро в десятки разів скоріше працює із таблицями .dbf В яких 1С 7 зберігає свої дані. Особливо коли в базі велика кількість документів і сама по собі база виростає протягом року.
Також на фокспро я кожного року обрізаю базу із декількох гігабайт до 400 мегабайт.... (обрізка відбувається протягом 30 хвилин) Єдине що в 1с кращий інтерфейс у звітах...
vovkpro @ Сегодня, 10:35
,
Доробив через вигрузку у тз. Дещо криво але працює. Папки і підпапки сумуються по вартості товару. Звіт використовується не часто. Всім хто допомагав дякую.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua