Имя: Пароль:
1C
1С v8
Конвертация данных: выгрузка ТЧ документа
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
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn