|
Конвертация данных: выгрузка ТЧ документа | ☑ | ||
---|---|---|---|---|
0
Sun125
19.03.15
✎
22:56
|
Нужно выгрузить ТЧ одного документа в ТЧ другого документа.
В ТЧ Приемника есть реквизит "Количество мест", которого нет в Источнике. В КД в Правилах конвертации свойств "Количество мест" в обработчике "Перед выгрузкой" пишу: Значение = 1; При обмене программа все равно ругается: Ошибка в обработчике события ПередВыгрузкой (свойства) ПКО = ОтчетПроизводстваЗаСмену (Документ: Сборка запасов) ПКС = 9 (--> КоличествоМест) Объект = Производство 8 от 19.03.2015 (Документ объект: Производство) СвойствоПриемника = КоличествоМест (Число) Обработчик = ПередВыгрузкойСвойства ОписаниеОшибки = Метод объекта не обнаружен (ПКС_ОтчетПроизводстваЗаСмену_Продукция_КоличествоМест_ПередВыгрузкойСвойства_9_24) ПозицияМодуля = (1) КСообщенияОбОшибках = 55 Подскажите,пожалуйста, в чем ошибка? |
|||
1
welwel
19.03.15
✎
23:04
|
В ОбъектКоллекции менять нужно
|
|||
2
Sun125
19.03.15
✎
23:10
|
(1) Подскажите,пожалуйста,где это находится ОбъектКоллекции?
|
|||
3
Sun125
19.03.15
✎
23:12
|
Смотрю в типовых правилах, зачем-то же заполняют значение в обработчике "Перед выгрузкой":
Выполнить(Алгоритмы.ЗаполнитьКоличествоВТабличнойЧасти); ЗаполнитьКоличествоВТабличнойЧасти: Если ТипЗнч(ОбъектКоллекции.ЕдиницаИзмерения) = Тип("СправочникСсылка.ЕдиницыИзмерения") Тогда Коэффициент = ОбъектКоллекции.ЕдиницаИзмерения.Коэффициент; Если Коэффициент > 0 Тогда Значение = ОбъектКоллекции.Количество * Коэффициент; КонецЕсли; Иначе Значение = ОбъектКоллекции.Количество; КонецЕсли; |
|||
4
iHell
19.03.15
✎
23:15
|
В ПКС перед выгрузкой только это: Значение = 1; ?
|
|||
5
iHell
19.03.15
✎
23:16
|
"Количество мест" - числовой ?
|
|||
6
Sun125
19.03.15
✎
23:17
|
(5) Да, Количество мест - это Число.
Пишу: Значение=1; В ТипПриемника указано, что Число |
|||
7
welwel
19.03.15
✎
23:17
|
Можно в послевыгрузки 1 присвоить во всех строках и не заморачиваться с пкс
|
|||
8
iHell
19.03.15
✎
23:18
|
(2) ОбъектКоллекции - доступен как раз в пкс реквизитов твоей тч, посмотри справку по обработчикам, там описано что это.
|
|||
9
Sun125
19.03.15
✎
23:22
|
(7) Указал в ПослеВыгрузки, теперь на этот обработчик ругается:
Ошибка в обработчике события ПослеВыгрузки (свойства) ПКО = ОтчетПроизводстваЗаСмену (Документ: Сборка запасов) ПКС = 9 (--> КоличествоМест) Объект = Производство 8 от 19.03.2015 (Документ объект: Производство) СвойствоПриемника = КоличествоМест (Число) КонвертируемоеЗначение = 5 000 (Число) Обработчик = ПослеВыгрузкиСвойства ОписаниеОшибки = Метод объекта не обнаружен (ПКС_ОтчетПроизводстваЗаСмену_Продукция_КоличествоМест_ПослеВыгрузкиСвойства_9_24) ПозицияМодуля = (1) КСообщенияОбОшибках = 57 |
|||
10
iHell
19.03.15
✎
23:26
|
(9) Невидя твоих правил сложно что-то сказать, передача значения должна работать. Попробуй в ПКО "после загрузки" обойти нужные тч.
|
|||
11
welwel
19.03.15
✎
23:26
|
(9) в послевыгрузки объекта и перебрать тч
|
|||
12
welwel
19.03.15
✎
23:27
|
Пардон.. Послезагрузки конечно
|
|||
13
Sun125
19.03.15
✎
23:30
|
(10) https://yadi.sk/d/mddQ14XcfNdJw
Вот скриншот выложил,как примерно выглядит |
|||
14
iHell
19.03.15
✎
23:36
|
(13) Ванга из меня плохая. Если у тебя в ПВД свой алгоритм или в ПКГС коллекцию собираешь, то там должно быть поле "КоличествоМест".
|
|||
15
Sun125
19.03.15
✎
23:38
|
В "ПослеЗагрузки" самого документа есть такой код:
Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда УзелОбменаЗагрузкаДанных = Параметры.УзелОбменаЗагрузкаДанных; Выполнить(Алгоритмы.ОбработатьОтчетПроизводстваЗаСмену ); КонецЕсли; Захожу в этот алгоритм, дописываю: Для каждого ТекСтрока Из Объект.Продукция Цикл ..... ТекСтрока.КоличествоМест = 10; Теперь при обмене не ругается, но КоличествоМест не заполняется указанным значением... |
|||
16
Sun125
19.03.15
✎
23:42
|
Может я неправильно правила создаю?..
1.Захожу в Базу-Источник, в ПланОбмена "ОбменУправлениеНебольшойФирмойБухгалтерия30". 2.Открываю макет "ПравилаОбмена", сохраняю в xml. 3.Загружаю правила в КД, правлю, выгружаю. 4.Меняю содержимое макета. 5. Запускаю базу, захожу в Синхронизацию. 6. Нажимаю "Загрузить правила", выбираю из конфигурации. Пишет: правила обновлены в инф.базу. 7. Меняю документ, чтобы попал в регистрацию. Выполняю синхронизацию. Может что не так делаю? |
|||
17
Sun125
19.03.15
✎
23:46
|
(16) Сомнения возникают, потому что все, что ни меняю типовых правилах, пытаюсь подставить свое значение, при обмене никакой реакции. Но зато как залезу в "Перед выгрузкой",например, программа начинает ругаться.
|
|||
18
welwel
19.03.15
✎
23:49
|
Если Сообщить в интересуемых местах?
|
|||
19
Sun125
19.03.15
✎
23:51
|
Даже удалил текст из Алгоритмы.ОбработатьОтчетПроизводстваЗаСмену.
Там заполняются как раз оставшиеся реквизиты, которых нет в Источнике. Например, счет затрат. При обмене все равно все заполнилось...странно |
|||
20
Sun125
19.03.15
✎
23:55
|
Так нельзя делать?
<ПередВыгрузкой>Сообщить("111111");</ПередВыгрузкой> Опять ругается: Ошибка в обработчике события ПередВыгрузкой (объекта коллекции) |
|||
21
Sun125
20.03.15
✎
00:17
|
Может кто знает, в какую обработку залезть отладчиком, чтобы поймать обработчик?
Хочу узнать, попадает программа в обработчик или нет. В ПКГС ТЧ документа в обработчике "ПередОбработкой" собирается коллекция объектов, в т.ч. и поле "КоличествоМест",которое поменять не получается никак. Но ощущение, что программа туда не попадает, потому что могу "абракадабру" там написать и обмен пройдет. |
|||
22
Stim
20.03.15
✎
00:23
|
а что мешает после загрузки документа обойти табличную часть и проставить 1 в колонку?
|
|||
23
yanikolay
20.03.15
✎
03:56
|
(0)
В данном случае ПередВыгрузкой() текст модуля нужно прописать в выгружаемой конфигурации в обработке "ОбработчикВыгрузкиВ...", а ПослеЗагрузки() в конфигурации загружаемой конфигурации в обработке "ОбработчикЗагрузкиИз..." |
|||
24
VladZ
20.03.15
✎
06:14
|
Выгрузка из 8 в 8? Или из 7.7 в 8?
|
|||
25
VladZ
20.03.15
✎
06:14
|
(24) -> (0)
|
|||
26
hhhh
20.03.15
✎
06:23
|
(16) не надо менять макет. в п.6 просто делаешь загрузить из файла и пишешь файл, который выгрузил из кд.
|
|||
27
SleepyHead
гуру
20.03.15
✎
06:43
|
Очень похоже, что автор выгружает из 1с77, и при этом не выгрузил обработчики и не записал их в модуль формы v77exp
|
|||
28
Sun125
20.03.15
✎
08:31
|
(24) Выгрузка из 8.3 в 8.3
|
|||
29
Sun125
20.03.15
✎
08:33
|
(26) В БП 3.0 программа просит архив загрузить с компа. В нем кроме правил обмена еще правила регистрации и правила обмена корреспондента нужно запаковать. Долго это, проще скопировать в макет в конфигураторе и F5
|
|||
30
Sun125
20.03.15
✎
08:39
|
(26) сейчас другим способом смотрю, через обработку "УниверсальнаяЗагрузкавыгрузка", подставляю туда правила из КД и выгружаю. Вот что заметил в отладчике:
В КД В ПКГС ТЧ ТЧПродукция в обработчике "Перед загрузкой" собирается коллекция объектов: Запрос = Новый Запрос; Запрос.УстановитьПараметр("Документ", Источник.Ссылка); Запрос.УстановитьПараметр("Дата", Источник.Дата); Запрос.УстановитьПараметр("РегВалюта", Параметры.НациональнаяВалюта); Запрос.УстановитьПараметр("УпрВалюта", Параметры.ВалютаУчета); Запрос.Текст = "ВЫБРАТЬ | МАКСИМУМ(СборкаЗапасовПродукция.НомерСтроки) КАК НомерСтроки, | СборкаЗапасовПродукция.Ссылка КАК Документ, | СборкаЗапасовПродукция.Номенклатура, | СборкаЗапасовПродукция.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, | СборкаЗапасовПродукция.Спецификация, | СУММА(СборкаЗапасовПродукция.Количество) КАК КоличествоМест, | СУММА(ВЫБОР | КОГДА ТИПЗНАЧЕНИЯ(СборкаЗапасовПродукция.ЕдиницаИзмерения) = ТИП(Справочник.ЕдиницыИзмерения) | И СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент > 0 | ТОГДА СборкаЗапасовПродукция.Количество * СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент | ИНАЧЕ СборкаЗапасовПродукция.Количество | КОНЕЦ) КАК Количество, | ВЫБОР | КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения | ТОГДА СборкаЗапасовПродукция.Номенклатура.ЕдиницаИзмерения | ИНАЧЕ СборкаЗапасовПродукция.ЕдиницаИзмерения | КОНЕЦ КАК ЕдиницаИзмерения, | ВЫБОР | КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения | ТОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент | ИНАЧЕ 1 | КОНЕЦ КАК Коэффициент |ПОМЕСТИТЬ ВременнаяТаблицаПродукция |ИЗ | Документ.СборкаЗапасов.Продукция КАК СборкаЗапасовПродукция |ГДЕ | СборкаЗапасовПродукция.Ссылка = &Документ | |СГРУППИРОВАТЬ ПО | СборкаЗапасовПродукция.Спецификация, | СборкаЗапасовПродукция.Номенклатура, | СборкаЗапасовПродукция.Ссылка, | ВЫБОР | КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения | ТОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент | ИНАЧЕ 1 | КОНЕЦ, | ВЫБОР | КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения | ТОГДА СборкаЗапасовПродукция.Номенклатура.ЕдиницаИзмерения | ИНАЧЕ СборкаЗапасовПродукция.ЕдиницаИзмерения | КОНЕЦ, | СборкаЗапасовПродукция.Номенклатура.НоменклатурнаяГруппа |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | Запасы.Регистратор, | Запасы.КоррНоменклатура КАК Продукция, | Запасы.КоррСпецификация КАК СпецификацияПродукции, | СУММА(Запасы.Сумма * ВЫБОР | КОГДА &РегВалюта <> &УпрВалюта | ТОГДА ВЫБОР | КОГДА ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) > 0 | И ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) > 0 | И ЕСТЬNULL(КурсыВалюты.Кратность, 0) > 0 | И ЕСТЬNULL(КурсыВалюты.Курс, 0) > 0 | ТОГДА КурсыВалютыЦены.Курс * КурсыВалюты.Кратность / (КурсыВалюты.Курс * КурсыВалютыЦены.Кратность) | ИНАЧЕ 0 | КОНЕЦ | ИНАЧЕ 1 | КОНЕЦ) КАК СуммаЗатрат |ПОМЕСТИТЬ ВременнаяТаблицаЗатраты |ИЗ | РегистрНакопления.Запасы КАК Запасы | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &УпрВалюта) КАК КурсыВалютыЦены | ПО (ИСТИНА) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &РегВалюта) КАК КурсыВалюты | ПО (ИСТИНА) |ГДЕ | Запасы.Регистратор = &Документ | И Запасы.ЗатратыНаВыпуск | И Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) | |СГРУППИРОВАТЬ ПО | Запасы.КоррНоменклатура, | Запасы.КоррСпецификация, | Запасы.Регистратор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяТаблицаПродукция.Номенклатура КАК Номенклатура, | ВременнаяТаблицаПродукция.Спецификация КАК Спецификация, | ВременнаяТаблицаПродукция.КоличествоМест КАК КоличествоМест, | ВременнаяТаблицаПродукция.Количество КАК Количество, | ВЫБОР | КОГДА ВременнаяТаблицаЗатраты.СуммаЗатрат ЕСТЬ NULL | ТОГДА 0 | ИНАЧЕ ВременнаяТаблицаЗатраты.СуммаЗатрат / ВременнаяТаблицаПродукция.Количество | КОНЕЦ КАК ПлановаяСтоимость, | ВременнаяТаблицаЗатраты.СуммаЗатрат КАК СуммаПлановая, | ВременнаяТаблицаПродукция.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, | ВременнаяТаблицаПродукция.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВременнаяТаблицаПродукция.Коэффициент КАК Коэффициент |ИЗ | ВременнаяТаблицаПродукция КАК ВременнаяТаблицаПродукция | ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаЗатраты КАК ВременнаяТаблицаЗатраты | ПО ВременнаяТаблицаПродукция.Документ = ВременнаяТаблицаЗатраты.Регистратор | И ВременнаяТаблицаПродукция.Номенклатура = ВременнаяТаблицаЗатраты.Продукция | И ВременнаяТаблицаПродукция.Спецификация = ВременнаяТаблицаЗатраты.СпецификацияПродукции | |УПОРЯДОЧИТЬ ПО | ВременнаяТаблицаПродукция.НомерСтроки"; Если Источник.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.Разборка Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.СборкаЗапасов.Продукция", "Документ.СборкаЗапасов.Запасы"); КонецЕсли; КоллекцияОбъектов = Запрос.Выполнить().Выгрузить(); Я меняю значения полей выборки: |ВЫБРАТЬ | ВременнаяТаблицаПродукция.Номенклатура КАК Номенклатура, | ВременнаяТаблицаПродукция.Спецификация КАК Спецификация, | 10 КАК КоличествоМест, //!!!!!!! | 20 КАК Количество, | ВЫБОР | КОГДА ВременнаяТаблицаЗатраты.СуммаЗатрат ЕСТЬ NULL | ТОГДА 0 | ИНАЧЕ ВременнаяТаблицаЗатраты.СуммаЗатрат / ВременнаяТаблицаПродукция.Количество | КОНЕЦ КАК ПлановаяСтоимость, | ВременнаяТаблицаЗатраты.СуммаЗатрат КАК СуммаПлановая, | ВременнаяТаблицаПродукция.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа, | ВременнаяТаблицаПродукция.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ВременнаяТаблицаПродукция.Коэффициент КАК Коэффициент |ИЗ | ВременнаяТаблицаПродукция КАК ВременнаяТаблицаПродукция | ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаЗатраты КАК ВременнаяТаблицаЗатраты | ПО ВременнаяТаблицаПродукция.Документ = ВременнаяТаблицаЗатраты.Регистратор | И ВременнаяТаблицаПродукция.Номенклатура = ВременнаяТаблицаЗатраты.Продукция | И ВременнаяТаблицаПродукция.Спецификация = ВременнаяТаблицаЗатраты.СпецификацияПродукции | |УПОРЯДОЧИТЬ ПО | ВременнаяТаблицаПродукция.НомерСтроки"; Если Источник.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.Разборка Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.СборкаЗапасов.Продукция", "Документ.СборкаЗапасов.Запасы"); КонецЕсли; КоллекцияОбъектов = Запрос.Выполнить().Выгрузить(); Смотрю в отладчике: В коллекцию объектов попадают первоначальные значения. Поэтому в итоге при обмена не вижу своих изменений. |
|||
31
Sun125
20.03.15
✎
08:40
|
Как такое может быть? Может, еще откуда-то собирается коллекция объектов?
|
|||
32
VladZ
20.03.15
✎
13:12
|
(31) Что-то не так делаешь.
Отвлекись. Займись чем-нибудь другим минут на пятнадцать. Вернешься к этой задаче и быстро найдешь свой косяк. :) |
|||
33
Sun125
20.03.15
✎
22:57
|
(32) Понял по отладчику,откуда собирается КоллекцияОбъектов.
Оказалось, есть ПравилоВыгрузкиДанных. Там в процедуре "ПереОбработкой" документа написано "ВыгрузитьПоПравилу(Объект,,,, "ПеремещениеПродукции");" И обработчики брались из другого правила. И коллекция собиралась в другом месте. Исправил коллекцию объектов в том месте, где она собирается. Теперь другая проблема: Когда я выгружаю данные в xml через "УниверсальныйОбменДаннымиXML" и смотрю файл, там все правильно, я вижу свои изменения. Но когда я провожу Синхронизацию, то в файле выгрузки, я опять не вижу своих изменений. |
|||
34
Sun125
20.03.15
✎
23:01
|
В чем может быть ошибка?
|
|||
35
Sun125
20.03.15
✎
23:05
|
Может, еще какие-то правила подключаются при синхронизации?
В плане обмена в макетах есть еще "Правила корреспонденции" и "Правила регистрации" |
|||
36
Sun125
20.03.15
✎
23:08
|
в обработке "УниверсальныйОбменДанныхXML" я хоть могу отладчиком посмотреть, что выгружается и почему. А при синхронизации как отследить?
|
|||
37
Sun125
20.03.15
✎
23:28
|
И еще заметил такое:
В обработчике "Перед выгрузкой" реквизита ТЧ пишу: Значение=999. Выгружаю через УниверсальныйОбмен = все ок. В Файле значение=999. Выгружаю через ПланОбмена - программа ругается. |
|||
38
Sun125
20.03.15
✎
23:44
|
up
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |