Разработка и оптимизация запросов в 1С:Предприятие 8.3. Модуль 9. Сложные случаи написания запросов
На данной странице задавайте вопросы по материалам и практическим заданиям девятого модуля курса «Разработка и оптимизация запросов в 1С:Предприятие 8.3».
Практические задания
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (506):
Комментарии закрыты

В задачах на УТ11 используется следующие механизмы работы с измерениями ВТ ВыручкаИСебестоимостьПродаж.Обороты:
Отбор делается не по АналитикаУчетаНоменклатуры.Номнеклатура = &Номенклатура, а по вхождению КлючиАналитикиУчетаНоменклатуры в выборку, содержащую нужную номенклатуру. Этот вариант проверялся, как более эффективный? (Мы вроде бы решали аналогичную задачу с подобием и там предварительное создание временной таблицы с выборкой по нужным должностям проигрывало варианту с непосредственным фильтром на подобие в ВТ).
Вместо соединения через точку АналитикаУчетаПоПартнеру.Партнер используется явное соединение со справочником КлючиАналитикиУчетаПоПартнерам. А это почему именно так делается? Вроде бы, как мы проверяли, в последних платформах процедура разыменования выполняется достаточно эффективно.
…
(текст комментария доступен только участникам Мастер-группы)
Во это да! Я уже 3 годя, работая с ЕРП, все время выбирал номенклатуру и контрагента непосредственно из РН через точку из соответствующего ключа аналитики. Это могло приводить к ошибкам? Можно поподробнее объяснить зачем в ЕРП (УТ11) нужны одновременно и РС и справочник для этих целей?
…
(текст комментария доступен только участникам Мастер-группы)
Я так и не понял: обращение через точку может привести к ошибкам? Если да, то в каких случаях?
…
(текст комментария доступен только участникам Мастер-группы)
Не имея доступа к материалам курса, пытался самостоятельно решить задачу нумерации элементов произвольной таблицы запросом. Думал долго, но решения так и не нашел. Сегодня с интересом стал смотреть видеоуроки на эту тему и с сожалением обнаружил, что эта задача решается только для конкретных таблиц, содержащих «сравнимые» записи. Я правильно понял, что для произвольных таблиц эта задача неразрешима?
…
(текст комментария доступен только участникам Мастер-группы)
Вопрос по задаче 37. Для чего нам понадобилось создавать ВТ из параметра &Сумма (а потом еще и устраивать пляски по поводу ее вычитания из другой таблицы)? На мой взгляд, все решается простым использованием параметра &Сумма. Вот фрагмент пакета:
База.Контрагент КАК Контрагент,
База.СуммаОборот * &Сумма / Итог.СуммаОборот КАК Доля
ПОМЕСТИТЬ Распределение
ИЗ
База КАК База
ПОЛНОЕ СОЕДИНЕНИЕ Итог КАК Итог
ПО (ИСТИНА)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
&Сумма - СУММА(Распределение.Доля) КАК Доля
ПОМЕСТИТЬ Остаток
ИЗ
Распределение КАК Распределение
;
…
(текст комментария доступен только участникам Мастер-группы)
Соображения по приведенным вариантам решения задачи 33. У меня есть замечания к каждому из 3 приведенных вариантов. Первый — дублирование кода, а значит проблемы с любым изменением запроса. Второй — использование условия Или в параметрах ВТ, что, как я слышал, может приводить к проблемам производительности, третий — не сильно понятный и читаемый, а также я ни разу не видел, чтобы он применялся в типовых конфигурациях. Мне больше всего нравится способ, который повсеместно используется в конфигурации ERP: текст запроса корректируется с использованием функции СтрЗаменить. Т.е. конструктором создается запрос так, как если бы номенклатура была задана, а потом, если это не так, фрагмент «Номенклатура = &Номенклатура» заменяется на пустую строку. Запрос в любом случае получается оптимальным, мы можем продолжать менять его конструктором запроса, и он достаточно нагляден. А Ваше мнение по этим четырем вариантам?
…
(текст комментария доступен только участникам Мастер-группы)
День добрый, в п.2 периодичность регистра = 1 день, мы нашли максимальную дату. Зачем дополнительно получаем максимальный регистратор?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! вопрос по практ.заданию 23 : зачем обращаться к срезу последних, ведь нам нужно данные за все время. Чем хуже вариант-выбор всех записей с «руководитель», наложить условие БЕЗ ПОВТОРЯЮЩИХСЯ ?
вопрос по 24 заданию: чем хуже ниже предлагаемый вариант:
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
&ТипЦен1 КАК ТипЦен,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ПОМЕСТИТЬ Закуп
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен1) КАК ЦеныНоменклатурыСрезПоследних
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
&ТипЦен2 КАК ТипЦен,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ПОМЕСТИТЬ Прод
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен2) КАК ЦеныНоменклатурыСрезПоследних
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЕСТЬNULL(Закуп.Номенклатура, Прод.Номенклатура) КАК Номенклатура,
Закуп.ТипЦен КАК ТипЦен,
Закуп.Цена КАК Цена,
Прод.ТипЦен КАК ТипЦен1,
Прод.Цена КАК Цена1,
ВЫБОР
КОГДА Закуп.Цена ЕСТЬ NULL
ТОГДА 0
ИНАЧЕ 100 * (Прод.Цена / Закуп.Цена) — 100
КОНЕЦ КАК Наценка
ИЗ
Прод КАК Прод
ПОЛНОЕ СОЕДИНЕНИЕ Закуп КАК Закуп
ПО (Закуп.Номенклатура = Прод.Номенклатура)
УПОРЯДОЧИТЬ ПО
Номенклатура
Спасибо и с Новым годом!
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! В 23 видео 9 модуля, в первом запросе проиндексировали НаправлениеДеятельности. А если бы не индексировали, чтобы изменилось?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! В 22 видео 9 модуля, про премии. Продажи составили 230 000 руб в феврале, премия 10 %, а сумма премии 21 500 руб. Как она получилась?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день!
В задании 32, в третьем запросе РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ВТ_год.ГОД, ГОД), КОНЕЦПЕРИОДА(ВТ_год.ГОД, ГОД), ДЕНЬ) > 364. А почему нельзя оставить РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Дата1, ГОД), КОНЕЦПЕРИОДА(&Дата2, ГОД), ДЕНЬ) > 364. ?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день!
В первом видео 9 модуля, поле Цена выбираем при соединения временной таблицы ВТ_Товары и таблицы ЦеныТоваров, а почему поле Цена не выбрать сразу при соединении временной таблицы ВТ_Продажи и таблицы ЦеныТоваров ?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день! Задачка.Необходимо сделать распределение суммы заработной платы сотрудника, которая указана в поле «Сумма заработной платы сотрудника», пропорционально стоимости выполненных работ из таблицы «Трудозатраты сотрудника». Распределять необходимо только на 5 самых дорогих работ. Стоимость работ считается как произведение количества часов (колонка «Затрачено часов») и Цены типа работ, цены типов работ указаны в таблице «Цены типов работ».
Необходимо сделать отчет по получившемуся распределению, в котором будет список работ с суммами ЗП распределенными на них и итоговая сумма ЗП.
Проблема как выбрать 5 наиболее дорогих работ? Данные загнать в таблицу значений?
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПервоначальноеЗаполнениеТабиц();
КонецПроцедуры
&НаСервере
Процедура ПервоначальноеЗаполнениеТабиц()
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Поддержка","Задача 25154",8.25));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Разработка","Отчет по затратам",10.83));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Разработка","Добкумент Чек ККМ",23.5));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Поддержка","Задача 32454",13.3));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Поддержка","Задача 25225",39.6));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Разработка","Выгрузка в ЗУП",11.11));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Сложная разработка","Обмен с УПП",33.22));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Разработка","Отчет по себестоимости",12.02));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Сложная разработка","Распределение затрат Бух",21.06));
ЗаполнитьЗначенияСвойств(ТрудозатратыСотрудника.Добавить(), Новый Структура("ТипРабот,ВидРабот,ЗатраченоЧасов","Поддержка","Задача 14342",1.27));
ЗаполнитьЗначенияСвойств(ЦеныТиповРабот.Добавить(), Новый Структура("ТипРабот,Цена","Поддержка",133));
ЗаполнитьЗначенияСвойств(ЦеныТиповРабот.Добавить(), Новый Структура("ТипРабот,Цена","Разработка",321));
ЗаполнитьЗначенияСвойств(ЦеныТиповРабот.Добавить(), Новый Структура("ТипРабот,Цена","Сложная разработка",525.5));
КонецПроцедуры //ПервоначальноеЗаполнениеТабиц
&НаКлиенте
Процедура РаспределитьЗП(Команда)
РаспределитьНаСервере();
КонецПроцедуры
&НаСервере
Процедура РаспределитьНаСервере()
Сумма = 0;
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("ТипРабот" );
Таблица.Колонки.Добавить("ВидРабот" );
Таблица.Колонки.Добавить("Сумма");
СтрТаб = Таблица.Добавить();
Для Каждого ТекСтрока из ЦеныТиповРабот Цикл
Отбор = Новый Структура("ТипРабот", ТекСтрока.ТипРабот);
НайденныеСтроки = ТрудозатратыСотрудника.НайтиСтроки(Отбор);
//СтрТаб.ТипРабот = НайденныеСтроки;
//СтрТаб.ТипРабот = ТекСтрока.ТипРабот;
Для Каждого НайденнаяСтрока из НайденныеСтроки Цикл
Сумма = Сумма + НайденнаяСтрока.ЗатраченоЧасов * ТекСтрока.Цена;
СтрТаб.ВидРабот = НайденнаяСтрока.ВидРабот;
СтрТаб.Сумма = Сумма;
КонецЦикла;
КонецЦикла;
Для Каждого Стр Из Таблица Цикл
Сообщить(Сумма);
КонецЦикла;
КонецПроцедуры
…
(текст комментария доступен только участникам Мастер-группы)
Отсортировать необходимо ТрудозатратыСотрудника, это структура, ее мы не можем отсортировать или выбрать из нее данные, необходимо выгрузить структуру в таблицу значений?
Проверьте. Что не так, в таблице значений только одна строка
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить(«ТипРабот»,Новый ОписаниеТипов(«Строка»));
Таблица.Колонки.Добавить(«ВидРабот»,Новый ОписаниеТипов(«Строка»));
Таблица.Колонки.Добавить(«ЗатраченоЧасов»,Новый ОписаниеТипов(«Число»));
СтрТаб = Таблица.Добавить();
Для Каждого ТекСтр из ТрудозатратыСотрудника Цикл
СтрТаб.ТипРабот =ТекСтр.ТипРабот;
СтрТаб.ВидРабот =ТекСтр.ВидРабот;
СтрТаб.ЗатраченоЧасов =ТекСтр.ЗатраченоЧасов;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(«ТЗ»,Таблица);
Запрос.Текст=»ВЫБРАТЬ
| ТЗ.ТипРабот,
| ТЗ.ВидРабот,
| ТЗ.ЗатраченоЧасов
|ПОМЕСТИТЬ ТаблЗнач
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ ПЕРВЫЕ 5
| ТаблЗнач.ТипРабот КАК ТипРабот,
| ТаблЗнач.ВидРабот КАК ВидРабот,
| ТаблЗнач.ЗатраченоЧасов КАК ЗатраченоЧасов
|ИЗ
| ТаблЗнач КАК ТаблЗнач
|
|УПОРЯДОЧИТЬ ПО
| ТаблЗнач.ЗатраченоЧасов УБЫВ»;
Выборка = Запрос.Выполнить().Выгрузить();
…
(текст комментария доступен только участникам Мастер-группы)
А если соединить две таблицы значений запросом через левое соединение:
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("ТипРабот",Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("ВидРабот",Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("ЗатраченоЧасов",Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Стоимость",Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Цена",Новый ОписаниеТипов("Число"));
Для Каждого ТекСтр из ТрудозатратыСотрудника Цикл
СтрТаб = Таблица.Добавить();
СтрТаб.ТипРабот =ТекСтр.ТипРабот;
СтрТаб.ВидРабот =ТекСтр.ВидРабот;
СтрТаб.ЗатраченоЧасов =ТекСтр.ЗатраченоЧасов;
КонецЦикла;
ТаблицаЦена = Новый ТаблицаЗначений;
ТаблицаЦена.Колонки.Добавить("ТипРабот",Новый ОписаниеТипов("Строка"));
ТаблицаЦена.Колонки.Добавить("Цена",Новый ОписаниеТипов("Число"));
Для Каждого ТекСт из ЦеныТиповРабот Цикл
СтТаб = ТаблицаЦена.Добавить();
СтТаб.ТипРабот =ТекСт.ТипРабот;
СтТаб.Цена =ТекСт.Цена;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Таблица",Таблица);
Запрос.УстановитьПараметр("ТаблицаЦена",ТаблицаЦена);
Запрос.Текст="ВЫБРАТЬ
| Таблица.ТипРабот КАК ТипРабот,
| ТаблицаЦена.ТипРабот КАК ТипРаботЦена,
| ТаблицаЦена.Цена КАК Цена,
| Таблица.ВидРабот КАК ВидРабот,
| Таблица.ЗатраченоЧасов КАК ЗатраченоЧасов
|ИЗ
| &Таблица КАК Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ &ТаблицаЦена КАК ТаблицаЦена
| ПО Таблица.ТипРабот = ТаблицаЦена.ТипРабот";
Выборка = Запрос.Выполнить().Выгрузить();
Выдает ошибку. Скриншот
…
(текст комментария доступен только участникам Мастер-группы)
Использовать менеджер временных таблиц ?
…
(текст комментария доступен только участникам Мастер-группы)
1) В скриншоте две таблицы, хочу в ТрудоЗатратыСотрудника добавить колонку Цена из Цены типов работ. Соединить их запросом по колонке ТипРабот. Соответственно, чтобы цены установились на соответствующий Тип работ.Судя из 6 урока, это сделать нельзя в запросе? Нужно программно производить соединение?
Или можно соединить левым соединением? А потом выгрузить в таблицу значений?
2) Если возможно соединить запросом, возможно ли запросом перемножить две колонки и поместить результат в третью и из таблицы выбрать по это колонке 5 больших чисел?
…
(текст комментария доступен только участникам Мастер-группы)
Таблицы соединились, полученная выгрузилась в Таблицу значений. Теперь есть возможность добавить еще колонку и туда записать произведение двух других колонок, но при обходе таблицы значений тип значений этих колонок не «Число», как в таком случае поступить, загрузить в новую таблицу значений?
Запрос = Новый Запрос;
МВТ = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр(«Таблица»,РеквизитФормыВЗначение(«ТрудозатратыСотрудника»));
Запрос.УстановитьПараметр(«ЦеныТиповРабот»,РеквизитФормыВЗначение(«ЦеныТиповРабот»));
Запрос.МенеджерВременныхТаблиц = МВТ;
//Запрос.УстановитьПараметр(«ТаблицаЦена»,ТаблицаЦена);
Запрос.Текст=»ВЫБРАТЬ
| Таблица.ТипРабот КАК ТипРабот,
| Таблица.ВидРабот КАК ВидРабот,
| Таблица.ЗатраченоЧасов КАК ЗатраченоЧасов
|ПОМЕСТИТЬ ВТ_Таблица
|ИЗ
| &Таблица КАК Таблица
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫРАЗИТЬ(ВТ_Таблица.ТипРабот КАК СТРОКА(150)) КАК ТипРабот,
| ВЫРАЗИТЬ(ВТ_Таблица.ВидРабот КАК СТРОКА(150)) КАК ВидРабот,
| СУММА(ВТ_Таблица.ЗатраченоЧасов) КАК ЗатраченоЧасов
|ИЗ
| ВТ_Таблица КАК ВТ_Таблица
|
|СГРУППИРОВАТЬ ПО
| ВЫРАЗИТЬ(ВТ_Таблица.ТипРабот КАК СТРОКА(150)),
| ВЫРАЗИТЬ(ВТ_Таблица.ВидРабот КАК СТРОКА(150))
|
|УПОРЯДОЧИТЬ ПО
| ТипРабот,
| ВидРабот
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЦеныТиповРабот.ТипРабот КАК ТипРабот,
| ЦеныТиповРабот.Цена КАК Цена
|ПОМЕСТИТЬ ВТ_ЦеныТиповРабот
|ИЗ
| &ЦеныТиповРабот КАК ЦеныТиповРабот
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫРАЗИТЬ(ВТ_Таблица.ТипРабот КАК СТРОКА(150)) КАК ТипРабот,
| ВЫРАЗИТЬ(ВТ_Таблица.ВидРабот КАК СТРОКА(150)) КАК ВидРабот,
| ВТ_Таблица.ЗатраченоЧасов КАК ЗатраченоЧасов,
| ВТ_ЦеныТиповРабот.Цена КАК Цена
|ИЗ
| ВТ_Таблица КАК ВТ_Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЦеныТиповРабот КАК ВТ_ЦеныТиповРабот
| ПО ВТ_Таблица.ТипРабот = ВТ_ЦеныТиповРабот.ТипРабот
|
|УПОРЯДОЧИТЬ ПО
| ТипРабот,
| ВидРабот»;
Выборка = Запрос.Выполнить().Выгрузить();
…
(текст комментария доступен только участникам Мастер-группы)
Вот так получилось, может конечно не оптимально…
Вопрос, в другой процедуре этой формы, как получить таблицу значений Итоговая. Для того чтобы ее вывести в печатную форму?
Выборка = Запрос.Выполнить().Выгрузить();
Итоговая = Новый ТаблицаЗначений;
Итоговая.Колонки.Добавить(«ТипРабот»,Новый ОписаниеТипов(«Строка»));
Итоговая.Колонки.Добавить(«ВидРабот»,Новый ОписаниеТипов(«Строка»));
Итоговая.Колонки.Добавить(«ЗатраченоЧасов»,Новый ОписаниеТипов(«Число»));
Итоговая.Колонки.Добавить(«Цена»,Новый ОписаниеТипов(«Число»));
Итоговая.Колонки.Добавить(«Стоимость»,Новый ОписаниеТипов(«Число»));
Для Каждого стр из Выборка цикл
Строка =Итоговая.Добавить();
Строка.ТипРабот = стр.ТипРабот;
Строка.ВидРабот = стр.ВидРабот;
Строка.ЗатраченоЧасов = стр.ЗатраченоЧасов;
Строка.Цена = стр.Цена;
Строка.Стоимость = Строка.Цена *Строка.ЗатраченоЧасов;
КонецЦикла;
…
(текст комментария доступен только участникам Мастер-группы)
В другой процедуре переменная Выборка выдает ошибку не определена….Таблицу значений передать через ЗначениеВРеквизитФормы ?
…
(текст комментария доступен только участникам Мастер-группы)
В вашей учебной базе цены номенклатуры введены позднее документов реализации, поэтому пример со срезом последних на каждую дату вернул пустые цены. И сами метаданные в видео отличаются от базы: ЦеныТоваров в видео и ЦеныНоменклатуры в базе.
…
(текст комментария доступен только участникам Мастер-группы)
А где она лежит? В архивах с уроками и практическими не нашёл.
…
(текст комментария доступен только участникам Мастер-группы)
Уточняющий вопрос по видеоуроку 9.20. Прием, похожий на показанный в уроке я встречал ранее в практике под названием «Тэта-соединение». Так ли это?
…
(текст комментария доступен только участникам Мастер-группы)
Задачу 33 решил подобным образом:
"ВЫБРАТЬ
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.СуммаОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, Номенклатура В ИЕРАРХИИ (&Товар)) КАК ПродажиОбороты";
В видео подобное решение описано не было, почему? Методологически не верно?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте.
Модуль9. Задача- работа с журналом регистрации.
Не получилось подключится к файлу 1cv8.lgd
DRIVER={SQLite3 ODBC Driver}; Database=D:\Base1C8\1С_курсы_Запросы\БД_Модуль2\1Cv8Log\1Cv8.lgd; Biglnt=1
Ошибка: ODBC.SQLSTATE:IM002 Источник данных не найден.
Может драйвер установлен не тот. Куда посмотреть?
Спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Все получилось. Переустановила драйвер.
Если бы тексты запросов всех рассмотренных задач можно было бы посмотреть в текстовом документе, то это очень помогло бы в обучении.
Спасибо. Курс очень интересный и полезный.
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте.
Задача «Список потенциальных покупателей».
Почему для выбора партнера необходимо связывать с РегистрСведений.АналитикаУчетаПоПартнерам, а не выбирать
из ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо. Теперь понятно.
Вопрос по 38 задаче. Там указываются параметры подключения к базе, но на экране их очень плохо видно, поэтому вопрос, где их взять? а еще более актуальный вопрос, где взять этот самый драйвер SQLite с хотя бы минимальными инструкциями по установке и настройке.
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте.
Я не могу найти ИБ для разбора задач модуля 9:
Расчет премии сотрудникам
Взаиморасчеты по направлениям деятельности.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день.
Вопрос по видео 32, отчет по продажам. Для чего создаются две временных таблица со счетами 9001 и 50? Почему в условиях запроса к таблице «ХозрасчетныйОбороты» нельзя было указать «Счет в иерархии &Счет9001»?
Аналогично в 33 видео. Мне кажется логичней передать в параметрах массив счетов «91.02, 90.04, 90.05 и т.д.» чем в запросе через «ИЛИ» создавать ВТ.
Это для наглядности так сделано или такой подход более оптимизирован?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день. Столкнулся с проблемой в универсальном отчете. В УПП формирую отчет «Валовая прибыль». Если получить данные запросом в консоли, то в него попадают суммы документов корректировки реализации (количество = 0). Если делать отчетом — нет сумм. Причем запрос беру из ПостроительОтчета.Текст. Но получаю разный результат. Отборы проверил. Границы дат тоже ни при чем.
Подскажите пожалуйста куда копать?
…
(текст комментария доступен только участникам Мастер-группы)
Вот кусок модуля универсального отчета:
ПостроительОтчета.Макет = ПолучитьМакетПостротеляОтчета();
ПостроительОтчета.МакетОформления = _ПолучитьМакетОформления();
ПостроительОтчета.ОформитьМакет();
ПостроительОтчета.Параметры.Вставить("ДатаНач", ?(ДатаНач = Дата('00010101000000'), ДатаНач, Новый Граница(НачалоДня(ДатаНач), ВидГраницы.Включая)));
ПостроительОтчета.Параметры.Вставить("ДатаКон", ?(ДатаКон = Дата('00010101000000'), ДатаКон, Новый Граница(КонецДня(ДатаКон), ВидГраницы.Включая)));
ПостроительОтчета.Параметры.Вставить("ДатаНачала", ?(ДатаНач = Дата('00010101000000'), ДатаНач, НачалоДня(ДатаНач)));
ПостроительОтчета.Параметры.Вставить("ДатаКонца", ?(ДатаКон = Дата('00010101000000'), Дата("39991231"), КонецДня(ДатаКон)));
СвязанныеПоля = ДобавитьСвязанныеПоля();
ПоляПорядка = ДобавитьПоляПорядка();
ПостроительОтчета.Выполнить();
ПостроительОтчета.Вывести(ТабличныйДокумент);
УдалитьПоляПорядка(ПоляПорядка);
УдалитьСвязанныеПоля(СвязанныеПоля);
УдалитьОтборПериодичность(ОтборПериодичность);
ОформитьЗаголовок(ТабличныйДокумент);
А это запрос, получаемый в точке «ПостроительОтчета.Выполнить();» из параметра ПостроительОтчета.Текст
ПродажиОбороты.Контрагент КАК Контрагент,
ПродажиОбороты.ДокументПродажи КАК ДокументПродажи,
ПродажиОбороты.Организация КАК Организация,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
ПродажиОбороты.СтоимостьОборот,
ПродажиОбороты.НДСОборот,
ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
ПродажиОбороты.Регистратор КАК Регистратор,
ПродажиОбороты.Период КАК Период,
ПродажиОбороты.Подразделение КАК Подразделение,
ПродажиОбороты.Проект КАК Проект,
ПродажиОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента
ПОМЕСТИТЬ ВТ_Продажи
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, {(Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (Контрагент).* КАК Покупатель, (Организация).* КАК ПродажиОрганизация, (ЗаказПокупателя).* КАК ЗаказПокупателя, (ДокументПродажи).* КАК ДокументПродажи}) КАК ПродажиОбороты
ИНДЕКСИРОВАТЬ ПО
Проект,
ДокументПродажи,
Контрагент,
ЗаказПокупателя,
Номенклатура,
ДоговорКонтрагента,
Подразделение,
Период,
Регистратор,
ХарактеристикаНоменклатуры,
Организация
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ВложенныйЗапрос.Организация КАК Организация,
ВложенныйЗапрос.Проект КАК Проект,
ВложенныйЗапрос.Подразделение КАК Подразделение,
ВложенныйЗапрос.Покупатель КАК Покупатель,
ВложенныйЗапрос.ДоговорПокупателя КАК ДоговорПокупателя,
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ВложенныйЗапрос.ЗаказПокупателя КАК ЗаказПокупателя,
ВложенныйЗапрос.Регистратор КАК Регистратор,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Организация) КАК ОрганизацияПредставление,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Проект) КАК ПроектПредставление,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Подразделение) КАК ПодразделениеПредставление,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Покупатель) КАК ПокупательПредставление,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ДоговорПокупателя) КАК ДоговорПокупателяПредставление,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Номенклатура) КАК НоменклатураПредставление,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ХарактеристикаНоменклатуры) КАК ХарактеристикаНоменклатурыПредставление,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.ЗаказПокупателя) КАК ЗаказПокупателяПредставление,
ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Регистратор) КАК РегистраторПредставление,
ВложенныйЗапрос.Период КАК Период,
ВложенныйЗапрос.ПериодДень КАК ПериодДень,
ВложенныйЗапрос.ПериодНеделя КАК ПериодНеделя,
ВложенныйЗапрос.ПериодДекада КАК ПериодДекада,
ВложенныйЗапрос.ПериодМесяц КАК ПериодМесяц,
ВложенныйЗапрос.ПериодКвартал КАК ПериодКвартал,
ВложенныйЗапрос.ПериодПолугодие КАК ПериодПолугодие,
ВложенныйЗапрос.ПериодГод КАК ПериодГод,
ВложенныйЗапрос.Количество КАК Количество,
ВложенныйЗапрос.КоличествоЕдиницОтчетов КАК КоличествоЕдиницОтчетов,
ВложенныйЗапрос.КоличествоБазовыхЕдиниц КАК КоличествоБазовыхЕдиниц,
ВложенныйЗапрос.СтоимостьБезНДС КАК СтоимостьБезНДС,
ВложенныйЗапрос.НДС КАК НДС,
ВложенныйЗапрос.Стоимость КАК Стоимость,
ВложенныйЗапрос.Себестоимость КАК Себестоимость,
ВложенныйЗапрос.ВаловаяПрибыль КАК ВаловаяПрибыль,
ВложенныйЗапрос.Эффективность КАК Эффективность,
ВложенныйЗапрос.Рентабельность КАК Рентабельность,
ВложенныйЗапрос.ABCКлассНоменклатуры,
ВложенныйЗапрос.ПорядокСортировки КАК ПорядокСортировки,
ВложенныйЗапрос.ABCКлассПокупателя,
ВложенныйЗапрос.ПорядокСортировки1 КАК ПорядокСортировки1
{ВЫБРАТЬ
Организация.*,
Проект.*,
Подразделение.*,
Покупатель.*,
ДоговорПокупателя.*,
Номенклатура.*,
ХарактеристикаНоменклатуры.*,
ЗаказПокупателя.*,
Регистратор.*,
Период,
ПериодДень,
ПериодНеделя,
ПериодДекада,
ПериодМесяц,
ПериодКвартал,
ПериодПолугодие,
ПериодГод,
Количество,
КоличествоЕдиницОтчетов,
КоличествоБазовыхЕдиниц,
СтоимостьБезНДС,
НДС,
Стоимость,
Себестоимость,
ВаловаяПрибыль,
Эффективность,
Рентабельность,
ABCКлассНоменклатуры,
ABCКлассПокупателя}
ИЗ
(ВЫБРАТЬ
ВложенныйЗапрос.Организация КАК Организация,
ВложенныйЗапрос.Проект КАК Проект,
ВложенныйЗапрос.Подразделение КАК Подразделение,
ВложенныйЗапрос.Покупатель КАК Покупатель,
ВложенныйЗапрос.ДоговорПокупателя КАК ДоговорПокупателя,
ВложенныйЗапрос.Номенклатура КАК Номенклатура,
ВложенныйЗапрос.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ВложенныйЗапрос.ЗаказПокупателя КАК ЗаказПокупателя,
ВложенныйЗапрос.Регистратор КАК Регистратор,
ВложенныйЗапрос.Период КАК Период,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, ДЕНЬ) КАК ПериодДень,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, НЕДЕЛЯ) КАК ПериодНеделя,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, ДЕКАДА) КАК ПериодДекада,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, МЕСЯЦ) КАК ПериодМесяц,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, КВАРТАЛ) КАК ПериодКвартал,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, ПОЛУГОДИЕ) КАК ПериодПолугодие,
НАЧАЛОПЕРИОДА(ВложенныйЗапрос.Период, ГОД) КАК ПериодГод,
СУММА(ВложенныйЗапрос.Количество) КАК Количество,
СУММА(ВложенныйЗапрос.КоличествоЕдиницОтчетов) КАК КоличествоЕдиницОтчетов,
СУММА(ВложенныйЗапрос.КоличествоБазовыхЕдиниц) КАК КоличествоБазовыхЕдиниц,
СУММА(ВложенныйЗапрос.СтоимостьБезНДС) КАК СтоимостьБезНДС,
СУММА(ВложенныйЗапрос.НДС) КАК НДС,
СУММА(ВложенныйЗапрос.Стоимость) КАК Стоимость,
СУММА(ВложенныйЗапрос.Себестоимость) КАК Себестоимость,
ВЫБОР
КОГДА &НеВключатьНДСВСтоимостьПартий
ТОГДА СУММА(ВложенныйЗапрос.СтоимостьБезНДС)
ИНАЧЕ СУММА(ВложенныйЗапрос.Стоимость)
КОНЕЦ - СУММА(ВложенныйЗапрос.Себестоимость) КАК ВаловаяПрибыль,
100 * ВЫБОР
КОГДА &НеВключатьНДСВСтоимостьПартий
ТОГДА ВЫБОР
КОГДА СУММА(ВложенныйЗапрос.Себестоимость) <> 0
ТОГДА (СУММА(ВложенныйЗапрос.СтоимостьБезНДС) - СУММА(ВложенныйЗапрос.Себестоимость)) / СУММА(ВложенныйЗапрос.Себестоимость)
ИНАЧЕ 0
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА СУММА(ВложенныйЗапрос.Себестоимость) <> 0
ТОГДА (СУММА(ВложенныйЗапрос.Стоимость) - СУММА(ВложенныйЗапрос.Себестоимость)) / СУММА(ВложенныйЗапрос.Себестоимость)
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК Эффективность,
100 * ВЫБОР
КОГДА &НеВключатьНДСВСтоимостьПартий
ТОГДА ВЫБОР
КОГДА СУММА(ВложенныйЗапрос.СтоимостьБезНДС) <> 0
ТОГДА (СУММА(ВложенныйЗапрос.СтоимостьБезНДС) - СУММА(ВложенныйЗапрос.Себестоимость)) / СУММА(ВложенныйЗапрос.СтоимостьБезНДС)
ИНАЧЕ 0
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА СУММА(ВложенныйЗапрос.Стоимость) <> 0
ТОГДА (СУММА(ВложенныйЗапрос.Стоимость) - СУММА(ВложенныйЗапрос.Себестоимость)) / СУММА(ВложенныйЗапрос.Стоимость)
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК Рентабельность,
ВложенныйЗапрос.ABCКлассНоменклатуры КАК ABCКлассНоменклатуры,
ВложенныйЗапрос.ПорядокСортировки КАК ПорядокСортировки,
ВложенныйЗапрос.ABCКлассПокупателя КАК ABCКлассПокупателя,
ВложенныйЗапрос.ПорядокСортировки1 КАК ПорядокСортировки1
{ВЫБРАТЬ
Организация,
Проект,
Подразделение,
Покупатель,
ДоговорПокупателя,
Номенклатура,
ХарактеристикаНоменклатуры,
ЗаказПокупателя,
Регистратор,
Период,
ПериодДень,
ПериодНеделя,
ПериодДекада,
ПериодМесяц,
ПериодКвартал,
ПериодПолугодие,
ПериодГод,
ABCКлассНоменклатуры,
ABCКлассПокупателя.*}
ИЗ
(ВЫБРАТЬ
ПродажиОбороты.Проект КАК Проект,
ПродажиОбороты.Подразделение КАК Подразделение,
ПродажиОбороты.Контрагент КАК Покупатель,
ПродажиОбороты.ДоговорКонтрагента КАК ДоговорПокупателя,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ПродажиОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
ПродажиОбороты.Организация КАК Организация,
ПродажиОбороты.Регистратор КАК Регистратор,
ПродажиОбороты.Период КАК Период,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1) / ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент, 1) КАК КоличествоЕдиницОтчетов,
ПродажиОбороты.КоличествоОборот * ЕСТЬNULL(ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент, 1) КАК КоличествоБазовыхЕдиниц,
(ЕСТЬNULL(РасчетыПоРеализацииОрганизации.СуммаСНДС, 0) - ЕСТЬNULL(РасчетыПоРеализацииОрганизации.СуммаНДС, 0)) * ЕСТЬNULL(РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.СуммаРегРасход, 0) / ЕСТЬNULL(ВложенныйЗапрос.СуммаСНДС, 1) КАК СтоимостьБезНДС,
ЕСТЬNULL(РасчетыПоРеализацииОрганизации.СуммаНДС, 0) * ЕСТЬNULL(РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.СуммаРегРасход, 0) / ЕСТЬNULL(ВложенныйЗапрос.СуммаСНДС, 1) КАК НДС,
ЕСТЬNULL(РасчетыПоРеализацииОрганизации.СуммаСНДС, 0) * ЕСТЬNULL(РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.СуммаРегРасход, 0) / ЕСТЬNULL(ВложенныйЗапрос.СуммаСНДС, 1) КАК Стоимость,
ЕСТЬNULL(ТаблицаРегистраПродажиСебестоимость.СтоимостьОборот, 0) КАК Себестоимость,
ABCКлассификацияНоменклатуры.ABCКлассНоменклатуры КАК ABCКлассНоменклатуры,
ВЫБОР
КОГДА ABCКлассификацияНоменклатуры.ABCКлассНоменклатуры = &AКласс
ТОГДА 1
КОГДА ABCКлассификацияНоменклатуры.ABCКлассНоменклатуры = &BКласс
ТОГДА 2
КОГДА ABCКлассификацияНоменклатуры.ABCКлассНоменклатуры = &CКласс
ТОГДА 3
ИНАЧЕ 0
КОНЕЦ КАК ПорядокСортировки,
ABCКлассификацияПокупателей.ABCКлассПокупателя КАК ABCКлассПокупателя,
ВЫБОР
КОГДА ABCКлассификацияПокупателей.ABCКлассПокупателя = &AКласс
ТОГДА 1
КОГДА ABCКлассификацияПокупателей.ABCКлассПокупателя = &BКласс
ТОГДА 2
КОГДА ABCКлассификацияПокупателей.ABCКлассПокупателя = &CКласс
ТОГДА 3
ИНАЧЕ 0
КОНЕЦ КАК ПорядокСортировки1
ИЗ
ВТ_Продажи КАК ПродажиОбороты
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ПартииТоваровНаСкладахБухгалтерскийУчет.Номенклатура КАК Номенклатура,
ПартииТоваровНаСкладахБухгалтерскийУчет.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
ВЫБОР
КОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.ДокументДвижения <> НЕОПРЕДЕЛЕНО
ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.ДокументДвижения
ИНАЧЕ ПартииТоваровНаСкладахБухгалтерскийУчет.Регистратор
КОНЕЦ КАК Регистратор,
СУММА(ВЫБОР
КОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.Стоимость * -1
ИНАЧЕ ПартииТоваровНаСкладахБухгалтерскийУчет.Стоимость
КОНЕЦ) КАК СтоимостьОборот
ИЗ
РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет КАК ПартииТоваровНаСкладахБухгалтерскийУчет
СГРУППИРОВАТЬ ПО
ПартииТоваровНаСкладахБухгалтерскийУчет.Номенклатура,
ВЫБОР
КОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.ДокументДвижения <> НЕОПРЕДЕЛЕНО
ТОГДА ПартииТоваровНаСкладахБухгалтерскийУчет.ДокументДвижения
ИНАЧЕ ПартииТоваровНаСкладахБухгалтерскийУчет.Регистратор
КОНЕЦ,
ПартииТоваровНаСкладахБухгалтерскийУчет.ХарактеристикаНоменклатуры) КАК ТаблицаРегистраПродажиСебестоимость
ПО (ТаблицаРегистраПродажиСебестоимость.Номенклатура = ПродажиОбороты.Номенклатура)
И (ТаблицаРегистраПродажиСебестоимость.ХарактеристикаНоменклатуры = ПродажиОбороты.ХарактеристикаНоменклатуры)
И (ТаблицаРегистраПродажиСебестоимость.Регистратор = ПродажиОбороты.Регистратор)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ABCКлассификацияНоменклатуры.СрезПоследних(&ДатаКон, ) КАК ABCКлассификацияНоменклатуры
ПО ПродажиОбороты.Номенклатура = ABCКлассификацияНоменклатуры.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ABCКлассификацияПокупателей.СрезПоследних(&ДатаКон, ) КАК ABCКлассификацияПокупателей
ПО ПродажиОбороты.Контрагент = ABCКлассификацияПокупателей.Контрагент
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
РасчетыПоРеализацииОрганизации.Регистратор КАК Регистратор,
СУММА(РасчетыПоРеализацииОрганизации.СуммаСНДС) КАК СуммаСНДС
ИЗ
РегистрСведений.РасчетыПоРеализацииОрганизации КАК РасчетыПоРеализацииОрганизации
ГДЕ
РасчетыПоРеализацииОрганизации.Регистратор В
(ВЫБРАТЬ
ВТ_Продажи.Регистратор
ИЗ
ВТ_Продажи КАК ВТ_Продажи)
СГРУППИРОВАТЬ ПО
РасчетыПоРеализацииОрганизации.Регистратор) КАК ВложенныйЗапрос
ПО ПродажиОбороты.Регистратор = ВложенныйЗапрос.Регистратор
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
СУММА(РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.СуммаРегРасход) КАК СуммаРегРасход,
РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Регистратор КАК Регистратор,
РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Сделка КАК Сделка,
РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Организация КАК Организация,
РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Контрагент КАК Контрагент
ИЗ
РегистрНакопления.РасчетыПоРеализацииВУсловныхЕдиницахОрганизации.Обороты(
&ДатаНач,
&ДатаКон,
Регистратор,
(Контрагент, Организация) В
(ВЫБРАТЬ
ВТ_Продажи.Контрагент,
ВТ_Продажи.Организация
ИЗ
ВТ_Продажи КАК ВТ_Продажи)) КАК РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты
СГРУППИРОВАТЬ ПО
РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Регистратор,
РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Контрагент,
РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Организация,
РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Сделка) КАК РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты
ПО ПродажиОбороты.Контрагент = РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Контрагент
И ПродажиОбороты.Организация = РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Организация
И ПродажиОбороты.Регистратор = РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Регистратор
И (ВЫБОР
КОГДА ПродажиОбороты.ЗаказПокупателя.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом)
ТОГДА ИСТИНА
ИНАЧЕ ПродажиОбороты.ЗаказПокупателя = РасчетыПоРеализацииВУсловныхЕдиницахОрганизацииОбороты.Сделка
КОНЕЦ)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РасчетыПоРеализацииОрганизации КАК РасчетыПоРеализацииОрганизации
ПО ПродажиОбороты.Период = РасчетыПоРеализацииОрганизации.Период
И ПродажиОбороты.Регистратор = РасчетыПоРеализацииОрганизации.Регистратор
И ПродажиОбороты.Контрагент = РасчетыПоРеализацииОрганизации.Контрагент
И ПродажиОбороты.Номенклатура = РасчетыПоРеализацииОрганизации.Номенклатура
И ПродажиОбороты.Организация = РасчетыПоРеализацииОрганизации.Организация
И (ВЫБОР
КОГДА РасчетыПоРеализацииОрганизации.РасчетыВозврат <> ЗНАЧЕНИЕ(Перечисление.РасчетыВозврат.Возврат)
И НЕ ПродажиОбороты.Регистратор ССЫЛКА Документ.КорректировкаРеализации
ТОГДА ПродажиОбороты.ДокументПродажи = РасчетыПоРеализацииОрганизации.Документ
ИНАЧЕ ИСТИНА
КОНЕЦ)
И (ВЫБОР
КОГДА ПродажиОбороты.ЗаказПокупателя.ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом)
ТОГДА ИСТИНА
ИНАЧЕ ПродажиОбороты.ЗаказПокупателя = РасчетыПоРеализацииОрганизации.Сделка
КОНЕЦ)) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Организация,
ВложенныйЗапрос.Проект,
ВложенныйЗапрос.Подразделение,
ВложенныйЗапрос.Покупатель,
ВложенныйЗапрос.ДоговорПокупателя,
ВложенныйЗапрос.Номенклатура,
ВложенныйЗапрос.ХарактеристикаНоменклатуры,
ВложенныйЗапрос.ЗаказПокупателя,
ВложенныйЗапрос.Регистратор,
ВложенныйЗапрос.Период,
ВложенныйЗапрос.ABCКлассНоменклатуры,
ВложенныйЗапрос.ПорядокСортировки,
ВложенныйЗапрос.ABCКлассПокупателя,
ВложенныйЗапрос.ПорядокСортировки1
ИМЕЮЩИЕ
(СУММА(ВложенныйЗапрос.Количество) <> 0
ИЛИ СУММА(ВложенныйЗапрос.Стоимость) <> 0
ИЛИ СУММА(ЕСТЬNULL(ВложенныйЗапрос.Себестоимость, 0)) <> 0)) КАК ВложенныйЗапрос
{ГДЕ
ВложенныйЗапрос.Регистратор.*,
ВложенныйЗапрос.Период,
ВложенныйЗапрос.ПериодДень,
ВложенныйЗапрос.ПериодНеделя,
ВложенныйЗапрос.ПериодДекада,
ВложенныйЗапрос.ПериодМесяц,
ВложенныйЗапрос.ПериодКвартал,
ВложенныйЗапрос.ПериодПолугодие,
ВложенныйЗапрос.ПериодГод,
ВложенныйЗапрос.Количество,
ВложенныйЗапрос.КоличествоЕдиницОтчетов,
ВложенныйЗапрос.КоличествоБазовыхЕдиниц,
ВложенныйЗапрос.СтоимостьБезНДС,
ВложенныйЗапрос.НДС,
ВложенныйЗапрос.Стоимость,
ВложенныйЗапрос.Себестоимость,
ВложенныйЗапрос.ВаловаяПрибыль,
ВложенныйЗапрос.Эффективность,
ВложенныйЗапрос.Рентабельность,
ВложенныйЗапрос.ABCКлассНоменклатуры,
ВложенныйЗапрос.ABCКлассПокупателя}
УПОРЯДОЧИТЬ ПО
ПорядокСортировки,
ПорядокСортировки1
{УПОРЯДОЧИТЬ ПО
Организация.*,
Проект.*,
Подразделение.*,
Покупатель.*,
ДоговорПокупателя.*,
Номенклатура.*,
ХарактеристикаНоменклатуры.*,
ЗаказПокупателя.*,
Регистратор.*,
Период,
ПериодДень,
ПериодНеделя,
ПериодДекада,
ПериодМесяц,
ПериодКвартал,
ПериодПолугодие,
ПериодГод,
Количество,
КоличествоЕдиницОтчетов,
КоличествоБазовыхЕдиниц,
СтоимостьБезНДС,
НДС,
Стоимость,
Себестоимость,
ВаловаяПрибыль,
Эффективность,
Рентабельность,
ABCКлассНоменклатуры,
ABCКлассПокупателя}
ИТОГИ
СУММА(Количество),
СУММА(КоличествоЕдиницОтчетов),
СУММА(КоличествоБазовыхЕдиниц),
СУММА(СтоимостьБезНДС),
СУММА(НДС),
СУММА(Стоимость),
СУММА(Себестоимость),
ВЫБОР
КОГДА &НеВключатьНДСВСтоимостьПартий
ТОГДА СУММА(СтоимостьБезНДС)
ИНАЧЕ СУММА(Стоимость)
КОНЕЦ - СУММА(Себестоимость) КАК ВаловаяПрибыль,
100 * ВЫБОР
КОГДА &НеВключатьНДСВСтоимостьПартий
ТОГДА ВЫБОР
КОГДА СУММА(Себестоимость) <> 0
ТОГДА (СУММА(СтоимостьБезНДС) - СУММА(Себестоимость)) / СУММА(Себестоимость)
ИНАЧЕ 0
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА СУММА(Себестоимость) <> 0
ТОГДА (СУММА(Стоимость) - СУММА(Себестоимость)) / СУММА(Себестоимость)
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК Эффективность,
100 * ВЫБОР
КОГДА &НеВключатьНДСВСтоимостьПартий
ТОГДА ВЫБОР
КОГДА СУММА(СтоимостьБезНДС) <> 0
ТОГДА (СУММА(СтоимостьБезНДС) - СУММА(Себестоимость)) / СУММА(СтоимостьБезНДС)
ИНАЧЕ 0
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА СУММА(Стоимость) <> 0
ТОГДА (СУММА(Стоимость) - СУММА(Себестоимость)) / СУММА(Стоимость)
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК Рентабельность
ПО
ОБЩИЕ
{ИТОГИ ПО
Организация.*,
Проект.*,
Подразделение.*,
Покупатель.*,
ДоговорПокупателя.*,
Номенклатура.*,
ХарактеристикаНоменклатуры.*,
ЗаказПокупателя.*,
Регистратор.*,
Период,
ПериодДень,
ПериодНеделя,
ПериодДекада,
ПериодМесяц,
ПериодКвартал,
ПериодПолугодие,
ПериодГод,
ABCКлассНоменклатуры,
ABCКлассПокупателя}
АВТОУПОРЯДОЧИВАНИЕ
Этот отчет «Валовая прибыль (руб)» создан из стандартного отчета «Валовая прибыль». Сравнение показало, что отличия есть только в запросе и строчка ВалютаУпр=глЗначениеПеременной(«ВалютаУправленческогоУчета»);
меняется на
ВалютаУпр=глЗначениеПеременной(«ВалютаРегламентированногоУчета»);
Стандартный отчет работает корректно, показывая суммы корректировок, а доработанный совсем не учитывает корректировки. То есть разворот по регистратору показывает их отсутствие. НО! запрос в консоли дает все суммы корректно. Мистика…
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день.
Модуль 9. Урок 27. Список потенциальных покупателей.
Почему в запросе, когда работаем с таблицей ВыручкаИСебестоимостьПродажОброты вы делаете отбор с помощью запроса в условии. Почему нельзя сделать условие ВыручкаИСебестоимостьПродажОброты.АналитикаУчета Номенклатуры.Номенклатура = НоменклатураА ?
Заранее спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день. Для чего в RLS запросы содержат «где ЛОЖЬ»? Например в УПП есть такое право:
Роль.ПользовательЧтение.Права.Документы.СчетФактураВыданный.Чтение
Поля:
Ограничение доступа: СчетФактураВыданный ГДЕ ЛОЖЬ
По идее такая добавка к запросу его «обнулит» (то есть результат будет пустой)
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо!
Добрый день!
Почему при записи движений в регистры Вы пишете следующий код:
Движения.ВзаиморасчетыСКонтрагентами.Записывать = Истина;
Движения.ВзаиморасчетыСКонтрагентами.Записать();
Объясните, пожалуйста, подробнее механизм работы данного кода.
Спасибо!
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день, во 2-ом уроке Вы получаете МАКСИМУМ от ссылочного значения (Документ), хотелось бы по подробнее узнать по какому алгоритму платформа получает этот самый максимум, для документов, справочников и т.д. Спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день. Попытался сделать запрос к журналу регистрации. В поле date внешнего источника данных получил значение 2 147 483 647. Догадываюсь, что это максимально возможное значение типа int. То есть мы уперлись в математическое ограничение. Как у вас получилось посчитать реальную дату из журнала регистрации?
…
(текст комментария доступен только участникам Мастер-группы)
Получилось почему-то на 3 часа меньше, чем в журнале регистрации). Может быть сталкивались?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день Василий!
В модуле 9, уроки 23,24(Списание по партиям) строиться запрос по ТЧ документа и регистру Партии Товаров,
Подскажите пожалуйста, а как построить запрос «своих»партий,т.е.
нужно узнать : По Складу №1 Номенклатуре А остаток 156 шт, а в разрезе каких документов поступления:
Док1 56 шт от 01.09.16,
Док2 80 шт от 03.09.16
Док3 20 шт от 05.09.16.
Дело в том, что в комплексной автоматизации 1.1 режим ведения учета РАУЗ и посмотреть ведомость по партиям товаров
нет возможности, а в оборотно сальдовой ведомости у счета 41 нет третьего субконто «Партии»
как к примеру в бухгалтерии 2.0, а стоит задача построить такой отчет, чтоб было видно какие доки. поступления
соответствуют остаткам на определенную дату по определенной номенклатуре.
В моем отчете не получается оставить только те документы поступления на которые действительно есть остатки.
Подскажите пожалуйста как сделать правильно?
Отчет и скриншоты прилагаю.
С Уважением,
Олег.
…
(текст комментария доступен только участникам Мастер-группы)
Всем привет!
Подскажите, а как построить «универсальный запрос» следующего вида.
Есть справочник (2 уровня — группы и элементы, все элементы в группах). Количество групп и элементов — любое.
Хочется запросов вывести табличку в виде:
— шапка таблицы (колонки) — это группы. чем больше групп в справочнике, тем шире таблица.
— строки таблицы — это элементы справочника. соответственно, каждый элементы выводится в колонке «своей группы». Таким образом, высота таблицы — будет максимальное количество элементов во всех группах. Но могут быть и пустые «клеточки».
Как подойти к этой задаче? Можно ли сделать запрос в 1 проход и получить табличку? :)
…
(текст комментария доступен только участникам Мастер-группы)
Василий, здравствуйте!
Есть вопрос по заданию № 36.В видеоуроке Вы для оптимизации используете событие табличного поля формы «ПриПолученииДанных». Мне же пришла в голову мысль при использовать событие «ПриОбновленииОтображения» самой формы получить все долги контрагентов в таблицу значений, а в событии «ПриВыводеСтроки» табличного поля уже обращаться к таблице долгов. Чем этот способ может быть плох?
Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
СтрокаДолга = ДолгиКонтрагентов.Найти(ДанныеСтроки.Ссылка, "Контрагент");
Если СтрокаДолга <> Неопределено Тогда
ОформлениеСтроки.Ячейки.ДолгКонтрагента.Значение = СтрокаДолга.СуммаОстаток;
Если СтрокаДолга.СуммаОстаток < 0 Тогда
ОформлениеСтроки.Ячейки.ДолгКонтрагента.ЦветТекста = WebЦвета.Красный;
Иначе
ОформлениеСтроки.Ячейки.ДолгКонтрагента.ЦветТекста = WebЦвета.Синий;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбновлениеОтображения()
ПолучитьДолгиКонтрагентов();
Сообщить("Обновлено отображение");
КонецПроцедуры
Процедура ПолучитьДолгиКонтрагентов()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
| ВзаиморасчетыСКонтрагентамиОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК ВзаиморасчетыСКонтрагентамиОстатки";
ДолгиКонтрагентов = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо!
Здравствуйте, я нашел ошибку во втором кейсе по данному курсу. Где нужно построить валюты с интервалами дат, Ваш запрос не правильно отработает если в начале периода будет не измененный курс. Например строим отчет за январь, в регистре такие данные.
01.01 25 руб
03.01 25 руб
04.01 25 руб
05.01 26 руб
во временной таблице ВТ_Курсы вы пишете условие на неравенство текущего и предыдущего курса и получается что записи с 01. по 03 исчезают и как будто получается что курс 25 руб начал действовать только с 04.01.
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо большое, но у меня еще есть замечание. Во втором кейсе по условию задачи нужно определить приращение по формуле ( текущий курс — предыдущий курс), и тогда получается то что первая запись c даты 01.01.2014 по дату 10.01.2014 должна быть равна текущий курс 32.6587 предыдущий курс 0, так записи до 01.01.2014 в базе нет. А у вас тогда получается формула приращения такая (текущий курс — БУДУЩИЙ КУРС).
У меня есть запрос который удовлетворяет условиям задачи. Не могу его сюда выложить так как он не корректно публикуется.
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо, но это не правильно не только для первой записи и для других тоже, у вас для всех записей такая формула (текущий курс — БУДУЩИЙ КУРС) например для периода c 10.01 по 11.01 правильный вывод будет таким: текущий курс 33.1547 предыдущий курс 32.6587, а НЕ текущий курс 33.1547 предыдущий курс 33.2062(который на самом деле будущий) согласно поставленной задачи У вас не правильный вывод.
Вот запрос который решает правильно поставленную задачу.
КурсыВалют.Период КАК Период,
КурсыВалют.Курс
ПОМЕСТИТЬ ВТ_КурсыИсх
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ГДЕ
КурсыВалют.Валюта = &Валюта
И КурсыВалют.Период МЕЖДУ &Дата1 И &Дата2
ИНДЕКСИРОВАТЬ ПО
Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_курсы.Период КАК ПериодС,
МИНИМУМ(ВТ_курсы1.Период) КАК ПериодПО,
ВТ_курсы.Курс
ПОМЕСТИТЬ ВТ_ПериодыДействияКурсовВалют
ИЗ
ВТ_КурсыИсх КАК ВТ_курсы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КурсыИсх КАК ВТ_курсы1
ПО ВТ_курсы.Период < ВТ_курсы1.Период
СГРУППИРОВАТЬ ПО
ВТ_курсы.Период,
ВТ_курсы.Курс
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_курсы.Период КАК ТекПериод,
МАКСИМУМ(ВТ_курсы1.Период) КАК ДатаПредыдущегоКурса
ПОМЕСТИТЬ ВТ_ПредыдущаяДатаКурса
ИЗ
ВТ_КурсыИсх КАК ВТ_курсы
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КурсыИсх КАК ВТ_курсы1
ПО ВТ_курсы.Период > ВТ_курсы1.Период
И ВТ_курсы.Курс <> ВТ_курсы1.Курс
СГРУППИРОВАТЬ ПО
ВТ_курсы.Период
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МИНИМУМ(ВТ_ПериодыДействияКурсовВалют.ПериодС) КАК ПериодС,
МАКСИМУМ(ВТ_ПериодыДействияКурсовВалют.ПериодПО) КАК ПериодПО,
ВТ_ПериодыДействияКурсовВалют.Курс,
ВТ_ПредыдущаяДатаКурса.ДатаПредыдущегоКурса
ПОМЕСТИТЬ ВТ_РеальныеПериодыДействияКурсовВалют
ИЗ
ВТ_ПериодыДействияКурсовВалют КАК ВТ_ПериодыДействияКурсовВалют
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПредыдущаяДатаКурса КАК ВТ_ПредыдущаяДатаКурса
ПО ВТ_ПериодыДействияКурсовВалют.ПериодС = ВТ_ПредыдущаяДатаКурса.ТекПериод
СГРУППИРОВАТЬ ПО
ВТ_ПериодыДействияКурсовВалют.Курс,
ВТ_ПредыдущаяДатаКурса.ДатаПредыдущегоКурса
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодС КАК ПериодС,
ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодПО КАК ПериодПО,
ВТ_РеальныеПериодыДействияКурсовВалютПериодС.Курс КАК ТекущийКурс,
ВТ_РеальныеПериодыДействияКурсовВалютПериодС.Курс - ЕСТЬNULL(ВТ_РеальныеПериодыДействияКурсовВалютПериодПО.Курс, 0) КАК Приращение,
РАЗНОСТЬДАТ(ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодС, ЕСТЬNULL(ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодПО, &Дата2), ДЕНЬ) КАК КоличетствоДней
ИЗ
ВТ_РеальныеПериодыДействияКурсовВалют КАК ВТ_РеальныеПериодыДействияКурсовВалютПериодС
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РеальныеПериодыДействияКурсовВалют КАК ВТ_РеальныеПериодыДействияКурсовВалютПериодПО
ПО ВТ_РеальныеПериодыДействияКурсовВалютПериодС.ПериодС = ВТ_РеальныеПериодыДействияКурсовВалютПериодПО.ПериодПО
УПОРЯДОЧИТЬ ПО
ПериодС,
ПериодПО
…
(текст комментария доступен только участникам Мастер-группы)
Я не понял, где брать конфигурации к 9.2 Расчет премии сотрудникам, Взаиморасчеты по направлениям деятельности? Дальше не смотрел еще.
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте
Как можно запросом сделать следующее:
Есть справочник Продукты
В нем один элемент Продукт№1
у него табличная часть «Фрукты» — в ней две записи арбуз, тыква
Второй Элемент Продукт№2
Нужно получить две строчки
Продукт1 Арбуз Тыква
Продукт2
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо!
День добрый)
Есть для меня сложный момент в написании запросов, он связан с иерархией.
Для примера имеем строку с 2 колонками ЦФО и Сумма:
ЦФО Сумма
ЦФО_1_1_1 100
Требуется получить таблицу
ЦФО Сумма
ЦФО_1 100
ЦФО_1_1 100
ЦФО_1_1_1 100
где ЦФО_1 родитель ЦФО_1_1, а ЦФО_1_1 родитель ЦФО_1_1_1.
Обычно такого типа задачи решаю через «.Родитель», но такое решение строится на предположении уровня вложенности, что является не точным, условие соединения «В ИЕРАРХИИ» запрос не принимает, да и само использование «В ИЕРАРХИИ» является трудоемким для системы.
Есть ли какие-то приемы для решения задач получения иерархии «вниз и «вверх»?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо интересные видео про запросы в бухгалтерии. Василий не могли бы вы подсказать как можно построить отчет, который покажет по дням выручку (57.3сч+50сч+51сч) с указанием в т.ч. комиссионного товара и собственного товара в разрезе организаций в бух 3.0?
…
(текст комментария доступен только участникам Мастер-группы)
Василий Ханевич Здравствуйте
Подскажите пожалуйста, есть такой запрос.
ВЫБРАТЬ
«Иванов» КАК Фамилия,
1 КАК Номер
ПОМЕСТИТЬ ВТ1
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
«Иванов»,
2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
500 КАК Сумма,
«Иванов» КАК Фамилия
ПОМЕСТИТЬ ВТ2
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ1.Фамилия,
ВТ2.Сумма
ИЗ
ВТ1 КАК ВТ1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
ПО ВТ1.Фамилия = ВТ2.Фамилия
Он в итоге выдает следующее
Иванов 500
Иванов 500
можно ли только используя запрос сделать так чтобы сумма присваивалась только одному полю Фамилия. Ну то есть вот так
Иванов 500
Иванов
дополнительные ключи по которым бы можно было однозначно определить поля в данном случае использовать не представляется возможным. Грубо говоря есть только эти данные. и сворачивать тоже нельзя.
…
(текст комментария доступен только участникам Мастер-группы)
да это сработает, но когда такого условия составить не получается в силу разных причин. как быть?
то есть заранее не известно какое будет ключевое поле, нужно просто вывести в первое поле.
…
(текст комментария доступен только участникам Мастер-группы)
интересный вариант, но как сделать это запросом… то есть идет выборка данных..
у нас есть числовое поле скажем номер и 2 поле Фио.
Далее идет выборка. Иванов, 1
затем идет Сидоров, 1
Затем Иванов и тут надо поставить уже цифру 2 в числовое поле. Это вобще реально просто запросом или надо переводить в ТЗ и уже на встроенном языке писать…очень бы конечно хотелось запросом.
…
(текст комментария доступен только участникам Мастер-группы)
Василий подскажите пожалуйста как реализовать шахматку запросом
https://gyazo.com/5912a9f74712208a303501395c9536ab
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо попробую
Василий Ханевич Здравствуйте.
Подскажите пожалуйста. Есть документ ОперацияБух, в нем есть составной реквизит ТиповаяОперация
Я пытаюсь запросом выбрать документ из этого реквизита. Допустим так.
ВЫРАЗИТЬ(ХозрасчетныйОбороты.Регистратор.ТиповаяОперация КАК Документ.РеализацияТоваровУслуг)
но он возвращает Null хотя документы типа РеализацияТоваровУслуг в этом реквизите присутствуют.
Как быть в данном случае, подскажите пожалуйста.
…
(текст комментария доступен только участникам Мастер-группы)
может дело в том что в самом составном типе данных не указан документ Реализация товаров и услуг, а просто стоит галка на всех документах?
…
(текст комментария доступен только участникам Мастер-группы)
запрос отрабатывает. Только вот Нулл и все тут
…
(текст комментария доступен только участникам Мастер-группы)
Неопределено
…
(текст комментария доступен только участникам Мастер-группы)
Наверно он там как то хитро хранится в базе, выбрал все реквизиты.
…
(текст комментария доступен только участникам Мастер-группы)
Вопрос касательно задачи списания по партиям.
Как должен выглядеть запрос если необходимо, чтобы в регистре так же отображалась партия документа и партия списания?
Например
остатки по регистру партий:
номенклатура п1 10 шт
номенклатура п2 20 шт
номенклатура п3 30 шт
номенклатура п4 40 шт
Документ:
номенклатура п1 35 шт
номенклатура п2 5 шт
номенклатура 35 шт
Таблица движений регистра партий:
Партия списания партия документа Количество
номенклатура п1 п1 10 шт
номенклатура п2 п1 15 шт
номенклатура п3 п1 10 шт
номенклатура п2 п2 5 шт
номенклатура п3 20 шт
номенклатура п4 15 шт
…
(текст комментария доступен только участникам Мастер-группы)
Да это реквизит, а не измерение.
Сделал вот так правда дорабатывать пришлось не запросы, а код:
ДокТовары = Товары.Выгрузить(, «Номенклатура,Количество,Партия»);
Таблица = Товары.Выгрузить(, «Номенклатура,Количество,Партия»);
Таблица.Очистить();
ДокТовары.Сортировать(«Партия Убыв»);
ВыборкаНоменклатуры = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатуры.Следующий() Цикл
Если ВыборкаНоменклатуры.Количество>ВыборкаНоменклатуры.КоличествоПартии Тогда
кол = ВыборкаНоменклатуры.Количество- ВыборкаНоменклатуры.КоличествоПартии;
отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = «Товара «+ ВыборкаНоменклатуры.Номенклатура+ » необходимо :» + кол;
Сообщение.Сообщить();
Продолжить;
КонецЕсли;
ВыборкаПартий = ВыборкаНоменклатуры.Выбрать();
ОстаткиПартий = ПреобразоватьВыборкуВТЗ(ВыборкаПартий,Таблица);
ОсталосьСписать = ВыборкаНоменклатуры.Количество;
Для каждого эл Из ДокТовары Цикл
Флаг = Истина;
Для каждого ЭлОст Из ОстаткиПартий Цикл
Если ЭлОст.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Если эл.Количество = 0 Тогда
Продолжить;
КонецЕсли;
Если эл.Партия = ЭлОст.Партия Тогда
Если ЭлОст.Количество — эл.Количество >=0 Тогда
КоличествоСпиания = эл.Количество;
НоваяСтрокаПартииДвижениеТовара(ЭлОст.Номенклатура,ЭлОст.Партия,эл.Партия,КоличествоСпиания);
ОсталосьСписать = ОсталосьСписать — КоличествоСпиания;
ЭлОст.Количество = ЭлОст.Количество — эл.Количество;
эл.Количество = 0;
Иначе
эл.Количество = эл.Количество — ЭлОст.Количество;
НоваяСтрокаПартииДвижениеТовара(ЭлОст.Номенклатура,ЭлОст.Партия,эл.Партия,ЭлОст.Количество);
ОсталосьСписать = ОсталосьСписать — ЭлОст.Количество;
ЭлОст.Количество = 0;
Флаг = Ложь;
КонецЕсли;
ИначеЕсли не Флаг или эл.Партия.Пустая() Тогда
Если ЭлОст.Количество — эл.Количество >=0 Тогда
КоличествоСпиания = эл.Количество;
НоваяСтрокаПартииДвижениеТовара(ЭлОст.Номенклатура,ЭлОст.Партия,эл.Партия,КоличествоСпиания);
ОсталосьСписать = ОсталосьСписать — КоличествоСпиания;
ЭлОст.Количество = ЭлОст.Количество — эл.Количество;
эл.Количество = 0;
Иначе
эл.Количество = эл.Количество — ЭлОст.Количество;
НоваяСтрокаПартииДвижениеТовара(ЭлОст.Номенклатура,ЭлОст.Партия,эл.Партия,ЭлОст.Количество);
ОсталосьСписать = ОсталосьСписать — ЭлОст.Количество;
ЭлОст.Количество = 0;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
…
(текст комментария доступен только участникам Мастер-группы)
Василий подскажите пожалуйста где можно взять консоль запросов, которой вы пользуетесь на видео уроках?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо
…
(текст комментария доступен только участникам Мастер-группы)
вопрос снят
на итс есть статья по этому поводу, нужно было финальный запрос выделить в отдельную таблицу и к ней применять настройки СКД, вычисляемые поля , поля условия .
http://its.1c.ru/db/metod8dev/content/2696/hdoc
есть запрос (кусок кода), в консоли запроса 1с условия отбора отрабатывает корректно ДатаОтгрузки >= Дата а если это условие наложи Источник: ©Курсы-по-1С.рф
…
(текст комментария доступен только участникам Мастер-группы)
Коллеги , добрый день
подскажите пожалуйста
есть запрос (кусок кода), в консоли запроса 1с условия отбора отрабатывает корректно
ДатаОтгрузки >= Дата
а если это условие наложить в режиме 1с в форме настройки отчета на вкладке «Отборы»
дата ОТгрузки равно Дата
СКД накладывает условие на первоначальные данные , как если бы мы указали параметр в запросе на получение остатков , например по периоду &Период, а не на конечный результат , где нужно что бы отработал отбор
решал проблему для скд следующим условием
ВЫБОР
КОГДА &ДатаОтгрузки1 ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ВТ_Пред.ДатаОтгрузки >= &ДатаОтгрузки1
ИНАЧЕ ИСТИНА
КОНЕЦ
смотрел через консоль схемы компоновки данных, но не увидел там , в какое место она пихает данный отбор.
но не могу же на все поля так делать ???
=====================
ВЫБРАТЬ
ВЫБОР
КОГДА -РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаВознЗадолженности, ДЕНЬ), НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ) > ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности, 0)
ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
ИНАЧЕ 0
КОНЕЦ КАК СуммаПросроченнойЗадолженности,
ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя) КАК ЗаказПокупателя,
ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).ДатаОтгрузки КАК ДатаОтгрузки,
ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).Контрагент КАК Контрагент,
-РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаВознЗадолженности, ДЕНЬ), НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ) КАК КоличествоДнейПросрочки,
ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).СуммаДокумента КАК СуммаПоДокументу
ПОМЕСТИТЬ ВТ_Пред
{ВЫБРАТЬ
СуммаПросроченнойЗадолженности,
ЗаказПокупателя.*,
ДатаОтгрузки,
Контрагент.*,
КоличествоДнейПросрочки,
СуммаПоДокументу}
ИЗ
РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(
{(&Период)},
(ДоговорКонтрагента.КонтролироватьЧислоДнейЗадолженности, ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом) В
(ВЫБРАТЬ
ИСТИНА,
ИСТИНА)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки
ГДЕ
ВЫБОР
КОГДА -РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаВознЗадолженности, ДЕНЬ), НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ) > ЕСТЬNULL(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности, 0)
ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
ИНАЧЕ 0
КОНЕЦ > 0
И ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя) ССЫЛКА Документ.ЗаказПокупателя
{ГДЕ
(ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя)).* КАК ЗаказПокупателя,
(ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).ДатаОтгрузки) КАК ДатаОтгрузки,
(ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).Контрагент).* КАК Контрагент,
(-РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаВознЗадолженности, ДЕНЬ), НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ)) КАК КоличествоДнейПросрочки,
(ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).СуммаДокумента) КАК СуммаПоДокументу,
(ВЫРАЗИТЬ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Сделка КАК Документ.ЗаказПокупателя).ПС_НеКонтролироватьПДЗ) КАК ПС_НеКонтролироватьПДЗ}
…
(текст комментария доступен только участникам Мастер-группы)
Последнее поступление по каждому товару
Зачем нужен второй запрос в пакете (ВТ_Документы)? Да ещё ни одного отбора! Я бы сразу соединил ВТ_Даты с табличной часть Товары…
ПриходТовараТовары.Товар КАК Товар,
МАКСИМУМ(ПриходТовараТовары.Ссылка.Дата) КАК Дата
ПОМЕСТИТЬ ВТ_Даты
ИЗ
Документ.ПриходТовара.Товары КАК ПриходТовараТовары
СГРУППИРОВАТЬ ПО
ПриходТовараТовары.Товар
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Даты.Товар КАК Товар,
ВТ_Даты.Дата КАК Дата,
МАКСИМУМ(ПриходТовараТовары.Ссылка) КАК Ссылка
ИЗ
ВТ_Даты КАК ВТ_Даты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПриходТовара.Товары КАК ПриходТовараТовары
ПО ВТ_Даты.Дата = ПриходТовараТовары.Ссылка.Дата
И ВТ_Даты.Товар = ПриходТовараТовары.Товар
СГРУППИРОВАТЬ ПО
ВТ_Даты.Товар,
ВТ_Даты.Дата
УПОРЯДОЧИТЬ ПО
Товар
АВТОУПОРЯДОЧИВАНИЕ
…
(текст комментария доступен только участникам Мастер-группы)
Расчет накопительных скидок
Странная структура хранения сведений о скидках. В данном варианте становится бесполезной виртуальная таблица СрезПоследних. Количество возвращаемых записей только СЛУЧАЙНО может быть меньше общего количества записей в регистре сведений.
Полученный максимальный период можно было использовать не через соединение (настоятельно не рекомендовано), а через параметр виртуальной таблицы во втором срезе последних (рекомендовано ведущими собаководами ;)) ).
Если сумма продаж будет меньше минимального значения границы, то в результате запроса не будет ни одной строки. Если результ в дальнейшем будет обрабатывать в коде, то программист обязан учесть данный случай через ветвление. Я бы доработал запрос, чтобы он возвращал строку со скидкой 0%. Этот вариант предпочтительнее, особенно если сумма скидки получается в последующем запросе пакета.
…
(текст комментария доступен только участникам Мастер-группы)
Как вариант:
ВЫБРАТЬ
МАКСИМУМ(Пороги.Период) КАК Период
ПОМЕСТИТЬ втПериод
ИЗ
РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(&КонецПериода, ) КАК Пороги
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Пороги.НижняяГраница КАК НижняяГраница,
Пороги.Процент КАК Процент
ПОМЕСТИТЬ ВТ_Пороги
ИЗ
РегистрСведений.ПорогиНакопительныхСкидок.СрезПоследних(
,
Период В
(ВЫБРАТЬ
втПериод.Период
ИЗ
втПериод)) КАК Пороги
...
…
(текст комментария доступен только участникам Мастер-группы)
Выбор значений из регистра сведений за период
Не понятно зачем в объединении нужен ТРЕТИЙ запрос? Любая (!!!) запись, возвращаемая в результате запроса на Дата2, либо попадает в срез последних на Дата1, либо в период с Дата1 по Дата2.
Русская народная забава — сначала создаём себе трудности, затем доблестно с ними боремся… Что бы избежать дублирования записей, ради которого мы добавили третий запрос, мы используем ОБЪЕДИНИТЬ вместо более быстрого ОБЪЕДИНИТЬ ВСЕ…
Не понимаю.
…
(текст комментария доступен только участникам Мастер-группы)
Остатки в периоде, когда не было движений
В результате отсутствуют записи по товару Молоко на складе Большой за 1-е и 2-е сентября.
То есть, если бы какой-то товар отсутствовал на начало месяца, поступил 15-го и был продан полностью 16-го, то в результате было бы лишь ДВЕ записи — за 15-е и 16-е число!
Считаю, что задача решена частично.
…
(текст комментария доступен только участникам Мастер-группы)
Задание 32
Выражение
избыточно, так как мы уже привели дату к началу года в предыдущем запросе. Можно оставить лишь
А можно вообще использовать другую функцию:
ДЕНЬГОДА(КОНЕЦПЕРИОДА(ВТ.Год, ГОД))=366
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте в модуле 9, в примере 14. Расчет накопительных скидок. В демо конфигурации присутсвуют такие объекты как документ Установка порогов накопительных скидок, РС Пороги накопителных скидок.
В демонстрационной базе скачанной с сайта users.v8.1c.ru нет таких объектов. Где взять базу где есть данные объекты. Спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
В данной базе нет этих объектов https://gyazo.com/016ac24b98a9d45722fae58d77da164d
…
(текст комментария доступен только участникам Мастер-группы)
Первый раз с таким сталкиваюсь. Добавил объекты УстановкаПороговНакопительныхСкидок и РС Пороги накопительных скидок в Query-Homework-Template.dt, добавляю их в подсистему продажи, при этом после сохранения конфигурации не вижу объекты ни в разделе Продажи ни через Все функции. https://gyazo.com/43c296b17a7fe2129b77cd9f0f8bf0da
https://gyazo.com/43c296b17a7fe2129b77cd9f0f8bf0da
Такое происходит только с этой конфигурацией.
…
(текст комментария доступен только участникам Мастер-группы)
Коллеги , добрый день
подскажите как решить задачу
на основе запросов из 11 и 13 задания 9 блока
выбор значений из регистра сведений на начало периода , за период и на конец периода
такого рода задачи встречаются в блоке из сборника по спец. платформа 8.2, 8.3
нужно получить таблицу с разбитыми периодами :
с 01.01.15 по 09.01.15 — 10 тыс
с 10.01.15 по 14.01.15 — 15 тыс
с 15.01.15 по 31.01.15 — 20 тыс
исходные данные:
01.12.15 — сотрудник оклад 10 тыс
01.10.15 — сотрудник оклад 15 тыс
01.15.15 — сотрудник оклад 20 тыс
из курса по подготовке по спецу 8.3 эта задача решалось путем объединения запросов и последующей программной обработкой выборки,
а хотелось бы все данные получить запросом
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо !!!
вечером попробую . результат выложу на обозрение )
Василий спасибо )
Добрый день, Коллеги
посмотрите плиз запрос , Василий дал направления для дальнейшей работы. вот что получилось:
может можно сделать проще , если у кого есть идеи . напишите плиз.
===
РегистрСведений1 — ваш регистр «кадровая история»
Результат — ваш оклад
ВЫБРАТЬ
КадроваяИсторияНач.Сотрудник КАК Сотрудник,
КадроваяИсторияНач.Период КАК ПериодНач,
МИНИМУМ(КадроваяИсторияКон.Период) КАК ПериодКон,
КадроваяИсторияНач.Результат,
&Период1,
&Период2
ПОМЕСТИТЬ ВТ_Врем
ИЗ
РегистрСведений.РегистрСведений1 КАК КадроваяИсторияНач
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1 КАК КадроваяИсторияКон
ПО КадроваяИсторияНач.Сотрудник = КадроваяИсторияКон.Сотрудник
И КадроваяИсторияНач.Период = &Период1
И КадроваяИсторияКон.Период <= &Период2
СГРУППИРОВАТЬ ПО
КадроваяИсторияНач.Период,
КадроваяИсторияНач.Сотрудник,
КадроваяИсторияНач.Результат
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Врем.Сотрудник,
ВЫБОР
КОГДА ВТ_Врем.ПериодНач < &Период1
ТОГДА &Период1
ИНАЧЕ ВТ_Врем.ПериодНач
КОНЕЦ КАК НачалоПериода,
ВЫБОР
КОГДА ВТ_Врем.ПериодКон < &Период2
ТОГДА ДОБАВИТЬКДАТЕ(ВТ_Врем.ПериодКон, СЕКУНДА, -1)
ИНАЧЕ ВТ_Врем.ПериодКон
КОНЕЦ КАК КонецПериода,
ВТ_Врем.Результат
ПОМЕСТИТЬ ВТ_ИзмВПериоде
ИЗ
ВТ_Врем КАК ВТ_Врем
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ИзмВПериоде.Сотрудник,
ВТ_ИзмВПериоде.НачалоПериода КАК НачалоПериода,
ВТ_ИзмВПериоде.КонецПериода КАК КонецПериода,
ВТ_ИзмВПериоде.Результат КАК Результат
ИЗ
ВТ_ИзмВПериоде КАК ВТ_ИзмВПериоде
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ВТ_ИзмВПериоде.Сотрудник,
МАКСИМУМ(ДОБАВИТЬКДАТЕ(ВТ_ИзмВПериоде.КонецПериода, СЕКУНДА, 1)),
КОНЕЦПЕРИОДА(ВТ_ИзмВПериоде.КонецПериода, МЕСЯЦ),
МАКСИМУМ(РегистрСведений1СрезПоследних.Результат)
ИЗ
ВТ_ИзмВПериоде КАК ВТ_ИзмВПериоде
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегистрСведений1.СрезПоследних(&Период2, ) КАК РегистрСведений1СрезПоследних
ПО ВТ_ИзмВПериоде.Сотрудник = РегистрСведений1СрезПоследних.Сотрудник
СГРУППИРОВАТЬ ПО
ВТ_ИзмВПериоде.Сотрудник,
КОНЕЦПЕРИОДА(ВТ_ИзмВПериоде.КонецПериода, МЕСЯЦ)
УПОРЯДОЧИТЬ ПО
НачалоПериода
…
(текст комментария доступен только участникам Мастер-группы)
исходная таблица:
Период Сотрудник Начисления Результат
04.02.2015 Шлюзовая ООО Рубли 15 000,00
10.02.2015 Шлюзовая ООО Рубли 20 000,00
25.02.2015 Шлюзовая ООО Рубли 30 000,00
01.03.2015 Шлюзовая ООО Рубли 30 000,00
выгрузка базы , там эти данные
https://cloud.mail.ru/public/Bxjk/zAmc2Nnso
что бы получилась такая таблица
Сотрудник НачалоПериода КонецПериода Результат
Шлюзовая ООО 04.02.2015 0:00:00 09.02.2015 23:59:59 15 000
Шлюзовая ООО 10.02.2015 0:00:00 24.02.2015 23:59:59 20 000
Шлюзовая ООО 25.02.2015 0:00:00 28.02.2015 23:59:59 30 000
вот эту строку я получаю соединением с рег. срез последних
Шлюзовая ООО 25.02.2015 0:00:00 28.02.2015 23:59:59 30 000
…
(текст комментария доступен только участникам Мастер-группы)
Коллеги , подскажите .
как наиболее оптимальнее будет построить запрос «срез последних на каждую дату»
варинат 1 рассмотрен в видео уроке из 9 блока (первое видео)
на практике применял запрос вида
ВЫБРАТЬ
Продажи.Период,
Продажи.Покупатель,
Продажи.Товар,
Продажи.КоличествоОборот,
Продажи.СуммаОборот,
ЦеныНоменклатуры.Цена
ИЗ
РегистрНакопления.Продажи.Обороты(, , День, ) КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТоваров КАК ЦеныНоменклатуры
ПО Продажи.Товар = ЦеныНоменклатуры.Товар
И (ЦеныНоменклатуры.ВидЦен = &ВидЦен)
И (ЦеныНоменклатуры.Период В
(ВЫБРАТЬ
МАКСИМУМ(Цены.Период)
ИЗ
РегистрСведений.ЦеныТоваров КАК Цены
ГДЕ
Цены.Период <= Продажи.Период
И Цены.Товар = Продажи.Товар
И Цены.ВидЦен = &ВидЦен))
либо в конструкции …. Период В
(ВЫБРАТЬ первые 1 Цены.Период ИЗ РегистрСведений.ЦеныТоваров КАК Цены
ГДЕ Цены.Период <= Продажи.Период
И Цены.Товар = Продажи.Товар
И Цены.ВидЦен = &ВидЦен
УПОРЯДОЧИТЬ ПО Цены.Период УБЫВ))
…
(текст комментария доступен только участникам Мастер-группы)
на реальных данных отчет по такой схеме работает. но замер не производил .
не совсем понял:
1.
возможность использовать конструктор запроса для составления вложенного запроса.
вы имеете ввиду , когда мы в запросе создаем именно вложенный запрос ?
ССЫЛКА НИЖЕ
http://screencast.com/t/cIADFf7vE
2. Открыть такой подзапрос в конструкторе не получится.
В смысле не получается ?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день
Требуется подсчитать процент маржи по итоговым полям
Процент маржи = Наценка / Выручка.
Проблема в том, что выручка по каким-то позициям может быть нулевая.
И если в обычном поле я пользуюсь конструкцией ВЫБОР и отсекаю нулевое значение выручки, тем самым избегая ошибки деления на ноль, то для итогов такой прием не проходит.
Запрос:
…
ИТОГИ
ВЫБОР
КОГДА СУММА(втВыручкаИЗакупкаССуммами.СуммаВыручки_Итого) = 0
ТОГДА 0
ИНАЧЕ СУММА(втВыручкаИЗакупкаССуммами.СуммаНаценки_Итого) /
СУММА(втВыручкаИЗакупкаССуммами.СуммаВыручки_Итого)
КОНЕЦ КАК ПроцентМаржи_Итого
ПО
ОБЩИЕ,
втВыручкаИЗакупкаССуммами.Номенклатура
Выдает ошибку на использование функции ВЫБОР в итогах.
То есть мне, по сути, нужно в строке итога выдать 0, если суммарная выручка по данной позиции равна нулю, и выражение, составленное из агрегатных функций, в противном случае. Ничего другого, кроме конструкции ВЫБОР на ум не приходит.
Какой может быть подход к решению данной задачи?
…
(текст комментария доступен только участникам Мастер-группы)
Спасибо, я разобрался, в чем была ошибка.
Ошибка, которая возникала, была следующей: «Невозможно определить поле для записи результата»
Оказывается, для значений агрегатных функций итоговых полей нужно заранее определить поле, куда будет записываться результат, такое поле к списку выходных полей автоматически не добавляется.
Исходный запрос, в котором выдает ошибку:
ВЫБРАТЬ
ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот КАК СуммаВыручки,
ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика.УАС_ЦенаЗакупкиСНДС
* ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК СуммаЗакупки,
ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК Контрагент
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачалаПериода, &ДатаКонцаПериода, Авто, ) КАК ВыручкаИСебестоимостьПродажОбороты
ИТОГИ
ВЫБОР
КОГДА СУММА(СуммаВыручки) = 0
ТОГДА 0
ИНАЧЕ СУММА(СуммаЗакупки) / СУММА(СуммаВыручки)
КОНЕЦ КАК ПроцентМаржи
ПО
ОБЩИЕ,
Контрагент
Запрос становится рабочим, если добавить определение поля ПроцентМаржи, т.е. если в конструкцию ВЫБРАТЬ добавить выражение:
ВЫБОР
КОГДА ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот = 0
ТОГДА 0
ИНАЧЕ ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Характеристика.УАС_ЦенаЗакупкиСНДС * ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот
/ ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот
КОНЕЦ КАК ПроцентМаржи
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день
Имеется запрос:
ВЫБРАТЬ
Товары.Номенклатура КАК Номенклатура,
Товары.Сумма КАК Сумма,
Товары.Ссылка КАК Ссылка
ИЗ
Документ.Реализация.Товары КАК Товары
ИТОГИ
СУММА(Товары.Сумма)
ПО
Товары.Номенклатура
Могу ли я средствами языка запросов упорядочить результат запроса (точнее, упорядочить итоговые строки по номенклатуре в результате запроса) по значению агрегатной функции СУММА(Товары.Сумма)?
(т.е. чтобы номенклатура выдавалась в порядке возрастания суммы, рассчитанной по документам)
…
(текст комментария доступен только участникам Мастер-группы)