Имя: Пароль:
1C
1С v8
Проведение документа после переноса в КД
0 Игорь_МММ
 
08.04.16
01:01
Подскажите плз. если в ПКО ПослеВыгрузки пишу Объект.Записать(РежимЗаписиДокумента.Проведение) - проведение идет по ОбработкеПроведения ? вроде как по-другому? просто ставлю точку останова в ОБработкуПроведения - не останавливается.
1 Diman000
 
08.04.16
01:06
В ней самой, куда же она, родная, денется.
Вот только у тебя документ-источник проводится.
ПослеВыгрузки это контекст выгрузки. И тамошний объект это объект-источник.
2 Игорь_МММ
 
08.04.16
09:36
(1) Ну так вроде все так. Проблема изначально в том что половина документов делает движения по регистрам , а какая-то часть не записывается даже - вываливается с ошибкой " ошибка вызова метода "Записать" не установлен отбор по регистратору, ". Я поставил точку останова в ОбработкеПроведения - останавливаться не останавливается. Как так?
3 Pro-tone
 
08.04.16
09:59
(0) а зачем тебе проводить документ после выгрузки в файл обмена? Какой в этом смысл?
4 Игорь_МММ
 
08.04.16
10:00
(3) движения нужны
5 Игорь_МММ
 
08.04.16
10:01
(3) или начинаю догонять ... я не там делаю проведение? а где?
6 ДенисЧ
 
08.04.16
10:02
(5) Послевыгрузки работает тогда, когда документ ВЫГРУЖАЕТСЯ, а не когда загружается...
7 Pro-tone
 
08.04.16
10:04
(4) движения тебе нужны на стороне приемника, для этого нужно проводить документ после загрузки, установив ему режим проведения, вроде в обработчик ПриЗагрузке пиши РежимЗаписи = Проведение
8 Игорь_МММ
 
08.04.16
10:19
(7) Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Материалы оприходованные)

Текст ОбработкиПроведения:


Процедура ОбработкаПроведения(Отказ, Режим)
    
    ДатаПоследнегоИНВ = Константы.ДатаТекущегоИНВ.Получить();
    
    Если ЭтотОбъект.Дата >= ДатаПоследнегоИНВ Тогда
        Движения.Хозрасчетный.Очистить();
        Для Каждого ТекСтрокаТовары Из Товары Цикл
            Движение = Движения.Хозрасчетный.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
            Движение.Период = Дата;
            Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
            Движение.Количество = ТекСтрокаТовары.Количество;
        КонецЦикла;
    КонецЕсли;
    // регистр МатериалыОприходованные Приход
    Движения.МатериалыОприходованные.Очистить();
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.МатериалыОприходованные.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Количество = ТекСтрокаТовары.Количество;
    КонецЦикла;

    // регистр МатериалыПодтвержденныеНеОприходованные Расход
    Движения.МатериалыПодтвержденныеНеОприходованные.Очистить();
    Для Каждого ТекСтрокаТовары Из Товары Цикл
        Движение = Движения.МатериалыПодтвержденныеНеОприходованные.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
        Движение.Количество = ТекСтрокаТовары.Количество;
    КонецЦикла;
    
КонецПроцедуры

На стороне приемника, вводишь накладную (вручную) ,проводишь - ошибок нет. Получается ошибка только если проведение идет при переносе. В чем нюанс?
9 Pro-tone
 
08.04.16
10:26
(8) а где у тебя строка "Движения.Регистратор=..."?
10 Pro-tone
 
08.04.16
10:28
(8) ты понимаешь, что при записи в рн "Регистратор" это обязательное поле для заполнения? и обмен данными вообще тут не причем, а когда руками проводят документ, скорее всего это проводят вообще не этот документ, а какой-то другой
11 Игорь_МММ
 
08.04.16
11:03
(10) Это как? .. набиваешь документ, нажимаешь Ок - а проводится другой документ? Сейчас сделал новый документ - провел, проверил движения - все на месте. Не может оно автоматом считаться что коли проводится Этот документ, т о соответственно он и регистратор?
12 Pro-tone
 
08.04.16
11:06
(11) напиши все же Движение.Регистратор = Ссылка
13 Игорь_МММ
 
08.04.16
11:13
(12) вставил, но  при загрузке все равно вылетает (8)
написал так : Движение.Регистратор = ЭтотОбъект;
14 Diman000
 
08.04.16
11:16
Напиши Ссылка.
ЭтотОбъект это другой тип.
15 Игорь_МММ
 
08.04.16
11:32
(14) тоже самое ..
"Не установлен отбор по регистратору" и "Движение.Регистратор ="  одно и тоже?
16 Игорь_МММ
 
08.04.16
12:28
закипаю ..
поудалял все загруженные документы, нажимаю загрузить данные - загружается один док и вылетает "Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Материалы оприходованные)"
---- ничего не меняя  ----- жму опять загрузить данные - загружает еще один док и снова вылетает таже ошибка и тд. При каждой загрузке загружает ровно один документ и ошибка
17 ДенисЧ
 
08.04.16
12:29
(16) Ну так может, ты всё таки код проведения поправишь?
Или так и будешь туда-сюда документы удалять?
18 Игорь_МММ
 
08.04.16
12:31
(17) направь на путь истинный, плз. То что предлагали (Движение.Регистратор = Ссылка) не помогает (
19 Альбатрос
 
08.04.16
12:38
(18) У не щаписанного документа есть ссылка?
20 Альбатрос
 
08.04.16
12:39
*записанного
21 Игорь_МММ
 
08.04.16
12:45
(19) Спасибо тебе человечище !! блин одно слово и все понятно стало
как раз вот это курю - http://catalog.mista.ru/public/160588/ , думаю зачем такие сложности: сначала в таблицу всю инфу сливать , потом по ней все проводить . Получается сначала все записывается без проведения, а потом уже перепроводим. Если все так подскажите еще по указанной статье - там обработчики событий «Перед загрузкой данных», «После загрузки объекта»,«После загрузки данных»  - что-то не вижу у себя таких, это где?
22 Diman000
 
08.04.16
12:51
Незаписанный документ в ОбработкуПроведения не попадает
23 Pro-tone
 
08.04.16
12:56
(21) потому что возможны коллизии при блокировках с большим числом документов, поэтому есть даже РС "Отложенные движения", чтобы провести то, что до этого из-за ошибок или блокировок не удалось провести
24 Игорь_МММ
 
08.04.16
13:00
(22) таки дело в обработке проведения? что там не так? почему при ручном вводе дока проведение проходит без ошибок, а при конвертации вылетает?
(23) то бишь (21) не мой случай?
25 Игорь_МММ
 
08.04.16
14:15
апп..
26 Pro-tone
 
08.04.16
14:21
(24) ты сделал по (12)?
27 Игорь_МММ
 
08.04.16
14:34
(26) (17) (14) мда, все заработало...
туплю, простите - ставил ЭтотОбъект.Ссылка
Спасибо
28 Игорь_МММ
 
08.04.16
15:36
Подскажите еще как сделать Отмену проведения - та же ошибка вываливается: "Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр накопления: Материалы оприходованные)"

это получается когда повторно загружается документ, который был ранее проведен, теперь распроведен - мне нужно удалить движения по этому документу.
29 Игорь_МММ
 
08.04.16
15:42
сейчас в обработчике события ПослеЗагрузки так написано:
Если Объект.Проведен Тогда
     Объект.Записать(РежимЗаписиДокумента.Проведение)
Иначе
    // Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения)
КонецЕсли;
соответственно если коммент убираю, то вываливается с ошибкой на любом непроведенном документе
30 Игорь_МММ
 
08.04.16
17:00
никто не поможет горюшку ?
31 Popkorm
 
08.04.16
17:49
(30) так что надо,провести после Загрузки?
32 Cyberhawk
 
08.04.16
17:51
"ставлю точку останова в ОБработкуПроведения - не останавливается" // Убедись, что в нужной базе отладка в принципе работает (что отладчик останаливается в каком-нибудь любом месте) для начала
33 Berezin84
 
08.04.16
17:59
34 Berezin84
 
08.04.16
18:01
Вот если код нужен http://pastebin.com/upE2YH2Q
35 Pro-tone
 
08.04.16
18:12
(29) Объект.Записать - так нельзя писать

КД объект - это структура, пришедшая из файла. Поэтому есть такое как ОбъектНайден. Эта переменная имеет булевный тип, ей и проверяй. У объекта есть свойство Ссылка. Если она не пустая, то можно ПолучитьОбъект() - это и есть твой документ, можешь его проводить, распроводить, удалять и т.п.
36 Fragster
 
гуру
08.04.16
18:24
если документу при выгрузке установить Проведен = Истина, то при обмене по правилам он сам проведется. В обработке - хз.
37 Игорь_МММ
 
08.04.16
23:56
(31) пока до дома добирался, пришло, что все куда плачевнее:
задача перенести документы из Бухгалтерии в самописную конфу. Сейчас проводиться документы проводятся, проблема наступает, если я делаю отмену проведения в источнике и гружу документ - получается что на стороне приемника нужно отменить проведение (здесь вываливается с ошибкой, т.е. Объект.Записать(РежимЗаписиДокумента.Проведение) выполняется без проблем, а Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения) вываливается с ошибкой)- это одна беда. Второе - это что делать если в источнике док удалят, как найти его в приемнике и распровести хотя бы?
38 Игорь_МММ
 
08.04.16
23:57
(32) отладка работает - остановка срабатывает если я в ручную провожу док
39 Игорь_МММ
 
09.04.16
00:05
(33) (34) под конец дня сегодня курил эту тему, пробовал и в обработчики ПКО вставлять и как в (21) в обработчики самой конвертации - пока не помогло.
(36) надо не все проводить, а получается и делать отмену проведения см (37)
(35) в понедельник буду уже пробовать
40 Fragster
 
гуру
09.04.16
08:54
Если универсальный обмен по правилам из бсп и объект один к одному - то все должно работать из коробки
41 hhhh
 
09.04.16
09:02
(39) надо программиста, который эту самописку наваял, допросить с помощью паяльника. Наверняка там из этого документа вызывается проведение других документов. Которые и ругаются.
42 Игорь_МММ
 
09.04.16
18:28
итого:
В ПКО в обработчиках все убрал . В событии ПослеЗагрузки Конвертации написал так:

ДатаПоследнегоИНВ = Константы.ДатаТекущегоИНВ.Получить();

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПоступлениеТоваровУслуг.Ссылка,
        |    ПоступлениеТоваровУслуг.Проведен
        |ИЗ
        |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
        |ГДЕ
        |    ПоступлениеТоваровУслуг.Дата >= &Дата";


    Запрос.УстановитьПараметр("Дата", ДатаПоследнегоИНВ);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
         Док = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
         Если ВыборкаДетальныеЗаписи.Проведен Тогда
             Док.Записать(РежимЗаписиДокумента.Проведение);
         Иначе
             Док.Записать(РежимЗаписиДокумента.ОтменаПроведения);
         КонецЕсли
    КонецЦикла;

Теперь все ОК!!! Спасибо всем за помощь
Осталась последняя проблема (если это вообще решаемо): можно ли отследить объект, который был изначально создан в источнике, потом загружен в приемник, затем в источнике удален - можно ли отследить это и удалить его и в приемнике? Вообще есть ли какой-то признак у документа где он был создан?