Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Как проанализировать самую первую группу на название "Производство"?" (http://forums.kuban.ru/f1040/kak_proanalizirovat-_samuyu_pervuyu_gruppu_na_nazvanie_proizvodstvo-5626796.html)

flower 16.04.2014 13:31

Как проанализировать самую первую группу на название "Производство"?"
 
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период С ДатаОтч по ДатаОтч;
|Фирма = Регистр.ОстаткиТМЦ.Фирма;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|Склад = Регистр.ОстаткиТМЦ.Склад;
|Товар = Регистр.ОстаткиТМЦ.Номенклатура;
// |Условие (Склад = Склады);
// |Условие (Товар.Родитель = ""Производство"");
|Функция Колво = КонОст(Количество);
|Группировка Фирма;
|Группировка Товар без групп;";

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

Пока Запрос.Группировка("Фирма") = 1 Цикл

Пока Запрос.Группировка("Товар") = 1 Цикл
Если (Запрос.Колво < 0) Тогда

101 16.04.2014 13:33

как угодно , а почему именно на название ? а если там "производство крышек"

101 16.04.2014 13:35

при обходе
как минимум если этогруппа т о равна ли сокрлп производство
иначе товарродитель тоже самое
ЗЫ в запросе несколько по другому ачо ?

101 16.04.2014 13:36

опять же - чоу значет - Как проанализировать [u]самую первую группу[/u] ???

flower 16.04.2014 13:40

У меня в справочнике в папке "Производство" на 2 уровне есть папки, на третьем . А товар может быть на третьем уровне, на четвертом . Вот мне нужно в выбрать товар, который принадлежит паке "Производство" независимо от уровня вложенность Вот

101 16.04.2014 13:42

ПринадлежитГруппе(<?>)
Синтаксис:
ПринадлежитГруппе(<Группа>)
Назначение:
Метод проверяет, принадлежит ли указанной группе текущий элемент справочника (независимо от того, на каком нижележащем уровне он находится).
Возвращает: 1 - если элемент принадлежит указанной группе , 0 - если нет.


или через стандартные условия

// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
|Функция Счётчик = Счётчик();
|Группировка Номенклатура без групп;
|Условие(Номенклатура в ВыбНоменклатура);
|"//****ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Номенклатура
Таб.ВывестиСекцию("Номенклатура");
КонецЦикла;
// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры

101 16.04.2014 13:43

Выбноменклатура - элемент справочника - группа которая тебе нужна

flower 16.04.2014 13:45

Если Найти(Запрос.Товар.Родитель.Родитель.Наименование,"Производство")>0

А если Родитель.Родитель.Родитель?

101 16.04.2014 13:50

(7) ниструя не кошерно ...
ЗЫ вы случаем в рарусе не работали ? :))))

101 16.04.2014 13:53

спр=СоздатьОбъект("Справочник.номенклатура");
спр.Найтипонаименованию("производство");

Выбноменклатура= спр.текущийэлемент();

но тоже хз - есть он у тя нету ... и группа ли вообще

flower 16.04.2014 14:01

Вот это не срабатывает

Если Запрос.Товар.ПринадлежитГруппе("Производство")=0 Тогда

flower 16.04.2014 14:02

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

Helen1986 16.04.2014 14:06

бред тупых одноэсников

берем полный путь и далее в нем ищем что надо

хотя есть и более красивое и правильное решение

101 16.04.2014 14:15

(11)

Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;


пр=СоздатьОбъект("Справочник.номенклатура");
спр.Найтипонаименованию("производство");

Выбноменклатура= спр.текущийэлемент();
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//**{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Номенклатура = Справочник.Номенклатура.ТекущийЭлемент;
|Функция Счётчик = Счётчик();
|Группировка Номенклатура без групп;
|Условие(Номенклатура в ВыбНоменклатура);
|"//****ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Номенклатура
Таб.ВывестиСекцию("Номенклатура");
КонецЦикла;
// Заполнение полей "Итого"
Таб.ВывестиСекцию("Итого");
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры

(12) нука ...

101 16.04.2014 14:16

(10) и не сработает НИ КА ДА\
ЗЫ строка с элементом не сравнивается

flower 16.04.2014 14:20

Вот так счас попробую ....

ГруппаНоменкл = СоздатьОбъект("Справочник.Номенклатура");
ГрНоменкл = ГруппаНоменкл.НайтиПоНаименованию("Производство",0);
Группа=ГрНоменкл.ТекущийЭлемент();


ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Номенклатура");
ТЗ.НоваяКолонка("Количество","Число");
ТЗ.НоваяКолонка("Единица");

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Период С ДатаОтч по ДатаОтч;
|Фирма = Регистр.ОстаткиТМЦ.Фирма;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|Склад = Регистр.ОстаткиТМЦ.Склад;
|Товар = Регистр.ОстаткиТМЦ.Номенклатура;
|Условие (Товар.ПринадлежитГруппе(Группа)=1);
|Функция Колво = КонОст(Количество);
|Группировка Фирма;
|Группировка Товар без групп;";

101 16.04.2014 14:23

ГрНоменкл = ГруппаНоменкл.НайтиПоНаименованию("Производство",0 );
Группа=ГрНоменкл.ТекущийЭлемент();

;)))))) жесть

flower 16.04.2014 14:53

Теперь РАБОТАЕТ :))))))


СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
СпрНоменклатура.ВключатьПодчиненные(1);
СпрНоменклатура.ВыбратьЭлементы();
Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл
Если Найти(СпрНоменклатура.Наименование,"Производство")>0 Тогда
Группа = СпрНоменклатура.ТекущийЭлемент();
КонецЕсли;
КонецЦикла;


СпрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");
СпрНоменклатура.ВключатьПодчиненные(1);
СпрНоменклатура.ВыбратьЭлементы();
Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл
Если Найти(СпрНоменклатура.Наименование,"Производство")>0 Тогда
Группа = СпрНоменклатура.ТекущийЭлемент();
КонецЕсли;
КонецЦикла;

101 16.04.2014 15:03

и запрос к регистру на каждый элемент ? :)))

Apollo 16.04.2014 16:49

(4) примени конструкцию
<ТМЦвзапросе> в <ВыбранныйТМЦ>

Apollo 16.04.2014 16:49

(4) (19) примени конструкцию з запросе
Условие (<ТМЦвзапросе> в <ВыбранныйТМЦ>);

Jimbo 17.04.2014 07:09

|Условие(Номенклатура в ВыбНоменклатура); - всегда работало


Текущее время: 07:35. Часовой пояс GMT +3.