|
Выборка всех элементов иерархического справочника | ☑ | ||
---|---|---|---|---|
0
zarel
21.08.12
✎
14:50
|
Добрый день!
Есть обработка, в которой есть выборка элементов из группы иерархического справочника. Вопрос - как сделать выборку всех элементов из иерархического справочника ? Заранее благодарен. Вот код процедуры запроса: Процедура ОсновныеДействияФормыОсновныеДействияФормыВыгрузить(Кнопка) Если ГруппаНоменклатуры.Пустая() Тогда Предупреждение("Не выбрана группа!"); Возврат; КонецЕсли; ТекДата = ТекущаяДата(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекДата", ТекДата); Запрос.Текст = "ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура, | ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры КАК Спецификация |ПОМЕСТИТЬ ТабГотоваяПродукция |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних( | &ТекДата, | Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры) | И СпецификацияНоменклатуры.Активная | И СпецификацияНоменклатуры.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОбъектов.Утвержден)) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних | ПО (ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка) |ГДЕ | СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры) | И (НЕ СпрНоменклатура.ЭтоГруппа) | И (НЕ СпрНоменклатура.ПометкаУдаления) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТабГотоваяПродукция.Номенклатура.Наименование КАК Наименование, | ТабГотоваяПродукция.Номенклатура.Код КАК Код |ИЗ | ТабГотоваяПродукция КАК ТабГотоваяПродукция |ГДЕ | ТабГотоваяПродукция.Спецификация ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТабГотоваяПродукция.Номенклатура |ИЗ | ТабГотоваяПродукция КАК ТабГотоваяПродукция |ГДЕ | (НЕ ТабГотоваяПродукция.Спецификация ЕСТЬ NULL ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТабГотоваяПродукция.Спецификация КАК Спецификация |ИЗ | ТабГотоваяПродукция КАК ТабГотоваяПродукция |ГДЕ | (НЕ ТабГотоваяПродукция.Спецификация ЕСТЬ NULL )"; Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры); Результат = Запрос.ВыполнитьПакет(); Выборка = Результат[1].Выбрать(); Пока Выборка.Следующий() Цикл Сообщить("У номенклатуры - готовой продукции """+Выборка.Наименование+""" ("+СокрЛП(Выборка.Код)+") не задана активная утвержденная основная спецификация на "+Формат(ТекДата, "ДФ=dd.MM.yyyy")); КонецЦикла; СписокНоменклатуры = Результат[2].Выгрузить().ВыгрузитьКолонку("Номенклатура"); СписокСпецификаций = Результат[3].Выгрузить().ВыгрузитьКолонку("Спецификация"); СписокПолуфабрикатовБезСпецификации = Новый Массив; СписокПолуфабрикатов = Новый Массив; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура |ИЗ | Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие |ГДЕ | СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка В(&СписокСпецификаций) | И СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.ВидВоспроизводства <> ЗНАЧЕНИЕ(Перечисление.ВидыВоспроизводстваНоменклатуры.Производство) | И (НЕ СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.ПометкаУдаления) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура, | ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры |ПОМЕСТИТЬ ТабПолуфабрикаты |ИЗ | Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК СпецификацииНоменклатурыИсходныеКомплектующие | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(&ТекДата, ) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних | ПО СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура = ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура | И (ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры.Активная) | И (ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОбъектов.Утвержден)) | И СпецификацииНоменклатурыИсходныеКомплектующие.ХарактеристикаНоменклатуры = ОсновныеСпецификацииНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры |ГДЕ | СпецификацииНоменклатурыИсходныеКомплектующие.Ссылка В(&СписокСпецификаций) | И СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.ВидВоспроизводства = ЗНАЧЕНИЕ(Перечисление.ВидыВоспроизводстваНоменклатуры.Производство) | И (НЕ СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура В (&СписокПолуфабрикатов)) | И (НЕ СпецификацииНоменклатурыИсходныеКомплектующие.Номенклатура.ПометкаУдаления) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТабПолуфабрикаты.Номенклатура |ИЗ | ТабПолуфабрикаты КАК ТабПолуфабрикаты |ГДЕ | ТабПолуфабрикаты.СпецификацияНоменклатуры ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТабПолуфабрикаты.СпецификацияНоменклатуры |ИЗ | ТабПолуфабрикаты КАК ТабПолуфабрикаты |ГДЕ | (НЕ ТабПолуфабрикаты.СпецификацияНоменклатуры ЕСТЬ NULL ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТабПолуфабрикаты.Номенклатура |ИЗ | ТабПолуфабрикаты КАК ТабПолуфабрикаты |ГДЕ | (НЕ ТабПолуфабрикаты.СпецификацияНоменклатуры ЕСТЬ NULL )"; Пока СписокСпецификаций.Количество() > 0 Цикл Запрос.УстановитьПараметр("СписокСпецификаций", СписокСпецификаций); Запрос.УстановитьПараметр("СписокПолуфабрикатов", СписокПолуфабрикатов); Результат = Запрос.ВыполнитьПакет(); Выборка = Результат[0].Выбрать(); Пока Выборка.Следующий() Цикл СписокНоменклатуры.Добавить(Выборка.Номенклатура); КонецЦикла; Выборка = Результат[2].Выбрать(); Пока Выборка.Следующий() Цикл СписокПолуфабрикатовБезСпецификации.Добавить(Выборка.Номенклатура); КонецЦикла; СписокСпецификаций = Результат[3].Выгрузить().ВыгрузитьКолонку("СпецификацияНоменклатуры"); Выборка = Результат[4].Выбрать(); Пока Выборка.Следующий() Цикл СписокПолуфабрикатов.Добавить(Выборка.Номенклатура); КонецЦикла; КонецЦикла; ОбщегоНазначения.УдалитьПовторяющиесяЭлементы(СписокПолуфабрикатовБезСпецификации); Для Каждого Полуфабрикат Из СписокПолуфабрикатовБезСпецификации Цикл Сообщить("У номенклатуры - полуфабриката """+Полуфабрикат.Наименование+""" ("+СокрЛП(Полуфабрикат.Код)+") не задана активная утвержденная основная спецификация на "+Формат(ТекДата, "ДФ=dd.MM.yyyy")); КонецЦикла; Текст = Новый ТекстовыйДокумент; Текст.ДобавитьСтроку("id_voc_good" + Разделитель + "code" + Разделитель + "code_eop" + Разделитель + "id_voc" + Разделитель + "code" + Разделитель + "label" + Разделитель + "no_draw" + Разделитель + "param1" + Разделитель + "param2" + Разделитель + "param3" + Разделитель + "param4" + Разделитель + "mark" + Разделитель + "weight" + Разделитель + "add_request" + Разделитель + "no" + Разделитель + "no1" + Разделитель + "del" + Разделитель + "is_own" + Разделитель + "main" + Разделитель + "note" + Разделитель + "serial"); Запрос.Текст = "ВЫБРАТЬ | СпрНоменклатура.КодЭлюдия, | СпрНоменклатура.КодЕОП, | СпрНоменклатура.НаименованиеПолное, | ВЫБОР | КОГДА СпрНоменклатура.ВидВоспроизводства = &Производство | ТОГДА " + ?(ИспользоватьСвойство, "ЗначенияСвойствОбъектов.Значение", "СпрНоменклатура.Артикул") + " | ИНАЧЕ """" | КОНЕЦ КАК ЧертежныйНомер, | СпрНоменклатура.Код, | ВЫБОР | КОГДА СпрНоменклатура.ВидВоспроизводства = &Производство | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК is_own |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура" + ?(ИспользоватьСвойство, " | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ПО СпрНоменклатура.Ссылка = ЗначенияСвойствОбъектов.Объект | И (ЗначенияСвойствОбъектов.Свойство = &СвойствоЧертежныйНомер)", "") + " |ГДЕ | СпрНоменклатура.Ссылка В(&СписокНоменклатуры)"; Запрос.УстановитьПараметр("Производство", Перечисления.ВидыВоспроизводстваНоменклатуры.Производство); Запрос.УстановитьПараметр("СвойствоЧертежныйНомер", СвойствоЧертежныйНомер); Запрос.УстановитьПараметр("СписокНоменклатуры", СписокНоменклатуры); Выборка = Запрос.Выполнить().Выбрать(); Количество = Выборка.Количество(); й = 0; Пока Выборка.Следующий() Цикл Если ЗначениеЗаполнено(Выборка.КодЭлюдия) И ЗначениеЗаполнено(Выборка.КодЕОП) Тогда Продолжить; КонецЕсли; Текст.ДобавитьСтроку(Формат(Выборка.КодЭлюдия, "ЧГ=0") + Разделитель + //id_voc_good "" + Разделитель + //code Выборка.КодЕОП + Разделитель + //code_eop ?(ЗначениеЗаполнено(Выборка.КодЕОП), 482, 0) + Разделитель + //id_voc "" + Разделитель + //code Выборка.НаименованиеПолное + Разделитель + //label Выборка.ЧертежныйНомер + Разделитель + //no_draw "" + Разделитель + //param1 "" + Разделитель + //param2 "" + Разделитель + //param3 "" + Разделитель + //param4 "" + Разделитель + //mark "" + Разделитель + //weight "" + Разделитель + //add_request СокрЛП(Выборка.Код) + Разделитель + //no СокрЛП(Выборка.Код) + Разделитель + //no1 0 + Разделитель + //del Выборка.is_own + Разделитель + //is_own 1 + Разделитель + //main "" + Разделитель + //note 1); //serial й = й + 1; Состояние("Выгрузка номенклатуры в файл: " + Окр(й / Количество * 100) + "%"); КонецЦикла; ВыбранныйФайл = Новый Файл(ИмяФайла); Если ВыбранныйФайл.Существует() Тогда Если Вопрос("Файл """+ИмяФайла+""" уже существует. Перезаписать?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да) = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; КонецЕсли; Текст.Записать(ИмяФайла, КодировкаТекста.ANSI); Предупреждение("Выгрузка завершена"); КонецПроцедуры |
|||
1
DrShad
21.08.12
✎
14:50
|
кто все это читать будет?
|
|||
2
1C-band
21.08.12
✎
14:51
|
Запросом.
|
|||
3
Maxus43
21.08.12
✎
14:52
|
в этом запросе убрать все условия на ГруппаНоменклатуры, поидее всё соберёт
"ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура, | ОсновныеСпецификацииНоменклатурыСрезПоследних.СпецификацияНоменклатуры КАК Спецификация |ПОМЕСТИТЬ ТабГотоваяПродукция |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних( | &ТекДата, | Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры) | И СпецификацияНоменклатуры.Активная | И СпецификацияНоменклатуры.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияОбъектов.Утвержден)) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних | ПО (ОсновныеСпецификацииНоменклатурыСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка) |ГДЕ | СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры) | И (НЕ СпрНоменклатура.ЭтоГруппа) | И (НЕ СпрНоменклатура.ПометкаУдаления) |
|||
4
zarel
21.08.12
✎
15:00
|
Maxus43, спасибо, сейчас буду пробовать...
|
|||
5
vicof
21.08.12
✎
15:04
|
И убрать условия на не этогруппа
|
|||
6
Maxus43
21.08.12
✎
15:08
|
(5) а зачем ему группы выбирать? по ним всё равно нет спецификаций и товаров в дальнейшем
|
|||
7
Eugene_life
21.08.12
✎
15:09
|
А я бы сделал через Выгрузка = Справочники.Номенклатура.ВыбратьИерархически();
|
|||
8
zarel
21.08.12
✎
15:12
|
Какой тип данных должно иметь поле ввода для справочника "номенклатура" ?
СправочникСсылка или ЛюбаяСсылка ? |
|||
9
Maxus43
21.08.12
✎
15:13
|
О_о
|
|||
10
Eugene_life
21.08.12
✎
15:13
|
По ходу, тут рождается супер-выгрузка :)
|
|||
11
zarel
21.08.12
✎
15:15
|
Вот так выглядит форма :
http://savepic.su/2333523.htm |
|||
12
Eugene_life
21.08.12
✎
15:16
|
(11) Красота. Очень нужная обработка.
|
|||
13
zarel
21.08.12
✎
15:17
|
||||
14
Maxus43
21.08.12
✎
15:18
|
(13) где связь между Темой и тем что тебе сейчас надо? при чем тут форма? реквизит где должен какой тип иметь?
|
|||
15
vicof
21.08.12
✎
15:19
|
(6) он просил всю номенклатуру
|
|||
16
zarel
21.08.12
✎
15:30
|
обработка выводит только элементы группы, а нужно чтобы выводились все элементы иерархического справочника, вот я и незнаю как это правильно сделать...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |