Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 21:20

Вопрос про запрос

Автор Потемкин, 24 мар 2010, 13:42

0 Пользователей и 1 гость просматривают эту тему.

Потемкин

1/4 года как уж в  1С8, но вот не могу понять эту строку запроса(фрагмент):

ГДЕ 1 В (Выбрать Первые 1 1 Из РегистрБухгалтерии.Хозрасчетный.Субконто КАК Суб1
ГДЕ Суб1.Регистратор = ДвиженияССубконто.Регистратор И Суб1.НомерСтроки = ДвиженияССубконто.НомерСтроки И  Суб1.Вид = &Вид1)

Неясно что значит ГДЕ 1 В..., в предыдущих строках запроса нигде нет этой единицы.
На всякий случай,  вот весь запрос(Это встроенный отчет "карточка субконто"):
ВЫБРАТЬ РАЗРЕШЕННЫЕ
НАЧАЛОПЕРИОДА(ДвиженияССубконто.Период, ДЕНЬ) КАК НачПериода,
ДвиженияССубконто.Период КАК Период,
ДвиженияССубконто.Регистратор КАК Регистратор,
ДвиженияССубконто.Содержание КАК Содержание,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.Регистратор) КАК РегистраторПредставление,
ДвиженияССубконто.НомерСтроки КАК НомерСтроки,
ДвиженияССубконто.СчетДт.Вид ВидСчетаДт,
ДвиженияССубконто.СчетКт.Вид ВидСчетаКт,
ДвиженияССубконто.СчетДт.Валютный СчетВалютныйДт,
ДвиженияССубконто.СчетКт.Валютный СчетВалютныйКт,
ДвиженияССубконто.СчетДт.Количественный СчетКоличественныйДт,
ДвиженияССубконто.СчетКт.Количественный СчетКоличественныйКт,
ДвиженияССубконто.СчетДт.Представление КАК СчетДтПредставление,
ДвиженияССубконто.СчетКт.Представление КАК СчетКтПредставление,
ДвиженияССубконто.КоличествоДт,
ДвиженияССубконто.КоличествоКт,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоДт1) КАК СубконтоДт1Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоДт2) КАК СубконтоДт2Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоДт3) КАК СубконтоДт3Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоКт1) КАК СубконтоКт1Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоКт2) КАК СубконтоКт2Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоКт3) КАК СубконтоКт3Представление,
ДвиженияССубконто.ВалютаДт.Представление КАК ВалютаДт,
ДвиженияССубконто.ВалютаКт.Представление КАК ВалютаКт,
ДвиженияССубконто.ВалютнаяСуммаДт,
ДвиженияССубконто.ВалютнаяСуммаКт,
ДвиженияССубконто.Регистратор.Дата КАК РегистраторДата,
ОстаткиИОбороты.СуммаНачальныйОстатокДт,
ОстаткиИОбороты.СуммаНачальныйОстатокКт,
ОстаткиИОбороты.СуммаКонечныйОстатокДт,
ОстаткиИОбороты.СуммаКонечныйОстатокКт,
ОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
ОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
ОстаткиИОбороты.КоличествоОборотДт,
ОстаткиИОбороты.КоличествоОборотКт,
ОстаткиИОбороты.ВалютнаяСуммаОборотДт,
ОстаткиИОбороты.ВалютнаяСуммаОборотКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНач, &ДатаКон, Организация = &Организация  И Субконто1 В ИЕРАРХИИ(&ПараметрОтбора0)) КАК ДвиженияССубконто

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

УПОРЯДОЧИТЬ ПО
НачПериода,
Период,
РегистраторДата,
Регистратор,
НомерСтроки
ИТОГИ
СУММА(СуммаОборотДт),
СУММА(СуммаОборотКт),
СУММА(СуммаНачальныйОстатокДт),
СУММА(СуммаНачальныйОстатокКт),
СУММА(СуммаКонечныйОстатокДт),
СУММА(СуммаКонечныйОстатокКт)
ПО
Общие,
НачПериода
 
 
  Процедура СформироватьОтчет(ДокументРезультат, ПоказыватьЗаголовок, ВысотаЗаголовка)
 
  ВыборкаОбщие = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Общие");
ВыборкаОбщие.Следующий();

ВыборкаПоПериодам = ВыборкаОбщие.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НачПериода");
ВыборкаПоПериодам.Следующий();

ВыборкаДетальная = ВыборкаПоПериодам.Выбрать(ОбходРезультатаЗапроса.Прямой);
ВыборкаДетальная.Следующий();
  .
  СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("ОбластьШапкаТаблицы",          ОблШапкаТаблицы);
СтруктураПараметров.Вставить("ОбластьЗаголовокПроводки",     Макет.ПолучитьОбласть("ЗаголовокПроводки"));
СтруктураПараметров.Вставить("ОбластьОбороты",               Макет.ПолучитьОбласть("Обороты"));
СтруктураПараметров.Вставить("ОбластьСтрокаСубконто",        Макет.ПолучитьОбласть("СтрокаСубконто"));
СтруктураПараметров.Вставить("ОбластьКоличествоПроводки",    Макет.ПолучитьОбласть("КоличествоПроводки"));
СтруктураПараметров.Вставить("ОбластьВалютнаяСуммаПроводки", Макет.ПолучитьОбласть("ВалютнаяСуммаПроводки"));

 
  Если Не ЗначениеЗаполнено(Период) Тогда
// без разбивки по периодам
ВывестиПроводки(ДокументРезультат, ВыборкаОбщие, СтруктураПараметров)
    {
    ОблЗаголовокПроводки = СтруктураПараметров.ОбластьЗаголовокПроводки;

    ВыборкаПроводок = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Общие").Выбрать(ОбходРезультатаЗапроса.Прямой);
    ВывестиСубконто(ДокументРезультат, ВыборкаПроводок, СтруктураПараметров, Расшифровка)
    {
    ОблСубконто = СтруктураПараметров.ОбластьСтрокаСубконто;

Для н=1 По МетаданныеПланСчетов.МаксКоличествоСубконто Цикл
Содержание = ВыборкаПроводок[СтрЗаменить("СубконтоДт{н}Представление", "{н}", Строка(н))];
Если ЗначениеЗаполнено(Содержание) Тогда
ОблСубконто.Параметры.Содержание = Содержание;
ОблСубконто.Параметры.Расшифровка = Расшифровка;
ДокументРезультат.Вывести(ОблСубконто, ВыборкаПроводок.Уровень());
КонецЕсли;
КонецЦикла;

Для н=1 По МетаданныеПланСчетов.МаксКоличествоСубконто Цикл
Содержание = ВыборкаПроводок[СтрЗаменить("СубконтоКт{н}Представление", "{н}", Строка(н))];
Если ЗначениеЗаполнено(Содержание) Тогда
ОблСубконто.Параметры.Содержание = Содержание;
ОблСубконто.Параметры.Расшифровка = Расшифровка;
ДокументРезультат.Вывести(ОблСубконто, ВыборкаПроводок.Уровень());
КонецЕсли;
КонецЦикла;

    }
    }
   
    Иначе
// с разбивкой по периодам
ФорматПериода = БухгалтерскиеОтчеты.ПолучитьСтрокуФорматаПериода(Период);

ВыборкаПоПериодам = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Общие").Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НачПериода");

Пока ВыборкаПоПериодам.Следующий() Цикл

ВывестиПодИтог(ДокументРезультат, ВыборкаПоПериодам, СтруктураПараметров, Формат(ВыборкаПоПериодам.НачПериода, ФорматПериода));

ВывестиПроводки(ДокументРезультат, ВыборкаПоПериодам, СтруктураПараметров);

КонецЦикла;

КонецЕсли;
 
  ВывестиПодИтог(ДокументРезультат, ВыборкаОбщие, СтруктураПараметров, "Итого за период")
  {
  ОблИтог = СтруктураПараметров.ОбластьОбороты;
ОблИтог.Параметры.ОписательПериода = ОписательПериода;
ОблИтог.Параметры.СуммаОборотДт = ВыборкаОбщие.СуммаОборотДт;
ОблИтог.Параметры.СуммаОборотКт = ВыборкаОбщие.СуммаОборотКт;
ДокументРезультат.Вывести(ОблИтог, ВыборкаОбщие.Уровень());

  }

  ВыборкаПоПериодам.Сбросить();

Пока ВыборкаПоПериодам.Следующий() Цикл

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

Пока ВыборкаДетальная.Следующий() Цикл
ОблСальдоПараметры.СуммаСальдоДт = ВыборкаДетальная.СуммаКонечныйОстатокДт;
ОблСальдоПараметры.СуммаСальдоКт = ВыборкаДетальная.СуммаКонечныйОстатокКт;
КонецЦикла;
КонецЦикла;

  .
 
 
КонецПроцедуры
 
 

Потемкин

Ой, все кроме запроса это хлам. Случайно попало... :dfbsdfbsdf:

Tatitutu

Запрос работает ? На форме реквизита с индетификатором 1 нет ?

*  MAGAZKA - лучшая программа для розничного магазина (с) *

Verba

1 - так названо поле во вложенном запросе в условии, накладываемом на таблицу ДвиженияССубконто.
То есть выбирается первое субконто. Ну вот так взяли и назвали ))))

Verba

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

Потемкин

Цитата: Verba от 24 мар 2010, 16:26
1 - так названо поле во вложенном запросе в условии, накладываемом на таблицу ДвиженияССубконто.
То есть выбирается первое субконто. Ну вот так взяли и назвали ))))
Если правильно понял, то 1=Суб1.
и еще, этот вложенный запрос сродни внутреннему соединению, за тем исключением что выбирается только ДвиженияССубконто?
Вот альтернативный вариант (может быть):
ДвиженияССубконто.СчетДт.Валютный СчетВалютныйДт,
ДвиженияССубконто.СчетКт.Валютный СчетВалютныйКт,
ДвиженияССубконто.СчетДт.Количественный СчетКоличественныйДт,
ДвиженияССубконто.СчетКт.Количественный СчетКоличественныйКт,
ДвиженияССубконто.СчетДт.Представление КАК СчетДтПредставление,
ДвиженияССубконто.СчетКт.Представление КАК СчетКтПредставление,
ДвиженияССубконто.КоличествоДт,
ДвиженияССубконто.КоличествоКт,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоДт1) КАК СубконтоДт1Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоДт2) КАК СубконтоДт2Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоДт3) КАК СубконтоДт3Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоКт1) КАК СубконтоКт1Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоКт2) КАК СубконтоКт2Представление,
ПРЕДСТАВЛЕНИЕ(ДвиженияССубконто.СубконтоКт3) КАК СубконтоКт3Представление,
ДвиженияССубконто.ВалютаДт.Представление КАК ВалютаДт,
ДвиженияССубконто.ВалютаКт.Представление КАК ВалютаКт,
ДвиженияССубконто.ВалютнаяСуммаДт,
ДвиженияССубконто.ВалютнаяСуммаКт,
ДвиженияССубконто.Регистратор.Дата КАК РегистраторДата,
ОстаткиИОбороты.СуммаНачальныйОстатокДт,
ОстаткиИОбороты.СуммаНачальныйОстатокКт,
ОстаткиИОбороты.СуммаКонечныйОстатокДт,
ОстаткиИОбороты.СуммаКонечныйОстатокКт,
ОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
ОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
ОстаткиИОбороты.КоличествоОборотДт,
ОстаткиИОбороты.КоличествоОборотКт,
ОстаткиИОбороты.ВалютнаяСуммаОборотДт,
ОстаткиИОбороты.ВалютнаяСуммаОборотКт

ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(&ДатаНач, &ДатаКон, Организация = &Организация  И Субконто1 В ИЕРАРХИИ(&ПараметрОтбора0)) КАК ДвиженияССубконто

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

P.s: Или два "ВНУТРЕННЕЕ СОЕДИНЕНИЕ" нельзя применять, поправьте если ошибаюсь

Потемкин

А вот еще трабла. В конструкторе запросов из раздела "Таблицы и поля" вибираю Хозрасчетный.Обороты из "База данных", но когда он попадает в область "Таблицы" , то пропадают некоторые поля: регистратор, номерстроки...? Help :xfbnsdfb:

Verba

Как бы вам ответить...
Вы слышали про построитель запроса?
Вы знаете про параметризацию виртуальных таблиц?

Verba

Извиняюсь, построитель отчета.

Verba

Этот отчет, откуда взят запрос, сделан в стандартных конфах на построителе, оттуда и неронятное поле 1.
Регистратор и номер строки в полях появляются тогда, когда в параметрах виртуальной таблицы Хозрасчетный.Обороты выбрана периодичность.


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск