Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> как опредилить уровень группы 2 страниц V   1 2 >          
lolmatrix Подменю пользователя
сообщение 04.06.22, 20:31
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

Здравствуйте. 1с 8.3 обычные формы. подскажите пожалуйста как вытащить данные остатков принадлежащих самой нижней группе номенклатуры. группы хранятся в регистре сведений непериодическом, не подчиненном.Есть регистр в котором хранятся группы номенклатуры по которым должен соблюдаться минимальный товарный запас (измеренения группаНоменклатуры и Склад, реквизит минимальный товарный запас и есть регистр ТоварыНаСкладе.Остатки. надо выбрать остатки по определненному складу. и этим товарам надо проставить количество минимального товарного запаса соответственно группе в которой лежит этот товар, в случае пересечения групп, запас выбираеся из самой нижней группы(если у группы запас 3 единицы, у товара должно быть 3 единицы, подскажите пожалуйста как реализовать.
ничего не могу придумать запросом не получается. Номенклатура.ПринадлежитЭлементуГруппы);//так определяет соответственно все группы до верхней. не могу никак придумат как реализовать. помогите пожалуйста.
заранее благодарен
.

lolmatrix Подменю пользователя
сообщение 07.06.22, 8:09
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

как жаль, что не осталось на этом форуме отзывчивых людей, помочь никто не может

sava1 Подменю пользователя
сообщение 07.06.22, 8:44
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

lolmatrix @ Сегодня, 9:09 * ,
сначала нормально сформулируйте вопрос.
я столько буков осилить не смог

lolmatrix Подменю пользователя
сообщение 07.06.22, 9:52
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

Цитата(sava1 @ 07.06.22, 9:44) *
lolmatrix @ Сегодня, 9:09 * ,
сначала нормально сформулируйте вопрос.
я столько буков осилить не смог


вопрос в том как получить уровни иерархии номенклатуры которую я выгружаю запросом в таблицу значений, а родители этой номенклатуры в регистре с ресурсом минимальный товарный остаток,
в выгруженную номенклатуру надо добавить этот ресур взяв его из самой нижней группы, не могу придумать как определить принадлежность к группе из второго регистра сведений

lolmatrix @ Сегодня, 10:49 * ,
примерно так получаю
Запрос2 = Новый Запрос;
    Запрос2.Текст = "ВЫБРАТЬ
                    |    ОстаткиОтправителя.Номенклатура
                    |ПОМЕСТИТЬ ВТ_ОстаткиОтправителя
                    |ИЗ
                    |    &ОстаткиОтправителя КАК ОстаткиОтправителя
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    ТоварыНаСкладахОстатки.Номенклатура,
                    |    СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК Количество
                    |ИЗ
                    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
                    |            &ДатаОстатков,
                    |            Номенклатура В
                    |                    (ВЫБРАТЬ
                    |                        ВТ_ОстаткиОтправителя.Номенклатура
                    |                    ИЗ
                    |                        ВТ_ОстаткиОтправителя КАК ВТ_ОстаткиОтправителя)
                    |                И Склад = &СкладПолучатель
                    |                И Номенклатура.ЭтоГруппа = ЛОЖЬ) КАК ТоварыНаСкладахОстатки
                    |ГДЕ
                    |    ТоварыНаСкладахОстатки.КоличествоОстаток > 0
                    |
                    |СГРУППИРОВАТЬ ПО
                    |    ТоварыНаСкладахОстатки.Номенклатура";
    Запрос2.УстановитьПараметр("ДатаОстатков", ДатаОстатков);
    Запрос2.УстановитьПараметр("ОстаткиОтправителя", ОстаткиОтправителя);
    Запрос2.УстановитьПараметр("СкладПолучатель", Объект.СкладПолучатель);
    РезультатЗапроса2 = Запрос2.Выполнить();
    ОстаткиПолучателя = РезультатЗапроса2.Выгрузить();

    
    #КонецОбласти
    
    /////////////////////////////////////////////////////////////////////////    
    Запрос3 = Новый Запрос;
    Запрос3.Текст =
    "ВЫБРАТЬ
    |    МО_МинимальныеТоварныеЗапасы.ГруппаНоменклатуры,
    |    МО_МинимальныеТоварныеЗапасы.Склад,
    |    МО_МинимальныеТоварныеЗапасы.КоличествоМТЗ,
    |    МО_МинимальныеТоварныеЗапасы.ПорогМТЗ
    |ИЗ
    |    РегистрСведений.МО_МинимальныеТоварныеЗапасы КАК МО_МинимальныеТоварныеЗапасы";
    
    ТЗСписокМТЗ = Запрос3.Выполнить().Выгрузить();
Для Каждого стрМТЗ Из ТЗСписокМТЗ Цикл
    ГруппаТМЗ = СтрМТЗ.ГруппаНоменклатуры;
    Для Каждого стрТЗ Из ОстаткиПолучателя Цикл
    Товар = стрТЗ.Номенклатура;
    
    Если стрМТЗ.ПорогМТЗ >= стрТЗ.Количество тогда
        Если   Товар.ПринадлежитЭлементу(стрМТЗ.ГруппаНоменклатуры)  Тогда

alex1c Подменю пользователя
сообщение 07.06.22, 11:43
Сообщение #5

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

В цикле вызывайте Уровень() у элемента спр.

Спасибо сказали: lolmatrix,

lolmatrix Подменю пользователя
сообщение 07.06.22, 12:49
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

Цитата(alex1c @ 07.06.22, 12:43) *
В цикле вызывайте Уровень() у элемента спр.

а как я определю, что у полученной группы есть еще вложенные группы

lolmatrix @ Сегодня, 13:46 * ,
Вы имели ввиду? так?
Функция  ОпределитьУровенНоменклатуры(ГруппаТМЗ)
Выборка = Справочники.Номенклатура.ВыбратьИерархически(ГруппаТМЗ);
Пока Выборка.Следующий() Цикл
    Уровень = Выборка.УровеньВВыборке();
    
КонецЦикла;
Возврат  Уровень;
КонецФункции


alex1c Подменю пользователя
сообщение 07.06.22, 16:40
Сообщение #7

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

lolmatrix @ Сегодня, 12:49 * ,
Посмотрите как определяется счет учета для номенклатуры в УТП напрмер.

Спасибо сказали: lolmatrix,

lolmatrix Подменю пользователя
сообщение 07.06.22, 19:06
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

alex1c @ Сегодня, 17:40 * ,
УТП это управление транспортным предприятием?

lolmatrix Подменю пользователя
сообщение 07.06.22, 20:13
Сообщение #9

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

alex1c @ Сегодня, 17:40 * ,
и если можно подробней, где посмотреть

alex1c Подменю пользователя
сообщение 08.06.22, 8:52
Сообщение #10

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

lolmatrix @ Вчера, 20:13 * ,
УТП - управление торговым предприятием.
смотрите такое.
СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрокаТЧ.Номенклатура, ?(мУказаниеСкладовВТЧ, СтрокаТЧ.Склад, Склад));

Спасибо сказали: lolmatrix,

lolmatrix Подменю пользователя
сообщение 08.06.22, 10:40
Сообщение #11

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

alex1c @ Сегодня, 9:52 * ,
а есть такая конфигурация? нахожу только управление торговлей

zay Подменю пользователя
сообщение 08.06.22, 11:57
Сообщение #12

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 162
Из: Киев
Спасибо сказали: 131 раз
Рейтинг: 135.8

Как и sava1 я тоже не уверен что понял вопрос

Если у вас какие-то группы выполняют определенную функцию (по ним устанавливаются лимиты остатков), а другие группы не выполняют эту функцию, то мне кажется логично добавить реквизит Булево для группы. И дальше смотрим, если этот признак установлен - то именно эти группы нам и нужны. То что такой признак не был добавлен - породило бардак с группами и вы сейчас по сути боретесь с последствиями

Реализация как найти все группы нижнего уровня
Функция ПолучитьВсеГруппыНижнегоУровня()
    
    Результат = новый Массив;
    
    Запрос = новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа = ИСТИНА";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        Если ЭтоГруппаНижнегоУровня(Выборка.Ссылка) Тогда
            
            Результат.Добавить(Выборка.Ссылка);
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

Функция ЭтоГруппаНижнегоУровня(Группа)
    
    Запрос = новый Запрос;
    
    Запрос.УстановитьПараметр("Группа", Группа);
    
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК КоличествоГрупп
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа = ИСТИНА
        |    И Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        
        Возврат (Выборка.КоличествоГрупп = 1);
            
    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции


Спасибо сказали: lolmatrix,

alex1c Подменю пользователя
сообщение 08.06.22, 12:42
Сообщение #13

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

Цитата(lolmatrix @ 08.06.22, 10:40) *
а есть такая конфигурация? нахожу только управление торговлей

А вы где ищете?

lolmatrix Подменю пользователя
сообщение 08.06.22, 13:09
Сообщение #14

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

alex1c @ Сегодня, 13:42 * ,
в интернете конечно же

lolmatrix Подменю пользователя
сообщение 13.06.22, 14:01
Сообщение #15

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

Цитата(zay @ 08.06.22, 12:57) *
Как и sava1 я тоже не уверен что понял вопрос

Если у вас какие-то группы выполняют определенную функцию (по ним устанавливаются лимиты остатков), а другие группы не выполняют эту функцию, то мне кажется логично добавить реквизит Булево для группы. И дальше смотрим, если этот признак установлен - то именно эти группы нам и нужны. То что такой признак не был добавлен - породило бардак с группами и вы сейчас по сути боретесь с последствиями

Реализация как найти все группы нижнего уровня
Функция ПолучитьВсеГруппыНижнегоУровня()
    
    Результат = новый Массив;
    
    Запрос = новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа = ИСТИНА";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        Если ЭтоГруппаНижнегоУровня(Выборка.Ссылка) Тогда
            
            Результат.Добавить(Выборка.Ссылка);
            
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции

Функция ЭтоГруппаНижнегоУровня(Группа)
    
    Запрос = новый Запрос;
    
    Запрос.УстановитьПараметр("Группа", Группа);
    
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК КоличествоГрупп
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа = ИСТИНА
        |    И Номенклатура.Ссылка В ИЕРАРХИИ(&Группа)";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        
        Возврат (Выборка.КоличествоГрупп = 1);
            
    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции


извините, не совсмем понял, ваше предложение, не могли бы подробнее объяснить, насчет добавления реквизита, группы по которым устанавливаются лимиты, хранятся в регистре сведений, как им поможет дополнителный реквизит

lolmatrix Подменю пользователя
сообщение 13.06.22, 15:47
Сообщение #16

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

alex1c @ 08.06.22, 9:52 * ,

Спасибо. это очень похоже на то что мне нужно, только там выбираются вышестоящие группы

lolmatrix Подменю пользователя
сообщение 17.06.22, 9:02
Сообщение #17

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

Цитата(lolmatrix @ 13.06.22, 16:47) *
alex1c @ 08.06.22, 9:52 * ,

Спасибо. это очень похоже на то что мне нужно, только там выбираются вышестоящие группы

спасибо всем большое, нижние группы выбраны. тепрь возник вопрос как организовать выбор из более высоких групп, если нет нижней группы, группы родитедей получаю так
Глубина = стрОстатков.Номенклатура.ПолныйКод();

никак не придумаю как организовать выборку из регистра содержащего лимиты, с учетом, что если нет лмитов в группе на один уровень выше, выбирать лимиты из более высокой группы, опыта в программировани почти нет, есть только теория, спасибо всем за ответы

lolmatrix Подменю пользователя
сообщение 18.06.22, 11:22
Сообщение #18

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

lolmatrix @ 13.06.22, 15:01 * ,

ZAY

ваш запрос почему-то выбирает не все нижние группы

mariorv Подменю пользователя
сообщение 27.06.22, 21:54
Сообщение #19

Молчаливый
*
Группа: Пользователи
Сообщений: 2
Спасибо сказали: 0 раз
Рейтинг: 0

lolmatrix @ 17.06.22, 10:02 * ,
Такая функция вернет родителя- группу самого верхнего уровня, но зная глубину можно задать произвольное количество итераций

Функция  РодительВерхнегоУровня(Номенклатура.Ссылка);
  Если Не ЗначениеЗаполнено(Номенклатура.Ссылка.Родитель) Тогда
     Возврат Номенклатура.Ссылка;
  Иначе
     Возврат РодительВерхнегоУровня(Номенклатура.Ссылка.Родитель);
  КонецЕсли;
КонецФункции


и перебрать значения справочника с заполнением ТЗ
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Группа")
ТЗ.Колонки.Добавить("НужнаяГруппа")
   Для Каждого Элемент из Номенклатура Цикл
        Если  Элемент.ЭтоГруппа Тогда
                        НоваяСтрока =ТЗ.Добавить();
                        НоваяСтрока.Группа     = Элемент;
            НоавяСтрока.НужныйРодитель =  РодительВерхнегоУровня(Элемент.Ссылка);
        КонецЕсли;
    КонецЦикла;


а с полученной ТЗ уже делать что надо, так как там все группы (НИЖЕ выбранного уровня) будет связанна с нужной Группой-родителем

Сообщение отредактировал Vofka - 28.06.22, 8:30

lolmatrix Подменю пользователя
сообщение 29.06.22, 8:17
Сообщение #20

Завсегдатай
****
Группа: Пользователи
Сообщений: 113
Спасибо сказали: 1 раз
Рейтинг: 1

Цитата(mariorv @ 27.06.22, 22:54) *
lolmatrix @ 17.06.22, 10:02 * ,
Такая функция вернет родителя- группу самого верхнего уровня, но зная глубину можно задать произвольное количество итераций

Функция  РодительВерхнегоУровня(Номенклатура.Ссылка);
  Если Не ЗначениеЗаполнено(Номенклатура.Ссылка.Родитель) Тогда
     Возврат Номенклатура.Ссылка;
  Иначе
     Возврат РодительВерхнегоУровня(Номенклатура.Ссылка.Родитель);
  КонецЕсли;
КонецФункции


и перебрать значения справочника с заполнением ТЗ
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Группа")
ТЗ.Колонки.Добавить("НужнаяГруппа")
   Для Каждого Элемент из Номенклатура Цикл
        Если  Элемент.ЭтоГруппа Тогда
                        НоваяСтрока =ТЗ.Добавить();
                        НоваяСтрока.Группа     = Элемент;
            НоавяСтрока.НужныйРодитель =  РодительВерхнегоУровня(Элемент.Ссылка);
        КонецЕсли;
    КонецЦикла;


а с полученной ТЗ уже делать что надо, так как там все группы (НИЖЕ выбранного уровня) будет связанна с нужной Группой-родителем


скажите, Номенклатура.Ссылка.Родитель. в параметре откуда берется не совсем понял логику этого кода откуда все берется и на какой вопрос этот ответ

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 12:47
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!