|
Помогите найти отличия | ☑ | ||
---|---|---|---|---|
0
Kvitok8320
05.09.13
✎
13:04
|
Добрый день, не могу справиться сам ....
вот два куска модуля формы отчета первый работает, а второй нет - показывает, что в выборке элементов нет &НаСервере Процедура ЗаполнитьСервер() запрос = новый запрос; запрос.Текст=" |ВЫБРАТЬ |суммаостатокКт, Счет, Субконто1 |ИЗ |регистрбухгалтерии.хозрасчетный.остатки(&Выбдата) КАК Остатки |ГДЕ |Остатки.Счет = &ВыбСчет"; выбсчет=планысчетов.Хозрасчетный; нужныйсчет = выбсчет.УставныйКапитал_ОбыкновенныеАкции; запрос.УстановитьПараметр("ВыбДата",отчет.ДатаЗапроса); запрос.УстановитьПараметр("ВыбСчет",Нужныйсчет); результат = запрос.Выполнить(); выборка=результат.Выбрать(); пока выборка.Следующий() цикл строка = отчет.ТабличнаяЧасть1.Добавить(); строка.заемщик=выборка.субконто1; запрос2=новый запрос; запрос2.Текст = " |Выбрать |Объект, Вид, Представление |ИЗ |РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ |КонтактнаяИнформация.Объект=&Объект"; запрос2.УстановитьПараметр("Объект",строка.заемщик); результат2=запрос2.Выполнить(); выборка2 = результат2.Выбрать(); строка.контактнаяинформация = " "; пока выборка2.Следующий() цикл строка.контактнаяинформация = строка.контактнаяинформация + строка(выборка2.вид)+":"+сокрлп(строка(выборка2.представление))+";"; конеццикла; конеццикла; конецпроцедуры вот второй - реально просто скопировал &НаСервере Процедура Заполнить3Сервер() для каждого строка5 из отчет.ТабличнаяЧасть1 цикл запрос2=новый запрос; запрос2.Текст = " |Выбрать |Объект, Тип, Вид, Представление |ИЗ |РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ |КонтактнаяИнформация.Объект=&Объект"; запрос2.УстановитьПараметр("Объект",строка5.заемщик); результат2=запрос2.Выполнить(); выборка2 = результат2.Выбрать(); строка5.контактнаяинформация = " "; пока выборка2.Следующий() цикл строка5.контактнаяинформация = строка5.контактнаяинформация + строка(выборка2.вид)+":"+сокрлп(строка(выборка2.представление))+";"; конеццикла; конеццикла; КонецПроцедуры по точке останова проверял - параметр в запросе присваивается параметр.объект.справочникссылка.контрагенты ..... |
|||
1
pumbaEO
05.09.13
✎
13:05
|
kdiff3, winmerge тебе поможет.
|
|||
2
Любопытная
05.09.13
✎
13:06
|
За запрос в цикле тебя сейчас тут бить будут...
|
|||
3
Wobland
05.09.13
✎
13:06
|
ставлю на запрос2.УстановитьПараметр("Объект"
|
|||
4
Wobland
05.09.13
✎
13:07
|
(2) кстати, да. с учётом этого имеющееся выкинуть, приличным людям мозг не любить, всё переписать, стоя на горохе
|
|||
5
Любопытная
05.09.13
✎
13:07
|
" параметр.объект.справочникссылка.контрагенты " вот это что значит?
|
|||
6
Kvitok8320
05.09.13
✎
13:11
|
сорри - по другому пока не научился (посмотрите мой стаж на форуме ....)
(5) У регистра контактная информация 3 измерения - одно из них объект .... ну в первом же работает ... |
|||
7
Любопытная
05.09.13
✎
13:14
|
(6) посмотри в РС - есть ли действительно контактная информация у этого контрагента. Запусти свой запрос в консоли и задай параметром того контрагента, который у тебя в параметр пишется.
Переименуй переменные более информативно, код сразу станет более читабельным. Все эти Запрос2, строка5 и тому подобное... бррр :) |
|||
8
Kvitok8320
05.09.13
✎
13:15
|
проверил - у некоторых точно есть
|
|||
9
Wobland
05.09.13
✎
13:15
|
(6) отличный повод научиться
|
|||
10
Любопытная
05.09.13
✎
13:15
|
(6) Сделай с соединением твоей ТЧ и регистра сведений, связь по объекту. В конструкторе это просто
|
|||
11
Любопытная
05.09.13
✎
13:16
|
(10) *Сделай запрос конечно же :)
|
|||
12
Любопытная
05.09.13
✎
13:17
|
Кстати. Что ж ты говоришь, что скопировал, если в первом поля Тип нет, а в твоем есть?
|
|||
13
Kvitok8320
05.09.13
✎
13:19
|
ок, сделаю, перепишу, научусь :)
(12) это я уже потом проверять начал - методом ... ну вобщем не лучшим ... |
|||
14
Любопытная
05.09.13
✎
13:21
|
(13) возьми консоль запросов и тестируй свой запрос в ней. Это очень просто, если голова есть. А она, судя по фото, точно есть :)
|
|||
15
Wobland
05.09.13
✎
13:23
|
ух ты! а я ж думал, Квиток- это студент ;)
|
|||
16
Kvitok8320
05.09.13
✎
13:26
|
(15) ну пристыдили, пристыдили .... уже пошел переучиваться :)
|
|||
17
Kvitok8320
05.09.13
✎
13:27
|
(7) Что то мне подсказывает, что вы правы насчет отсутствия информации как таковой .....
|
|||
18
Wobland
05.09.13
✎
13:28
|
(16) я б дорожил комплиментом от Любопытной ;)
|
|||
19
Kvitok8320
05.09.13
✎
13:33
|
Да, я уже сделал скриншот экрана :)
но, думаю что замечание относилось к наличию головы как элемента тела ... :) (7) да, так и есть - у меня есть дублирующиеся элементы в справочнике контрагентов и контактная информация есть не на тех, которые попадают в мою выборку |
|||
20
Любопытная
05.09.13
✎
13:36
|
(18) Я бы посоветовала хотя бы изредка меня не комментировать. (19) Ну вот, все просто. Но от запросов в цикле все же советую избавиться. Нехорошо это
|
|||
21
Kvitok8320
05.09.13
✎
13:38
|
Спасибо еще раз! Понял, что надо, пока не понял как - пошел изучать конструктор запросов
|
|||
22
Kvitok8320
05.09.13
✎
14:56
|
(10) ... исправленный вариант запроса (без запроса в цикле) .... (работает)
запрос = новый запрос; запрос.Текст=" |ВЫБРАТЬ | КонтактнаяИнформация.Объект КАК Объект, | КонтактнаяИнформация.Тип КАК Тип, | КонтактнаяИнформация.Вид КАК Вид, | КонтактнаяИнформация.Представление, | ХозрасчетныйОстатки.Счет КАК Счет, | ХозрасчетныйОстатки.Субконто1 КАК Субконто1, | ХозрасчетныйОстатки.СуммаОстатокКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ПО ХозрасчетныйОстатки.Субконто1 = КонтактнаяИнформация.Объект |ГДЕ | ХозрасчетныйОстатки.Счет = &ВыбСчет |УПОРЯДОЧИТЬ ПО | Объект выбсчет=планысчетов.Хозрасчетный; нужныйсчет = выбсчет.УставныйКапитал_ОбыкновенныеАкции; запрос.УстановитьПараметр("ВыбСчет",Нужныйсчет); |
|||
23
Wobland
05.09.13
✎
15:41
|
(22) левое сделай. внутреннее тебе убьёт (возможно) некоторые записи из регистра бухгалтерии
|
|||
24
Wobland
05.09.13
✎
15:44
|
да и как-то.. странный он какой-то, запрос. вот так вот шарашить по всему регистру, полагая, что первое субконто - это кто-то (кто?) с контактами?
|
|||
25
Любопытная
05.09.13
✎
16:49
|
(22) Теперь советую освоить параметры виртуальных таблиц. Тогда запрос будет работать быстрее)
Таким образом ты выбрал все объекты, по которым есть остатки по выбранному счету И у которых есть контактная информация. Т.е. объекты с остатками без контактной информации в выборку не попадут. И наоборот :) |
|||
26
Kvitok8320
05.09.13
✎
20:15
|
(23) (24) я понял, что вы имеете ввиду, проверю, обязательно учту на будущее.
это запрос под конкретный счет 80.01 - там субконто1 = контрагенты, а у них предположительно должна быть контактная информация (если бы ее занесли) ... |
|||
27
Kvitok8320
05.09.13
✎
20:21
|
(25) то есть, если я правильно понял, нужно определить, что для меня первично и после этого решить, какой тип соединения устанавливать ... ок, буду думать
|
|||
28
Kvitok8320
06.09.13
✎
15:12
|
а скажите пожалуйста, если мне нужно проанализировать какой-то период "по состоянию на конец каждого дня", на предмет каких-то показателей , это тоже можно без запроса в цикле реализовать? ... а то вдруг нельзя, а я ...
|
|||
29
Wobland
06.09.13
✎
15:46
|
(28) нужно. можно поискать "срез последних на каждую дату"
|
|||
30
Kvitok8320
06.09.13
✎
21:14
|
(29) .... это магия более высокого уровня ... попробую разобраться ....
|
|||
31
Kvitok8320
10.09.13
✎
13:38
|
Подскажите пожалуйста: в процессе борьбы со срезом последних на каждую дату у меня не получается в ВЫБРАТЬ добавить в запрос2
Максимум(РегистрСведенийФФФ.Период) как Период Начинает ругаться на ВТ1.ДоговорЗайма и т.п. а не определяя максимум, ошибок нет, но результат не тот, что нужен .... &НаСервере Процедура сформироватьсервер() МВТ = Новый МенеджерВременныхТаблиц; Запрос=Новый Запрос; Запрос.МенеджерВременныхТаблиц = МВТ; Запрос.Текст = " |выбрать ДоговорЗайма, Период, Остаток |поместить ВТ1 |ИЗ регистрнакопления.договорызаймаостатки |где регистрнакопления.договорызаймаостатки.договорзайма=&договорзайма |сгруппировать по договорзайма, период, остаток |Индексировать по договорзайма, период, остаток"; запрос.УстановитьПараметр("ДоговорЗайма",объект.Договорзайма); результат = запрос.Выполнить(); выборка = результат.Выбрать(); Пока выборка.следующий() Цикл а=0; КонецЦикла; запрос2 = новый запрос; запрос2.МенеджерВременныхТаблиц = МВТ; запрос2.Текст = " |Выбрать |ВТ1.ДоговорЗайма, ВТ1.Период, ВТ1.Остаток | |ИЗ ВТ1 |Левое Соединение |Регистрсведений.ДоговорыЗаймаЗадолженность |ПО ВТ1.Период >= Регистрсведений.ДоговорыЗаймаЗадолженность.Период И |ВТ1.ДоговорЗайма = Регистрсведений.ДоговорыЗаймаЗадолженность.ДоговорЗайма"; результат2 = запрос2.Выполнить(); выборка2 = результат2.Выбрать(); пока выборка2.Следующий() цикл а=0; конеццикла; КонецПроцедуры |
|||
32
Любопытная
10.09.13
✎
13:54
|
(31) А что не получается?
|
|||
33
Kvitok8320
10.09.13
✎
13:56
|
так вот это и не получается - когда пишу не Максимум(РС.период), а просто РС.Период
ошибку не выдает, а когда пишу Максимум(РС.Период) - ругается |
|||
34
Любопытная
10.09.13
✎
13:56
|
(33) Как ругается?
|
|||
35
Kvitok8320
10.09.13
✎
14:00
|
написал вот так
запрос2.Текст = " |Выбрать |ВТ1.ДоговорЗайма, ВТ1.Период, ВТ1.Остаток, |Максимум(РегистрСведений.ДоговорыЗаймаЗадолженность.период) как дата |ИЗ ВТ1 |Левое Соединение |Регистрсведений.ДоговорыЗаймаЗадолженность .... ругается вот так {Обработка.срезпоследнихнакаждуюдату.Форма.Форма.Форма(44)}: Ошибка при вызове метода контекста (Выполнить) результат2 = запрос2.Выполнить(); по причине: {(3, 1)}: Поле не входит в группу "ВТ1.ДоговорЗайма" <<?>>ВТ1.ДоговорЗайма, ВТ1.Период, ВТ1.Остаток, |
|||
36
Любопытная
10.09.13
✎
14:01
|
Все, рабочий день кончился.
(33) Подозреваю, что ты, когда примеры смотрел, СГРУППИРОВАТЬ ПО не увидел. МАКСИМУМ получается по какому-нибудь полю, а не просто так |
|||
37
Kvitok8320
10.09.13
✎
14:03
|
проверю
|
|||
38
Kvitok8320
10.09.13
✎
15:38
|
переписал вот так
&НаСервере Процедура сформироватьсервер() МВТ = Новый МенеджерВременныхТаблиц; Запрос=Новый Запрос; Запрос.МенеджерВременныхТаблиц = МВТ; Запрос.Текст = " |выбрать ДоговорЗайма, Период, Остаток |поместить ВТ1 |ИЗ регистрнакопления.договорызаймаостатки |где регистрнакопления.договорызаймаостатки.договорзайма=&договорзайма |сгруппировать по договорзайма, период, остаток |Индексировать по договорзайма, период, остаток"; запрос.УстановитьПараметр("ДоговорЗайма",объект.Договорзайма); результат = запрос.Выполнить(); выборка = результат.Выбрать(); Пока выборка.следующий() Цикл а=0; КонецЦикла; Запрос3=Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МВТ; Запрос3.Текст = " |выбрать ДоговорЗайма, Период как Дата, ЗадолженностьПоГрафику как задолженность |поместить ВТ2 |ИЗ регистрсведений.договорызаймазадолженность |где регистрсведений.договорызаймазадолженность.договорзайма=&договорзайма |сгруппировать по договорзайма, период, задолженностьпографику |Индексировать по договорзайма, период, задолженностьпографику"; запрос3.УстановитьПараметр("ДоговорЗайма",объект.Договорзайма); результат3 = запрос3.Выполнить(); выборка3 = результат3.Выбрать(); Пока выборка3.следующий() Цикл а=0; КонецЦикла; запрос2 = новый запрос; запрос2.МенеджерВременныхТаблиц = МВТ; запрос2.Текст = " |Выбрать |ВТ1.ДоговорЗайма, ВТ1.Период, ВТ1.Остаток, |Максимум(ВТ2.дата) как максимум |ИЗ ВТ1 |Левое Соединение |ВТ2 |ПО (ВТ1.Период >= ВТ2.Дата И |ВТ1.ДоговорЗайма = ВТ2.ДоговорЗайма) |Сгруппировать по |ВТ2.Дата, |ВТ1.ДоговорЗайма, |ВТ1.Период, |ВТ1.Остаток"; результат2 = запрос2.Выполнить(); выборка2 = результат2.Выбрать(); пока выборка2.Следующий() цикл а=0; конеццикла; КонецПроцедуры ошибку не выдает, но и максимум не отбирает в ВТ1 = 5 элементов в ВТ2 = 61 элемент в выборка2 получает 161 элемент, вместо предполагаемых 5 ... |
|||
39
Kvitok8320
10.09.13
✎
15:40
|
может вот это неправильно
|ВТ2 |ПО (ВТ1.Период >= ВТ2.Дата И |ВТ1.ДоговорЗайма = ВТ2.ДоговорЗайма) |
|||
40
Любопытная
10.09.13
✎
17:34
|
Ты не пробовал свои запросы в конструкторе создавать? Будет читабельнее)
Почему в последнем запросе у тебя поле ВТ2.Дата и в группируемых и в группировках? И зачем группировки в тех запросах, где группируемых полей нет? Я немного не могу понять, что у тебя получилось. И чего ты хотел добиться |
|||
41
Любопытная
10.09.13
✎
17:36
|
Ну, в общем, да. Убери из группировки ВТ2.Дата и по идее, должно все получиться.
|
|||
42
Kvitok8320
10.09.13
✎
18:59
|
(41) пытался создать аналог среза последних на каждую дату. во всех примерах, которые я нашел, нужно присоединить максимальное значение даты из искомой таблицы, которая соответствует дате в текущей строке первой таблицы - с помощью "максимума" ....
если я уберу соединение по дате - у меня ничего нужного мне не получится. сейчас к каждой строке из левой таблицы присоединяются по очереди все строки из правой таблицы, которых дата меньше. а мне надо, чтобы присоединялась только одна из них ... В конструкторе у меня вообще ничего не получается .... |
|||
43
Kvitok8320
10.09.13
✎
19:14
|
(41) спасибо! заработало - буду дальше разбираться.
|
|||
44
Kvitok8320
13.09.13
✎
08:30
|
Добрый день, с этой задачей справился.
Присоединил информацию из 4-х регистров на каждую дату за заданный период по одному договору, с кучей запросов, но без запросов в цикле :). А как быть, когда мне надо не по одному договору это сделать а сразу по всем (в аналитике, естественно)? если я в качестве параметра не один договор передам, а список, это будет работать по очереди с каждым элементом списка, или равносильно тому, что я вообще не задал договор для отбора? Или мне сделать вспомогательный регистр? есть даты 01.01, 02.01, 03.01, 04.01 есть договоры №1, №2, №3 я полагаю мне для для присоединения нужна таблица 01.01 №1 01.01 №2 01.01 №3 02.01 №1 02.01 №2 02.01 №3 .... можно сделать таблицу значений и загнать ее в регистр (потом очистить) или "по правильному" надо как-то по другому? |
|||
45
Любопытная
13.09.13
✎
08:46
|
(44) ничего не поняла :( Передай список, будет тоже самое, что и по одному договору, только по списку договоров.
|
|||
46
Kvitok8320
13.09.13
✎
08:48
|
понял, буду пробовать
|
|||
47
Kvitok8320
13.09.13
✎
09:09
|
При простой замене одного договора на список - вот такая вот ошибка выдается:
{Обработка.срезпоследнихнакаждуюдату_9_список.Форма.Форма.Форма(42)}: Ошибка при вызове метода контекста (Выполнить) результат11 = запрос11.Выполнить(); по причине: {(4, 79)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. ИЗ регистрнакопления.договорызаймаостатки.ОстаткиИОбороты(,,День,,договорзайма<<?>>=&договорзайма) там наверное не = надо ставить? |
|||
48
Любопытная
13.09.13
✎
10:34
|
(47) не ну не так прямо конечно)
ОстаткиИОбороты(,,День,,договорзайма В(&договорзайма)) Потому что договор у тебя в списке |
|||
49
Kvitok8320
13.09.13
✎
11:04
|
спасибо!
исправил - проверил - получилось также, как если бы я совсем параметр договора не устанавливал (проверял). вариантов два - либо по циклу перебирать все договоры и запускать вариант который работает с одним договором (... знаю, что так "не правильно - если сделаю - никому не покажу ...), либо создать вспомогательную таблицу вместо той, которую я использовал (регистрсведений.курсывалют), чтобы там были договоры для привязки |
|||
50
Любопытная
13.09.13
✎
11:07
|
(49) так может у тебя в списке договоров все договоры, по которым есть движения, вот и получается так?
Вообще, беспредметно слегка и я не понимаю ход мыслей и требования по задаче. Так что сам. А на счет "никому не покажу"... На баше же было: кодить надо так, будто проверять будет психопат, который знает ваш домашний адрес. Ну или что-то в этом роде)) |
|||
51
Любопытная
13.09.13
✎
11:07
|
(49) С праздником, кстати
|
|||
52
Kvitok8320
13.09.13
✎
11:11
|
(51) Понял :) Спасибо! (я правда типа аудитор ...., со сдвигом в сторону программирования :) )
а договоры там да, все - буду думать |
|||
53
Kvitok8320
13.09.13
✎
11:13
|
О! Вас то тоже с Праздником!!!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |