Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Помогите разобраться с скд(точнее с запросами)

Хочу видеть все конечные остатки, и приходы-расходы номенклатуры за период(+ дату последнего поступления и текущую цену). Подскажите пожалуйста как мне их получить, если беру обороты из регистра оборотов, а остатки из регистра остатков то получаю не все данные(там где есть остатки но нет оборотов пустая номенклатура), если делаю как написал ниже получаю все остатки после каждого прихода-расхода, куча хлама. Так же буду благодарен всем кто укажет мне мои ошибки по оптимизации в коде.

Есть ли способ объединить таблицы в следующем виде:
товар1 1 2
товар2 1 1
+
товар1 Х
товар3 Х
=
Товар1 1 2 Х
Товар2 1 1
Товар3     Х


ВЫБРАТЬ
    МАКСИМУМ(ПартииТоваровНаСкладахОстаткиИОбороты.Период) КАК Период,
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура)
ПОМЕСТИТЬ ДатаПоступлений
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, , Регистратор, , ) КАК ПартииТоваровНаСкладахОстаткиИОбороты
ГДЕ
    ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг

СГРУППИРОВАТЬ ПО
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(ТоварыНаСкладахОстаткиИОбороты.Номенклатура),
    СУММА(ВЫБОР
            КОГДА НЕ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
                ТОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход
        КОНЕЦ) КАК КоличествоПриход,
    СУММА(ВЫБОР
            КОГДА НЕ ТоварыНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
                ТОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход
        КОНЕЦ) КАК КоличествоРасход,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
ПОМЕСТИТЬ обороты
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&naper, &koper, Регистратор, , ) КАК ТоварыНаСкладахОстаткиИОбороты

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Цена,
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(ЦеныНоменклатурыСрезПоследних.Номенклатура)
ПОМЕСТИТЬ ценаа
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    ТоварыВРезервеНаСкладахОстатки.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(ТоварыВРезервеНаСкладахОстатки.Номенклатура),
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток
ПОМЕСТИТЬ резервы
ИЗ
    РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&koper, ) КАК ТоварыВРезервеНаСкладахОстатки
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    обороты.Номенклатура КАК Номенклатура,
    ПРЕДСТАВЛЕНИЕ(обороты.Номенклатура),
    СУММА(обороты.КоличествоПриход) КАК КоличествоПриход,
    СУММА(обороты.КоличествоРасход) КАК КоличествоРасход,
    обороты.КоличествоКонечныйОстаток,
    МАКСИМУМ(ДатаПоступлений.Период) КАК Период,
    резервы.КоличествоОстаток КАК КоличествоОстаток,
    ценаа.Цена
ИЗ
    обороты КАК обороты
        ЛЕВОЕ СОЕДИНЕНИЕ ДатаПоступлений КАК ДатаПоступлений
        ПО обороты.Номенклатура = ДатаПоступлений.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ резервы КАК резервы
        ПО обороты.Номенклатура = резервы.Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ценаа КАК ценаа
        ПО обороты.Номенклатура = ценаа.Номенклатура

СГРУППИРОВАТЬ ПО
    обороты.Номенклатура,
    обороты.КоличествоКонечныйОстаток,
    резервы.КоличествоОстаток,
    ценаа.Цена

УПОРЯДОЧИТЬ ПО
    Номенклатура,
    КоличествоОстаток
Ответ: в ПОМЕСТИТЬ обороты написана ересь. Конечный остаток будет получаться на каждый движение регистра, соответственно фактический остаток не будит иметь с ним ничего общего

И переставай использовать вирт таблицу ОстаткиИОбороты
Вопрос: Как получить сумму по дебету из периода

Добрый день. "Опер.Сумма" выводит сумму оборота по дебету и кредиту. Подскажите пожалуйста, как получить сумму оборота ТОЛЬКО по дебету? Код прилагаю ниже.


1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
БИ.ВыбратьПериоды(1,,,);    
ТЗДолг.УдалитьСтроки();                                                                                                                  
                Пока БИ.ПолучитьПериод(,) = 1 Цикл
                    Опер = БИ.Операция;                //проверяем, чтобы из периода выбирались только наши счета    Выбираем счета по которым есть движения. т.е. не с 62 на 62, а с 62 например на 51
                    Если ((Опер.Дебет.Счет = Сч58_3) и (Опер.Кредит.Счет = Сч58_3)) ИЛИ ((Опер.Дебет.Счет = Сч60) и (Опер.Кредит.Счет = Сч60))
                        ИЛИ ((Опер.Дебет.Счет = Сч62) и (Опер.Кредит.Счет = Сч62)) ИЛИ ((Опер.Дебет.Счет = Сч66) и (Опер.Кредит.Счет = Сч66)) 
                        ИЛИ ((Опер.Дебет.Счет = Сч67) и (Опер.Кредит.Счет = Сч67)) Тогда
                        Продолжить;   //Передача управление в начало цикла
                    КонецЕсли;
    
                    
                        ТЗДолг.НоваяСтрока();
                        ТЗДолг.Дата = Опер.ДатаОперации;    
                    
                        ТЗДолг.Оборот = Опер.Сумма;
                    
                        ТЗДолг.Сумма = БИ.СКД(); 
                        ТЗДолг.Субконто1 = БИ.Субконто(1);  
                        ТЗДолг.Субконто2 = БИ.Субконто(2);
                        ТЗДолг.Документ = Опер.Документ.Вид() + " " + Опер.Документ.НомерДок + " " + Опер.Документ.ДатаДок;    
                        ТЗДолг.Выплатили = Выплатили;    
                                
                КонецЦикла;
Добавлено через 1 час 32 минуты
Пробую Опер.ДО() . Выдает ошибку "Поле агрегатного объекта не обнаружено (ДО)"

Добавлено через 19 минут
Пробовал "Опер.Дебет.Сумма", "Опер.Субконто(2).ДО()" ты же ошибка. Народ ну подскажите кто знает
Ответ: Например так
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Ит.ВключатьСубСчета(1,1);
    Ит.ВыполнитьЗапрос(НачДата,КонДата,"90.1,90.5,90.3","50.3,62.3,68.2",,2,"Месяц");
    Ит.ВыбратьПериоды();
    while Ит.ПолучитьПериод()=1 do
        Ит.ВыбратьСчета();
        while Ит.ПолучитьСчет()=1 do
            Счет=Ит.Счет;
            Тбл.NewLine();
            Тбл.Пер=ПериодСтр(Ит.НачДата,Ит.КонДата);
            Тбл.Дат=Ит.НачДата;
            Тбл.Статья="Реализация";   
            Тбл.Гр="1. Реализация";   
            Тбл.ПВ=1;
            Тбл.Сум=Ит.КО()-Ит.ДО();
        enddo;
    enddo;
Вопрос: Как считать сумму по группировке?

Имеется поле "ПероеИОборот", рассчитаное следующим образом в ресурсах
  - как одно значения для номенклатуры(остаток) + сумма оборотов для неё.
Считает все корректно при одной позиции номенклатуры
( здесь все правильно)
При двух это поле накапливает в себе значения
(здесь значения для другой номенлатуры должно быть другим, примерно так )
Пытался из ресурсов перенсти в вычисляемы поля, но то вообще не выводило поле, то писало что не может использовать агрегатные функции. именно пробовал
ВычислитьВыражение((Сумма(НеПеремещение) + ПоследнееЗначение) * цена) и потом помещал в ресурсы. Помогите разобраться, пожалуйста.
Ответ: () Посмотрел - косяк запросе, выводит для вй номенклатуры в отборе сумму, не понимаю, почему так.
Вопрос: v7: Разница сумм в запросе и по Итогу

Доброго дня, не пойму почему идут расхождения между запросом и методом Итог по колонке.

    ТекстЗапроса = "
    |Период с НачДата по КонДата;
    |ОбрабатыватьДокументы Все;
    |ТекДок                        = Документ.ЗаявкаПокупателя.ТекущийДокумент;
    |Фирма                        = Документ.ЗаявкаПокупателя.ТекущийДокумент.Фирма;
    |Контр                         = Документ.ЗаявкаПокупателя.ТекущийДокумент.Контрагент;
    |СуммаД                       = Документ.ЗаявкаПокупателя.ТекущийДокумент.Сумма;
    |СтатусЗаявки                 = Документ.ЗаявкаПокупателя.ТекущийДокумент.ДляОбщегоЖурнала;
    |ПроектЗапрос                 = Документ.ЗаявкаПокупателя.ТекущийДокумент.Проект;
    |ФлагПечатиЗапрос             = Документ.ЗаявкаПокупателя.ТекущийДокумент.ФлагПечати;
    |ВидОперации                  = Документ.ЗаявкаПокупателя.ТекущийДокумент.ВидОперации;    
    |Функция СуммаСумма              = Сумма(СуммаД);
    |Группировка ТекДок;
    |Условие (ТекДок.ПометкаУдаления() = 0);
    |Условие (ВидОперации = Перечисление.ВидыОперацийЗаявок.Неподтвержденная);    
    |";


Наткнулся случайно на одном документе, если взять Запрос.СуммаСумма не равна если сделать Запрос.ТекДок.Итог("Сумма"), причем второе правильно, а из запроса не правильно. Что не так ?
Ответ:
(21) ОбрабатыватьДокументы Все;
     Обрабатывать НеПомеченныеНаУдаление;
Вопрос: СУММА в запросе складывает 1 строку 2 раза

Строка суммирования, какое надо условие поставить чтобы ,если только 1 товар то не складывать саму себя 2 раза
1C
1
    СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК НДС
Ответ:
Сообщение от Vlad69ik
По какой строке можно это сделать ?
При дублировании строк анализировать нужно соединения.
Вопрос: Получить в запросе начальный, конечный остаток и обороты по Счету

День добрый.

Хочу получить остатка на начало, конец периода и обороты за него(как уже понятно из темы вопроса).
И все бы хорошо, но мне нужна группировка по номенклатуре, т.е. если за период было 2 и более записи по одной номенклатуре, одна должна отразиться в запросе одной строкой, в которой будет указан начальный остаток по первой записи, конечный остаток из последней записи, и сумма оборотов по обеим(или всем, если их больше) строкам.

А сейчас из регистра бухгалтерии остатки и обороты у меня эти строки собираются отдельно.
Как их сгруппировать, чтобы получить нужные начальные и конечные остатки?
Ответ: () Ах, благодарю! :*   ;)
Знала, что должно быть просто)
Вопрос: Вывод разности значения реквизита справочника и оборотов регистра накопления в результате запроса

Здравствуйте. Делаю конфигурацию в 1с 8.3. В конфигурации следующий набор справочников:
1.Договоры(Код,Наименование)
2.ЭтапыДоговоров(Код,Наименование,Договор - СправочникСсылкаДоговоры, Исполнитель - ПеречисленияСсылка.ИсполнителиРабот, Трудозатраты - Число,10,3)
3.Объекты(Код,Наименование,Договор - СправочникСсылкаДоговоры,Этап - СправочникСсылкаЭтапыДоговоров)
и есть регистры накопления:
1.ОтработаноЧасов(Измерения:Объект -справочникссылкаОбъекты;Документ - СправочникСсылкаПроектныеДокументы...;Ресурс - КоличествоЧасов -число,10,3)
2.ОтработаноГИПРПО(Измерения:Объект -справочникссылкаОбъекты,СтатусРуководителя - ПеречисленияСсылка.СтатусРуководителя;Ресурс - КоличествоЧасов -число,10,3).
Из всего этого надо сделать выборку данных за период такой структуры:
НаименованиеДоговора, НомерЭтапа,ТрудоЗатраты,Факт,Отклонение
, где Факт=ОтработаноЧасов.Обороты по этапам+ОтработаноГИПРПО.Обороты по этапам; Отклонение=(Факт-Трудозатраты)/Трудозатраты*100. Пытался делать это так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Запрос.Текст="ВЫБРАТЬ
                 |  СУММА(ОтработаноЧасовОбороты.КоличествоЧасовРасход) КАК ФактСотрудников,
                 |  ЭтапыДоговоров.НомерЭтапа КАК НомерЭтапа,
                 |  Договоры.Наименование КАК НаименованиеДоговора,
                 |  ЭтапыДоговоров.Трудозатраты КАК План,
                 |  ФактГИПРПО.ФактРуководителя,
                 |  ФактГИПРПО.ФактРуководителя + ОтработаноЧасовОбороты.КоличествоЧасовРасход КАК Факт
                 |ИЗ
                 |  РегистрНакопления.ОтработаноЧасов.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ОтработаноЧасовОбороты
                 |      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Объекты
                 |          ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЭтапыДоговоров КАК ЭтапыДоговоров
                 |              ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                 |                  ЭтапыДоговоров.Ссылка КАК НомерЭтапа,
                 |                  СУММА(ВЫБОР
                 |                          КОГДА ОтработаноГИПРПООбороты.ВремяНаОбъектРасход ЕСТЬ NULL 
                 |                              ТОГДА 0
                 |                          ИНАЧЕ ОтработаноГИПРПООбороты.ВремяНаОбъектРасход
                 |                      КОНЕЦ) КАК ФактРуководителя,
                 |                  ОтработаноГИПРПООбороты.ВремяНаОбъектРасход КАК ФактГИП
                 |              ИЗ
                 |                  РегистрНакопления.ОтработаноГИПРПО.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ОтработаноГИПРПООбороты
                 |                      ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Объекты КАК Объекты
                 |                          ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЭтапыДоговоров КАК ЭтапыДоговоров
                 |                              ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры
                 |                              ПО ЭтапыДоговоров.Договор = Договоры.Ссылка
                 |                          ПО Объекты.ЭтапДоговора = ЭтапыДоговоров.Ссылка
                 |                      ПО ОтработаноГИПРПООбороты.ШифрОбъекта = Объекты.Ссылка
                 |              ГДЕ
                 |                  ЭтапыДоговоров.Исполнитель = &Исполнитель
                 |              
                 |              СГРУППИРОВАТЬ ПО
                 |                  ЭтапыДоговоров.Ссылка,
                 |                  ОтработаноГИПРПООбороты.ВремяНаОбъектРасход) КАК ФактГИПРПО
                 |              ПО (ФактГИПРПО.НомерЭтапа = ЭтапыДоговоров.Ссылка)
                 |              ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры
                 |              ПО ЭтапыДоговоров.Договор = Договоры.Ссылка
                 |          ПО Объекты.ЭтапДоговора = ЭтапыДоговоров.Ссылка
                 |      ПО ОтработаноЧасовОбороты.Объект = Объекты.Ссылка
                 |ГДЕ
                 |  ЭтапыДоговоров.Исполнитель = &Исполнитель
                 |
                 |СГРУППИРОВАТЬ ПО
                 |  ЭтапыДоговоров.НомерЭтапа,
                 |  Договоры.Наименование,
                 |  ЭтапыДоговоров.Трудозатраты,
                 |  ФактГИПРПО.ФактРуководителя,
                 |  ФактГИПРПО.ФактРуководителя + ОтработаноЧасовОбороты.КоличествоЧасовРасход";
Данные выгружаются,но есть 2 проблемы:
1) не происходит группировки записей в результате запроса:
НаименованиеДоговора НомерЭтапа ТрудоЗатраты Факт Отклонение
Договор 1 1-1 1000 10
Договор 2 2-1 1500 20
Договор 2 2-1 1700 50
2) не выводятся значения отклонений
нужен такой вид:
НаименованиеДоговора НомерЭтапа ТрудоЗатраты Факт Отклонение
Договор 1 1-1 1000 10 (10-1000)/1000*100=-99
Договор 2 2-1 3200 70 (70-3200)/3200*100=-97,8125
Что я не так делаю? в чем ошибка? помогите пожалуйста
Ответ: jediAlex, выложите базу, чтоб потестить на этих данных.

Добавлено через 7 минут
думаю, проблема в группировке и суммировании в запросе. Можно попробовать так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
ВЫБРАТЬ
    ВложенныйЗапрос.ФактСотрудников КАК ФактСотрудников,
    ВложенныйЗапрос.НомерЭтапа КАК НомерЭтапа,
    ВложенныйЗапрос.НаименованиеДоговора КАК НаименованиеДоговора,
    ВложенныйЗапрос.План КАК План,
    ВложенныйЗапрос.ФактРуководителя КАК ФактРуководителя,
    (ВложенныйЗапрос.Факт - ВложенныйЗапрос.План) / ВложенныйЗапрос.План * 100 КАК Отклонение,
    ВложенныйЗапрос.Факт КАК Факт
ИЗ
    (ВЫБРАТЬ
        СУММА(ЕСТЬNULL(ОтработаноЧасовОбороты.КоличествоЧасовРасход, 0)) КАК ФактСотрудников,
        Объекты.ЭтапДоговора.НомерЭтапа КАК НомерЭтапа,
        Объекты.Договор.Наименование КАК НаименованиеДоговора,
        Объекты.ЭтапДоговора.Трудозатраты КАК План,
        СУММА(ЕСТЬNULL(ОтработаноГИПРПООбороты.ВремяНаОбъектРасход, 0)) КАК ФактРуководителя,
        СУММА(ЕСТЬNULL(ОтработаноЧасовОбороты.КоличествоЧасовРасход, 0) + ЕСТЬNULL(ОтработаноГИПРПООбороты.ВремяНаОбъектРасход, 0)) КАК Факт
    ИЗ
        Справочник.Объекты КАК Объекты
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработаноЧасов.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ОтработаноЧасовОбороты
            ПО (ОтработаноЧасовОбороты.Объект = Объекты.Ссылка)
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработаноГИПРПО.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ОтработаноГИПРПООбороты
            ПО (ОтработаноГИПРПООбороты.ШифрОбъекта = Объекты.Ссылка)
    
    СГРУППИРОВАТЬ ПО
        Объекты.ЭтапДоговора.НомерЭтапа,
        Объекты.Договор.Наименование,
        Объекты.ЭтапДоговора.Трудозатраты) КАК ВложенныйЗапрос
Сначала группируем во вложенном запросе, трудозатраты выстапают как группировочное поле, потом уже вычисляем отклонение.
Вопрос: Запрос за полгода выполняется быстрее чем за месяц

Здравствуйте. Вот такой запрос

Код:
ЗапросПродаж.Текст =
    "ВЫБРАТЬ
    |    ВложенныйЗапрос.МодельИзмерение КАК МодельИзмерение,
    |    ЦеныМоделиСрезПоследних.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗЦеныБазовые
    |ИЗ
    |    (ВЫБРАТЬ
    |        ЦеныМоделиСрезПоследних.Модель КАК МодельИзмерение,
    |        МАКСИМУМ(ЦеныМоделиСрезПоследних.Период) КАК Период
    |    ИЗ
    |        РегистрСведений.ЦеныМодели.СрезПоследних(&ДатаКон, ) КАК ЦеныМоделиСрезПоследних
    |    ГДЕ
    |        ЦеныМоделиСрезПоследних.ТипЦен = &ТипРеал
    |        И ЦеныМоделиСрезПоследних.ТипСкидок = &База
    |   
    |    СГРУППИРОВАТЬ ПО
    |        ЦеныМоделиСрезПоследних.Модель) КАК ВложенныйЗапрос
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныМодели.СрезПоследних(&ДатаКон, ) КАК ЦеныМоделиСрезПоследних
    |        ПО ВложенныйЗапрос.МодельИзмерение = ЦеныМоделиСрезПоследних.Модель
    |            И ВложенныйЗапрос.Период = ЦеныМоделиСрезПоследних.Период
    |ГДЕ
    |    ЦеныМоделиСрезПоследних.ТипЦен = &ТипРеал
    |    И ЦеныМоделиСрезПоследних.ТипСкидок = &База
    |
    |СГРУППИРОВАТЬ ПО
    |    ЦеныМоделиСрезПоследних.Цена,
    |    ВложенныйЗапрос.МодельИзмерение
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    МЕСЯЦ(ПродажаИМаржаОбороты.Период) КАК Месяц,
    |    КОНЕЦПЕРИОДА(ПродажаИМаржаОбороты.Период, МЕСЯЦ) КАК Дата,
    |    СУММА(ПродажаИМаржаОбороты.КоличествоОборот) КАК КоличествоПродаж,
    |    СУММА(ТЗЦеныБазовые.Цена * ПродажаИМаржаОбороты.КоличествоОборот) КАК СуммаПоЦенеРРЦВсего,
    |    СУММА(ПродажаИМаржаОбороты.СуммаОборот) КАК СуммаПродаж
    |ИЗ
    |    РегистрНакопления.ПродажаИМаржа.Обороты(&ДатаНач, &ДатаКон, Регистратор, ) КАК ПродажаИМаржаОбороты
    |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗЦеныБазовые КАК ТЗЦеныБазовые
    |        ПО ПродажаИМаржаОбороты.Номенклатура.Модель = ТЗЦеныБазовые.МодельИзмерение
    |ГДЕ
    |    ПродажаИМаржаОбороты.Договор.Организация = &ДФ" +

         //прочие фильтры


    |СГРУППИРОВАТЬ ПО
    |    МЕСЯЦ(ПродажаИМаржаОбороты.Период),
    |    КОНЕЦПЕРИОДА(ПродажаИМаржаОбороты.Период, МЕСЯЦ)";
Если параметры даты таблицы РегистрНакопления.ПродажаИМаржа.Обороты указать к примеру за полгода, то запрос выполняется считанные секунды. А за один месяц идет минут 15. Объясните как такое может быть.
Ответ:
Тут проблема выходит в таблице цен.
Вот такой запрос
Код:
ВЫБРАТЬ
    МЕСЯЦ(ПродажаИМаржаОбороты.Период) КАК Месяц,
    СУММА(ПродажаИМаржаОбороты.КоличествоОборот) КАК КоличествоПродаж,
    СУММА(ПродажаИМаржаОбороты.СуммаОборот) КАК СуммаПродаж
ИЗ
    РегистрНакопления.ПродажаИМаржа.Обороты(&ДатаНач, &ДатаКон, Месяц, ) КАК ПродажаИМаржаОбороты
ГДЕ
    ПродажаИМаржаОбороты.Договор.Организация = &ДФ

СГРУППИРОВАТЬ ПО
    МЕСЯЦ(ПродажаИМаржаОбороты.Период)
ИТОГИ
    СУММА(КоличествоПродаж),
    СУММА(СуммаПродаж)
ПО
    ОБЩИЕ,
    Месяц
работает быстро с любым периодом. Хоть полгода, хоть месяц.

В данной таблице имеется цена, но она реквизит. Следующий запрос сумму по РРЦ выдает чуть завышенной.
Код:
ВЫБРАТЬ
    МЕСЯЦ(ПродажаИМаржа.Период) КАК Месяц,
    СУММА(ВЫБОР
            КОГДА ПродажаИМаржа.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                ТОГДА ПродажаИМаржа.Количество
            ИНАЧЕ -ПродажаИМаржа.Количество
        КОНЕЦ) КАК КоличествоПродаж,
    СУММА(ВЫБОР
            КОГДА ПродажаИМаржа.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                ТОГДА ПродажаИМаржа.Сумма
            ИНАЧЕ -ПродажаИМаржа.Сумма
        КОНЕЦ) КАК СуммаПродаж,
    СУММА(ПродажаИМаржа.БазоваяЦена * ВЫБОР
            КОГДА ПродажаИМаржа.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
                ТОГДА ПродажаИМаржа.Количество
            ИНАЧЕ -ПродажаИМаржа.Количество
        КОНЕЦ) КАК СуммаРРЦ
ИЗ
    РегистрНакопления.ПродажаИМаржа КАК ПродажаИМаржа
ГДЕ
    ПродажаИМаржа.Договор.Организация = &ДФ
    И ПродажаИМаржа.Период >= &ДатаНач
    И ПродажаИМаржа.Период <= &ДатаКон

СГРУППИРОВАТЬ ПО
    МЕСЯЦ(ПродажаИМаржа.Период)
ИТОГИ ПО
    ОБЩИЕ,
    Месяц
Вопрос: Подскажите с запросом (Объединение)

Получаю 2 таблицы с одинаковым набором полей:

    "ВЫБРАТЬ
    |    ХозрасчетныйОбороты.Субконто1 КАК Контр,
    |    СУММА(ХозрасчетныйОбороты.СуммаОборот) КАК СуммаОборот,
    |    СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК Оплачено,
    |    СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК Поставлено
    |ПОМЕСТИТЬ Обороты_60
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Обороты(&Начало, &Конец, Период, , , , КорСчет В ИЕРАРХИИ (&КорСчет), ) КАК ХозрасчетныйОбороты
    |ГДЕ
    |    ХозрасчетныйОбороты.Счет = &Счет
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОбороты.Субконто1
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    ХозрасчетныйОбороты.Субконто1 КАК Контр,
    |    СУММА(ХозрасчетныйОбороты.СуммаОборот) КАК СуммаОборот,
    |    СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК Оплачено,
    |    СУММА(ХозрасчетныйОбороты.СуммаОборотКт) КАК Поставлено
    |ПОМЕСТИТЬ Авансы
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Обороты(&Начало, &Конец, Период, , , , КорСчет В ИЕРАРХИИ (&КорСчет2), ) КАК ХозрасчетныйОбороты
    |ГДЕ
    |    ХозрасчетныйОбороты.Счет = &Счет2
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОбороты.Субконто1
    |;


Дальше надо одну добавить в конец другой и сгруппировать по контрагенту. Никак не соображу, как сделать... Объединение?
Ответ: ВЫБРАТЬ
    ПартииТоваровНаСкладахОбороты.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(ПартииТоваровНаСкладахОбороты.Номенклатура),
    NULL КАК СтоимостьОборот,
    ПартииТоваровНаСкладахОбороты.КоличествоОборот
ПОМЕСТИТЬ q
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Обороты КАК ПартииТоваровНаСкладахОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПартииТоваровНаСкладахОбороты.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(ПартииТоваровНаСкладахОбороты.Номенклатура),
    ПартииТоваровНаСкладахОбороты.СтоимостьОборот,
    NULL
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Обороты КАК ПартииТоваровНаСкладахОбороты
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    q.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(q.Номенклатура),
    СУММА(q.СтоимостьОборот) КАК СтоимостьОборот,
    СУММА(q.КоличествоОборот) КАК КоличествоОборот
ИЗ
    q КАК q

СГРУППИРОВАТЬ ПО
    q.Номенклатура
Вопрос: Помогите разобраться как свернуть строки запроса

ВЫБРАТЬ
ХозрасчетныйОбороты.Субконто2 КАК Субконто2,
ХозрасчетныйОбороты.Счет КАК Счет,
ХозрасчетныйОбороты.Субконто1.Наименование КАК Субконто1Наименование,
ХозрасчетныйОбороты.КорСчет КАК КорСчет
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &ОкончаниеПериода, Регистратор, , , , , ) КАК ХозрасчетныйОбороты
ГДЕ
ХозрасчетныйОбороты.Период >= &НачалоПериода
И ХозрасчетныйОбороты.Период <= &ОкончаниеПериода
И ХозрасчетныйОбороты.Субконто2 = &Склад

Получается так:
Склад |Счет |Номенклатура|КорСчет|Сумма|
основной|10.01 |Варежки |26 | 5 р |
основной|10.01 |Валенки |10.01 | 10p |

Как хочу:

Склад |Счет |Номенклатура|КорСчет 26|КорСчет 10.01|
основной|10.01 |Варежки |5p | 10p |
ну или как то так. Это реально сделать в запросе, или только уже в обработке вывода в табдок ?
Ответ:
Это же не цены. Это ХозрасчетныйОбороты, обороты складов, нужно видеть в пределах 1 склада откуда и куда двигалась номенклатура. Если есть бухгалтерия 8.3 посмотрите стандартный отчет "обороты СЧЕТА". Вот у меня тоже самое 1в1 кроме того, что у меня "обороты СКЛАДА". хотите фото ?
--- Объединение сообщений, 27 дек 2017 ---
Да, я наверно ошибся, номенклатура не разные, не варежки и валенки, а и там и там варежки допустим.
Получается так:
Склад |Счет |Номенклатура|КорСчет|Сумма|
основной|10.01 |Варежки |26 | 5 р |
основной|10.01 |Варежки |10.01 | 10p |

Как хочу:

Склад |Счет |Номенклатура|КорСчет 26|КорСчет 10.01|
основной|10.01 |Варежки |5p | 10p |
--- Объединение сообщений, 27 дек 2017 ---

Вложения:

  • Размер файла:
    90,3 КБ
    Просмотров:
    4