|
Проведение одного документа из другого | ☑ | ||
---|---|---|---|---|
0
024410
11.08.11
✎
18:39
|
Господа ни кто не сталкивался с такой ситуацией: есть некий документ (или обработка), который создает «проводит» другой документ, например, реализацию. Нужно обеспечить контроль следующего характера: реализации созданные документом или обработкой не могут быть проведены или распроведены иначе как с помощью данного документа (обработки) . Можно добавить в реализацию реквизит специальный или создать регистр, но как понять «кто» проводит документ?
Спасибо. |
|||
1
Wobland
11.08.11
✎
18:42
|
пишешь свою обработку проведения с дополнительным параметром, там анализируешь параметр и либо отказываешь, либо проводишь. а в штатной процедуре только вызов своей
|
|||
2
Wobland
11.08.11
✎
18:43
|
мда... а как штатной передать свой параметр? тогда "скрытный" реквизит в документ. и если обработкой проводится, предварительно перед записыванием взводить флажок
|
|||
3
unregistered
11.08.11
✎
18:46
|
>> а как штатной передать свой параметр?
Нахрена скрытные реквизиты? Для этого есть дополнительные свойства. В обработке устанавливать это свойство. В какой-нибудь подписке (перед записью, при проведении) анализировать наличие этого свойства и его значение. PS Проводить документ в обработке проведения другого - зло. За это надо табуреткой по пальцам бить 8 раз. |
|||
4
024410
11.08.11
✎
18:55
|
>>PS Проводить документ в обработке проведения другого - зло. За это надо табуреткой по пальцам бить 8 раз.
Согласен. Однако есть ситуации когда без этого никак. Точнее можно конечно, но не в этом случае... |
|||
5
024410
11.08.11
✎
18:57
|
>>мда... а как штатной передать свой параметр? тогда "скрытный" реквизит в документ. и если обработкой проводится, предварительно перед записыванием взводить флажок
так и думал, однако с свойствами (3) вариант вроде интересней, хотя и более трудоемкий. |
|||
6
Живой Ископаемый
11.08.11
✎
18:59
|
не трудоемкий. легко все делается
|
|||
7
024410
11.08.11
✎
19:02
|
>> Реквизит проще, зато свойство универсальнее - буду так делать. Хотя может есть какие то другие варианты? Более кошерные что ли.
|
|||
8
unregistered
11.08.11
✎
19:03
|
(5) >> более трудоемкий.
Десять строк кода вместе с комментариями... 1 строка - установка значения дополнительного свойства. 3 строки - проверка наличия и значения дополнительного свойства и установка Отказ = Истина, если надо. 2 строки - Процедура - КонецПроцедуры обработчика подписки. 5 строк - на комментарии остается. |
|||
9
024410
11.08.11
✎
19:11
|
>>1 строка - установка значения дополнительного свойства
Я что то как то раньше с доп свойствами не пересекался... К всему стыду. А как оно работает? В типовых конфах есть регистр такой, ну а как его установить? Процедуру написать в документе? |
|||
10
Живой Ископаемый
11.08.11
✎
19:19
|
||||
11
unregistered
11.08.11
✎
19:20
|
>> В типовых конфах есть регистр такой, ну а как его установить? Процедуру написать в документе?
Нет ни какого регистра. ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>) ДополнительныеСвойства (AdditionalProperties) Использование: Только чтение. Описание: Тип: Структура. Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, на время выполнения некоторых операций, без изменения объекта. Например, при обработке событий в подписке на события. Доступность: Сервер, толстый клиент, внешнее соединение. Тебе надо при проведении твоего документа создать в этой структуре своё свойство: МойВторойДокумент.ДополнительныеСвойства.Вставить("ПризнакЧтоДокументПроводитьсяИзДругогоДокумента", Истина); В обработчике подписки на событие ОбработкаПроведения или ПередЗаписью написать что-то типа ПризнакЧтоДокументПроводитьсяИзДругогоДокумента = Ложь; Если Источник.ДополнительныеСвойства.Свойство("ПризнакЧтоДокументПроводитьсяИзДругогоДокумента", ПризнакЧтоДокументПроводитьсяИзДругогоДокумента) Тогда Если НЕ ПризнакЧтоДокументПроводитьсяИзДругогоДокумента Отказ = Истина; Возврат; КонецЕсли; КонецЕсли; |
|||
12
Живой Ископаемый
11.08.11
✎
19:30
|
нужно еще удалить потом это доп.свойство или изменить его, потому что иначе оно сохраняется в рамках сеанса...
|
|||
13
unregistered
11.08.11
✎
19:38
|
(12) >> иначе оно сохраняется в рамках сеанса...
Даже если создается другой экземпляр этого же документа? Проверял? |
|||
14
Живой Ископаемый
11.08.11
✎
19:41
|
2(13) нет, я имею в виду у конкретного объекта-документа. я-то проверял, но зачем мне верить? :) проверь и ты.
|
|||
15
Живой Ископаемый
11.08.11
✎
19:43
|
то есть ты выставляешь свойство, закрываешь документ, потом опять открываешь его - свойство есть и заполнено.
|
|||
16
zladenuw
11.08.11
✎
19:44
|
для данного документа или данного типа документа ?
|
|||
17
Живой Ископаемый
11.08.11
✎
19:45
|
для данного конкретного объекта.
Считайте что доп.свойство - это как реквизит, но который живет только внутри одного сеанса. |
|||
18
zladenuw
11.08.11
✎
19:47
|
но если перезайти то данное свойство будет постое, так или я ошибаюсь
? |
|||
19
Живой Ископаемый
11.08.11
✎
19:48
|
да, если выйти и зайти, то это уже будет другой сеанс, и данного свойства не будет вообще, если еще не выполнился код по его добавлению
|
|||
20
zladenuw
11.08.11
✎
19:55
|
но ведь все равно будет запись в РС по данному объекту кто его изменил... или как увидеть историю изменения ?
|
|||
21
unregistered
11.08.11
✎
19:56
|
(15) Прикольно. Спасибо, я не знал этого. Надо будет проверить у себя пару мест в конфе...
|
|||
22
unregistered
11.08.11
✎
19:58
|
(20) Какой регистр? Какая история?
Ты сейчас вообще о чем и с кем разговариваешь? |
|||
23
zladenuw
11.08.11
✎
20:02
|
(22) не тут... про втыкал.... и все таки если второй пользователь запустить обработку, ведь итоговые результаты будут другими или такого типа не может быть ?
|
|||
24
unregistered
11.08.11
✎
20:07
|
(23) >> если второй пользователь...
Второй пользователь - это отдельный сеанс. Соответсвенно даже если два пользователя создадут по экземпляру одного и того же объекта, то значения дополнительных свойств у каждого из них будут свои. Если я правильно понял (17)... |
|||
25
MikleV
11.08.11
✎
20:23
|
(0) за двойное проведение - расстрел на месте
|
|||
26
024410
11.08.11
✎
21:58
|
(25) >>за двойное проведение - расстрел на месте
Согласен, с кого начнем АББИ-Украина, или сразу 1С? |
|||
27
024410
11.08.11
✎
21:59
|
unregistered, Живой Ископаемый Спасибо за идею - буду делать.
|
|||
28
024410
11.08.11
✎
22:02
|
>> Нет ни какого регистра.
Я имел ввиду "ЗначенияСвойствОбъектов" |
|||
29
024410
11.08.11
✎
22:20
|
Что то я не врубаюсь. Если ДополнительныеСвойства живут в рамках одного сеанса, то они мне не помогут. Я наверно не внятно выразился описываю подробнее:
Есть 2 документа реализации предположим. 1. Реализация№1; 2. Реализация№2; Предположим я внес документом "КорректировкаРеализации№1" Изменения в документ Реализация№2 (кстати не вижу здесь никакого криминала за который нужно бить по пальцам), и провел его. Теперь мне нужно сделать так что бы пользователь или любая другая обработка могла изменить документ Реализация№1, но документ Реализация№2 можно менять только с помошью "КорректировкаРеализации№1". Может я туплю, но как сюда прикрутить ДополнительныеСвойства я не понимаю |
|||
30
MikleV
11.08.11
✎
22:21
|
(26)да без разницы)
|
|||
31
Живой Ископаемый
12.08.11
✎
08:45
|
2(29) Короче, дополнительные свойства нужны для того, что процедура ПриЗаписи твоей корректировки не видит что происходит на самом деле - проведение, отмена проведения или просто запись без проведения. Убедись в этом посмотрев на параметры обработчика - только Источник и Отказ... а как нам узнать в этой процедуре чем же мы занимаемся на самом деле? а выставить в процедуре ПередЗаписью() доп.свойство, что елки, мы-то оказывается проводим, или там записываем, или отменям проведение. Почему так? потому что у обработчика ПередЗаписью параметры: Источник, Отказ, РежимЗаписи, РежимПроведения.
А то что доп.свойства живут в рамках одного сеанса - как раз никак тебе не мешает... Ты ведь не задумал сначала провести корректировку, потом выйти из 1С, опять зайти, и тут-то у тебя твоя реализация проведется? Или например корректировка проводится в сеансе одного пользователя, а реализация тут же у другого? Видимо ты желаешь это делать быстро и практически одновременно, и в рамках одного сеанса... Короче. в (10) видео буквально того что тебе нужно. Про "зло" и "растрелять". Да, зло и растрелять. равно как и динамическое обновление конфы, и оператор перейти и еще куча вещей. Если не хватает смелости - оставайся прапорщиком от программирования и не смей их использовать. |
|||
32
Живой Ископаемый
12.08.11
✎
08:47
|
"но документ Реализация№2 можно менять только с помошью "КорректировкаРеализации№1". " - а это реализуется не доп.свойствами, а обычными реквизитами, например ссылку на корректировку можно запихнуть в документоснование реализации.. В модуле проведения анализировать.. Сссылка заполнена? а доп.свойство выставленно? нет, стало быть кто-то проводит руками руками, а не проводя корректировку.
|
|||
33
kn
12.08.11
✎
08:49
|
А если правами - Интерактивное проведение снять, а Проведение оставить, то только программно можно провести,т.е из обработки
|
|||
34
unregistered
12.08.11
✎
08:54
|
(28) Посмотри уже синтакспомощник.
ДополнительныеСвойства - это НЕ РЕГИСТР и НЕ ПОЛЯ объекта. ДополнительныеСвойства - это структура. Может использоваться в тех случаях, когда необходимо хранить некоторые значения, связанные с объектом, НА ВРЕМЯ ВЫПОЛНЕНИЯ НЕКОТОРЫХ ОПЕРАЦИЙ, без изменения объекта. Например, при обработке событий в подписке на события. (29) Надо сразу описывать задачу. А так получается что полдня обсуждали то, что тебе нафиг не нужно. По сути решение какое-то весьма странное. Если корректировка в текущем периоде, то проще просто откорректировать сам исходный документ (Реализация№2) и перепровести его. Если корректировка прошлого (закрытого) периода, то правильнее делать сторно. Вообще, если честно, не понял нафига Корректирвоки? Каков их смысл? У нас сделано так: У документов добавлены реквизиты: - ВидДокумента (Перечисление Первичный(по умолчанию)/Корректировка/Сторно) - ПервичныйДокумент (ДокументСсылка того же типа что и сам объект). Заполняется только для документом с видом корректировка или сторно. Указывает какой документ корректируем. - номер входящего документа (строка) - дата входящего документа (дата) Последние два добавлены там, где нет типовых (у многих и так есть). Где надо изменен тип числовых реквизитов (сумма, колличество), чтобы можно было указывать отрицательные числа. Соответственно изменены обработки проведения. В субконто типа ДокументРасчетов подставляется корректируемый документ. В некоторых регистрах НДС в измерениях тоже фигурирует первичный документ. Расчет взаиморасчетов делается в разрезе корректируемого документа. Как-то так... |
|||
35
024410
12.08.11
✎
11:35
|
>>Вообще, если честно, не понял нафига Корректирвоки? Каков их смысл?
Смысл такой (возможно это и не правильное решение, но у меня задание делать так). v8: Скидки после продажи |
|||
36
Живой Ископаемый
12.08.11
✎
11:45
|
с доп. свойствами уже все хоть понятно?
|
|||
37
024410
12.08.11
✎
11:50
|
(36) >>с доп. свойствами уже все хоть понятно?
Да, данке шон! Я как то раньше мимо этой фичи вообще проскачил и не знал что такое есть. Нужно наверно на досуге почитать синтаксис помощьник. Спс еще раз - инфа оч пригодится. |
|||
38
ssh2006
12.08.11
✎
12:14
|
"Считайте что доп.свойство - это как реквизит, но который живет только внутри одного сеанса" - это как?
ДополнительныеСвойства существуют пока жив конкретный объект. Сеанс тут ни при чем. |
|||
39
Живой Ископаемый
12.08.11
✎
12:17
|
2(38) ну хорошо, рассказывай в какой таблице БД хранятся доп свойства, чтобы мы могли их узнать и в другом сеансе...
|
|||
40
ssh2006
12.08.11
✎
12:25
|
Речь не о сеансах, а о том что эти свойства существуют пока есть конкретный объект в памяти, а в (12) ты говоришь про сеанс, что может ввести в заблуждение. Свойства связаны с объектом. Уничтожен объект - нет и свойств и нигде они не сохраняются.
|
|||
41
Живой Ископаемый
12.08.11
✎
12:36
|
2(40)
Ну... я мог конечно и наврать, и мне могло показаться, поэтому и просил перепроверить - но я в рамках одного сеанса, в 205-й сборке 13-го релиза создавал документ, записывал его, и выставлял ему свойство... Потом я пытался опять это повторить и видел что это свойство уже есть. |
|||
42
ssh2006
12.08.11
✎
12:41
|
А как ты повторял запись, напиши подробнее?
|
|||
43
Живой Ископаемый
12.08.11
✎
12:52
|
ну смотри... у меня документ ПлатежноеПоручениеВходящее...
и подписка на событие передзаписью для этого вида документов.. Я создаю документ интерактивно, нажимаю кнопку ОК, попадаю в обработчик подписки, где выполняю в частности такой код: НайденноеЗначение = Неопределено; Источник.ДополнительныеСвойства.Свойство("РежимЗаписи", НайденноеЗначение); Если НайденноеЗначение=Неопределено Тогда Источник.ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи); КонецЕсли; то есть я хочу далее по этапу чтобы все следующие обработчики (ПриЗаписи в частности) анализировали это доп.свойство этого конкретного документа и знали что я выполняю - просто запись, отмену проведения или проведение. В обработчике ПриЗаписи этого документа я пишу такое: Режим = Неопределено; Источник.ДополнительныеСвойства.Свойство("РежимЗаписи", Режим); Если (Режим = РежимЗаписиДокумента.Проведение) Тогда //проведение все, этот документ проведен, и тот который я создавал прицепом - аналогично... Тут я конечно мог слажать - скажем не закрывать форму документа, Платежное Поручение, созданного мной интерактивно, а повторно нажимать кнопку Ок... :) и тогда это все объясняет. Но мне все-таки мой слеротичный мозг посказывает что я это тестировал по-всякому, в том числе например и не открывая форму документа, а из формы списка отменяя проведение документа и заново проводя его.. И видел в обработчике ПередЗаписью это свойство заполненным. |
|||
44
unregistered
12.08.11
✎
12:55
|
(35) В заглавном топике указанной ветки какой-то бред.
Извини. но какой нафиг возврат в августе по мартовскому документу? Это чтобы несуществующие обороты по счетам учета товаров показать? ИМХО, тебе к методистам бы обратиться грамотным. Тут я не силен. И уже в зависимости от того, что они присоветуют, реализовывать в программе. Я бы реализовывал задачу тупой корректировкой долга по взаиморасчетам с контрагентом... |
|||
45
unregistered
12.08.11
✎
12:57
|
+ к (44) так как движение по товарам не имеет ни какого отношения к предоставляемым скидкам. Товар списан в марте и всё.
|
|||
46
Живой Ископаемый
12.08.11
✎
12:58
|
короче, щас еще раз перепроверю
|
|||
47
ssh2006
12.08.11
✎
13:00
|
(43) Да, видимо ты записывал из открытой формы повторно. С формой списка такого не будет.
|
|||
48
ssh2006
12.08.11
✎
13:03
|
Невероятно чтобы эти доп свойства кэшировались
|
|||
49
Живой Ископаемый
12.08.11
✎
13:23
|
да, так и есть... если не закрывать форму, тогда свойство живо.. если из формы списка, тогда свойство неопределено... слажал и всем врал. :) многие верили.
|
|||
50
unregistered
12.08.11
✎
14:16
|
(49) Снова поверить предлагаешь? :)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |