Добрий вечір. Створив запрос для отримання залишку товарів по складу на зараз. 1С 77. Торгівля + склад дороблена.
Виводиться товар по складу із НЕНУЛЬОВИМИ ЗАЛИШКАМИ. Будь ласка підкажітть як вивести весь товар по складу (щоб були і нульові залишки але тільки по вибраному складу?)
В 1с створив новий документ ЗаказНаряд.... все працює... А із запросами чогось не виходить. Колись пропустив цю тему при вивченні 1С....
Процедура ВивЗал()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Обрабатывать НеПомеченныеНаУдаление;
|Фирма = Регистр.ОстаткиТоваров.Фирма;
|ФлагУчета=Регистр.ОстаткиТоваров.ФлагУчета;
|Товар = Регистр.ОстаткиТоваров.Товар.Наименование;
|Скл = Регистр.ОстаткиТоваров.Склад;
|ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара;
|Функция КонОст1 = КонОст(ОстатокТовара) когда((Скл = спрСклад.ТекущийЭлемент()) и (Фирма = спрФирма.ТекущийЭлемент()));
|Группировка Товар;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
//Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл //Необходимо что бы в отчёт не лезли названия категорий и подкатегорий. Только товар
// Заполнение полей Товар
Таб.ВывестиСекцию("Товар");
// Сообщить(Запрос.Товар);
КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
vovkpro @ Вчера, 22:29
необходимо зарегистрироваться для просмотра ссылки
,
//*******************************************
Процедура Сформировать()
Перем ИндСкл;
Запр = СоздатьОбъект("Запрос");
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
ТекстЗапр = "";
Заг = "";
Заг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,,,,,,);
Таб.Показать("Залишки ТМЦ по складам");
КонецПроцедуры
щось типу такого колись писав. Спробуйте!
Profi_1C77
26.11.24, 10:28
vovkpro @ Вчера, 22:29
необходимо зарегистрироваться для просмотра ссылки
,
Если 0 остаток, его "в регистре не будет" , измените запрос: чтоб делал выборку и по справочнику ( Номенклатура / Товары);
|Товар = Регистр.ОстаткиТоваров.Товар.Наименование,Справочник.Товары.Товар;
Вроде так.
Или как Вариант 2:
Делайте перебор всего справочника, и при выводе строки отчета используйте
СводныйОстаток(<?>,)
Синтаксис:
СводныйОстаток(<Измерен1>,<Измерен2>...,<ИмяРесурса>)
Назначение:
Возвращает значение сводного остатка заданного ресурса регистра.
Параметры:
<Измерен1>,<Измерен2>... - значения измерений регистра;
<ИмяРесурса> - название требуемого ресурса регистра.
denis84 @ Сегодня, 9:24
необходимо зарегистрироваться для просмотра ссылки
,
Дякую. Зараз буду пробувати. Мене смущаї тут
Если ПустоеЗначение(выбТМЦ) = 0 Тогда
ТекстЗапр = ТекстЗапр + "
|Условие (ТМЦ в выбТМЦ);";
КонецЕсли;
выбТМЦ- це наперед вибраний список товару....? Я не можу наперед вибрати товар...
і ще тут
Если ВыбТМЦ.РазмерСписка() = 0 Тогда
Заг1 = Заг1 + "По всім ТМЦ. ";
Де і Як Змінна Заг1 використовується.... тут вона тільки визначається...
Дякую
Profi_1C77 @ Сегодня, 10:28
необходимо зарегистрироваться для просмотра ссылки
,
Дякую за відповідь.
На мою думку при таких запитах буде виводитись весь товар із довідника Номенклатура. Тобто той якого ніколи не було по цьому складу. Хоч він був і може бути зараз на іншому складі.
Мене цікавить вибірка по одному конкретно вибраному сладу. Щоб вивод нульові залишки і не нульові. Думаю такий звіт неможливо зробити..... 1С не тримає (регіст залишки товарів) таблиця (Ra123.dbf- зміна залишків при провед доків) або (Rg123.dbf - зал по періодах (місяцях)). Коли відбувається відкриття наступного місяця. То лінійки дбф з товаром складом і фірмою не переносяться на наступний місяць якщо залиш = 0...
Profi_1C77
26.11.24, 10:54
vovkpro @ Сегодня, 10:39
необходимо зарегистрироваться для просмотра ссылки
,
Цитата(vovkpro @ 26.11.24, 10:39) необходимо зарегистрироваться для просмотра ссылки
выбТМЦ- це наперед вибраний список товару....? Я не можу наперед вибрати товар...
і ще тут
Если список пустой, должен быть в модуле как СписокЗначений, то условие отбора не выполнится, т.е будут все элементы;
Цитата(vovkpro @ 26.11.24, 10:39) необходимо зарегистрироваться для просмотра ссылки
Если ВыбТМЦ.РазмерСписка() = 0 Тогда
Заг1 = Заг1 + "По всім ТМЦ. ";
Заг1 = Переменная для вывода в В Заголовке/ Шапке отчета фильтра товаров;
vovkpro @ Сегодня, 10:50 необходимо зарегистрироваться для просмотра ссылки
,
Можна ченез фокспро або запитом в 1С Вибрати по всій базі по всіх періодах товар який колись був на залишку по цьому складу. Поді пройтися по цьому списку і вибрати залишки на зараз. Якщо товару зараз нема на залишку буде 0....
vovkpro @ Сегодня, 10:50 необходимо зарегистрироваться для просмотра ссылки
,
в запросах оператор "в" означає, що по всим ТМЦ буде формуватися
Profi_1C77
26.11.24, 11:02
vovkpro @ Сегодня, 10:50
необходимо зарегистрироваться для просмотра ссылки
,
Правильно, Вы ж хотите что выводило и 0. Скажем у Вас новый товар который никогда не был в обороте в по этому складу , логично что остаток будет 0.
Что б наверняка используйте функцию СводныйОстаток
Цитата(denis84 @ 26.11.24, 10:57) необходимо зарегистрироваться для просмотра ссылки
в запросах оператор "в" означає, що по всим ТМЦ буде формуватися
Верно, но если Список пустой ( там стоит условие)
Цитата(vovkpro @ 26.11.24, 10:50) необходимо зарегистрироваться для просмотра ссылки
Если ПустоеЗначение(выбТМЦ) = 0 Тогда
Отбора по списку не будет.
Profi_1C77 @ Сегодня, 10:58 необходимо зарегистрироваться для просмотра ссылки
,
Скажем у Вас новый товар который никогда не был в обороте в по этому складу
При такому запиті цей товар буде попадати у звіт по кожному складу і показувати залишок 0 ....?
Мені потрібно щоби по кожному складу був ТІЛЬКИ товар який коли небудь (рік тому) був на цьому складі а зараз його немає там І ЗАЛИШКУ 0 ТЕЖ НЕМАЄ В БАЗІ ПО ЦЬОМУ СКЛАДУ ФІЗИЧНО НА ТЕПЕРІШНІЙ ПЕРІОД. Можливо за якийсь ПЕРІОД (місяць) в базі є запис по ньому із залишком 0. А також щоб був товар який є зараз на цьому складу...
Profi_1C77
26.11.24, 11:17
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
26.11.24, 11:27
Цитата(Profi_1C77 @ 26.11.24, 11:17) необходимо зарегистрироваться для просмотра ссылки
Если (Запрос.НачОст<>0) или (Запрос.Приход<>0) или (Запрос.Расход<>0) или (Запрос.КонОст<>0) Тогда
Там ошибка - должно быть : Запрос.ОстатокТовараНачОст , Запрос.ОстатокТовараПриход .....
Profi_1C77 @ Сегодня, 11:17 необходимо зарегистрироваться для просмотра ссылки
,
Вискочило....
Если (Запрос.НачОст<>0) или (Запрос.Приход<>0) или (Запрос.Расход<>0) или (Запрос.КонОст<>0) Тогда
{Обработка.OstatkiRozprodazhi.Форма.Модуль(188)}: Поле агрегатного объекта не обнаружено (НачОст)
Вже побачив зараз виправлю
vovkpro @ Сегодня, 11:35 необходимо зарегистрироваться для просмотра ссылки
,
Ніби працює... Дуже Вам Дякую. Зараз піду до бухів. Хай Глянуть чи їм підходить.... Можливо ще прийдеться вивести ціну у гривні...
Profi_1C77
26.11.24, 11:59
Цитата(vovkpro @ 26.11.24, 11:53) необходимо зарегистрироваться для просмотра ссылки
Ніби працює... Дуже Вам Дякую
Спасибо/ Дякую там кнопка есть )
Profi_1C77 @ Сегодня, 11:59 необходимо зарегистрироваться для просмотра ссылки
,
Дякую Вам Ще раз. Також Дякую всім хто допомагав.
Profi_1C77, Profi_1C77,
Вибачте, що турбую.... Можна ще в запросі зробити так щоби спочатку виводились лінійки товару потім лінійки його підпапок і потім лінійки головних папок товару...
Під час такого виводу я зможу вибрати із довідника цін Закупочну, помножити її на залишок і отримати вартість товару на складі по цій ціні. Потім просумувати по підпапці і потім по головній папці.
vovkpro @ Сегодня, 15:21 необходимо зарегистрироваться для просмотра ссылки
,
необходимо зарегистрироваться для просмотра ссылки
Да, насколько проще все это делать прямыми запросами. Если есть желание, учите, проще писать запросы и работает на порядок быстрее
tibank @ Вчера, 21:54 необходимо зарегистрироваться для просмотра ссылки
,
Замість запросів у мене є багато звітів на фокспро якщо мова йде про великі обєми інформаціїї. Фокспро в десятки разів скоріше працює із таблицями .dbf В яких 1С 7 зберігає свої дані. Особливо коли в базі велика кількість документів і сама по собі база виростає протягом року.
Також на фокспро я кожного року обрізаю базу із декількох гігабайт до 400 мегабайт.... (обрізка відбувається протягом 30 хвилин) Єдине що в 1с кращий інтерфейс у звітах...
vovkpro @ Сегодня, 10:35 необходимо зарегистрироваться для просмотра ссылки
,
Доробив через вигрузку у тз. Дещо криво але працює. Папки і підпапки сумуються по вартості товару. Звіт використовується не часто. Всім хто допомагав дякую.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.