Имя: Пароль:
1C
1С v8
Конвертация данных. Изменение регистров документа после обмена.
0 jmaretti
 
18.12.15
16:22
Добрый день!
Произвожу обмен между розницей и бухгалтерией на платформе 8.3 через правила обмена.

В правилах конвертации документа по данным источника выполняю некий запрос, делаю подмену данных в табличной части конвертируемого документа. Например, меняю услугу на товар.  

Хочу получить типовые движения документа в приемнике с подменными данными и сделать корректировку регистров в этом документе. Например, добавить пару проводок. Только для срок где менялась услуга на товар.

В каком обработчике лучше всего проделать эту операцию, если информация о том для каких строк табличной части документа надо делать корректировку регистров известна только в обработчике ПКО.

ПКО "После загрузки" еще не имеет загруженного объекта.
Обработчик "После загрузки данных"  тоже самое.


Подскажите где "рыть". Спасибо
1 ДаЛадно
 
18.12.15
16:24
запиши и будет иметь
2 Cyberhawk
 
18.12.15
16:26
"ПКО "После загрузки" еще не имеет загруженного объекта" // Ошибаешься
3 jmaretti
 
18.12.15
16:50
Я говорю о том, что написано в хелпе по обоим обработчикам, а там написано что:

Обработчики ПКО "После загрузки" это -
событие выполняется после прочтения и установки атрибутов объекта из файла, но до его записи в информационную базу. Возможна модификация загруженного объекта.

Обработчики "Конвертация" После загрузки объекта - это
По сути и назначению это тот же обработчик что и "После загрузки объекта" в правиле конвертации объектов, но определенный на глобальном уровне - то есть вызываемый для всех правил конвертации объектов.


Пробовал в каждом:  сперва проводил документ. Потом читал движения. После этого устанавливал режим "РучнаяКорректировка". Далее просто для проверки удалял движения через набор записей. И ничего не происходило.
4 Гёдза
 
18.12.15
16:52
ты движения переносишь или нет?
5 jmaretti
 
18.12.15
16:57
Движения не переношу.  Конвертирую "Отчет о розничных продажах" из розницы в такой же документ в бухгалтерии. В ПКО меняю в этом документе услуги на товары.  Хочу чтобы бухгалтерия сделала свои типовые движения по бух учету для этого документа и затем поменять их, для тех товаров, которые были заменены.

Сделать это хочу в момент загрузки объекта в базу приемник. Но информация о том какие строки были в документе заменены, знаю только в обработчике ПКО.
6 MUXACb
 
18.12.15
16:57
(0) Если в приемнике нужно провести измененный загружаемый документ то в ПКО ПередВыгрузкой поставьте РежимЗаписи = "Проведение";
7 Гёдза
 
18.12.15
17:04
если записываешь в обработчике, то желательно отключать последующую запись в конвертации
8 jmaretti
 
18.12.15
17:06
Спасибо. Буду пробовать с этой информацией.
9 Гёдза
 
18.12.15
17:07
(6) а движения как менять?
10 Гёдза
 
18.12.15
17:08
как нужно.
1. Провести
2. изменить движения через набор
3. записать набор
4. сбросить флаг модифицированности
11 Гёдза
 
18.12.15
17:09
если галку хочешь ставить, то добавь
установки галки
запись документа  в режиме обмена данными
12 jmaretti
 
23.12.15
11:23
Добрый день!

Есть такой код в ПКО


ПроводкиРегистратора = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

ПроводкиРегистратора.Отбор.Регистратор.Значение = Объект.Ссылка;

ПроводкиРегистратора.Прочитать();
    Если ПолучитьДвижения() <> 0 Тогда
        Сообщить("Есть проводки!!!");
    КонецЕсли;

Вопрос, этот код не работает в обработчике ПКО ПриЗагрузке или ПослеЗагрузке.  Так как оказывается синхронизация выполняется на тонком клиенте, а там недоступен объект "РегистрыБухгалтерии".

Есть ли вариант заставить это работать?
13 jmaretti
 
23.12.15
11:23
Добрый день!

Есть такой код в ПКО


ПроводкиРегистратора = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

ПроводкиРегистратора.Отбор.Регистратор.Значение = Объект.Ссылка;

ПроводкиРегистратора.Прочитать();
    Если ПроводкиРегистратора.Количество() <> 0 Тогда
        Сообщить("Есть проводки!!!");
    КонецЕсли;

Вопрос, этот код не работает в обработчике ПКО ПриЗагрузке или ПослеЗагрузке.  Так как оказывается синхронизация выполняется на тонком клиенте, а там недоступен объект "РегистрыБухгалтерии".

Есть ли вариант заставить это работать?
14 Мимохожий Однако
 
23.12.15
11:27
Не надо диктовать бухгалтерии, какие ей нужны проводки. Достаточно правильно заполнить документ и правильно настроить регистр сведений для счетов с номенклатурой.
15 jmaretti
 
23.12.15
11:34
Уважаемый!

Диктовать не надо, это когда все делается по уму. А когда выгружается из Розницы"Оптика" в Бухгалтерию не то, что нужно, прости за выражение, диктовать увы приходится.  

По конкретному вопросу есть варианты ответов?
А я уже решу, диктовать или нет.

Спасибо.
16 Cyberhawk
 
23.12.15
11:37
Картинку, где видно, что "этот код не работает", в студию
17 jmaretti
 
23.12.15
11:42
Cyberhawk как я вам это покажу?

У меня по всем обработчикам распиханы "сообщить" для простой проверки, попал в нужный код или нет.

Так вот в указанный код я не попадаю. Банальная проверка.
18 Cyberhawk
 
23.12.15
11:43
(17) Как ты отличаешь непопадание в код от невыполнения процедуры-обработчика целиком?
19 jmaretti
 
23.12.15
11:57
Вот код обработчика "После загрузки объекта"

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

Если Объект.Проведен Тогда
    
    Сообщить("Проверка наличия проводок!!!");

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


Сообщить("--------------------------------");

КонецЕсли;


Все сообщить отрабатывают, кроме "Есть проводки!!!".

Проводки есть, их не может не быть.
20 Cyberhawk
 
23.12.15
12:01
"Проводки есть" // Где? Что требуется сделать-то?
21 jmaretti
 
23.12.15
12:21
Постановка задачи.
В момент обмена данными между конфигурацией “Розница: Оптика”  в  “Бухгалтерию”  происходит обмен документом "отчет о розничных продажах".
Обмен происходит как надо по типовым правилам .
Но есть момент.  В рознице как таковой по правилам учета , не существует понятия предоплаты от клиента.
Но Рарус в конфигурации «Розница:Оптика» сделал возможность учитывать предоплату через заранее указанную пользователем услугу, например: "Оптика предоплата". Соответственно в чеках ККМ, а далее и в документе "отчет о розничных продажах"  участвует именно услуга "Оптика предоплата" ,вместо товаров, за которые клиент внес предоплату.   При выгрузке в бухгалтерию, мало того, что бухгалтер не знает какой именно товар был предоплачен, так еще и не имеет проводок ему необходимых по счету  62.02 «Авансы полученные» от клиента.

Заказ в оптике свой, отличный от типовой розницы. Он не выгружается в бухгалтерию.

Требуется сделать замену в бухгалтерии не изменяя конфигурацию,  услуги  «оптика предоплата» на соответствующий товар, который можно вытянуть только из заказа в Рознице:Оптика (заказ в бухгалтерию не выгружается).
И заменить проводки, которые документ «отчет о розничных продажах» сделает в бухгалтерии для услуги «оптика предоплата»

Сумма товара например 2000 рублей.
Предоплата на 1000 рублей.

Будут проводки   (с указанием услуги)

дт 50.01    - кт 90.01.1   сумма     1000     руб.     -  (оптика предоплата)   через кассу

Заменить  на   (с указанием товара)

дт 90.02.1 - кт 41.01         сумма     500 руб.  (себестоимость   товара)
дт 50.01    - кт  62.02        сумма    1000     руб.  
дт 62.01     - кт  90.01.1    сумма    1000     руб.  

Далее в конфигурации появится еще один чек ККМ  с услугой «Оптика доплата»

И снова выгрузится «отчет о розничных продажах с услугой «Оптика доплата».

Ее тоже надо подменить на реальный товар с указанием суммы доплаты уже по счету  62.01.

Не спрашивайте, зачем это нужно бухгалтеру. Вот нужно и все.
22 jmaretti
 
23.12.15
12:26
Собственно это я и делаю.

Беру "отчет о розничных продажах". Вижу что там есть услуги "предоплата" или "доплата". Ищу нужные мне чеки и выхожу на заказ. Получаю список товаров. Делаю замену услуг на товары. Теперь хочу изменить проводки.
Именно замену проводок и не могу сделать через правила обмена. Так как поменять счета учета в документе не получится. Надо править движения.
23 jmaretti
 
23.12.15
12:40
По этому пытаюсь хотя бы прочитать движения проведенного документа, только что выгруженного в бухгалтерию кодом

Если Объект.Проведен Тогда
    
    Сообщить("Проверка наличия проводок!!!");
      
    ПроводкиРегистратора = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    ПроводкиРегистратора.Отбор.Регистратор.Значение = Объект.Ссылка;
    ПроводкиРегистратора.Прочитать();
    
    Если ПроводкиРегистратора.Количество() <> 0 Тогда
        Сообщить("Есть проводки!!!");
    КонецЕсли;
    
КонецЕсли;


в ПКО: После загрузки

И не вижу сообщения "Есть проводки!!!" из обработчика ПКО:  После загрузки  в момент выполнения обмена.

Из чего делаю предположение, что РегистрыБухгалтерии.Хозрасчетный не доступен в тонком клиенте.
24 jmaretti
 
23.12.15
13:37
Всем спасибо. Проблему с чтением проводок решил.

Если кто-то сможет подсказать, каким образом еще можно учесть в данной постановке задачи учет предоплаты по реальным товарам без изменения конфы бухгалтерии. Буду благодарен.
25 Cyberhawk
 
23.12.15
14:24
"Проблему с чтением проводок решил" // Сдается мне, что твое решение работает только начиная со второй загрузки каждого объекта...
26 jmaretti
 
23.12.15
16:03
Не думаю.  Так как если объекта в базе нет, я его принудительно записываю и провожу, чтобы получить типовые проводки.

Прочитать проводки прочитал, а вот изменить не могу.

Если Объект.Проведен Тогда
    
    Попытка
        // актуализируем движения
        Объект.РучнаяКорректировка = Ложь;
        Объект.Записать(РежимЗаписиДокумента.Проведение);
        Сообщить("Обычные проводки");
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    // Чтение типовых проводок
    ПроводкиРегистратора = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    ПроводкиРегистратора.Отбор.Регистратор.Значение = Ссылка;
    ПроводкиРегистратора.Прочитать();
    
    
    Если ПроводкиРегистратора.Количество() <> 0 Тогда
        
        Сообщить("Есть проводки!!!");
        
        //
        //   БЛОК ЗАМЕНЫ ПРОВОДОК
        //
        
        // предварительно установив признак обмена данными
        // для обхода проверок в модулях регистров
        ПроводкиРегистратора.ОбменДанными.Загрузка = Истина;
        ПроводкиРегистратора.Записать();
        
        
        // установим признак ручной корректировки документа,
        // предварительно установив признак обмена данными
        
        Объект.ОбменДанными.Загрузка = Истина;
        Объект.РучнаяКорректировка   = Истина;
        Объект.Записать();
        
        
    КонецЕсли;
    
КонецЕсли;



ОбъектМодифицирован = Ложь;



У проведенного документа в бухгалтерии появляется признак "ручной корректировки", но в проводках пустота, ничего нет.
27 Cyberhawk
 
23.12.15
16:24
1. Смотри в код, выполняемый после загрузки объекта (в обработке загрузки)
2. Код по модификации движений тоже показать надобно
28 jmaretti
 
23.12.15
16:39
Код обработчика "после загрузки объекта"

Если ТипЗнч(Объект) = Тип("ДокументОбъект.ОтчетОРозничныхПродажах") Тогда

ОбъектМодифицирован = Ложь;    

КонецЕсли;
29 jmaretti
 
23.12.15
16:42
Код замены проводок чисто для проверки ( замена 50.1 на 50.02), чтобы увидеть что смог хоть что-то поменять:

СчетДт_50 = ПланыСчетов.Хозрасчетный.КассаОрганизации;    
    СчетДт_50_02 = ПланыСчетов.Хозрасчетный.ОперационнаяКасса;
    Для каждого Проводка ИЗ ПроводкиРегистратора Цикл
        Если Проводка.СчетДт = СчетДт_50 Тогда
             Проводка.СчетДт = СчетДт_50_02;
        КонецЕсли;
    КонецЦикла;