Имя: Пароль:
1C
1С v8
Обмен УТ в БП через правила обмена
0 Avily
 
18.12.12
09:09
Добрый день. Необходимо подправить обмен. Он выполняется по правилам, созданным в конфигурации Конвертация.
При создании номенклатуры нужно чтобы в регистр сведений Счета Учета Номенклатуры писался счет учета (Счет учета передаю из УТ в параметр).
Написала в процедуре После загрузке Номенклатуры :
Если не ПустаяСтрока(ПараметрыОбъекта["СчетУчетаПараметр"]) тогда
   НоваяЗапись = РегистрыСведений.СчетаУчетаНоменклатуры.СоздатьНаборЗаписей();
   НоваяЗапись.Прочитать();
   НовСтр=НоваяЗапись.Добавить() ;
   
   НовСтр.Номенклатура =Объект. ссылка;
   НовСтр.СчетУчета = ПланыСчетов.Хозрасчетный.НайтиПоКоду(ПараметрыОбъекта["СчетУчетаПараметр"]);
   НовСтр.СчетУчетаНДСПоПриобретеннымЦенностям = ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ;
   НовСтр.СчетУчетаНДСПоРеализации = ПланыСчетов.Хозрасчетный.Продажи_НДС;
   НовСтр.СчетУчетаНДСУплаченногоНаТаможне = ПланыСчетов.Хозрасчетный.НДСуплачиваемыйТаможеннымОрганам;
   НовСтр.СчетУчетаПередачи = ПланыСчетов.Хозрасчетный.ПокупныеТоварыОтгруженные;
   НовСтр.СчетДоходовОтРеализации = ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД;
   НовСтр.СчетРасходовОтРеализации = ПланыСчетов.Хозрасчетный.ВыручкаЕНВД;

   МенеджерЗаписи = РегистрыСведений.СчетаУчетаНоменклатуры.СоздатьМенеджерЗаписи();
   МенеджерЗаписи.Номенклатура=Объект.ссылка;
   Сообщить("Объект.ссылка "+ссылка );

   МенеджерЗаписи.Прочитать();
   Если МенеджерЗаписи.Выбран() Тогда
       МенеджерЗаписи.СчетУчета = ПланыСчетов.Хозрасчетный.НайтиПоКоду(ПараметрыОбъекта["СчетУчетаПараметр"]);
       МенеджерЗаписи.СчетУчетаНДСПоПриобретеннымЦенностям = ПланыСчетов.Хозрасчетный.НДСпоПриобретеннымМПЗ;
       МенеджерЗаписи.СчетУчетаНДСПоРеализации = ПланыСчетов.Хозрасчетный.Продажи_НДС;
       МенеджерЗаписи.СчетУчетаНДСУплаченногоНаТаможне = ПланыСчетов.Хозрасчетный.НДСуплачиваемыйТаможеннымОрганам;
       МенеджерЗаписи.СчетУчетаПередачи = ПланыСчетов.Хозрасчетный.ПокупныеТоварыОтгруженные;
       МенеджерЗаписи.СчетДоходовОтРеализации = ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД;
       МенеджерЗаписи.СчетРасходовОтРеализации = ПланыСчетов.Хозрасчетный.ВыручкаЕНВД;
       Сообщить("Зашел в Менеджер");
       МенеджерЗаписи.Записать();
   Иначе
       НоваяЗапись.Записать();
   КонецЕсли;
Иначе
   Сообщить("!Пустая!");
конецЕсли;

Проблема в том, что новая запись в регистре не создается, потому что для новой номенклатуры еще нет Ссылки на объект (для уже имеющейся номенклатуры все отрабатывает).

Нужно найти другой подход... Помогите плз.
1 Lokli
 
18.12.12
09:13
Обработчик событий "После загрузки" не подойдёт? :)
2 Lokli
 
18.12.12
09:15
Сорри. :) Данный обработчик нужно смотреть в ПВД.
3 Avily
 
18.12.12
09:15
Нет. "Событие выполняется после прочтения и установки атрабутов объекта из файла, но до его записи в информационную базу."
Т.е . Номенклатура еще не записана в базу и у меня нет на нее ссылки.
4 Lokli
 
18.12.12
09:17
Смотрим не ПКО, а ПВД.
5 Lokli
 
18.12.12
09:18
А значение счета учета номенклатуры от чего-то зависит или всегда одно?
6 Avily
 
18.12.12
09:18
Так мне же надо строчку регистра в БП создавать. Причем тут ПВД?
7 Avily
 
18.12.12
09:19
Оно хранится в УТ для каждой номенклатуры разное
8 DrShad
 
18.12.12
09:20
без фото не взлетит
9 Lokli
 
18.12.12
09:21
Понял.
Я бы сделал так:
1. Создаём ПКО "<какие-то данные> --> регистр сведений".
2. В ПКО номенклатуры, в событии После выгрузки в файл считываем данные по счету учета и вызываем правило из п.1. (ВыгрузитьПоПравилу(Выборка, , , , "СчетаУчета");)

Всё!
10 Lokli
 
18.12.12
09:23
+(9)
"После выгрузки в файл"
Событие выполняется после выгрузки объекта в файл обмена. Может быть использован для выгрузки дополнительной информации по выгруженному объекту в файл обмена. При этом информация будет записана в файл обмена после выгруженного объекта.
11 DrShad
 
18.12.12
09:23
(9) попробуй, может и получится :)))
12 Lokli
 
18.12.12
09:25
(11) я так выгружаю регистры сведений по физ.лицам (паспортные данные, пол и пр.) из одной ЗУП в другую.
Ну да, придётся потрудиться над правилом выгрузки регистра сведений. Но работать будет.
13 Avily
 
18.12.12
09:26
Спасибо, сейчас буду пробовать
14 Avily
 
18.12.12
09:27
Только я не поняла
2. В ПКО номенклатуры, в событии После выгрузки в файл считываем данные по счету учета и вызываем правило из п.1. (ВыгрузитьПоПравилу(Выборка, , , , "СчетаУчета");)  - Тут же тоже еще нет Ссылки на созданную Номенклатуру
15 DrShad
 
18.12.12
09:28
(12) только ты забыл добавить что при этом выгруженную номенклатуру нужно запомнить, чтоб по ней потом собрать регистр, а не всю тянуть
16 Lokli
 
18.12.12
09:30
(14) В базе выгрузки ссылка уже есть! А в базе загрузки данных ссылка появится, т.к. номенклатура уже будет записана в базу.

(15) Не понял, поясни что и где нужно запоминать?
17 Avily
 
18.12.12
09:32
В какой момент номенклатура запишется в базу?
18 DrShad
 
18.12.12
09:33
(16) при выгрузке номенклатуры, ссылки на нее нужно будет запихнуть в массив в Параметрах
19 Avily
 
18.12.12
09:34
Так мне нужна ссылка на номенклатуру в БП, а она не появится, пока не создастся... или я что-то очень сильно не понимаю)
20 Lokli
 
18.12.12
09:37
(18) Не нужно.
(19) Ссылка на номенклатуру в БП не нужна. Объяснять почему и как - не буду, т.к. долго и нудно. Почитай примеры и помощь по обработчикам в конвертации.
21 Lokli
 
18.12.12
09:39
+(19) советую найти книжку по конвертации и посмотреть курсы Насипова Фарита по этой же теме. Там они очень подробно всё рассказывают.
22 Lokli
 
18.12.12
09:46
+(19) И есть еще диск ИТС, на котором так же лежат методические материалы по конвертации.
23 DrShad
 
18.12.12
10:05
(20) что не нужно? т.е. ты предлагаешь в обмене тянуть регистр по всей номенклатуре каждый раз?
24 Lokli
 
18.12.12
10:12
(23) Я предлагаю в ПКО "Номенклатура", в обработчике "После выгрузки в файл" считывать информацию о счете учета номенклатуры из базы УТ и на основании полученных данных формировать одну запись в регистр сведений в базе БП.

Для чего нужно что-то передавать в параметры я не знаю.
25 m-serg74
 
18.12.12
10:18
(19) может это пригодится:

СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ПолучитьСсылкуНового (GetNewObjectRef)
Синтаксис:

ПолучитьСсылкуНового()
Возвращаемое значение:

Тип: СправочникСсылка.

Описание:

Позволяет для нового (созданного и еще не записанного) объекта получить ранее установленное методом УстановитьСсылкуНового значение ссылки.

Доступность:

Сервер, толстый клиент, внешнее соединение.
26 Lokli
 
18.12.12
10:33
(25) Не пригодится.
27 m-serg74
 
18.12.12
10:34
(26) - (25) вроде не тебе было?
28 Lokli
 
18.12.12
10:38
(27) Тогда напиши, как в контексте переноса данных с помощью конвертации может пригодиться данный метод?
29 m-serg74
 
18.12.12
10:40
(28) [Позволяет для нового (созданного и еще не записанного) объекта.....]
30 Lokli
 
18.12.12
10:43
(29) Куда этот метод надо вставить, где использовать? Цитировать СП и я могу. :))
31 m-serg74
 
18.12.12
10:43
(28) а почему при выгрузке Номенклатуры ТС не желает выгрузить по правилу нужные записи в РС, мне не ведомо
32 m-serg74
 
18.12.12
10:45
(30)
(25) всего лишь ответ на (19) а зачем ТСу это, это не к мну вопрос
33 DrShad
 
18.12.12
10:56
(32) а в (19) разве вопрос был о том что ты в (25) написал?
34 m-serg74
 
18.12.12
10:57
(33)
[Так мне нужна ссылка на номенклатуру в БП, а она не появится, пока не создастся]

а что сие означает?
35 DrShad
 
18.12.12
10:59
(34) в общем с тобой все ясно - выдернул фразу из контекста, газифицировал лужу и теперь рассматриваешь как круги расходятся :)))
36 m-serg74
 
18.12.12
10:59
(35) с тобой тоже
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.