|
Выборка из табличной части докуметов. Проблема с запросом | ☑ | ||
---|---|---|---|---|
0
Анастасия Изотова
15.12.15
✎
05:38
|
Помогите разобраться с внешней обработкой. У меня 1С 8.1. обработка-отчет.
Однотипные документы с табличной частью. в процедуре первый запрос перебирает все документы за период, и берет реквизиты с формы. А второй запрос выбирает из каждого документа содержимое табличной части, все что вписано в нее. Например: 0001 Иванов ФизЛицо Колбасы 15кг 1000р 0001 Иванов ФизЛицо Сыры 10кг 2000р 0002 Петров ФизЛицо Колбасы 7кг 700р У меня в процедуре какой то косяк, я не понимаю как из Результатов первой выборки обратиться с запросом к табличной части выбранных документов |
|||
1
Анастасия Изотова
15.12.15
✎
05:39
|
Макет = ПолучитьМакет("Макет");
Область = Макет.ПолучитьОбласть("Шапка"); ДН = Формат(НачПериода, "ДФ=dd.MM.yyyy" ); ДК = Формат(КонПериода, "ДФ=dd.MM.yyyy" ); ТабДок.Вывести(Область); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НазначениеНаОсмотр.Пациент.Ссылка КАК Пациент, | НазначениеНаОсмотр.Пациент.ДатаРождения КАК ДатаРождения, | НазначениеНаОсмотр.Услуга КАК Услуга, | НазначениеНаОсмотр.Номер КАК Номер, | НазначениеНаОсмотр.Дата КАК ДатаДок |ИЗ | Документ.НазначениеНаОсмотр КАК НазначениеНаОсмотр |ГДЕ | НазначениеНаОсмотр.Дата <= &ДатаКон | И НазначениеНаОсмотр.Дата >= &ДатаНач | И НазначениеНаОсмотр.Проведен = &Истина" ; Запрос.УстановитьПараметр("ДатаКон", КонПериода); Запрос.УстановитьПараметр("ДатаНач", НачПериода); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); Запрос.УстановитьПараметр("Истина", Истина); Результат = Запрос.Выполнить().Выбрать(); н = 1; Пока Результат.Следующий() цикл Область = Макет.ПолучитьОбласть("Строка"); Область.Параметры.ФиоП = Результат.Пациент; Область.Параметры.УслугаП = Результат.Услуга; Номер = Результат.Номер; Запрос2=Новый Запрос; Запрос2.Текст= "ВЫБРАТЬ | ТабличнаяЧасть.Услуга, | ТабличнаяЧасть.СпециализацияВрача, | ТабличнаяЧасть.Сотрудник, | ТабличнаяЧасть.Кабинет | ИЗ | Документ.НазначениеНаОсмотр.Услуги КАК ТабличнаяЧасть | ГДЕ | НазначениеНаОсмотр.Ссылка.Номер = &Номер"; Запрос2.УстановитьПараметр("Номер",Номер); Результат = Запрос2.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл Область.Параметры.Кабинет=Результат.Кабинет; ТабДок.Вывести(Область); КонецЦикла; ТабДок.Вывести(Область); н = н + 1; КонецЦикла; Табдок.Показать("Отчет по за период"); |
|||
2
Godofsin
15.12.15
✎
05:43
|
В одном запросе делай
|
|||
3
Godofsin
15.12.15
✎
05:44
|
| И НазначениеНаОсмотр.Проведен;
|
|||
4
Анастасия Изотова
15.12.15
✎
05:59
|
У меня не получается обьединить Табличную часть, и то что на форме ...
когда пишу |ИЗ | Документ.НазначениеНаОсмотр КАК НазначениеНаОсмотр , выбираю то что на форме, а когда | ИЗ | Документ.НазначениеНаОсмотр.Услуги КАК ТабличнаяЧасть из табличной части ... |
|||
5
Маратыч
15.12.15
✎
06:02
|
Запрос в цикле - зло. Тут же без проблем можно к реквизитам шапки через Документ.НазначениеНаОсмотр.Услуги.Ссылка обратиться.
|
|||
6
Маратыч
15.12.15
✎
06:04
|
+(5) И это не "то, что на форме". Есть реквизиты шапки, есть реквизиты ТЧ, а как они представлены на форме (если вообще представлены) - зависит от разработчика. На форме их вообще может не быть, или, наоборот, на форме может быть размещен реквизит формы, к которому обратиться через реквизиты документа не получится.
|
|||
7
Godofsin
15.12.15
✎
06:12
|
(4) Бери таб. часть в запросе как источник. Там доступны реквизиты документа через слово "ссылка".
|
|||
8
Godofsin
15.12.15
✎
06:15
|
"ВЫБРАТЬ
| ТабличнаяЧасть.Ссылка.Пациент КАК Пациент, | ТабличнаяЧасть.Услуга, | ТабличнаяЧасть.СпециализацияВрача, | ТабличнаяЧасть.Сотрудник, | ТабличнаяЧасть.Кабинет | ИЗ | Документ.НазначениеНаОсмотр.Услуги КАК ТабличнаяЧасть |
|||
9
Godofsin
15.12.15
✎
06:16
|
И лучше выбирать из регистра, если он есть конечно. Ибо .Проведен всего лишь галочка совсем неозначающая, что документ сделал движения.
|
|||
10
Анастасия Изотова
15.12.15
✎
06:23
|
так, ага .. значит нужны реквизиты из шапки, и реквизиты ТЧ...
А если Этот ВЫБАТЬ работает с | ИЗ | Документ.НазначениеНаОсмотр.Услуги КАК ТабличнаяЧасть то как мне в этом же запросе к реквизитам шапки обратиться ? и, регистров нет. Понятие Проведен - чисто номинальное. Проведенные документы в правилах безопасности участвуют |
|||
11
Мэс33
15.12.15
✎
06:27
|
(10)
В консоли попробуй сделать обращение к табличной части. А реквизиты шапки получишь по ссылке. Просто попробуй. ТЧ не существует отдельно от документа. |
|||
12
Маратыч
15.12.15
✎
06:27
|
(10) >как мне в этом же запросе к реквизитам шапки обратиться
Через ТабличнаяЧасть.Ссылка. |
|||
13
Мэс33
15.12.15
✎
06:28
|
(0) Движений точно нет? Документ при проведении не создает их?
|
|||
14
Мэс33
15.12.15
✎
06:28
|
(12) по ходу фото понравилось. Никто не острит, все помогают ))))
|
|||
15
Godofsin
15.12.15
✎
06:28
|
(10) | ТабличнаяЧасть.Ссылка.Пациент КАК Пациент,
Читай внимательно. |
|||
16
Маратыч
15.12.15
✎
06:30
|
+(12) Т.е. обращайся так: ТабличнаяЧасть.Ссылка.Услуга, ТабличнаяЧасть.Ссылка.Дата и т.д.
(14) Бгг, а я только посмотрел, кстати. Очень даже :) |
|||
17
Анастасия Изотова
15.12.15
✎
06:46
|
Движений нет. В регистры он ничего не пишет ))
Я, поняла, когда : "ВЫБРАТЬ | ТабличнаяЧасть.Ссылка.Пациент КАК Пациент, // эти строки забирают | ТабличнаяЧасть.Ссылка.НомерДокумента КАК НомерДокумента, // значения реквизитов | ТабличнаяЧасть.Ссылка.ответственный КАК ответственный, // из шапки | ТабличнаяЧасть.Ссылка.Примечания КАК Примечания, // формы | ТабличнаяЧасть.Услуга, // а эти строки | ТабличнаяЧасть.СпециализацияВрача, // забирают значения | ТабличнаяЧасть.Сотрудник, // из табличной | ТабличнаяЧасть.Кабинет // части | ИЗ | Документ.НазначениеНаОсмотр.Услуги КАК ТабличнаяЧасть так ? |
|||
18
hhhh
15.12.15
✎
06:52
|
ты же так и делала
ГДЕ | НазначениеНаОсмотр.Ссылка.Номер = &Номер"; Что такое у тебя НазначениеНаОсмотр.Ссылка.Номер ?? Ведь Номер из шапки. А обращалась из табличной части. Посмотри свой же запрос. |
|||
19
Анастасия Изотова
15.12.15
✎
06:59
|
Мой - был с двумя запросами. я сначала запросила документы, а потом искала как бы запросить ТЧ, по номеру документа, полученном в первом запросе ...
а +17 пост, там я все правильно поняла ? |
|||
20
Маратыч
15.12.15
✎
07:11
|
(19) Ага, оно самое. И никаких запросов в цикле.
|
|||
21
Маратыч
15.12.15
✎
07:15
|
+(20) Только не "шапка формы", а "шапка документа". Форма документа - эт другое.
|
|||
22
Анастасия Изотова
15.12.15
✎
07:37
|
эхх, говорит что поле не найдено:
"ВЫБРАТЬ | ТабличнаяЧасть.Ссылка.Номер КАК Номер, | ТабличнаяЧасть.Ссылка.Дата КАК Дата, | ТабличнаяЧасть.Ссылка.ВидУслуги КАК ВидУслуги, | ТабличнаяЧасть.Ссылка.Пациент КАК Пациент, | ТабличнаяЧасть.Услуга, | ТабличнаяЧасть.Количество, | ТабличнаяЧасть.Цена, | ТабличнаяЧасть.Сумма |ИЗ | Документ.НазначениеНаОсмотр.Услуги КАК ТабличнаяЧасть |ГДЕ | НазначениеНаОсмотр.Ссылка.Дата <= &ДатаКон | И НазначениеНаОсмотр.Ссылка.Дата >= &ДатаНач | И НазначениеНаОсмотр.Ссылка.Проведен = &Истина" ; Запрос.УстановитьПараметр("ДатаКон", КонПериода); Запрос.УстановитьПараметр("ДатаНач", НачПериода); Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес); Запрос.УстановитьПараметр("Истина", Истина); {Форма.Форма(41)}: Ошибка при вызове метода контекста (Выполнить): {(13, 2)}: Поле не найдено "НазначениеНаОсмотр.Ссылка.Дата" <<?>>НазначениеНаОсмотр.Ссылка.Дата <= &ДатаКон Результат = Запрос.Выполнить().Выбрать(); по причине: {(13, 2)}: Поле не найдено "НазначениеНаОсмотр.Ссылка.Дата" <<?>>НазначениеНаОсмотр.Ссылка.Дата <= &ДатаКон |
|||
23
Мимохожий Однако
15.12.15
✎
07:42
|
Удали это поле из списка
|
|||
24
Zmich
15.12.15
✎
07:43
|
(22). ГДЕ ТабличнаяЧасть.Ссылка.Дата и т.д.
|
|||
25
Zmich
15.12.15
✎
07:44
|
И еще, не нужно задавать параметр "Истина".
Просто ТабличнаяЧасть.Ссылка.Проведен = ИСТИНА |
|||
26
Мимохожий Однако
15.12.15
✎
07:45
|
(0)Есть такой инструмент - консоль запросов. Второй инструмент - режим отладки.
|
|||
27
Godofsin
15.12.15
✎
07:54
|
(25) Просто ТабличнаяЧасть.Ссылка.Проведен
|
|||
28
Анастасия Изотова
15.12.15
✎
08:16
|
Такая же беда (((
|ИЗ | Документ.НазначениеНаОсмотр.Услуги КАК ТабличнаяЧасть |ГДЕ | ТабличнаяЧасть.Ссылка.Дата <= &ДатаКон | ТабличнаяЧасть.Ссылка.Дата >= &ДатаНач | И ТабличнаяЧасть.Ссылка.Проведен = Истина" ; по причине: {(14, 2)}: Синтаксическая ошибка "ТабличнаяЧасть.Ссылка.Дата" <<?>>ТабличнаяЧасть.Ссылка.Дата >= &ДатаНач |
|||
29
Маратыч
15.12.15
✎
08:24
|
(28) Перед ТабличнаяЧасть.Ссылка.Дата >= &ДатаНач не хватает "И".
|
|||
30
ЛисИзЛеса
15.12.15
✎
08:28
|
Предлагаю так!
|ГДЕ | ТабличнаяЧасть.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон | И ТабличнаяЧасть.Ссылка.Проведен = Истина" ; |
|||
31
Мимохожий Однако
15.12.15
✎
08:28
|
(28)Повторюсь. Консоль запросов есть у тебя?
|
|||
32
denis_jj
15.12.15
✎
08:58
|
Можно в вашем первом запросе добавить выбор тч услуги.
|Выбрать |НазначениеНаОсмотр.Услуги КАК ТЧУслуги |Из Документ.НазначениеНаОсмотр Тогда в первом цикле в этом поле выборки первого запроса будет находиться результат запроса по табличной части. Его можно будет обойти вторым циклом. По поводу оптимизации и запроса в цикле..... Если в коде есть Область.Параметры.ФиоП = Результат.Пациент; Область.Параметры.УслугаП = Результат.Услуга; и Результат.Пациент и Результат.Услуга это ссылочные типы, то при таком заполнении макета система неявно выполняет запрос в базу чтобы получить текстовое представление этих объектов. Так что с точки зрения оптимизации есть над чем поработать. Для исключения неявных запросов вместо ссылок нужно использовать Представление в запросе. |
|||
33
Анастасия Изотова
18.12.15
✎
03:13
|
Получилось ! Спасибо огромное, парни )) А я возилась столько сидела !!! И советы грамотные , приятно и прочесть и главное что после - все РАБОТАЕТ !!!!! (:*
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |