|
Как из таблицы создать док заказ покупателю по каждому контрагенту. | ☑ | ||
---|---|---|---|---|
0
Boudybuilder
30.05.14
✎
13:39
|
Есть простая табличка с колонками например: Контрагент и Номенклатура
Как правильно сделать запрос к ней и потом выборку , чтобы по каждому контрагенту создать документ заказ. В запросе итоги по контрагенту делать , так? А вот с выборкой как быть? обход результата запроса как ? Я просто с этим впервые сталкиваюсь ) |
|||
1
chelentano
30.05.14
✎
13:49
|
(0) если "В запросе итоги по контрагенту делать", то выборку делать с обходом по группировкам, можно ещё отсортировать по контрагенту и использовать Выбрать и ВыбратьСледующийПоЗначениюПоля
|
|||
2
Chameleon1980
30.05.14
✎
13:57
|
думаю по группировкам проще. Мне как-то привычней
|
|||
3
Boudybuilder
30.05.14
✎
14:01
|
(1)
В запросе итоги по контрагенту делать", то выборку делать с обходом по группировкам Понял. Дальше как строки в стих ложится должны? :) Пока выборка.следующий цикл... И как тут выбирать контрагента и по нему выбирать товары ? |
|||
4
chelentano
30.05.14
✎
14:10
|
(3)
Пока Выборка.Следующий() Цикл ВыборкаТовары = Выборка.Выбрать(); Пока ВыборкаТовары.Следующий() |
|||
5
х86
30.05.14
✎
14:11
|
(0)табличка это ТЗ?
|
|||
6
Крошка Ру
30.05.14
✎
14:15
|
Пока Выборка.СледующийПоЗначениюПоля("Контрагент") Цикл
...создать новый документ... Пока Выборка.СледующийПоЗначениюПоля("Номенклатура") Цикл ...заполнить табличную часть... Конеццикла ...записать документ... КОнеццикла |
|||
7
Крошка Ру
30.05.14
✎
14:16
|
(6) И группировку в запросе по контрагенту и номменклатуре
|
|||
8
Boudybuilder
30.05.14
✎
14:20
|
(7) так итоги по или группировку?
|
|||
9
Крошка Ру
30.05.14
✎
14:21
|
(8) группировку
|
|||
10
Крошка Ру
30.05.14
✎
14:23
|
(9) вернее, даже группировку не обязателльно, упорядочить нужно, чтоб контрагенты не чередовались
|
|||
11
Chameleon1980
30.05.14
✎
14:25
|
только не совсем ВыборкаТовары = Выборка.Выбрать()
параметр передай методу выбрать |
|||
12
Chameleon1980
30.05.14
✎
14:26
|
посмотри про параметр метода выбрать
да еще посмотри (если вдруг не знаешь) про внешний источник данных для запроса и обрати внимание что колонки ТЗ должны быть обязательно типизированы |
|||
13
Chameleon1980
30.05.14
✎
14:27
|
как вообще таблица получается (так понимаю ТЗ) ?
|
|||
14
Boudybuilder
30.05.14
✎
14:31
|
(13) Да
|
|||
15
Boudybuilder
30.05.14
✎
14:32
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | Заказ.Контрагент, | Заказ.Номенклатура, | Заказ.ХарактеристикаНоменклатуры |ПОМЕСТИТЬ ВТ_Заказ |ИЗ | &Заказ КАК Заказ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Заказ.Контрагент КАК Контрагент, | ВТ_Заказ.Номенклатура, | ВТ_Заказ.ХарактеристикаНоменклатуры |ИЗ | ВТ_Заказ КАК ВТ_Заказ |ИТОГИ ПО | Контрагент" ; Запрос.УстановитьПараметр("Заказ", Заказ); Выб = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Пока Выб.Следующий() Цикл Сообщить (Строка(Выб.Контрагент)); ВыбТовар = Выб.Выбрать(); Пока ВыбТовар.Следующий() Цикл Сообщить (Строка(ВыбТовар.Номенклатура)); КонецЦикла; КонецЦикла; |
|||
16
Chameleon1980
30.05.14
✎
14:33
|
ну как-то так все правильно
|
|||
17
Chameleon1980
30.05.14
✎
14:33
|
а где по характеристикам цикл?
|
|||
18
Boudybuilder
30.05.14
✎
14:36
|
(17) а зачем?
|
|||
19
Chameleon1980
30.05.14
✎
14:38
|
а на х они тогда в запросе?
|
|||
20
Chameleon1980
30.05.14
✎
14:38
|
вообще по характеристикам ведется учет?
|
|||
21
Boudybuilder
30.05.14
✎
14:44
|
(20)
Да . Так их же надо получать в выборке по номенклатуре |
|||
22
Boudybuilder
30.05.14
✎
14:44
|
Выб = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока Выб.Следующий() Цикл Сообщить (Строка(Выб.Контрагент)); ВыбТовар = Выб.Выбрать(); Пока ВыбТовар.Следующий() Цикл Сообщить (Строка(ВыбТовар.Номенклатура)+" "+ВыбТовар.ХарактеристикаНоменклатуры); КонецЦикла; КонецЦикла; Вроде так будет правильно? |
|||
23
Chameleon1980
30.05.14
✎
14:48
|
нифига не правильно
|
|||
24
Chameleon1980
30.05.14
✎
14:49
|
три цикла в обработке запроса тогда по-любому надо. И все вышестоящие по группировкам
|
|||
25
Boudybuilder
30.05.14
✎
15:03
|
(24)
Расказывай поподробнее А лучше напиши. Но что это даст? Мне надо перебрать контрагентов. А по них перебрать строки где номенклатура и характеристиканоменклатуры идет вместе на одной строке. Зачем по номенклатуре перебирать характеристики? |
|||
26
Chameleon1980
30.05.14
✎
15:13
|
ну блин в запросе у тебя как минимум три поля
1. Контрагент 2. Номенклатура 3. Характеристика оговорено, что для учета используется разделение по характеристикам. в одном из первых твоих листингов я увидел только два цикла 1. по контрагентам 2. по номенклатуре у меня возник вопрос - где третий цикл раз разделение по хар-кам ведется. Может вы не знали, но блин может быть одна позиция номенклатуры, а характеристик для неё хоть дофига. сам же пишешь ...Мне надо перебрать контрагентов. А по них перебрать строки где номенклатура и характеристиканоменклатуры идет вместе на одной строке. Зачем по номенклатуре перебирать характеристики?... три группировки и нужно и каждая кроме последней "Выбрать(ПоГруппировкам)" пля как объяснить то. Давай ветку вместе перечитывать и подводить итог |
|||
27
Chameleon1980
30.05.14
✎
15:14
|
Может вы не знали, но блин может быть одна позиция номенклатуры, а характеристик для неё хоть дофига.
в справочнике "Номенклатура" это одна позиция. Остальное это ПВХ, Справочники другие и РС ПВХ - план видов характеристик РС - регистр сведений |
|||
28
Chameleon1980
30.05.14
✎
15:18
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ЗаказКлиентаТовары.Ссылка.Контрагент КАК Контрагент, | ЗаказКлиентаТовары.Номенклатура КАК Номенклатура, | ЗаказКлиентаТовары.Характеристика КАК Характеристика, | СУММА(ЗаказКлиентаТовары.Количество) КАК Количество |ИЗ | Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары | |СГРУППИРОВАТЬ ПО | ЗаказКлиентаТовары.Ссылка.Контрагент, | ЗаказКлиентаТовары.Номенклатура, | ЗаказКлиентаТовары.Характеристика |ИТОГИ | СУММА(Количество) |ПО | Номенклатура, | Контрагент, | Характеристика"; Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл // Вставить обработку выборки ВыборкаНоменклатура ВыборкаКонтрагент = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагент.Следующий() Цикл // Вставить обработку выборки ВыборкаКонтрагент ВыборкаХарактеристика = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаХарактеристика.Следующий() Цикл // Вставить обработку выборки ВыборкаХарактеристика КонецЦикла; КонецЦикла; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказКлиентаТовары.Ссылка.Контрагент КАК Контрагент, | ЗаказКлиентаТовары.Номенклатура КАК Номенклатура, | ЗаказКлиентаТовары.Характеристика КАК Характеристика, | СУММА(ЗаказКлиентаТовары.Количество) КАК Количество |ИЗ | Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары | |СГРУППИРОВАТЬ ПО | ЗаказКлиентаТовары.Ссылка.Контрагент, | ЗаказКлиентаТовары.Номенклатура, | ЗаказКлиентаТовары.Характеристика |ИТОГИ | СУММА(Количество) |ПО | Номенклатура, | Контрагент, | Характеристика"; Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл // Вставить обработку выборки ВыборкаНоменклатура ВыборкаКонтрагент = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагент.Следующий() Цикл // Вставить обработку выборки ВыборкаКонтрагент ВыборкаХарактеристика = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаХарактеристика.Следующий() Цикл // Вставить обработку выборки ВыборкаХарактеристика КонецЦикла; КонецЦикла; КонецЦикла; |
|||
29
Chameleon1980
30.05.14
✎
15:19
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ЗаказКлиентаТовары.Ссылка.Контрагент КАК Контрагент, | ЗаказКлиентаТовары.Номенклатура КАК Номенклатура, | ЗаказКлиентаТовары.Характеристика КАК Характеристика, | СУММА(ЗаказКлиентаТовары.Количество) КАК Количество |ИЗ | Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары | |СГРУППИРОВАТЬ ПО | ЗаказКлиентаТовары.Ссылка.Контрагент, | ЗаказКлиентаТовары.Номенклатура, | ЗаказКлиентаТовары.Характеристика |ИТОГИ | СУММА(Количество) |ПО | Номенклатура, | Контрагент, | Характеристика"; Результат = Запрос.Выполнить(); ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл // Вставить обработку выборки ВыборкаНоменклатура ВыборкаКонтрагент = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагент.Следующий() Цикл // Вставить обработку выборки ВыборкаКонтрагент ВыборкаХарактеристика = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаХарактеристика.Следующий() Цикл // Вставить обработку выборки ВыборкаХарактеристика КонецЦикла; КонецЦикла; КонецЦикла; |
|||
30
Chameleon1980
30.05.14
✎
15:25
|
тока местами перепутал
|ПО | Номенклатура, | Контрагент, после каждого первого цикла создаешь новый документ а после третьего цикла добавляешь позицию |
|||
31
censored
30.05.14
✎
15:30
|
(26) чушь какая-то, не нужно здесь 3 цикла
|
|||
32
Chameleon1980
30.05.14
✎
15:35
|
(31) ну ка?
|
|||
33
censored
30.05.14
✎
15:39
|
(32) в запросе из (15) во вложенном цикле (2-м цикле) у тебя доступна и номенклатура и характеристика. Зачем тебе лишний обход?
|
|||
34
Chameleon1980
30.05.14
✎
15:42
|
пля.
одна позиция физически и много характеристик у нее позиция в справочнике номенклатуры одна |
|||
35
censored
30.05.14
✎
15:44
|
(34) и? какая проблема при этом возникает с заполнением таб. части заказа?
|
|||
36
Chameleon1980
30.05.14
✎
15:47
|
да.
можно два при группировке они все равно повторятся не будут ВЫБРАТЬ ЗаказПокупателяТовары.Ссылка.Контрагент КАК Контрагент, ЗаказПокупателяТовары.Номенклатура, ЗаказПокупателяТовары.ХарактеристикаНоменклатуры ИЗ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары ГДЕ ЗаказПокупателяТовары.Ссылка = &ВыбДокумент СГРУППИРОВАТЬ ПО ЗаказПокупателяТовары.Ссылка.Контрагент, ЗаказПокупателяТовары.Номенклатура, ЗаказПокупателяТовары.ХарактеристикаНоменклатуры ИТОГИ ПО Контрагент |
|||
37
Chameleon1980
30.05.14
✎
15:55
|
Процедура КнопкаСформироватьНажатие(Кнопка)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказПокупателяТовары.Ссылка.Контрагент КАК Контрагент, | ЗаказПокупателяТовары.Номенклатура, | ЗаказПокупателяТовары.ХарактеристикаНоменклатуры |ИЗ | Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары |ГДЕ | ЗаказПокупателяТовары.Ссылка = &ВыбДокумент | |СГРУППИРОВАТЬ ПО | ЗаказПокупателяТовары.Ссылка.Контрагент, | ЗаказПокупателяТовары.Номенклатура, | ЗаказПокупателяТовары.ХарактеристикаНоменклатуры |ИТОГИ ПО | Контрагент"; Запрос.УстановитьПараметр("ВыбДокумент", ПолеВвода1); Результат = Запрос.Выполнить(); ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКонтрагент.Следующий() Цикл Сообщить("Контрагент: "+ВыборкаКонтрагент.Контрагент); ВыборкаДетальныеЗаписи = ВыборкаКонтрагент.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщить("Номенклатура: "+ВыборкаДетальныеЗаписи.Номенклатура+" ("+ВыборкаДетальныеЗаписи.ХарактеристикаНоменклатуры+")"); КонецЦикла; КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |