Имя: Пароль:
1C
 
Распределенная Информационная база. Обмен
0 Grekos2
 
25.05.16
13:52
В центральную базу некоторым способом перекачиваются документы поступления. Непроведенными.
    
    Затем по обмену они попадают в нужные периферийные базы.
    В периферийной базе оператор проводит документ поступления тем самым подтверждая факт приемки товара.

    Проблема - при повторной загрузке документа в центральную базу
документ выгружается в периферийную базу непроведенным. Это правильно.

    Но при этом у непроведенного документа сохраняются движения которые видны в отчетах. Это неправильно.
    Как убрать эти движения ?
    
    Конфигурация УТ 11.1, но сам обмен самописный.
1 RomanYS
 
25.05.16
13:56
Убрать движения из обмена?
2 Grekos2
 
25.05.16
13:59
(1) Может быть.
    Я в обменах разбираюсь слабо.
    А пробовать не на чем
3 Grekos2
 
25.05.16
14:02
В центральной базе движений нету.
  Там документ не проведен.
  Движения в обмене не участвуют.

  ТоварыНаСкладах выставлено "Запретить"
4 Cyberhawk
 
25.05.16
14:06
Либо добавить движения в обмен, либо не записывать документ в режиме загрузки в приемнике, а проводить его или отменять проведение (как минимум - чистить движения)
5 Cyberhawk
 
25.05.16
14:07
Более продвинутый вариант - регистрировать в приемнике документы на узле отложенной обработки и потом уже их оттуда забирать и проводить или отменять проведение
6 Cyberhawk
 
25.05.16
14:08
Если результат проведения (движения) в центре и периферии может быть разным (разная логика проведения), то первый вариант с добавлением движений в обмен не прокатит
7 Grekos2
 
25.05.16
14:10
Сейчас там вот что прописано:

Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)
    
    ТипДанных = ТипЗнч(ЭлементДанных);
    
    Если Найти(СокрЛП(ТипДанных), "Документ объект:") <> 0 Тогда
        Если ЭлементДанных.Проведен Тогда
            ЭлементДанных.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры
8 Фрэнки
 
25.05.16
14:25
(7) Не красиво это написано.
И не совсем понятно, что будет после завершения обмена...
9 Фрэнки
 
25.05.16
14:30
(7) эта процедура не является обязательной и когда она оставлена пустой, все-равно происходит запись всех получаемых объектов.

Посмотри, на всякий случай, в модулях объектов есть процедура ПередЗаписью ? И каким условием эта процедура начинается тоже посмотри
10 aleks_default
 
25.05.16
14:38
Т.е. получается, кладовщик подтвердил в периферийной базе приемку товара, путем проведения документа, а потом бац - он опять не проведен?
По-моему вот здесь не правильно.

Нужно вот в этой процедуре смотреть на то проведен или не проведен документ в периферийной базе. Если проведен, то запрещать получение из центра.
11 Grekos2
 
25.05.16
14:39
(9)
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
12 Фрэнки
 
25.05.16
14:43
(11) вот это нарочно сделано, чтоб получаемые в обмене значение реквизитов и свойств не влияли ни на что.

И при получении данных с непроведенным документом у тебя набор движений в приемнике не перезаписывается. Т.е. набор живет себе дальше с тем отбором по регистратору, который у него был перед получением нового обмена.
13 Фрэнки
 
25.05.16
14:44
(11) я бы предложил с похожим условием сделать подписку для интересных тебе объектов ПриЗаписи. И чистить там набор движений.
14 Быдло замкадное
 
25.05.16
14:53
РежимЗаписи.ОтменаПроведения
15 aleks_default
 
25.05.16
14:56
(0)Ждите у себя в офисе кладовщика с ружьем...
16 Mikhail Volkov
 
25.05.16
15:01
(0) > Но при этом у непроведенного документа сохраняются движения которые видны в отчетах. Это неправильно.
Давно знакомая ситуация: с базе Источник документ помечают на удаление, в базе приемника он тоже помечается на удаление, но движения остаются. Чтобы они убирались в правилах обмена в обработчике "После загрузки объекта" вставляю:

Если Не ОбъектНайден И (ИмяТипаОбъекта = "Справочник" Или ИмяТипаОбъекта = "Документ") Тогда
    Отказ = Объект.ПометкаУдаления;
КонецЕсли;

// Чтобы проводок не оставалось у не проведенных и/или помеченных на удаление документов
Если ОбъектНайден И ИмяТипаОбъекта = "Документ" И Объект.Метаданные().Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить И РежимЗаписи = "Запись" И Объект.Ссылка.Проведен Тогда
    РежимЗаписи = "ОтменаПроведения";
    Если Параметры.Комментировать Тогда
        Сообщить("Записан с отменой проведения: " + СокрЛП(Объект), СтатусСообщения.Информация);
    КонецЕсли;
КонецЕсли;

> Конфигурация УТ 11.1, но сам обмен самописный.
Может это не РИБ?

Попутно спрошу, недавно создал РИБ с фильтром по подразделению в УТ11.2 в периферийных базах пользователь с такими же правами как в общей центральной базе (тот же пользователь) ничего не может делать с клиент-банком, якобы из-за отсутствия нужных прав!? Дали все права кроме полных - не помогло. Пока дали полные права. Может так в РИБ задумано, что клиент-банк может работать только в центральной базе?
17 aleks_default
 
25.05.16
15:17
(16)Это не в РИБ так задумано, а в Клиент-банке или в твоей конфе. РИБ тут нипричем.
18 aleks_default
 
25.05.16
15:38
(16) Как конкретно ругается. Не на центральный узел?
19 Serg_1960
 
25.05.16
15:54
Давайте начнём с того, что я вам напомню: РИБ - механизм платформы, в котором документ и его движения - автономны и независимы друг от друга. Пожалуй, на этом и закончу. Ваш к.э.п
20 Grekos2
 
25.05.16
16:13
Решили, что ПроведенныйВПериферийнойБазе обновляться не должен.
21 Mikhail Volkov
 
25.05.16
16:41
(17) > РИБ тут нипричем
Точно? Конфигурация вроде не измененная!?
(18) Сам пока не смотрел, вроде как "Не достаточно прав доступа"
(19) > РИБ - механизм платформы
Полный возможно, а СОтборами? Вроде все правила фильтрации в конфигурации, и зачастую не соответствуют самой конфигурации. Ее функционал ускакал вперед добавлены новые типы операций в документах, а в правилах фильтрации они не прописаны, и выпадают из обмена.
22 Serg_1960
 
25.05.16
17:07
(21) А остальное в РИБ - это программная надстройка. Обмен "по организации", "по подразделениям", по прочим фильтрам - всё это программно цепляется на обработчики плана обмена, подписками конфигурации и т.д.

Если у автора не проведенный или помеченный на удаление документ имеет проводки в подчинённом узле - это неверно написанный программистом алгоритм. Например, перехватили обработчик плана обмена своим алгоритмом регистрации изменений, в котором "забыли" зарегистрировать для подчиненного узла удаление движений документа.
23 aleks_default
 
25.05.16
17:31
(20) кладовщики вам аплодируют
24 Фрэнки
 
25.05.16
17:43
(20) А как сделать это решение программно уже нашли?
25 aleks_default
 
25.05.16
17:44
(24) см (10)
26 Фрэнки
 
25.05.16
17:47
(25) это я понимаю,
только они могут не сразу найти, не сразу догадаться как прочитать состояние получаемого объекта ЭлементДанных в текущей базе (а не в пакете обмена) в той процедуре, что показана в (7)
27 Grekos2
 
25.05.16
17:51
(24) Еще нет.
28 aleks_default
 
25.05.16
17:55
подсказка "УИД"
29 Фрэнки
 
25.05.16
18:02
(27)
1. получите ссылку из параметра ЭлементДанных
2. через точку прочитайте у ссылки свойство Проведен
:)
30 Фрэнки
 
25.05.16
18:04
т.е. это будет существенное отличие от того кода что написан в (7)
31 Grekos2
 
25.05.16
18:04
ТипДанных = ТипЗнч(ЭлементДанных);
Если ТипДанных = Тип("ДокументОбъект.ПоступлениеТоваровУслуг") Тогда
    Ном = ЭлементДанных.Номер;
    Дат = ЭлементДанных.Дата;
    
    Док = Документы.ПоступлениеТоваровУслуг.найтиПоНомеру(Ном,Дат);
    Если НЕ Док.Пустая() и Док.Проведен Тогда
        ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать;
    КонецЕсли;
КонецЕсли;
32 Grekos2
 
25.05.16
18:04
А вот так (31) не получится ?
33 Лефмихалыч
 
25.05.16
18:09
(0) так, как у вас сделано, делать нельзя было.
Вы одним документом в разных базах отражаете в учете разные события, которые еще и по времени разделены - отгрузку и приемку. Олимпийскому спокойствию склада вашего поражаюсь - у них фактически остатки при таком раскладе ни когда и ни при каких условиях не будут даже отдаленно напоминать остатки в учетной программе. Хотя, может у них на это и расчет?
Тут нужна ордерная схема или какая-то ее вариация. Отгрузка - один документ и обязательно проведенный, приемка - другой документ и тоже проведенный. Документы и ЦБ в ПФ (и наоборот) не должны ни как меняться, иначе при конкуррентных изменениях данные будете всегда менять.
34 Grekos2
 
25.05.16
18:12
(33) Может быть так оно и лучше, но я не уполномочен принимать такие ответственные решения.
     Мне бы разрулить сейчас, чтобы проведенный документ в периферийной базе не обновлялся.
35 Лефмихалыч
 
25.05.16
18:12
фраза "Документы и ЦБ в ПФ (и наоборот) не должны ни как меняться, иначе при конкуррентных изменениях данные будете всегда менять."
в переводе на русский означает, что документы должны редактироваться только в тех узлах, в которых были созданы, иначе у вас всегда будет потеря данных, описанная в (0).
36 Лефмихалыч
 
25.05.16
18:13
(34) в существующей схеме бизнес процесса это у тебя не получится
37 Grekos2
 
25.05.16
18:15
(36) Т.е. нельзя сделать так, чтобы проведенный документ не обновлялся из Центральной базы ?
38 Фрэнки
 
25.05.16
18:18
Документы.ПоступлениеТоваровУслуг.найтиПоНомеру(Ном,Дат);

это конструкция вернет такую же Ссылку, как простое действие
ДокСсылка = ЭлементДанных.Ссылка
39 Фрэнки
 
25.05.16
18:19
(37) можно. Сейчас скорректирую твой код
40 Лефмихалыч
 
25.05.16
18:20
(37) можно, но это создаст тебе еще ряд проблем, на которые тебе тоже придется какие-то костыли надевать
41 Фрэнки
 
25.05.16
18:20
(39) т.е. в твоем коде в 31 уже будет работать, только ссылка в твоем объекте есть уже готовая, как в строке в 38 я написал
42 Grekos2
 
25.05.16
18:23
>> что документы должны редактироваться только в тех узлах, в которых были созданы

Интересная мысль конечно. Надо над этим подумать.
43 Grekos2
 
25.05.16
18:25
Процедура ПриПолученииДанныхОтГлавного(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад)


ТипДанных = ТипЗнч(ЭлементДанных);
Если ТипДанных = Тип("ДокументОбъект.ПоступлениеТоваровУслуг") Тогда
    
   Док = ЭлементДанных.Ссылка;

   Если НЕ Док.Пустая() и Док.Проведен Тогда
        ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать;
     КонецЕсли;
КонецЕсли;

КоецПроцедуры
44 Grekos2
 
25.05.16
18:25
Завтра опробую.
  Спасибо за подсказки :)
45 Лефмихалыч
 
25.05.16
18:40
(43) и в результате после того, как документ попал проведенным в ЦБ, ни какие последующие изменения в нем, центральная база принимать не будет.
На это, как я уже сказал, нужен еще один костыль. Который тоже приведет к ситуации, на которую понадобится третий костыль
46 Фрэнки
 
25.05.16
18:44
(45) не прав. В данном конкретном случае стоит вызов процедуры на конкретное событие ПриПолученииДанныхОтГлавного

Эта процедура сработает только в плане обмена с включенным РИБ в только на периферии
47 Лефмихалыч
 
25.05.16
18:45
(46) тоже заэпись - в ЦБ внесут изменения и перепроведут. Что будет?
48 Лефмихалыч
 
25.05.16
18:46
на складе отчаянные ребята работают
49 Фрэнки
 
25.05.16
19:02
(48) ну не должна центральная база изменять остатки по периферийному складу, не должна! Там еще всплывет тема, что на периферии по итогам проводимых инвентаризаций еще и штрафы накладывать - вот тут и пригодится установка, что данные проведенных документов, двигающих остатки в локальную базу не должны заходить.

Кстати, надо бы Grekos2 предостеречь.
У него в коде нет еще вылавливания из обмена набора данных движений от этих документов. ПереПроведение документа в Центре может вернуть в периферию измененный набор движений регистра. ТЧ будет в периферии на одну сумму и количество, а из центра приедут другие движения.
50 Фрэнки
 
25.05.16
19:04
// не должны заходить.
не должны заходить из центра повторно.
51 Лефмихалыч
 
25.05.16
19:04
(49) там еще море проблем будет при таком уобогом организационно-техническом решении, как в сабже. На каждую по отдельности можно свой костыль нацепить. Но я уже от сюда вижу, как это все будет тупить и ключить.
52 Фрэнки
 
25.05.16
19:05
(51) есть у революции начало - нет у революции конца
53 Лефмихалыч
 
25.05.16
19:09
ИТ-руководители от экономических отличаются тем, что первые решают проблемы завтрашнего дня, а вторые - только по мере поступления.

Сабж - это экономический руколь решил проблему, которая здесь и сейчас: "надо как-то отражать факт отправки и приемки в программе".

А ИТ-рукля нет в конторе. Пичальбида...
Основная теорема систематики: Новые системы плодят новые проблемы.