Имя: Пароль:
1C
1C 7.7
v7: Помогите разобраться в запросе ☑
0 Irina3gger
 
20.07.17
✎
10:48
Доброго времени суток. Очень нужна помощь разобраться с запросом в отчете.
Суть в чем, есть Справочник.Объеты в каждом объекте есть ДоговорНаПроектирование - он только один, и может быть неограниченное количество ДопСоглашений.
На данный момент в запросе (написанный предыдущем программистом) после формирования выводятся Даты начала проекта и окончания проекта из Справочника по объекту. Но мне нужно чтоб выводились даты из ДопСоглашений если они есть, а если их нет то пусть тянет из Справочника.
Когда я пыталась сделать чтоб дата подтягивалась из Доп Соглашений, то она подтягивалась, но только подтягивалась именно то доп соглашение которое был проведен именно в промежуток времени который я указываю перед началом сформированием отчета.
Судя из того что я поняла то это проблема в запросе, но я знаю как правильно его написать, помогите пожалуйста. Я новичок в 1С и еще плохо понимаю все привязки. Не судите строго, а лучше помогите.

вот модель отчета

Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
СоздатьОбъект("Регистр.АктОбъемРабот");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"
|Период С НачПер По ОконПер;
|ТекДок = Регистр.Обороты.ТекущийДокумент;
|Документы = Регистр.Обороты.Документ;
|СуммаДог = Регистр.Обороты.СуммаДог;
|СуммаДопСогл = Регистр.Обороты.СуммаДопСогл;
|_Объект = Регистр.Обороты.Объект;
|Объект = Регистр.Обороты.Объект.Наименование;
|Код = Регистр.Обороты.Объект.Код;
|Заказчик = Регистр.Обороты.Объект.Заказчик;
|Отдел = Регистр.Обороты.Объект.Отдел;
|Стадия = Регистр.Обороты.Объект.Стадия;
|Примеч = Регистр.Обороты.Объект.Прим;
|Условие (Стадия.Код <> Строка(1));
|Гип = Регистр.Обороты.Объект.Гип;
|ИстФин = Регистр.Обороты.Объект.ИстФин;
|Назначение = Регистр.Обороты.Объект.Назначение;
|Район = Регистр.Обороты.Объект.Район;
|Вотчет = Регистр.Обороты.Объект.Вотчет;
|ПризнакПодпис = Регистр.Обороты.ПризнакПодпис;
|Группировка Отдел Упорядочить По Отдел.Код;
|Группировка Документы Упорядочить По Документы.ДатаДок;
|Группировка Вотчет Упорядочить По Вотчет.Код;
|Группировка Объект;
|Группировка ТекДок;
|Функция ОбщСуммаДог = Приход(СуммаДог);
|"
;
Если ПустаяСтрока(ВНаим) <> 1 Тогда
ТекстЗапроса = ТекстЗапроса+"Условие(Найти(Врег(Объект), Врег(СокрЛП(Внаим))) > 0);";
КонецЕсли;
Если ТекИстФин.Выбран() = 1 Тогда
ТекстЗапроса = ТекстЗапроса+"Условие(ИстФин = ТекИстФин);";
КонецЕсли;
Если ТекЗаказчик.Выбран() = 1 Тогда
ТекстЗапроса = ТекстЗапроса+"Условие(Заказчик = ТекЗаказчик);";
КонецЕсли;
Если ТекНазнач.Выбран() = 1 Тогда
ТекстЗапроса = ТекстЗапроса+"Условие(Назначение = ТекНазнач);";
КонецЕсли;
Если ТекРайон.Выбран() = 1 Тогда
ТекстЗапроса = ТекстЗапроса+"Условие(Район = ТекРайон);";
КонецЕсли;
Если ТекОтдел.Выбран() = 1 Тогда
ТекстЗапроса = ТекстЗапроса+"Условие(Отдел = ТекОтдел);";
КонецЕсли;
Если ВывАрхив = 1 Тогда
ТекстЗапроса = ТекстЗапроса+"Условие (ТекДок.Объект.Архив = Перечисление.Признак.Да);";
КонецЕсли;
Запрос.Выполнить(ТекстЗапроса);
Таб.ВывестиСекцию("Маст");
Таб.ВывестиСекцию("Шапка");
Номер = 0;
Прим = "";
Пока Запрос.Группировка(1) = 1 Цикл
Таб.ВывестиСекцию("Отдел");
_СуммаДог = 0;
Пока Запрос.Группировка(2) = 1 Цикл
Пока Запрос.Группировка(3) = 1 Цикл
Пока Запрос.Группировка(4) = 1 Цикл
Прим = "";
КолПодпис = 0;
КолНеПодпис = 0;
ДатаНеПодписАкт = "";
ДатаПодписАкт = "";
Пока Запрос.Группировка(5) = 1 Цикл
Если Запрос.Документы.Вид() = "ДоговорНаПроектирование" Тогда
СуммаДог = Запрос.СуммаДог;
ДогДатаС = Запрос.Документы.НачПроект;
ДогДатаПо = Запрос.Документы.ОконПроект;
КонецЕсли;
Если Запрос.Документы.Вид() = "ДопСоглашение" Тогда
Если Запрос.Документы.Сумма <> 1 Тогда
СуммаДог = Запрос.Документы.Сумма;
КонецЕсли;
//ДогДатаС = Запрос.Документы.ДатаСоставления;
//ДогДатаПо = Запрос.Документы.ДатаПолучения;
ДатаНачПлан = Запрос.Документы.НачПроект;
ДатаОконПлан = Запрос.Документы.ОконПроект;
Прим = "Доп. согл " + Запрос.Документы.НомерДоговора;
КонецЕсли;
КонецЦикла;
Если ПустаяСтрока(Стоим) <> 1 Тогда
Если Число(СуммаДог) > Число(Стоим) Тогда
Номер = Номер + 1;
Таб.ВывестиСекцию("Данные");
_СуммаДог = _СуммаДог + СуммаДог;
КонецЕсли;
Иначе
Номер = Номер + 1;
Таб.ВывестиСекцию("Данные");
_СуммаДог = _СуммаДог + СуммаДог;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
28 MrAvPika
 
20.07.17
✎
11:23
(26) Иконка не обновилась просто, кликай по иконке, откроется свежее фото
29 Irina3gger
 
20.07.17
✎
11:26
(24) ДопСоглашение привязано к конкретному объекту из справочника.
Есть объект из справочника, и по его личному коды к нему привяза куча документов разных, в том числе и ДопСоглашение
30 HawkEye
 
20.07.17
✎
11:35
(23) именно! ))))

начини с описания метаданных.
есть Справочник.Объеты
у него есть реквизит ДоговорНаПроектирование - что такое договор на проектирование? документ?
еще есть документ.ДопСоглашение - он как связан с объектом? у него есть реквизит? на Объект? или на ДоговорНаПроектирование?
31 HawkEye
 
20.07.17
✎
11:38
(29) ага...
значит
1. Справочник.Объект
2. документ.ДоговорНаПроектирование
3. документ.ДопСоглашение

у 1 есть реквизит "ДоговорНаПроектирование" с ссылкой на 2.
у 3 есть реквизит "Объект" с ссылкой на 1


так?
32 Irina3gger
 
20.07.17
✎
11:40
(31) нет
у 2 и 3 есть реквизиты на объект
33 Irina3gger
 
20.07.17
✎
11:46
(31) и у документ.ДоговорНаПроектирование,
и у  документ.ДопСоглашение есть Реквизит шапки под названием "Объект"
34 пипец
 
20.07.17
✎
11:55
кажись я даже знаком с похожими конфигурациями ))) там сдается мне (к подчиненному) справочнику привязан документ как объект с табличной частью
35 Irina3gger
 
20.07.17
✎
11:59
(34) да в Документе.ДоговорНаПроектирование есть табличная часть
36 пипец
 
20.07.17
✎
12:14
(35) в данном случае нужно таки понять тебе нужен запрос к регистру (и что там таки его в реквизитах справочник или документ) или к документам ? на самом деле таки всё просто как пепелац ))) можешь соединить таки переменную ну например через точку (не сильно комильфо но таки можно) или можно еще внешнюю функцию налепить в запрос где проверять условие , но притормаживать будет яростно ))) или таки перейти к прямым запросам через ту же 1с++
--
пример внешней функции давать ? или сообразишь ?
37 Irina3gger
 
20.07.17
✎
12:38
если я все правильно поняла, мне нужно вытянуть дату из ДопСоглашения, а значит мне нужен запрос к документу
это значит что в запросе надо дописать что-то или полностью его переписывать?
я сегодня целый день изучаю запросы и их написание, и уже мозг кипит, запуталась ужасно.
а с внешней 1с++ я вообще не знакома, она есть, но я в ней ни разу запрос не писала
38 Ёпрст
 
гуру
20.07.17
✎
12:40
(37) запрос тут вообще не причем.
Для начала, нужно описать структуру твоей ИБ и что и зачем вы пихаете в регистр.
Потом спросить, как получить то-то и то-то.
39 Irina3gger
 
20.07.17
✎
12:45
(38)как мне описать Вам структуру, чтоб вы мне помогли понять как вообще это все работает
40 Ёпрст
 
гуру
20.07.17
✎
12:52
(39)
выложи мд свой.
41 Irina3gger
 
20.07.17
✎
12:54
(40)мд? что это?
42 1dvd
 
20.07.17
✎
12:55
(41) файл конфигурации
43 Irina3gger
 
20.07.17
✎
12:56
(42)хорошо, как это сделать?
44 Irina3gger
 
20.07.17
✎
12:58
(42)где взять файл конфигурации?
45 Смотрящий
 
20.07.17
✎
12:58
В каталоге базы файлик 1cv7.md
46 пипец
 
20.07.17
✎
13:00
бядабяда ))))
47 Злопчинский
 
20.07.17
✎
13:02
Наблюдаю.
48 Irina3gger
 
20.07.17
✎
13:02
49 Irina3gger
 
20.07.17
✎
13:03
(46) я работаю с 1с только месяц, и поэтому я очень многого не знаю, и именно поэтому я обращаюсь сюда помощью
50 пипец
 
20.07.17
✎
13:07
(49) ничо ничо , продолжайте, ничего страшного, желательно конечно про структуру 1С почитать хотя б немного
51 Irina3gger
 
20.07.17
✎
13:10
(50) читала, но запоминаю только то с чем сталкиваюсь на практике, многие доработки сама могу сделать и делаю, но вот тут что-то не могу понять что происходит и что нужно чтоб решить поставленную задачу
52 Смотрящий
 
20.07.17
✎
13:11
(48) Какой-то мрачный самопис
53 Смотрящий
 
20.07.17
✎
13:12
(51) А как отчет называется который ты скорежить хочешь ? Он в составе конфы или внешний ?
54 Злопчинский
 
20.07.17
✎
13:16
Налетай, не дерись, покупай самопись!
https://www.youtube.com/watch?v=Eu5AhZNp_Ok
55 Irina3gger
 
20.07.17
✎
13:16
(53) ОтчетПоРаботеВсеПодразд11, он в составе конфы
56 Смотрящий
 
20.07.17
✎
13:31
(55) Даты должны тянуться из последнего допСоглашения ?
57 Irina3gger
 
20.07.17
✎
13:31
(56)да
58 Ёпрст
 
гуру
20.07.17
✎
13:34
Да уж..жесть какая-то а не конфа.
Один только поиск в справочнике чего стоит.
59 Ёпрст
 
гуру
20.07.17
✎
13:34
через выборку элементов
60 Irina3gger
 
20.07.17
✎
13:36
(58) какая есть, если мне получится в ней разобраться, то может все поменяю, но сейчас боюсь только все сломать
61 пипец
 
20.07.17
✎
13:36
хмм для таких вещей используют периодический реквизит справочника например и валят туда документы - всё проще ...
62 Ёпрст
 
гуру
20.07.17
✎
13:43
посмотрел стуктуру регистра, это даже не Полный ПЭ, это - п...ц.
63 Ёпрст
 
гуру
20.07.17
✎
13:44
а вот за такое
Регистр.Обороты.Документ  = ТекущийДокумент();

надо вообще увольнять
64 Ёпрст
 
гуру
20.07.17
✎
13:44
Регистр назвали Обороты и сделали его Остатковым.
Еще и не закрывается никогда.
65 Irina3gger
 
20.07.17
✎
13:45
(63) что такое Полный ПЭ?
и почему за это надо увольнять, и что это вообще значит?
66 Ёпрст
 
гуру
20.07.17
✎
13:47
Остальные регистры, тоже ураган.
С такими наборами измерений, они точно никогда не закрываются.
67 Ёпрст
 
гуру
20.07.17
✎
13:48
(65) Это значит, что тот, кто писал эту конфу мало знаком с регистрами, от слова совсем.
68 Ёпрст
 
гуру
20.07.17
✎
13:48
Эта конфа - пособие, как не надо делать.
69 1dvd
 
20.07.17
✎
13:52
Если сам Ёпрст ругается, то дела правда плохи
70 Смотрящий
 
20.07.17
✎
13:53
Ну не все так плохо ;)
71 Irina3gger
 
20.07.17
✎
13:58
Вы меня пугаете. Предыдущий программист как сказал пока работает я ни чего трогать не буду и меня тоже. И вот он уволился а я разбираюсь с этим
72 Ёпрст
 
гуру
20.07.17
✎
14:01
(71) Лысым уволился ? По какому принципу людей на АЭС набирают у вас ?
73 Irina3gger
 
20.07.17
✎
14:03
(72) без понятия. Меня больше беспокоит что я не могу разобраться с тем что он оставил.
74 Ёпрст
 
гуру
20.07.17
✎
14:11
(73) по-уму, там нужно всё переписывать.
У вас нет ни одного правильного спроектированного регистра.
Что вы там в них учитываете - загадка.
Куча левых измерений, которые даже ничем не заполняете.
Ну пихать текущий документ в измерение регистра, когда и так он есть априори, это тот еще "подарок". Этим вы делаете 100% незакрытие останкового регистра.
+ в половине регистров у вас есть даты и строки в измерениях.
Судя по коду, при приходе и расходе, они у вас всегда разные.
Это тоже -"незакрытый" регистр.
Зачем они там нужны - хз.
75 Ёпрст
 
гуру
20.07.17
✎
14:13
Код с использованием goto, такое редко встретишь.

Изменять справочники в момент проведения не есть гуд, использовать чорные запросы в модуле проведения - тоже.
Хранить историю в справочнике и изменять её в модуле проведения - аналогично.
76 Irina3gger
 
20.07.17
✎
14:16
(75) Звучит ужасно. Я даже без понятия как все что вы перечислили изменить и как то исправить. Когда у меня возникают вопросы иногда в самых простых задачах. Подскажите пожалуйста как сделать ту задачу что мне поставили?
77 Ёпрст
 
гуру
20.07.17
✎
14:16
Поиск в списке справочника - вообще шедевр, при условии, что есть быстрый поиск всправочнике штатно.
78 Ёпрст
 
гуру
20.07.17
✎
14:16
(76) беги оттуда
79 Ёпрст
 
гуру
20.07.17
✎
14:16
:)
80 Irina3gger
 
20.07.17
✎
14:17
(79) не могу, у меня тут преддипломная практика, мне в любом случае надо тут работать. и именно поэтому общаюсь за помощью
81 Ц_У
 
20.07.17
✎
14:19
(80) бедный ребенок, ладно 1С, но 7.7., за что тебя так?
82 Irina3gger
 
20.07.17
✎
14:20
(81)так вышло
83 vadim777
 
20.07.17
✎
14:24
(0) Уже в самом описании проблемы логические ошибки:
....
Суть в чем, есть Справочник.Объеты в каждом объекте есть ДоговорНаПроектирование - он только один, и может быть неограниченное количество ДопСоглашений.
....
На самом деле, Объект является реквизитом документов как ДоговорНаПроектирование, так и ДопСоглашение. Ничто не мешает созданию этих документов в любом количестве.
84 Ёпрст
 
гуру
20.07.17
✎
14:28
(80) ну смотри.
в запросе в (0)

1. Переменная Документы =
и группировка Документы, не нужна, выкидываем
2.Группировка Отдел, не нужна, выкидываем, ибо в документах у тебя, это измерение Нигде не заполняется.
3.Группировка вОтчет, Объект - выкидываем, ибо далее, в коде, ты никак не используешь эти группировки, от слова совсем.

И того: тебе нужна только группировка по текущему документу регистра.

Что тебе там еще то надо от него ?
85 Irina3gger
 
20.07.17
✎
14:31
(84) Мне нужно что ДатаОкончания подтягивалась с последнего проведенного ДопСоглашения
86 vadim777
 
20.07.17
✎
14:38
(85) У тебя параллельно с регистром Обороты, заполняется Справочник ПоОбъекту. Почему-бы по нему запрос не сделать?
87 Irina3gger
 
20.07.17
✎
14:42
(86) потому что это первый запрос 1С в моей жизни, и я даже толком не знаю как это сделать, именно поэтому и обратилась к Вам за помощью
88 vadim777
 
20.07.17
✎
14:53
(87) Попробуй создать отчет с помощью Конструктора отчетов. В конфигураторе стань на ветвь Отчеты, и создай новый отчет - откроется Конструктор отчетов.
89 Ёпрст
 
гуру
20.07.17
✎
14:55
(85)
в финале, как отчет должен выглядеть ?
90 Irina3gger
 
20.07.17
✎
15:04
(89) так же как и выглядил) там же в табличной части видно.
если что вот скрин то как он сейчас выглядит когда формируется
Ссылка на файлы: https://ru.files.fm/u/hekx4x9r
91 Ёпрст
 
гуру
20.07.17
✎
15:13
(90) круто.
Теперь ответь, зачем тебе вообще данные брать из регистра ?
Когда ты из него, окромя своего Объекта не берешь ничего ?
Или ты хочешь узнать только, приход Объекта?
92 Злопчинский
 
20.07.17
✎
15:13
(81) ты видишь, что дети творят когда им в руки дали 77-калаш, а ты представляешь, что эти дети могут натворить, если им дать 8-тяжелуюартилерию?
93 Ёпрст
 
гуру
20.07.17
✎
15:13
Тебе сумма, нужна из регистра по приходу за период, или нужна сумма и дата из последнего ДопСоглашения ?
94 Ёпрст
 
гуру
20.07.17
✎
15:14
И это, последнее ДопСоглашение, это какое ? Какое попало в регистр за этот период, или последнее в базе ?
95 Ёпрст
 
гуру
20.07.17
✎
15:14
(92) теперь понятно, откуда Чернобыль появился.
96 Irina3gger
 
20.07.17
✎
15:16
(95)я как понимаю мне надо последний который был сохранен в базу
97 Ёпрст
 
гуру
20.07.17
✎
15:18
(96) круто. Тогда зачем тебе данные из регистра и период в нём ?
Может того, будешь обходить весь справочник ?
98 Irina3gger
 
20.07.17
✎
15:21
(97) наверно это было сделано потому что не во всех объектах есть ДопСоглашение
99 Ёпрст
 
гуру
20.07.17
✎
15:29
100 Ц_У
 
20.07.17
✎
15:31
(99) Хрень! :)))
101 Ёпрст
 
гуру
20.07.17
✎
15:32
102 Ёпрст
 
гуру
20.07.17
✎
15:32
думаю, это то, че тебе надо
103 Ёпрст
 
гуру
20.07.17
✎
15:32
Иначе, непонятно, зачем тебе вообще впёрся этот регистр
104 Irina3gger
 
20.07.17
✎
15:34
(103)спасибо за помощь. А можно попросить ваш контактный имейл чтоб спрашивать совета, потому что мне ни кто не может на работе подсказать с 1с
105 Ёпрст
 
гуру
20.07.17
✎
15:37
(104) ты пиши тут
106 Irina3gger
 
20.07.17
✎
15:41
(105)но вы же не всегда тут, но форум замечатетльный, я тут и информацию читаю и книгу и совета спрашиваю
107 Ёпрст
 
гуру
20.07.17
✎
15:42
(106) Тут знающих клюшки вагон и маленькая тележка.
108 aka AMIGO
 
20.07.17
✎
15:44
Поскольку всё и всем ясно, спрошу я.. Забавная конструкция - объявлена переменная без имени :)
https://i.paste.pics/40ff9cc4f5ef024da1c03ee933e11914.png
109 Злопчинский
 
20.07.17
✎
15:53
(108) Гы-Гы-..Пы.. экономика...
поянтно, откуда у нас такая экономика...
;-)
110 Злопчинский
 
20.07.17
✎
15:54
(107) тут осталась маленькое стадо мохнатых мамонтов, которые бродят по широким равнинам клюшек... иногда кого-то встречают.. ;-)
111 Злопчинский
 
20.07.17
✎
15:56
ааа...аа... барановичи.. Волклвыск.. Овруч.. Суходол... Песчатка.. Кувырдяки.. Плетюганы.. Блювиничи.... Малорита...
РОДИНА!

Автор, ты спрашивай, спрашивай здесь.
белорусские партизаны помогут...
Тут даже из Бреста как минимум 2 человека есть
112 aka AMIGO
 
20.07.17
✎
15:57
(109) И тем не менее, синтаксических ошибок нет :)
Одноместная операция :)
113 Сияющий Асинхраль
 
20.07.17
✎
15:59
(112) Ага. Первый раз такое заметил, но судя по всему СоздатьОбъект() можно записать куда угодно не присваивая значение, СоздатьОбъект("бухгалтерскиеитоги") работает также, то бишь не работает, но ошибок не выдает...
114 Irina3gger
 
20.07.17
✎
16:00
(111)я тоже с Бреста)
115 aka AMIGO
 
20.07.17
✎
16:04
(113) Видимо, синтакс-анализатор обладает определенным пофигизмом, а интерпретатор ему вторит :)
116 Ёпрст
 
гуру
20.07.17
✎
16:06
(115) непонятно, чему вы удивляетесь ?
СоздатьОбъект() - это всего лишь системная функция, которая что-то возвращает.
Необязательно в коде результат функции присваивать переменной.
Тут нет никакой ошибки или фичи.
117 Ёпрст
 
гуру
20.07.17
✎
16:08
Это всё равно, что написать

Функция Вася() Сообщить("Лошпед") КонецФункции
Вася();Вася();Вася();Вася();
Петя=Вася();
118 aka AMIGO
 
20.07.17
✎
16:08
(114) Ирина, закомментируй в модуле эту строку.. Нехорошо оставлять непонятные конструкции, которые могу невесть чем обернуться.
//СоздатьОбъект("Регистр.АктОбъемРабот");

(116) Да это-то как-раз и ясно. Тут не синтаксис, а смысл кода утерян
119 Сияющий Асинхраль
 
20.07.17
✎
16:09
(115) Попробовал в восьмерке :-) "Новый" без левой части сделать не дает, да и вообще какую-либо встроенную функцию без выражения тоже не дает написать...
120 aka AMIGO
 
20.07.17
✎
16:09
(119) 8-ка - зубастая :)
121 HawkEye
 
20.07.17
✎
16:56
весело у вас тут )
122 Злопчинский
 
20.07.17
✎
17:34
(114) ну дык я завтреца как раз из мск в брест стартую.
так что можно очно рассказать что и как в кафе заи бутылочкой кофе...
;-)))
123 vadim777
 
20.07.17
✎
17:57
(122) Фотоотчет будет?
124 HawkEye
 
20.07.17
✎
18:07
(122) а я завтра в Москоу )) на МАКС )
125 Злопчинский
 
20.07.17
✎
20:23
(123)  это вам не мистасборище гопников ;-)
126 san4ez1008
 
21.07.17
✎
09:01
(108) это..я тут случайно заметил..а где взять такую хрень, которая код свернет (слева от кода минус для сворачивания)?
127 Ёпрст
 
гуру
21.07.17
✎
09:11
(126) scicolorer
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший