|
Дублируется вывод результата | ☑ | ||
---|---|---|---|---|
0
myr4ik07
19.12.14
✎
14:07
|
Привет, помогите с логикой, с запроса получаю остатки номенклатуры в разрезе складов + к номенклатуре их штрихкоды
ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); МассивШК = Новый Массив; Пока ВыборкаНоменклатура.Следующий() Цикл Если Результат.Пустой() Тогда Прервать; КонецЕсли; ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура); ТабДок.Вывести(ОбластьНоменклатура, ВыборкаНоменклатура.Уровень()); ВыборкаШтрихкод = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаШтрихкод.Следующий() Цикл МассивШК.Добавить(ВыборкаШтрихкод.Штрихкод); КонецЦикла; ВыборкаШтрихкод.Сбросить(); Пока ВыборкаШтрихкод.Следующий() Цикл ОбластьШтрихкод.Параметры.Заполнить(ВыборкаШтрихкод); ВыборкаДетальныеЗаписи = ВыборкаШтрихкод.Выбрать(); Если ЗначениеЗаполнено(МассивШК) И НЕ МассивШК.Количество() > 1 Тогда ТабДок.Вывести(ОбластьШтрихкод, ВыборкаШтрихкод.Уровень()); ИначеЕсли ЗначениеЗаполнено(МассивШК) Тогда СписокШК = ""; Для Каждого Эл Из МассивШК Цикл СписокШК = СписокШК + ?(СписокШК = "", Эл, " ; " + Эл); КонецЦикла; ОбластьШтрихкод.Параметры.ШтрихКод = СписокШК; ТабДок.Вывести(ОбластьШтрихкод, ВыборкаШтрихкод.Уровень()); МассивШК.Очистить(); КонецЕсли; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень()); КонецЦикла; КонецЦикла; КонецЦикла; в результате обхода Номенклатура1 Штрихкод1; Штрихкод2 и т.д. Склад1 Склад2 Склад1 Склад2 а хотелось бы Номенклатура1 Штрихкод1; Штрихкод2 и т.д. Склад1 Склад2 без второго обхода по второму штрихкоду |
|||
1
myr4ik07
19.12.14
✎
14:09
|
пропустил написать, что в итоге запрос перебираю такой выборкой
|
|||
2
GreatOne
19.12.14
✎
14:19
|
лучше покажи запрос...
|
|||
3
vicof
19.12.14
✎
14:21
|
(2) Лучше на это не смотреть :))
|
|||
4
myr4ik07
19.12.14
✎
14:23
|
(2)
"ВЫБРАТЬ | ТоварыНаСкладахОстатки.Склад, | ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстатки.Склад), | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстатки.Номенклатура), | ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток, | ВЫБОР | КОГДА Штрихкоды.Штрихкод ЕСТЬ NULL | ТОГДА ""Штрихкод отсутствует"" | ИНАЧЕ Штрихкоды.Штрихкод | КОНЕЦ КАК Штрихкод |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки( | , | Номенклатура В | (ВЫБРАТЬ | ПоступлениеТоваровУслугТовары.Номенклатура | ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары | ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка = &Выбор)) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды | ПО ТоварыНаСкладахОстатки.Номенклатура = Штрихкоды.Владелец | |УПОРЯДОЧИТЬ ПО | КоличествоОстаток УБЫВ |ИТОГИ | СУММА(КоличествоОстаток) |ПО | Номенклатура, | Штрихкод"; |
|||
5
myr4ik07
19.12.14
✎
14:33
|
смотрю отладчиком вот этот цикл получает два и более раз вывода остатков для каждого штрихкода
Пока ВыборкаШтрихкод.Следующий() Цикл ОбластьШтрихкод.Параметры.Заполнить(ВыборкаШтрихкод); ВыборкаДетальныеЗаписи = ВыборкаШтрихкод.Выбрать(); Если ЗначениеЗаполнено(МассивШК) И НЕ МассивШК.Количество() > 1 Тогда ТабДок.Вывести(ОбластьШтрихкод, ВыборкаШтрихкод.Уровень()); ИначеЕсли ЗначениеЗаполнено(МассивШК) Тогда СписокШК = ""; Для Каждого Эл Из МассивШК Цикл СписокШК = СписокШК + ?(СписокШК = "", Эл, " ; " + Эл); КонецЦикла; ОбластьШтрихкод.Параметры.ШтрихКод = СписокШК; ТабДок.Вывести(ОбластьШтрихкод, ВыборкаШтрихкод.Уровень()); МассивШК.Очистить(); КонецЕсли; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень()); КонецЦикла; КонецЦикла; |
|||
6
myr4ik07
19.12.14
✎
14:34
|
из этого и получается если например 3 штрихкода присвоеных одной номенклатуре тогда будет
Номенклатура1 Штрихкод1; Штрихкод2; Штрихкод3 Склад1 Склад2 Склад1 Склад2 Склад1 Склад2 три раза получу остатки |
|||
7
myr4ik07
19.12.14
✎
14:34
|
три раза будет указан один и тот же склад
|
|||
8
myr4ik07
19.12.14
✎
14:35
|
вот не хватает смекалки как переписать или добавить условие, что бы даже если 3 штрихкода или больше всеровно склады не дублировались в остатках
|
|||
9
GreatOne
19.12.14
✎
14:48
|
не трать время, сделай для каждой номенклатуры отдельную функцию по поиску штрихкодов и убери это из запроса.
|
|||
10
myr4ik07
19.12.14
✎
14:59
|
(9) а какаим образом штрихкод "будет знать", что он владелец номенклатуры?
не очень понятно .... уберу выше выборку, будет выборка толко детальных записей что ли? |
|||
11
myr4ik07
19.12.14
✎
15:00
|
(9) или типа код так запрос выше оставляю, а потом вторым запросом (функции поиска штрих-кода) в параметр поиска буду передавать значение т.е. номенклатуру или что имеет ввиду?
|
|||
12
тарам пам пам
19.12.14
✎
15:04
|
(9), за запрос в цикле не зря на экзамене на специалиста по шапке бьют.
|
|||
13
myr4ik07
19.12.14
✎
15:04
|
(9) да и то, что вы предлагаете убрать, глядя по отладчику никак не влияет на дубляж...
|
|||
14
myr4ik07
19.12.14
✎
15:05
|
(12) так у меня и нет запроса в цикле, а вот товарищ, как я понял запрос и предлагает
|
|||
15
myr4ik07
19.12.14
✎
15:06
|
или это я себе придумал, что предлагает ))) извините коль чо
|
|||
16
GreatOne
19.12.14
✎
15:06
|
(12) экзамен на спеца сдают те, кто хоть как-то к нему готов=)
(13) Выведи запросом по остаткам номенклатуру+остаток на складе. Отдельно прилепи в макет штрихкоды, полученные сторонней функцией. Ну или попроси в (12), чтобы грамотное решение написал |
|||
17
myr4ik07
19.12.14
✎
15:09
|
(16) ааааа ) понял, вариант )))
|
|||
18
myr4ik07
19.12.14
✎
15:10
|
(16) заранее за совет спасибо, пробую ...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |