Имя: Пароль:
1C
1С v8
Как из таблицы создать док заказ покупателю по каждому контрагенту.
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);

    Результат = Запрос.Выполнить();

    ВыборкаКонтрагент = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Пока ВыборкаКонтрагент.Следующий() Цикл
        Сообщить("Контрагент: "+ВыборкаКонтрагент.Контрагент);
        ВыборкаДетальныеЗаписи = ВыборкаКонтрагент.Выбрать();

        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Сообщить("Номенклатура: "+ВыборкаДетальныеЗаписи.Номенклатура+" ("+ВыборкаДетальныеЗаписи.ХарактеристикаНоменклатуры+")");
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры