Здравствуйте всем! Есть проблемка, заполняю документ из регистра по отбору (ДатаОбращения,и Пациент) но в документ переходит только один последний элемент из регистра на одну дату, к примеру на 08.02.2018 должны были переходить все элементы на эту дату а переходит только последний. Как можно решить проблемку помогите пожалуйста.

вот код:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОбращКИФ.ПосещениеВрач,
    | ОбращКИФ.ПосещениеМедсестра,
    | ОбращКИФ.НаблюдениеВрачаЗаПодросткомДа,
    | ОбращКИФ.НаблюдениеВрачаЗаПодросткомНет
    |ИЗ
    | РегистрСведений.ОбращКИФ КАК ОбращКИФ
    |ГДЕ
    | ОбращКИФ.Пациент = &Пациент
    | И ОбращКИФ.ДатаОбращения = &ДатаОбращения";

    Запрос.УстановитьПараметр("ДатаОбращения", Объект.Обращение.Дата);
    Запрос.УстановитьПараметр("Пациент", Объект.Пациент);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Объект.ПосищениеПервыеТриДняВрач = ВыборкаДетальныеЗаписи.ПосещениеВрач;
    Объект.ПосищениеПервыеТриДняМедсестра = ВыборкаДетальныеЗаписи.ПосещениеМедсестра;
    Объект.НаблюдениеВрачаЗаПодросткомДа = ВыборкаДетальныеЗаписи.НаблюдениеВрачаЗаПодросткомДа;
    Объект.НаблюдениеВрачаЗаПодросткомНет = ВыборкаДетальныеЗаписи.НаблюдениеВрачаЗаПодросткомНет;
    КонецЦикла;
    КонецПроцедуры
```
---
Вот! то есть вы знаете вот эту логику заполнения. Тогда вам вот эту логику и нужно записать в алгоритм
Вот что то в этом роде можно записать

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОбращКИФ.ПосещениеВрач,
    | ОбращКИФ.ПосещениеМедсестра,
    | ОбращКИФ.НаблюдениеВрачаЗаПодросткомДа,
    | ОбращКИФ.НаблюдениеВрачаЗаПодросткомНет
    |ИЗ
    | РегистрСведений.ОбращКИФ КАК ОбращКИФ
    |ГДЕ
    | ОбращКИФ.Пациент = &Пациент
    | И ОбращКИФ.ДатаОбращения = &ДатаОбращения";

    Запрос.УстановитьПараметр("ДатаОбращения", Объект.Обращение.Дата);
    Запрос.УстановитьПараметр("Пациент", Объект.Пациент);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.НаблюдениеВрачаЗаПодросткомДа ) Тогда
    Объект.НаблюдениеВрачаЗаПодросткомДа = ВыборкаДетальныеЗаписи.НаблюдениеВрачаЗаПодросткомДа ;
    КонецЕсли
    Если ЗначениеЗаполнено(ПосещениеВрач) Тогда
    Объект.ПосещениеВрач = ВыборкаДетальныеЗаписи.ПосещениеВрач;
    КонецЕсли
    ////////// и так далее описываете логику
    КонецЦикла;
    КонецПроцедуры
```
---
в запросе сгруппируйте по дате обращения.
---
Нет тут так наверное не подойдет. Сгруппировать по дате подойдет если в регистр две записи. А если их там три, например, дата одна - 08.01.2019 и три записи с признаком "ПосещениеВрач" - истина, "ПосещениеВрач" - ложь и "ПосещениеВрач" - ложь - что в данном случае нужно будет отразить?? Тут нужно прям понять смысл регистра и что в данном случаи сделать. Как должно быть в данном случае? или в регистре всегда не больше двух записей. То что у Вас написано по алгоритму работает верно.
---
у меня так, есть обработки там пишутся данные и в каждой обработке есть реквизит "ДатаОбращения", и в каждой обработке поля разные , эти данные сохраняются сначала в ТЧ документа и из ТЧ записываются в регистр сведений, в регистр попадают несколько записей с разными заполненными полями но с одного документа.И уж потом я заполняю другой документ из регистра в этом документе когда я нажимаю кнопку Заполнить заполняется только один запись регистра хотя там много регистров с разными заполненными полями но с одной "ДатойОбращения".
---
ну вот представьте. Мы заполняем у нас три записи с одной датой, например, 08.01 и значения ПосещениеВрач - Истина, ПосещениеВрач - ложь, ПосещениеВрач - ложь. Что в результате должно подставить в поле ПосещениеВрач - истина или ложь??
---
в этом случае будет брать ПосещениВрач - Истина, Но там есть еще другой запись есть еще НаблюдениеВрачаЗаПодросткомДа - истина, эти два записи он должен брать
---
Если же те реквизиты которые вы хотите получить все имеют значения истина или ложь, то к ним можно применить агрегатную функцию максимум - и программа будет брать истина если оно хотя бы одно было из всех

        "ВЫБРАТЬ
        | МАКСИМУМ(ОбращКИФ.ПосещениеВрач) КАК ПосещениеВрач,
        | МАКСИМУМ(ОбращКИФ.ПосещениеМедсестра) КАК ПосещениеМедСестра,
        | МАКСИМУМ(ОбращКИФ.НаблюдениеВрачаЗаПодросткомДа) КАК НаблюдениеВрачаЗаПодросткомДа,
        | МАКСИМУМ(ОбращКИФ.НаблюдениеВрачаЗаПодросткомНет) КАК НаблюдениеВрачаЗаПодросткомНет
        |ИЗ
        | РегистрСведений.ОбращКИФ КАК ОбращКИФ
        |ГДЕ
        | ОбращКИФ.Пациент = &Пациент
        | И ОбращКИФ.ДатаОбращения = &ДатаОбращения"
---
но даже если не булево, а строка тоже самая ситуация происходит, только один берет
---
в этом проблема, что если тип отличается от булево то тогда не возможно применить агрегатную функцию. Но тогда Вы сами глядя на таблицу можете сказать что должно подставится. То есть есть поле в котором на одну дату есть три значения (любых три значения, три текста записано) тогда из этих трех текстов какое должно записать?? Или должны все записаться через запятую (грубо говоря)?
---
нет кажется я не так объяснил , Если есть 2 записей в регистре в разных полях, то из регистра на документ должны заполнятся 2 поля , то есть в регистре есть 3 Ресураса - ДатаОбращения,ПосещениеВрач,НаблюдениеВрачаЗаПодросткомДа, в этом случаем если есть 2 записи

В первой записи заполнены Ресурсы ДатаОбращения-"08.02.2019",ПосещениеВрач-"Пустоеполе",НаблюдениеВрачаЗаПодросткомДа - "что то написана".

А на второй записи заполнены так: Ресурсы ДатаОбращения-"08.02.2019",ПосещениеВрач-"что то написана",НаблюдениеВрачаЗаПодросткомДа - "Пустое поле".

Соответственно в документе должны заполнятся 2 реквизита:

 1й реквизит -,НаблюдениеВрачаЗаПодросткомДа - "что то написана".
2й реквизит - ПосещениеВрач-"что то написана"
---
Вот! то есть вы знаете вот эту логику заполнения. Тогда вам вот эту логику и нужно записать в алгоритм
Вот что то в этом роде можно записать

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОбращКИФ.ПосещениеВрач,
    | ОбращКИФ.ПосещениеМедсестра,
    | ОбращКИФ.НаблюдениеВрачаЗаПодросткомДа,
    | ОбращКИФ.НаблюдениеВрачаЗаПодросткомНет
    |ИЗ
    | РегистрСведений.ОбращКИФ КАК ОбращКИФ
    |ГДЕ
    | ОбращКИФ.Пациент = &Пациент
    | И ОбращКИФ.ДатаОбращения = &ДатаОбращения";

    Запрос.УстановитьПараметр("ДатаОбращения", Объект.Обращение.Дата);
    Запрос.УстановитьПараметр("Пациент", Объект.Пациент);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

    Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.НаблюдениеВрачаЗаПодросткомДа ) Тогда
    Объект.НаблюдениеВрачаЗаПодросткомДа = ВыборкаДетальныеЗаписи.НаблюдениеВрачаЗаПодросткомДа ;
    КонецЕсли
    Если ЗначениеЗаполнено(ПосещениеВрач) Тогда
    Объект.ПосещениеВрач = ВыборкаДетальныеЗаписи.ПосещениеВрач;
    КонецЕсли
    ////////// и так далее описываете логику
    КонецЦикла;
    КонецПроцедуры
```
---
Мне кажется это не верно, если у нас в первой записи НаблюдениеВрачаЗаПодросткомДа заполнено. а во второй мы специально ее очистили, то по вашей логике НаблюдениеВрачаЗаПодросткомДа будет всегда заполнена.
---
вот так
---
Я думаю, что нужно на одну дату обращения всегда перезаписывать все реквизиты, тогда из запроса проще будет данные забирать.
---
Переписывать тоже не подойдет. Тут просто сам подход может к структуре данных нужно поменять. Я как понимаю имеется один большой регистр, в которой пишутся те или иные данные (наверное каждый документ делает запись в свои реквизиты). А затем в каком то одном документе нужно просто взять и все собрать. Тут либо изменить структуру и сделать несколько регистров, где для одной даты будут находиться только те реквизиты которые нужно. Либо все таки описать какую то логику заполнения.
---
Согласен, нужно полная логика заполнения документа. Тогда будет понятно как это реализовать.
---
В приницпе автор знает какова логика. И он может ее описать - путем если это заполнено то его вот сюда поместить. а если это пусто, то тогда вот это взять. Наверно просто ему помочь в этом
---
Да спасибо этот способ работает так и буду наверно делать, но у меня много реквизитов соответственно и условий много будет а это нормально вообще если много условий ?
---
если много условий в этом нет ни чего страшного
---
а из-за чего может быть , что поля булево(галочки) не заполняются все, если например 2 записи в регистре то в документ попадает только один последний.
---
ну ведь у вас программа сперва например для первой записи в вашем документе поставить истина, а во второй раз ложь. Поэтому у вас и пусто. Вам нужно написать, если реквизит принял значение истина, то во второй разе его не нужно заполнять
---
Строки заполняются нормально, но вот Булево не получается только один заполняется, из-за чего может быть?
---
да даа все верно, имеется только один большой регистр и там очень много полей для записи(ресурсы) но только , каждая обработка делает запись в свои реквизиты на ТЧ одного документа и потом уже оттуда в регистр идет, то есть между Обработкой и Регистром есть и Документ который записывает в регистр