Имя: Пароль:
1C
 
v8: Почему в типовых делается запрос к документу из его же модуля
0 крутойкодер
 
30.09.09
11:12
Что бы вывести на печатную форму реквизиты из "шапки" документа
делается запрос к доку из модуля документа..
хотя все реквизиты дока в модуле доступны...

я вот тоже так всегда делаю. а ща сищу туплю не пойму пачему..
для чего и т.д.
1 ДенисЧ
 
30.09.09
11:12
выдыхай...
2 крутойкодер
 
30.09.09
11:12
v 8
3 крутойкодер
 
30.09.09
11:13
(1)фуууууууу

выдахнул
4 крутойкодер
 
30.09.09
11:13
(1) а по сабжу
5 Rie
 
30.09.09
11:13
(0) Наверное, чтобы печатать именно записанный документ.
6 Defender aka LINN
 
30.09.09
11:14
Потому что этот код может быть и не в модуле документа. А, например, во внешней форме.
7 крутойкодер
 
30.09.09
11:15
(6)я про модуль дока
если выносить во внешнюю по понятно, но один х тогда передается параментр ссылка на док в эту внешнюю печ форму
и можно опятьже
взять этот реквизит через
ссылко.номер ... например
8 zbv
 
30.09.09
11:17
(7) чтобы распечатать документ из внешнего источника (групповая обработка справочников документов) не надо было создавать форму документа.
9 Михей
 
30.09.09
11:17
(0) так как

ЭтотОбъект[Реквизит ]не всегда равно Ссылка[Реквизит]
10 mikecool
 
30.09.09
11:18
(8) нда...
11 Defender aka LINN
 
30.09.09
11:18
(7) За такое - пожизненный эцих с гвоздями.
12 крутойкодер
 
30.09.09
11:19
(11) обоснуй
13 Defender aka LINN
 
30.09.09
11:21
(12) При обращении через точку считываются все реквизиты объекта. Пора бы знать.
14 H A D G E H O G s
 
30.09.09
11:22
Судя по темам аутора. он занимается восьмеркой с октября 2006.
Минимум.
ППЦ, однозначен.
Автор, ты из Москвы?
15 Дарлок
 
30.09.09
11:24
...ггг ...

славный старый баянчег .. обычно заинтересовывает в первые 2-3 месяца изучения 8ки
(14) +1
16 Дарлок
 
30.09.09
11:25
(6) кстати неверное объяснение.
17 mikecool
 
30.09.09
11:26
(14) а при чем тут местоположение автора? розжиг?
18 Defender aka LINN
 
30.09.09
11:28
(16) Да ну? Я в чем-то соврал? :)
19 крутойкодер
 
30.09.09
11:29
(14) ты распиши по сабжу.

потом я тебе все расскажу
даже уровень своей зп
и общий суммарный доход.
опишу свою недвижимость и авто ;)
тебя же это еще интересует ...

давай
20 H A D G E H O G s
 
30.09.09
11:29
(17) С чего бы розжиг?
Если он из МСК, да в хорошей конторе - почему бы мне не найти новую работку? :-)
21 крутойкодер
 
30.09.09
11:30
(20) ыыыыыы

ну ну
22 mikecool
 
30.09.09
11:30
(20) а, вон ты к чему :)))
23 крутойкодер
 
30.09.09
11:30
(20) 19 пост актуален
24 Дарлок
 
30.09.09
11:31
(18) сбор данных для печати появилось в первых конфигурациях .. в то время как механизм внешних подключаемых печатных форм, только в 2006-2007 году.
25 Defender aka LINN
 
30.09.09
11:33
(24) И чо? ©
27 H A D G E H O G s
 
30.09.09
11:38
(23) Примитивненько.

Документ реализация - набил товара, не сохранил, ЭтотОбъект.Товары поменялась, ЭтотОбъект.Ссылка.Товары - осталась та же (старая).
Распечатал измененные данные.
Нажал "Закрыть", на вопрос - "Сохранить документ, господин" - сказал - "Нет"
28 Aprobator
 
30.09.09
11:39
+(27) кроме того чтобы вывести в печатную форму те требуется представление реквизита. Запросом это как то веселее получить.
29 H A D G E H O G s
 
30.09.09
11:40
(27) Примитивненько.
Открыл документ, пошел отлить.
В это время другой юзер с другого компа поменял Товары.
Вернулся ты, распечатал старую накладную.

Это как вариант, я такого - не пробовал.
30 Wehrmacht
 
30.09.09
11:40
Вообще то, насколько я в курсе, обращение к каждому реквизиту по ссылке с получением его представления -- это отдельный запрос. А тут как бы все одним махом получается, не более того.
31 H A D G E H O G s
 
30.09.09
11:41
(28) Представление() ты и сам можешь состряпать.
32 zbv
 
30.09.09
11:43
(10) да... чет я не много не о том... :(
33 H A D G E H O G s
 
30.09.09
11:43
(30) Плохо.
Плохо постановку задачи читаете.

Это если ко вложенным полям реквизитов документа обращаться надо, тогда да.
А так - оптимальнее реквизиты ДокументОбъект брать.
Они уже прочитаны и закэшированны.
34 H A D G E H O G s
 
30.09.09
11:43
(0) Пост (19) актуален?
35 JustBeFree
 
30.09.09
11:44
(30) Объяснение ежа вполне логично - печатаем то, что записано.
36 Wehrmacht
 
30.09.09
11:44
(33) Ну а тоже самое "Наименование" -- это как бы не вложенное поле реквизита документа?
37 asp
 
30.09.09
11:45
не зря в типовых установлен запрет печати измененных, но не записанных документов
38 крутойкодер
 
30.09.09
11:45
(29)черезчур примитивненько
а как же

   Если Документ.Модифицированность() Тогда

       Проведен = ?(Документ.Проведен, " и провести","");

       Ответ = Вопрос("Документ изменен. Для печати его необходимо записать "+ Проведен +".
                      |Записать" + Проведен + "?",
                      РежимДиалогаВопрос.ОКОтмена, ,
                      КодВозвратаДиалога.Отмена,
                      "Документ изменен");
39 ShoGUN
 
30.09.09
11:45
(26) Маленько неправ. Годятся все объяснения. Вопрос конечно, что основное, что побочное. Основное конечно - актуальность данных.
(36) Да.
40 ShoGUN
 
30.09.09
11:46
(38) Это интерактивно, а программно грабли всё же могут возникнуть.
41 BoBaBo
 
30.09.09
11:46
внимание! (29) не ходил отливать!
42 Wehrmacht
 
30.09.09
11:47
(35) Но при этом перед печатью документа, если мне не изменяет склероз, его в принудительно-добровольном порядке предлагают записать, разве нет? Т.е. реквизиты ЭтотОбъект = реквизитам Ссылка, хотя и искусственно.
(40) Приведите пример такой ситуации
43 Wehrmacht
 
30.09.09
11:47
(39) Да -- вложенное или да -- не вложенное?)
44 H A D G E H O G s
 
30.09.09
11:47
(38) см (29)
45 H A D G E H O G s
 
30.09.09
11:48
(43) Вложенное.
В документе - только ссылка (в норм. документе).
46 IamAlexy
 
30.09.09
11:48
а как на счет того что запросом данные выдергиваются разово..
а при обращении к реквизитам между обращениями может реквизит поменяться ?
47 ShoGUN
 
30.09.09
11:49
(43) Да - не вложенное.
Документ.Контрагент - лежит в объекте документа.
Документ.Контрагент.Наименование - нет.
48 H A D G E H O G s
 
30.09.09
11:50
(46) И какова вероятность?
49 IamAlexy
 
30.09.09
11:50
(48) ну если работает один пользователь в базовой версии - то вероятность не очень большая по видимому...

:)
50 крутойкодер
 
30.09.09
11:51
(48)епть ну вероятность из 29 тоже галимая

какая нах разница распечатал я до того как пошел отливать или после
если какой то хрыч док поменял
51 Wehrmacht
 
30.09.09
11:52
(45) Ну так если оно вложенное, как его тогда брать из ЭтогоОбъекта без доп. затрат?! Толи вы сами себе противоречите, то ли я чего то не понимаю. Или вы в документе ГУИДы печатаете, а не наименования?)))
(47) А вы вообще противоречите себе в своем же посте))
52 H A D G E H O G s
 
30.09.09
11:53
(50) Культурнее попрошу, культурнее.

<<какая нах разница распечатал я до того как пошел отливать или после
если какой то хрыч док поменял>>

Это только я один в этой фразе неземную логику чувствую???
53 H A D G E H O G s
 
30.09.09
11:54
(47) (51) Вы в терминологии запутались.
Разберитесь, что во что вложено..
54 ShoGUN
 
30.09.09
11:54
(51) Тьфу :) Я вопрос в (36) Не так понял :)))
Короче - в объекте кэшируется только то, что через одну точку(свояства самого объекта). Никакого рекурсивного кэширования свойств не делается, пока это явно не указано.
55 agant
 
30.09.09
11:55
а может это сделано в том числе для более быстрой адаптации конфигураций к 8.2. Ведь в 8.2 нельзя получить реквизиты через Ссылка. или ЭтотОбъект.
56 Wehrmacht
 
30.09.09
11:55
(55) Стопудово! Они еще со времен 8.0 уже строили свои коварные 8.2 планы.
57 H A D G E H O G s
 
30.09.09
11:56
(55) Ага.
3 года назад менеджеры сходили к гадалке и узнали об будущей архитектуре 8.2
58 BoBaBo
 
30.09.09
11:56
(52)

напечатал
ушел
хрыч поменял
результат1

не напечатал (без учета наличия ограничителя-сабжа)
хрыч поменял
результат2

Итог:
рез1 = рез2
59 Wehrmacht
 
30.09.09
11:58
(54) Про это не знал. Пруфлинк?

А вообще, в общем случае это же могут быть реквизиты любой вложенности. Так не лучше ли написать унифицированный алгоритм, а не ломать голову над каждым документом?
60 H A D G E H O G s
 
30.09.09
12:01
(58) смотрим (29) внимательно.
В общем случае - ты видишь (и печатаешь) то, чего на самом деле нет в базе.
61 Wehrmacht
 
30.09.09
12:02
(60) Печатаешь ты как раз то, что в базе, разве нет?
62 H A D G E H O G s
 
30.09.09
12:16
(61) Нет
В (29) ты печатает то, что ты прочитал из базы, до того, как данные были изменены другим юзером.
Ты печатаешь неактуальные данные.
63 H A D G E H O G s
 
30.09.09
12:16
Пост (19) актуален?
64 H A D G E H O G s
 
30.09.09
12:18
(62) Хотя я МОГУ ошибаться.
Просто это теория, на практике я такого не делал.
Хотите - проверьте.
Вдруг в момент
ОбластьТабДок.Параметры.Код=ЭтотОбъект.Код;
он предложит перечитать объект в принудительном порядке?

Но теория - стройна.
65 BoBaBo
 
30.09.09
12:20
(60) ну после изменеий старая распечатка тоже отражает  то, чего в базе больше нет
66 Wehrmacht
 
30.09.09
12:24
(62) Я не очень понял, (27)(29) -- это пример чего вообще?)
67 крутойкодер
 
30.09.09
12:26
(63)тебе в аську, на почту или в общий доступ???
68 H A D G E H O G s
 
30.09.09
12:28
(67) Да мне пофиг.
Насчет новой работки - это шутка была.
Нас и здесь неплохо кормят.
Тебе респект, от слов своих не отказываешься, не то, что некоторые Завсомы...
69 John83
 
30.09.09
12:29
(67) прямо тут :)
может сразу пойду работу другую искать :)
70 крутойкодер
 
30.09.09
12:33
(68)зп 70
доход в месяц 120 я еще сайты пишу и прокачиваю
у меня дом в подмосковье два года назад достроил
ситроен с5 годовалый... еще кредит выплачиваю
как то так
71 BoBaBo
 
30.09.09
12:34
забыл саблю , барабан и лошадку!
72 Дарлок
 
30.09.09
12:51
+(71) и жениться....


я тут смотрю холивар устроили
73 Дарлок
 
30.09.09
12:51
трудно найти смысл там где его нет
74 крутойкодер
 
30.09.09
13:07
(72)женат, дочь

ждем вторую ;))
75 крутойкодер
 
30.09.09
13:08
(71) ничем из перечисленного не располагаю ;)
76 5 Элемент
 
30.09.09
13:24
(74) да ты не крутой кодер, а крутой самец :)
77 крутойкодер
 
30.09.09
16:53
(76) ну это наверно преувеличение
но все равно спасибо
78 Гений 1С
 
гуру
30.09.09
17:40
я кстати, тоже не догоняю, зачем это нужно. При таком подходе нельзя печатать незаписанные документы, что не эсть гут...
а если печатать из другого места, а не из модуля, пожно польчить ДокументОбъект через с-цылку, проблем не вижу.
79 Serg_1960
 
30.09.09
18:01
Еще никто не вспомнил что запросы не используют кэшированные данные, а всегда обращаются к базе данных?
80 acsent
 
30.09.09
18:14
H A D G E H O G s ты не прав. В типовой нельзя распечатать документ у которого есть измененные реквизиты.
81 Один С
 
30.09.09
18:19
(80) это на уровне платформы зашито?
82 acsent
 
30.09.09
18:22
(81) Нет. Так сделано в ТИПОВЫХ конфах.
83 Один С
 
30.09.09
18:32
(82) а если самописка? надо эту проверку самому дописывать?
84 Один С
 
30.09.09
18:37
А с запросом можно, типа, не проверять - изменили не изменили один хер - распечатается только то что записано.
85 acsent
 
30.09.09
18:55
(84) Это еще хуже. Видишь одно, печатаешь другое
86 asady
 
30.09.09
19:19
(85) а трахать за что будут знаешь?
87 BabySG
 
30.09.09
19:52
(0) Сделано так, что бы не читать еще раз объект в память на сервере, ибо большинство процедур именно там выполняется. Это на клиенте у тебя объект в памяти, а не севвере и никакого кэша еще нет.
Именно поэтому заполняют СтруктуруШапкиДокумента, которую дальше везде используют, а не обращаются по имени, доступному через контекст. Вроде, кстати, это на ИТС описано. На курсах точно про это говорят.

В качестве примера - ОбработкаПроведения. Там не обращаются напрямую, например, к Контрагент, а берут его из СтруктуруШапкиДокумента.
Если мы обратимся напрямую, произойдет неявно чтение объекта в памятт на сервере.
88 Один С
 
30.09.09
20:01
почему то вспомнились Mem.exe, HIMEM.SYS и т.д...
89 Maniac
 
30.09.09
20:03
аааа паржал. сразу 50 человек можно уволить.
90 Maniac
 
30.09.09
20:07
(0) в 1С делается это затем чтобы данные обрабатывались на сервере а не на клиенте. чтобы на клиента шли данные чисто по запрашиваемым реквизитам а не весь объект. если ты няпрамую обращаешся к ссылке то ссылка на объект полностью  передается на клиента.
91 Maniac
 
30.09.09
20:09
к тому же каждое обращение к реквизиту объекта вызывает запрос к базе и передачу объекта полностью на клиента. запрос по реквизитам объекта в типовых передает на клиента чисто нужные данные один раз в виде временной таблицы.
92 Ненавижу 1С
 
гуру
30.09.09
20:09
(90) правда что ли? вот так вся ССЫЛКА и передается? и что же там передается?
93 Maniac
 
30.09.09
20:12
(92) да в общем то ничего не передается. просто при каждом обращении к реквизиту ссылки идет запрос к базе данных.
94 Maniac
 
30.09.09
20:14
и запрос этот делается на клиенте. а не на серваке.
95 Aleksey_3
 
30.09.09
20:14
А как такой вариант. Чтобы отвязаться в печатной форме от реквизитов в документе. Т.е. у тебя в печатной форме есть переменная "Контрагент",но в одном документе у тебя реквизит назван МойСамыйЛюбимыйКлиент, В другом ПростоКлиент. Вот запросом они и приводят к одному виду Контрагент
96 Maniac
 
30.09.09
20:17
(95) чо за бред.
Пойдите все курсы пройдите по 1С базовым объектам и хватит фигню моросить. там про это все толково рассказывают. что и зачем в 1С нужны исключительно запросы.
97 BabySG
 
30.09.09
20:23
+ (96) Ответ был в (87) и (90), а нафлудили на 100 постов почти :)
98 Ненавижу 1С
 
гуру
30.09.09
20:27
(93) клиент вообще не взаимодействует с БД в клиент-серверном варианте и обращение Ссылка.МойРеквизит эквивалентно запросу
Выбор
 МойРеквизит
Из
 ТаблицаСсылки
Где
 Ссылка=&Ссылка
Насчет того, что лучше запросом потому, что он один а по ссылке каждый раз запрос, не спорю, верно
99 ОбычныйЧеловек
 
30.09.09
21:02
Может все таки кто-то ответить почему делается именно запрос а не используется "ЭтотОбъект" ? речь как я понял идет именно о типовых конфигурациях а там как уже было сказано стоит проверка на "не записанный" документ.
100 ОбычныйЧеловек
 
30.09.09
21:06
вопрос снимается..уже вижу что "H A D G E H O G s" написал
101 Один С
 
30.09.09
21:16
ну хорошо:
"обрабатывались на сервере", "полностью  передается на клиента"...
это все понятно.
вопрос такой:
ктонибудь замерял на сколько велика эта знаменитая "нагрузка на сервер"?
ну, чтобы не голословно утверждать, что "оченно сеть грузиццо", а конкретно, с фактами на руках. Хотя бы порядок цифр? каков объем бедствия, так сказать?
если этот метод грузит систему на 20-50% то это одно, а если на 0,001% то это совсем другое.
или это все теоретическая теория? как с теми обезьянками и бананом?
102 Snovy
 
30.09.09
21:25
В июне 2004, когда существовала первая (самая первая) версия УТ, вышла бета УПП (где кроме планирования и УТ ничего не было) и не было еще БП, насчет ЗУП не помню, на курсах разработчиков по УПП (ИТРП тогда) было доложено однозначно - только ради соответствия печатной формы данным в БД,иных мыслей у разработчиков не было.
104 Serg_1960
 
01.10.09
00:53
(89) "аааа паржал. сразу 50 человек можно уволить". Maniac, ты - 51-ый. Твои объяснения - в (90) полуправда, в (91) - полуложь. Ты всё перепутал :(

PS: Эта тема на форуме муссируется каждый год по несколько раз :( Пора бы поиском находить ответы :)
Но всякий раз, вместо фактов - домыслы и суеверия. Как будто нет в природе информации и инструментов, способных внести ясность :(
105 ale654062
 
01.10.09
00:53
да код не причем 100%
но если просишь..............

Функция Импорт_Файла_ДБФ(Параметр)
   ФайлБД = СоздатьОбъект("XBase");
   Попытка
       ФайлБД.ОткрытьФайл(Путь,,1);
   Исключение
       Предупреждение(Путь + РазделительСтрок + "Ошибка открытия файла!");
       Возврат 0;
   КонецПопытки;
   Если ФайлБД.Открыта() = 0 Тогда
       Предупреждение(Путь + РазделительСтрок + "Ошибка открытия файла!" + РазделительСтрок + "Возможно, файл используется другим приложением.");
       Возврат 0;
   КонецЕсли;
   ФайлБД.КодоваяСтраница(2-Кодировка);
   ФайлБД.Первая();
   Пока (ФайлБД.вКонце() = 0)  Цикл
       Если ФайлБД.ЗаписьУдалена() = 1 Тогда
           ФайлБД.Следующая();
           Продолжить;
       КонецЕсли;

       Состояние("Обрабатывается строка №" + ФайлБД.НомерЗаписи());
       
       
       ДатаОплаты = СокрЛП(ФайлБД.DATA);
       ДатаОплаты = Дата(Число(Сред(ДатаОплаты,7,4)),Число(Сред(ДатаОплаты,4,2)),Число(Сред(ДатаОплаты,1,2)));
       
       Если (ДатаОплаты <> Параметр.Получить("ДатаДок")) или (СокрЛП(ФайлБД.KL_CHK) <> РСчет) или (Цел(ФайлБД.CUR_ID) <> 980) Тогда
           ФайлБД.Следующая();
           Продолжить;
       КонецЕсли;

       Если ФайлБД.DK = 1 Тогда // расход

           Сп = СоздатьОбъект("СписокЗначений");
           Сп.Установить("Расход", ФайлБД.S);
           Сп.Установить("Приход", 0);
       ИначеЕсли ФайлБД.DK = 0 Тогда // приход

           Сп = СоздатьОбъект("СписокЗначений");
           Сп.Установить("Расход", 0);
           Сп.Установить("Приход", ФайлБД.S);                
       Иначе
           ФайлБД.Следующая();
           Продолжить;
       КонецЕсли;
       
       Сп.Установить("Контрагент", ЗаменитьСимволыНазад((СокрЛП(ФайлБД.KL_NM_K))));
       Сп.Установить("РСчет", ФайлБД.KL_CHK_K);
       Сп.Установить("ОКПО", СокрЛП(Цел(ФайлБД.KL_OKP_K)));
       Сп.Установить("МФО",СокрЛП(Цел(ФайлБД.MFO_K)));
       Сп.Установить("Содержание",ЗаменитьСимволыНазад(СокрЛП(ФайлБД.TEXT1)));
       Сп.Установить("НомерПП",СокрЛП(ФайлБД.ND));                
       Параметр.ДобавитьЗначение(Сп);
       ФайлБД.Следующая();          
       
   КонецЦикла;
   ФайлБД.ЗакрытьФайл();
   
   Возврат 1;
К
106 Wehrmacht
 
01.10.09
16:48
(93) А я в (30) чо сказал? И не при каждом обращении -- после первого данные кешируются.
(94) Запрос на клиенте? К чему, интересно, он делается?

ИМХО, увольняйся ка ты сам)
107 zbv
 
01.10.09
16:57
не забывайте, что (0) спрашивает про печатные формы, а они в типовых сделаны в блоке:

#Если Клиент Тогда

#КонецЕсли
108 Aprobator
 
02.10.09
12:25
(107) дык, а где еще делать печатные формы? На сервере недоступен целый ряд методов табличного документа. Например ПроверитьВывод(), Показать().