Всем привет!
Конфигурация ЗУП 2.1, Демо.
С помощью мастера создал простой отчет по сотрудникам с полями: Сотрудник, Должность, ВидРасчета:
ПостроительОтчетаОтчет.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизаций.Наименование,
| СотрудникиОрганизаций.Должность.Наименование,
| СотрудникиОрганизаций.ВидРасчета.Наименование
|ИЗ
| Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций";
ПостроительОтчетаОтчет.ЗаполнитьНастройки();
ПостроительОтчетаОтчет.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
ПостроительОтчетаОтчет.ТекстЗаголовка = "Отчет";
Настройка = ВосстановитьЗначение("НастройкаВнешниеОтчетыВнешнийОтчет1Отчет_e8a4c552-a827-4c92-8aaf-5340ba1b5c61");
Если Настройка <> Неопределено Тогда
ПостроительОтчетаОтчет.УстановитьНастройки(Настройка);
КонецЕсли;
Logist, спасибо за ответ.
Сначала так и было - без Наименований. Запрос возвращал NULL, потому и добавил Наименование. То-же самое с ними.
Думается, здесь причина более глубокая.
На период "тестирования" закомментируйте восстановление настроек.
Сейчас попробую.
Хотел добавить, что ВидРасчета - типа ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций.
Может отсюда нужно как-то извлекать текущий ВидРасчета?
Сделал, сейчас вот так выглядит:
Процедура ОтчетИнициализация()
//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ИНИЦИАЛИЗАЦИЯ(Отчет)
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
ПостроительОтчетаОтчет.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизаций.Наименование,
| СотрудникиОрганизаций.Должность,
| СотрудникиОрганизаций.ВидРасчета
|ИЗ
| Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций";
ПостроительОтчетаОтчет.ЗаполнитьНастройки();
ПостроительОтчетаОтчет.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
ПостроительОтчетаОтчет.ТекстЗаголовка = "Отчет";
Настройка = ВосстановитьЗначение("НастройкаВнешниеОтчетыВнешнийОтчет1Отчет_4f56d6a9-59d3-4e22-9621-de7b9431a54d");
Если Настройка <> Неопределено Тогда
// ПостроительОтчетаОтчет.УстановитьНастройки(Настройка);
КонецЕсли;
//}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ИНИЦИАЛИЗАЦИЯ
КонецПроцедуры
Уберите наименование: "СотрудникиОрганизаций.Наименование,", поставьте Ссылка
Поставил Ссылка.
Полные имена как выводились, так и выводятся. Только графа Наименование стало Ссылка.
А Должность и ВидРасчета - пустые.
Ну как-то примерно так:
"ВЫБРАТЬ
| СотрудникиОрганизаций.Ссылка,
| СотрудникиОрганизаций.ТекущаяДолжностьОрганизации,
| НачисленияРаботниковОрганизаций.ВидРасчета
|ИЗ
| Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|ЛЕВОЕ СОЕДИНЕНИЕ
|(ВЫБРАТЬ
| ПлановыеНачисленияРаботниковОрганизаций.Сотрудник,
| ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета
|ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций
|ГДЕ
| ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета.КатегорияРасчета = ЗНАЧЕНИЕ(Перечисление.КатегорииРасчетов.Первичное)
|) КАК НачисленияРаботниковОрганизаций
|ПО СотрудникиОрганизаций.ССЫЛКА = НачисленияРаботниковОрганизаций.Сотрудник.Ссылка
|";
Всем добрый вечер!
Можно-ли в запрос 1С вставить функцию? Например так:
ВЫБРАТЬ
| СотрудникиОрганизаций.Ссылка,
| СотрудникиОрганизаций.ТекущаяДолжностьОрганизации,
| ВидРасчетаСотрудника((СотрудникиОрганизаций.Ссылка)
Функция ВидРасчетаСотрудника(Сотрудник)
Если Не ЗначениеЗаполнено(Сотрудник) Тогда
Возврат ""
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ 1
|НачисленияРаботниковОрганизаций.ВидРасчета
|ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковОрганизаций
|ГДЕ
| (Сотрудник = НачисленияРаботниковОрганизаций.Сотрудник) И
| (НачисленияРаботниковОрганизаций.ВидРасчета.КатегорияРасчета В
| (ВЫБРАТЬ КатегорииРасчетов1.Ссылка
| ИЗ Справочник.КатегорииРасчетов КАК КатегорииРасчетов1
| ГДЕ (КатегорииРасчетов1.Код = ""00000"")
| )
| )
|";
Возврат Запрос.Выполнить();
КонецФункции
i | Объединил две темы в одну, у них один вопрос |
запрос - это по сути "текст"
В чистый запрос - нельзя. В СКД можно использовать функции.
Вложенный запрос с левым соединением по сотруднику не подходит?
upd: объединил темы, в них один вопрос и одно решение - вложенный запрос с ПЕРВЫЕ 1, левым соединением по сотруднику.
Даже в MS Access можно вставлять свои функции в запрос.
Мне не очень нравятся тексты процедур, функций, запросов размером более 1 листа А4.
Принцип "разделяй и властвуй" помните?
Т.о. большой текст разбивается на логически осмысленные блоки.
Текст1 = "Выбрать....."
Текст2= "Выбрать...."
Запрос.Текст = Текст1+"Объединить все "+Текст2
Ну, должность сотрудника уже сидит в справочнике, а вот вид расчета приходится извлекать, для текущего сотрудника.
Логически оправдано это извлечение оформить в виде отдельного запроса, а т.к. 1С не поддерживает именованные запросы, как MS Access, то запрос "завернуть" в процедуру или функцию.
А то что в данном примере немного строк, это не повод расслабляться. Для этого запроса логика совсем другая, другое назначение. Значит он должен быть отдельно от основного запроса. Потом-же легче будет, если код разрастется.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua