Здравствуйте. 1с 8.3 обычные формы. подскажите пожалуйста как вытащить данные остатков принадлежащих самой нижней группе номенклатуры. группы хранятся в регистре сведений непериодическом, не подчиненном.Есть регистр в котором хранятся группы номенклатуры по которым должен соблюдаться минимальный товарный запас (измеренения группаНоменклатуры и Склад, реквизит минимальный товарный запас и есть регистр ТоварыНаСкладе.Остатки. надо выбрать остатки по определненному складу. и этим товарам надо проставить количество минимального товарного запаса соответственно группе в которой лежит этот товар, в случае пересечения групп, запас выбираеся из самой нижней группы(если у группы запас 3 единицы, у товара должно быть 3 единицы, подскажите пожалуйста как реализовать.
ничего не могу придумать запросом не получается. Номенклатура.ПринадлежитЭлементуГруппы);//так определяет соответственно все группы до верхней. не могу никак придумат как реализовать. помогите пожалуйста.
заранее благодарен
.
как жаль, что не осталось на этом форуме отзывчивых людей, помочь никто не может
lolmatrix @ Сегодня, 9:09
,
сначала нормально сформулируйте вопрос.
я столько буков осилить не смог
Запрос2 = Новый Запрос;
Запрос2.Текст = "ВЫБРАТЬ
| ОстаткиОтправителя.Номенклатура
|ПОМЕСТИТЬ ВТ_ОстаткиОтправителя
|ИЗ
| &ОстаткиОтправителя КАК ОстаткиОтправителя
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура,
| СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| &ДатаОстатков,
| Номенклатура В
| (ВЫБРАТЬ
| ВТ_ОстаткиОтправителя.Номенклатура
| ИЗ
| ВТ_ОстаткиОтправителя КАК ВТ_ОстаткиОтправителя)
| И Склад = &СкладПолучатель
| И Номенклатура.ЭтоГруппа = ЛОЖЬ) КАК ТоварыНаСкладахОстатки
|ГДЕ
| ТоварыНаСкладахОстатки.КоличествоОстаток > 0
|
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстатки.Номенклатура";
Запрос2.УстановитьПараметр("ДатаОстатков", ДатаОстатков);
Запрос2.УстановитьПараметр("ОстаткиОтправителя", ОстаткиОтправителя);
Запрос2.УстановитьПараметр("СкладПолучатель", Объект.СкладПолучатель);
РезультатЗапроса2 = Запрос2.Выполнить();
ОстаткиПолучателя = РезультатЗапроса2.Выгрузить();
#КонецОбласти
/////////////////////////////////////////////////////////////////////////
Запрос3 = Новый Запрос;
Запрос3.Текст =
"ВЫБРАТЬ
| МО_МинимальныеТоварныеЗапасы.ГруппаНоменклатуры,
| МО_МинимальныеТоварныеЗапасы.Склад,
| МО_МинимальныеТоварныеЗапасы.КоличествоМТЗ,
| МО_МинимальныеТоварныеЗапасы.ПорогМТЗ
|ИЗ
| РегистрСведений.МО_МинимальныеТоварныеЗапасы КАК МО_МинимальныеТоварныеЗапасы";
ТЗСписокМТЗ = Запрос3.Выполнить().Выгрузить();
Для Каждого стрМТЗ Из ТЗСписокМТЗ Цикл
ГруппаТМЗ = СтрМТЗ.ГруппаНоменклатуры;
Для Каждого стрТЗ Из ОстаткиПолучателя Цикл
Товар = стрТЗ.Номенклатура;
Если стрМТЗ.ПорогМТЗ >= стрТЗ.Количество тогда
Если Товар.ПринадлежитЭлементу(стрМТЗ.ГруппаНоменклатуры) Тогда
В цикле вызывайте Уровень() у элемента спр.
Функция ОпределитьУровенНоменклатуры(ГруппаТМЗ)
Выборка = Справочники.Номенклатура.ВыбратьИерархически(ГруппаТМЗ);
Пока Выборка.Следующий() Цикл
Уровень = Выборка.УровеньВВыборке();
КонецЦикла;
Возврат Уровень;
КонецФункции
lolmatrix @ Сегодня, 12:49
,
Посмотрите как определяется счет учета для номенклатуры в УТП напрмер.
alex1c @ Сегодня, 17:40
,
УТП это управление транспортным предприятием?
lolmatrix @ Вчера, 20:13
,
УТП - управление торговым предприятием.
смотрите такое.
СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрокаТЧ.Номенклатура, ?(мУказаниеСкладовВТЧ, СтрокаТЧ.Склад, Склад));
alex1c @ Сегодня, 9:52
,
а есть такая конфигурация? нахожу только управление торговлей
Как и sava1 я тоже не уверен что понял вопрос
Если у вас какие-то группы выполняют определенную функцию (по ним устанавливаются лимиты остатков), а другие группы не выполняют эту функцию, то мне кажется логично добавить реквизит Булево для группы. И дальше смотрим, если этот признак установлен - то именно эти группы нам и нужны. То что такой признак не был добавлен - породило бардак с группами и вы сейчас по сути боретесь с последствиями
Реализация как найти все группы нижнего уровня
Функция ПолучитьВсеГруппыНижнегоУровня()
Результат = новый Массив;
Запрос = новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если ЭтоГруппаНижнегоУровня(Выборка.Ссылка) Тогда
Результат.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ЭтоГруппаНижнегоУровня(Группа)
Запрос = новый Запрос;
Запрос.УстановитьПараметр("Группа", Группа);
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК КоличествоГрупп
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА
| И Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат (Выборка.КоличествоГрупп = 1);
КонецЕсли;
Возврат Ложь;
КонецФункции
Функция ПолучитьВсеГруппыНижнегоУровня()
Результат = новый Массив;
Запрос = новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если ЭтоГруппаНижнегоУровня(Выборка.Ссылка) Тогда
Результат.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ЭтоГруппаНижнегоУровня(Группа)
Запрос = новый Запрос;
Запрос.УстановитьПараметр("Группа", Группа);
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК КоличествоГрупп
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ИСТИНА
| И Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)";
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат (Выборка.КоличествоГрупп = 1);
КонецЕсли;
Возврат Ложь;
КонецФункции
alex1c @ 08.06.22, 9:52
,
Спасибо. это очень похоже на то что мне нужно, только там выбираются вышестоящие группы
Глубина = стрОстатков.Номенклатура.ПолныйКод();
lolmatrix @ 13.06.22, 15:01
,
ZAY
ваш запрос почему-то выбирает не все нижние группы
lolmatrix @ 17.06.22, 10:02
,
Такая функция вернет родителя- группу самого верхнего уровня, но зная глубину можно задать произвольное количество итераций
Функция РодительВерхнегоУровня(Номенклатура.Ссылка);
Если Не ЗначениеЗаполнено(Номенклатура.Ссылка.Родитель) Тогда
Возврат Номенклатура.Ссылка;
Иначе
Возврат РодительВерхнегоУровня(Номенклатура.Ссылка.Родитель);
КонецЕсли;
КонецФункции
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Группа")
ТЗ.Колонки.Добавить("НужнаяГруппа")
Для Каждого Элемент из Номенклатура Цикл
Если Элемент.ЭтоГруппа Тогда
НоваяСтрока =ТЗ.Добавить();
НоваяСтрока.Группа = Элемент;
НоавяСтрока.НужныйРодитель = РодительВерхнегоУровня(Элемент.Ссылка);
КонецЕсли;
КонецЦикла;
Функция РодительВерхнегоУровня(Номенклатура.Ссылка);
Если Не ЗначениеЗаполнено(Номенклатура.Ссылка.Родитель) Тогда
Возврат Номенклатура.Ссылка;
Иначе
Возврат РодительВерхнегоУровня(Номенклатура.Ссылка.Родитель);
КонецЕсли;
КонецФункции
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Группа")
ТЗ.Колонки.Добавить("НужнаяГруппа")
Для Каждого Элемент из Номенклатура Цикл
Если Элемент.ЭтоГруппа Тогда
НоваяСтрока =ТЗ.Добавить();
НоваяСтрока.Группа = Элемент;
НоавяСтрока.НужныйРодитель = РодительВерхнегоУровня(Элемент.Ссылка);
КонецЕсли;
КонецЦикла;
lolmatrix @ Сегодня, 9:17
,
Насколько понял есть справочник номенклатуры иерархия, регистр остатков с измерением Номенклатура.Группа, есть необходимость выделить определенную номенклатуру в зависимости от уровня вложения(принадлежности к той или иной группе номенклатуры), с последующей обработкой/анализом на наличие остатков на складе при формировании движений. Когда- то делал что -то подобное вот и писнул по памяти . Через код, как мне кажеться, можно получить таблицу значений в которой номенклатура будет сопоставлена с "нужная группой" в иерархии. А поле родитель - стандартное поле, указывающее на группу, к которой относиться элемент, или не о том вопрос.
Вопрос на который отвечал видел здесь
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua