Имя: Пароль:
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) дык, а где еще делать печатные формы? На сервере недоступен целый ряд методов табличного документа. Например ПроверитьВывод(), Показать().
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn