|
Всю голову сломал. Что делает этот код? :) | ☑ | ||
---|---|---|---|---|
0
akaBrr
22.10.14
✎
15:28
|
ЗапросНом = Новый Запрос;
ЗапросНом.Текст = "ВЫБРАТЬ | СпрНом.Родитель, | СпрНом.ЭтоГруппа, | СпрНом.Код, | СпрНом.Представление, | СпрНом.Ссылка КАК Ссылка, | СпрНом.Наименование, | СпрНом.НаименованиеПолное, | СпрНом.Артикул, | СпрНом.ЕдиницаИзмерения, | ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Количество |ИЗ | Справочник.Номенклатура КАК СпрНом | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОст, ) КАК ТоварыНаСкладахОстатки | ПО СпрНом.Ссылка = ТоварыНаСкладахОстатки.Номенклатура |ГДЕ | СпрНом.ПометкаУдаления = ЛОЖЬ |"+?(ГруппаНоменклатуры.Количество()>0," И СпрНом.Ссылка В(&НомГруппа)","")+" | |УПОРЯДОЧИТЬ ПО | Ссылка ИЕРАРХИЯ"; ЗапросНом.УстановитьПараметр("ДатаОст",Объект.ДатаЦенОстатков); СписокНом = Новый СписокЗначений; Если ГруппаНоменклатуры.Количество()>0 Тогда ВыборкаНом = Справочники.Номенклатура.Выбрать(); Пока ВыборкаНом.Следующий() Цикл Если ВыборкаНом.ЭтоГруппа Тогда СписокНом.Добавить(ВыборкаНом.Ссылка); КонецЕсли; КонецЦикла; Для Каждого ТекЗначение Из ГруппаНоменклатуры Цикл ВыборкаСписка = Справочники.Номенклатура.ВыбратьИерархически(ТекЗначение.Значение); Пока ВыборкаСписка.Следующий() Цикл СписокНом.Добавить(ВыборкаСписка.Ссылка); КонецЦикла; КонецЦикла; ЗапросНом.УстановитьПараметр("НомГруппа",СписокНом); КонецЕсли; ужас :) |
|||
1
Маратыч
22.10.14
✎
15:31
|
А где выполнение самого запроса-то? О_о
|
|||
2
Looser-1c
22.10.14
✎
15:31
|
Судя по результату - ломает голову.
А судя по коду - разворачивает список групп в список номенклатуры |
|||
3
akaBrr
22.10.14
✎
15:33
|
(1) там дальше тоже весело
|
|||
4
mergan
22.10.14
✎
15:36
|
я так понимаю, получает остатки номенклатуры с нулевыми остатками
|
|||
5
akaBrr
22.10.14
✎
15:37
|
(2) а зачем?
|
|||
6
Sj
22.10.14
✎
15:39
|
Запрос возвращает весь справочник номенклатуры с остатками.
При наличии групп фильтрует по группам. СпрНом.Ссылка В( надо было бы написать СпрНом.Ссылка в иерархии( , тогда бы не пришлось писать то, что под Если ГруппаНоменклатуры.Количество()>0 Тогда |
|||
7
akaBrr
22.10.14
✎
15:41
|
(6) согласен, фишка в том что фильтр работать не будет потому что в списке ВСЕ группы номенклатуры
ВыборкаНом = Справочники.Номенклатура.Выбрать(); Пока ВыборкаНом.Следующий() Цикл Если ВыборкаНом.ЭтоГруппа Тогда СписокНом.Добавить(ВыборкаНом.Ссылка); КонецЕсли; КонецЦикла; |
|||
8
akaBrr
22.10.14
✎
15:43
|
у меня этой травы еще есть
|
|||
9
akaBrr
22.10.14
✎
15:44
|
вооот
Если Номенклатура.Количество() = 0 Тогда Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.ЭтоГруппа Тогда Продолжить; Иначе ЗапросКартинки = Новый Запрос("ВЫБРАТЬ | НоменклатураПрисоединенныеФайлы.Ссылка |ИЗ | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы |ГДЕ | НоменклатураПрисоединенныеФайлы.ВладелецФайла = &Номенклатура"); ЗапросКартинки.УстановитьПараметр("Номенклатура",Выборка.Ссылка); ВыборКартинки = ЗапросКартинки.Выполнить().Выбрать(); ИмяКартинки = ""; Пока ВыборКартинки.Следующий() Цикл //СсылкаНаФайлВИБ = ПолучитьНавигационнуюСсылку(ВыборКартинки.Ссылка,"ФайлХранилище"); ИмяКартинки = СокрЛП(Выборка.Ссылка.Код)+"."+ВыборКартинки.Ссылка.Расширение; //ПолучитьФайл(СсылкаНаФайлВИБ,Объект.ПутьККаталогу+"\"+ИмяКартинки,Ложь); ХранилищеФайла = РаботаСФайламиВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы( ВыборКартинки.Ссылка); // ДвоичныеДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(Выборка.Ссылка, Неопределено).СсылкаНаДвоичныеДанныеФайла; МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ПрисоединенныйФайл = ВыборКартинки.Ссылка; МенеджерЗаписи.Прочитать(); ДвоичныеДанные = МенеджерЗаписи.ХранимыйФайл.Получить(); //Если ВыборКартинки.Ссылка.ФайлХранилище=Неопределено Тогда Продолжить КонецЕсли; //ДвоичныеДанныеФайла = ВыборКартинки.Ссылка.ФайлХранилище.Получить(); Если (ТипЗнч(ДвоичныеДанные)=Тип("Картинка")) или (ТипЗнч(ДвоичныеДанные)=Тип("ДвоичныеДанные")) Тогда Попытка ДвоичныеДанные.Записать(Объект.ПутьККаталогу+"\"+ИмяКартинки); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Иначе СписокНом = Новый СписокЗначений; Для Каждого ТекНом Из Номенклатура Цикл Если ТекНом.Значение.ЭтоГруппа Тогда ВыборкаСписка = Справочники.Номенклатура.ВыбратьИерархически(ТекНом.Значение); Пока ВыборкаСписка.Следующий() Цикл СписокНом.Добавить(ВыборкаСписка.Ссылка); КонецЦикла; Иначе СписокНом.Добавить(ТекНом.Значение); КонецЕсли; КонецЦикла; Для Каждого ТекЭлем Из СписокНом Цикл Если ТекЭлем.Значение.ЭтоГруппа Тогда Продолжить; Иначе ЗапросКартинки = Новый Запрос("ВЫБРАТЬ | НоменклатураПрисоединенныеФайлы.Ссылка |ИЗ | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы |ГДЕ | НоменклатураПрисоединенныеФайлы.ВладелецФайла = &Номенклатура"); ЗапросКартинки.УстановитьПараметр("Номенклатура",ТекЭлем.Значение); ВыборКартинки = ЗапросКартинки.Выполнить().Выбрать(); ИмяКартинки = ""; Пока ВыборКартинки.Следующий() Цикл //СсылкаНаФайлВИБ = ПолучитьНавигационнуюСсылку(ВыборКартинки.Ссылка,"ФайлХранилище"); ИмяКартинки = СокрЛП(ТекЭлем.Значение.Код)+"."+ВыборКартинки.Ссылка.Расширение; //ПолучитьФайл(СсылкаНаФайлВИБ,Объект.ПутьККаталогу+"\"+ИмяКартинки,Ложь); //ХранилищеФайла = РаботаСФайламиВызовСервера.ПолучитьХранилищеФайлаИзИнформационнойБазы( ВыборКартинки.Ссылка); // ДвоичныеДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(Выборка.Ссылка, Неопределено).СсылкаНаДвоичныеДанныеФайла; МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ПрисоединенныйФайл = ВыборКартинки.Ссылка; МенеджерЗаписи.Прочитать(); ДвоичныеДанные = МенеджерЗаписи.ХранимыйФайл.Получить(); //Если ВыборКартинки.Ссылка.ФайлХранилище=Неопределено Тогда Продолжить КонецЕсли; //ДвоичныеДанныеФайла = ВыборКартинки.Ссылка.ФайлХранилище.Получить(); Если (ТипЗнч(ДвоичныеДанные)=Тип("Картинка")) или (ТипЗнч(ДвоичныеДанные)=Тип("ДвоичныеДанные")) Тогда Попытка ДвоичныеДанные.Записать(Объект.ПутьККаталогу+"\"+ИмяКартинки); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
10
Sj
22.10.14
✎
15:45
|
(7) а. тогда точно лажа. там надо накидывать только во втором обходе.
|
|||
11
akaBrr
22.10.14
✎
15:57
|
Продолжение первой части
ВыхФайл_ = Новый ТекстовыйДокумент; Выборка_ = ЗапросНом.Выполнить().Выгрузить(); Для Каждого СтрокаВыборки_ Из Выборка_ Цикл Код_ = СтрокаВыборки_.Код; Если СтрокаВыборки_.Родитель.Пустая() Тогда КодРодителя_ = ""; Иначе КодРодителя_ = СокрЛП(СтрокаВыборки_.Родитель.Код); КонецЕсли; Если СтрокаВыборки_.ЭтоГруппа Тогда Группа_ = "1"; Наименование_ = СокрЛП(СтрокаВыборки_.Представление); Описание_ = ""; ЦенаОпт_ = "0"; ЦенаРозн_ = "0"; ЦенаМелкийОпт_ = "0"; Остаток_ = "0"; Иначе Группа_ = "0"; Наименование_ = СокрЛП(СтрокаВыборки_.Представление); Описание_ = СокрЛП(СтрокаВыборки_.НаименованиеПолное) + " " +?(ЗначениеЗаполнено(СокрЛП(СтрокаВыборки_.Артикул)),СокрЛП("("+СтрокаВыборки_.Артикул+")"),""); СтруктураПараметровОтбора = Новый Структура("Валюта, Дата, ВидЦены, Номенклатура,Характеристика, Упаковка"); СтруктураПараметровОтбора.Вставить("Валюта",Объект.Валюта); СтруктураПараметровОтбора.Вставить("Дата",Объект.ДатаЦенОстатков); СтруктураПараметровОтбора.Вставить("ВидЦены",Объект.ТипЦенОпт); СтруктураПараметровОтбора.Вставить("Номенклатура",СтрокаВыборки_.Ссылка); СтруктураПараметровОтбора.Вставить("Характеристика",Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()); СтруктураПараметровОтбора.Вставить("Упаковка",Справочники.УпаковкиНоменклатуры.ПустаяСсылка()); ЦенаОпт = ПродажиСервер.ПолучитьЦенуПоОтбору(СтруктураПараметровОтбора); СтруктураПараметровОтбора = Новый Структура("Валюта, Дата, ВидЦены, Номенклатура,Характеристика, Упаковка"); СтруктураПараметровОтбора.Вставить("Валюта",Объект.Валюта); СтруктураПараметровОтбора.Вставить("Дата",Объект.ДатаЦенОстатков); СтруктураПараметровОтбора.Вставить("ВидЦены",Объект.ТипЦенРозница); СтруктураПараметровОтбора.Вставить("Номенклатура",СтрокаВыборки_.Ссылка); СтруктураПараметровОтбора.Вставить("Характеристика",Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()); СтруктураПараметровОтбора.Вставить("Упаковка",Справочники.УпаковкиНоменклатуры.ПустаяСсылка()); ЦенаРозн = ПродажиСервер.ПолучитьЦенуПоОтбору(СтруктураПараметровОтбора); СтруктураПараметровОтбора = Новый Структура("Валюта, Дата, ВидЦены, Номенклатура,Характеристика, Упаковка"); СтруктураПараметровОтбора.Вставить("Валюта",Объект.Валюта); СтруктураПараметровОтбора.Вставить("Дата",Объект.ДатаЦенОстатков); СтруктураПараметровОтбора.Вставить("ВидЦены",Объект.ТипЦенМелкийОпт); СтруктураПараметровОтбора.Вставить("Номенклатура",СтрокаВыборки_.Ссылка); СтруктураПараметровОтбора.Вставить("Характеристика",Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка()); СтруктураПараметровОтбора.Вставить("Упаковка",Справочники.УпаковкиНоменклатуры.ПустаяСсылка()); ЦенаМелкийОпт = ПродажиСервер.ПолучитьЦенуПоОтбору(СтруктураПараметровОтбора); ЦенаОпт_ = Формат(ЦенаОпт, "ЧН=0; ЧГ=0"); ЦенаРозн_ = Формат(ЦенаРозн, "ЧН=0; ЧГ=0"); ЦенаМелкийОпт_ = Формат(ЦенаМелкийОпт, "ЧН=0; ЧГ=0"); Остаток_ = Формат(СтрокаВыборки_.Количество, "ЧН=0; ЧГ=0"); КонецЕсли; ВыхФайл_.ДобавитьСтроку("==="); ВыхФайл_.ДобавитьСтроку(Группа_); ВыхФайл_.ДобавитьСтроку(КодРодителя_); ВыхФайл_.ДобавитьСтроку(Код_); ВыхФайл_.ДобавитьСтроку(Наименование_); ВыхФайл_.ДобавитьСтроку(Описание_); ВыхФайл_.ДобавитьСтроку(ЦенаРозн_); ВыхФайл_.ДобавитьСтроку(ЦенаОпт_); ВыхФайл_.ДобавитьСтроку(ЦенаМелкийОпт_); ВыхФайл_.ДобавитьСтроку(Остаток_); КонецЦикла; ВыхФайл_.Записать(Объект.ФайлВыгрузки, КодировкаТекста.ANSI); Сообщить("Выгрузка завершена!"); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |