Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
11 Мая 2021, 03:32
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
МультиВход
 
collapse

Автор Тема: Вопрос про запрос  (Прочитано 10161 раз)

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

Оффлайн Потемкин

  • *
  • Регистрация: 2010-02-10
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
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 По МетаданныеПланСчетов.МаксКоличествоСубконто Цикл
Содержание = ВыборкаПроводок[СтрЗаменить("СубконтоКт{н}Представление", "{н}", Строка(н))];
Если ЗначениеЗаполнено(Содержание) Тогда
ОблСубконто.Параметры.Содержание = Содержание;
ОблСубконто.Параметры.Расшифровка = Расшифровка;
ДокументРезультат.Вывести(ОблСубконто, ВыборкаПроводок.Уровень());
КонецЕсли;
КонецЦикла;

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

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

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

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

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

КонецЦикла;

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

  }

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

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

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

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

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


Оффлайн Потемкин

  • *
  • Регистрация: 2010-02-10
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
Ой, все кроме запроса это хлам. Случайно попало... :dfbsdfbsdf:

Оффлайн Tatitutu

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

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

Оффлайн Verba

  • *
  • Регистрация: 2010-03-23
  • Сообщений: 10
  • РЕПУТАЦИЯ: 1
  • КПД: 10%
1 - так названо поле во вложенном запросе в условии, накладываемом на таблицу ДвиженияССубконто.
То есть выбирается первое субконто. Ну вот так взяли и назвали ))))

Оффлайн Verba

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

Оффлайн Потемкин

  • *
  • Регистрация: 2010-02-10
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
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: Или два "ВНУТРЕННЕЕ СОЕДИНЕНИЕ" нельзя применять, поправьте если ошибаюсь

Оффлайн Потемкин

  • *
  • Регистрация: 2010-02-10
  • Сообщений: 12
  • РЕПУТАЦИЯ: 0
А вот еще трабла. В конструкторе запросов из раздела "Таблицы и поля" вибираю Хозрасчетный.Обороты из "База данных", но когда он попадает в область "Таблицы" , то пропадают некоторые поля: регистратор, номерстроки...? Help :xfbnsdfb:

Оффлайн Verba

  • *
  • Регистрация: 2010-03-23
  • Сообщений: 10
  • РЕПУТАЦИЯ: 1
  • КПД: 10%
Как бы вам ответить...
Вы слышали про построитель запроса?
Вы знаете про параметризацию виртуальных таблиц?

Оффлайн Verba

  • *
  • Регистрация: 2010-03-23
  • Сообщений: 10
  • РЕПУТАЦИЯ: 1
  • КПД: 10%
Извиняюсь, построитель отчета.

Оффлайн Verba

  • *
  • Регистрация: 2010-03-23
  • Сообщений: 10
  • РЕПУТАЦИЯ: 1
  • КПД: 10%
Этот отчет, откуда взят запрос, сделан в стандартных конфах на построителе, оттуда и неронятное поле 1.
Регистратор и номер строки в полях появляются тогда, когда в параметрах виртуальной таблицы Хозрасчетный.Обороты выбрана периодичность.



Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Последние вакансии

* Том 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
69 Сообщений
LexaK
32 Сообщений
kiokiosan
17 Сообщений
alexandr_ll
13 Сообщений
DmitriyF DmitriyF
11 Сообщений
Мария2021
9 Сообщений
antoneus antoneus
9 Сообщений
alex0402 alex0402
8 Сообщений
Ивашка
7 Сообщений
kah
7 Сообщений

* Кто онлайн

  • Точка Гостей: 136
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Инструменты

* Дополнительно

Поиск