|
Конвертация данных. Изменение регистров документа после обмена. | ☑ | ||
---|---|---|---|---|
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; КонецЕсли; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |