Имя: Пароль:
1C
1С v8
Проведение одного документа из другого
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) Снова поверить предлагаешь? :)))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс