Logist, спасибо за ответ. Сначала так и было - без Наименований. Запрос возвращал NULL, потому и добавил Наименование. То-же самое с ними. Думается, здесь причина более глубокая.
Сейчас попробую. Хотел добавить, что ВидРасчета - типа ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций. Может отсюда нужно как-то извлекать текущий ВидРасчета?
Сделал, сейчас вот так выглядит:
Процедура ОтчетИнициализация() //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ИНИЦИАЛИЗАЦИЯ(Отчет) // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
"ВЫБРАТЬ | СотрудникиОрганизаций.Ссылка, | СотрудникиОрганизаций.ТекущаяДолжностьОрганизации, | НачисленияРаботниковОрганизаций.ВидРасчета |ИЗ | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций |ЛЕВОЕ СОЕДИНЕНИЕ |(ВЫБРАТЬ | ПлановыеНачисленияРаботниковОрганизаций.Сотрудник, | ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета |ИЗ | РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК ПлановыеНачисленияРаботниковОрганизаций |ГДЕ | ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета.КатегорияРасчета = ЗНАЧЕНИЕ(Перечисление.КатегорииРасчетов.Первичное) |) КАК НачисленияРаботниковОрганизаций |ПО СотрудникиОрганизаций.ССЫЛКА = НачисленияРаботниковОрганизаций.Сотрудник.Ссылка |";
Правда, в отчет попадает несколько строк для одного и того-же сотрудника, если было несколько документов по нем. Нужно или оставить уникальные строки во вложенном отчете, или актуальные.
Где ВидРасчетаСотрудника((..) - функция, возвращающая ВидРасчета для заданного Сотрудника:
Функция ВидРасчетаСотрудника(Сотрудник) Если Не ЗначениеЗаполнено(Сотрудник) Тогда Возврат "" КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ 1 |НачисленияРаботниковОрганизаций.ВидРасчета |ИЗ | РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковОрганизаций |ГДЕ | (Сотрудник = НачисленияРаботниковОрганизаций.Сотрудник) И | (НачисленияРаботниковОрганизаций.ВидРасчета.КатегорияРасчета В | (ВЫБРАТЬ КатегорииРасчетов1.Ссылка | ИЗ Справочник.КатегорииРасчетов КАК КатегорииРасчетов1 | ГДЕ (КатегорииРасчетов1.Код = ""00000"") | ) | ) |"; Возврат Запрос.Выполнить(); КонецФункции
Даже в MS Access можно вставлять свои функции в запрос. Мне не очень нравятся тексты процедур, функций, запросов размером более 1 листа А4. Принцип "разделяй и властвуй" помните? Т.о. большой текст разбивается на логически осмысленные блоки.
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(vadim007 @ 13.07.15, 13:24)
Мне не очень нравятся тексты процедур, функций, запросов размером более 1 листа А4.
Данный случай вообще не подпадает под это, запрос в районе 20 строк.
Цитата(vadim007 @ 13.07.15, 13:24)
большой текст разбивается на логически осмысленные блоки.
Если текущий пример называете большим текстом, и необходимостью разбить на блоки, то у вас должно быть две функции - одна возвращает должность сотрудника, другая - вид расчета, затем берете СКД, запросом получаете сотрудников, а в вычисляемых полях используете две эти функции. Вот это "Принцип "разделяй и властвуй"". А если надо получить статичные данные в трех колонках, то это простой отчет с одним запросом.
Личные бесплатные консультации не даю, для этого есть форум!
Ну, должность сотрудника уже сидит в справочнике, а вот вид расчета приходится извлекать, для текущего сотрудника. Логически оправдано это извлечение оформить в виде отдельного запроса, а т.к. 1С не поддерживает именованные запросы, как MS Access, то запрос "завернуть" в процедуру или функцию. А то что в данном примере немного строк, это не повод расслабляться. Для этого запроса логика совсем другая, другое назначение. Значит он должен быть отдельно от основного запроса. Потом-же легче будет, если код разрастется.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!