Имя: Пароль:
1C
1С v8
Конвертация данных: выгрузка ТЧ
0 Sun125
 
19.03.15
13:54
Загрузил в КД типовые правила обмена Управление небольшой фирмой-Бухгалтерия.
В документе-Источнике и документе-Приемнике есть ТЧ Продукция.

Нужно в документ-Приемник выгрузить не все строки ТЧ, а только определенные,удовлетворяющие условию.

В типовых правилах для ТЧ в обработчике "Перед обработкой" такой код:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Документ", Источник.Ссылка);
Запрос.УстановитьПараметр("Дата", Источник.Дата);
Запрос.УстановитьПараметр("РегВалюта", Параметры.НациональнаяВалюта);
Запрос.УстановитьПараметр("УпрВалюта", Параметры.ВалютаУчета);
Запрос.Текст = "ВЫБРАТЬ
                |    МАКСИМУМ(СборкаЗапасовПродукция.НомерСтроки) КАК НомерСтроки,
                |    СборкаЗапасовПродукция.Ссылка КАК Документ,
                |    СборкаЗапасовПродукция.Номенклатура,
                |    СборкаЗапасовПродукция.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
                |    СборкаЗапасовПродукция.Спецификация,
                |    СУММА(СборкаЗапасовПродукция.Количество) КАК КоличествоМест,
                |    СУММА(ВЫБОР
                |            КОГДА ТИПЗНАЧЕНИЯ(СборкаЗапасовПродукция.ЕдиницаИзмерения) = ТИП(Справочник.ЕдиницыИзмерения)
                |                    И СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент > 0
                |                ТОГДА СборкаЗапасовПродукция.Количество * СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент
                |            ИНАЧЕ СборкаЗапасовПродукция.Количество
                |        КОНЕЦ) КАК Количество,
                |    ВЫБОР
                |        КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
                |            ТОГДА СборкаЗапасовПродукция.Номенклатура.ЕдиницаИзмерения
                |        ИНАЧЕ СборкаЗапасовПродукция.ЕдиницаИзмерения
                |    КОНЕЦ КАК ЕдиницаИзмерения,
                |    ВЫБОР
                |        КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
                |            ТОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент
                |        ИНАЧЕ 1
                |    КОНЕЦ КАК Коэффициент
                |ПОМЕСТИТЬ ВременнаяТаблицаПродукция
                |ИЗ
                |    Документ.СборкаЗапасов.Продукция КАК СборкаЗапасовПродукция
                |ГДЕ
                |    СборкаЗапасовПродукция.Ссылка = &Документ
                |
                |СГРУППИРОВАТЬ ПО
                |    СборкаЗапасовПродукция.Спецификация,
                |    СборкаЗапасовПродукция.Номенклатура,
                |    СборкаЗапасовПродукция.Ссылка,
                |    ВЫБОР
                |        КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
                |            ТОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения.Коэффициент
                |        ИНАЧЕ 1
                |    КОНЕЦ,
                |    ВЫБОР
                |        КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
                |            ТОГДА СборкаЗапасовПродукция.Номенклатура.ЕдиницаИзмерения
                |        ИНАЧЕ СборкаЗапасовПродукция.ЕдиницаИзмерения
                |    КОНЕЦ,
                |    СборкаЗапасовПродукция.Номенклатура.НоменклатурнаяГруппа
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ РАЗРЕШЕННЫЕ
                |    Запасы.Регистратор,
                |    Запасы.КоррНоменклатура КАК Продукция,
                |    Запасы.КоррСпецификация КАК СпецификацияПродукции,
                |    СУММА(Запасы.Сумма * ВЫБОР
                |            КОГДА &РегВалюта <> &УпрВалюта
                |                ТОГДА ВЫБОР
                |                        КОГДА ЕСТЬNULL(КурсыВалютыЦены.Кратность, 0) > 0
                |                                И ЕСТЬNULL(КурсыВалютыЦены.Курс, 0) > 0
                |                                И ЕСТЬNULL(КурсыВалюты.Кратность, 0) > 0
                |                                И ЕСТЬNULL(КурсыВалюты.Курс, 0) > 0
                |                            ТОГДА КурсыВалютыЦены.Курс * КурсыВалюты.Кратность / (КурсыВалюты.Курс * КурсыВалютыЦены.Кратность)
                |                        ИНАЧЕ 0
                |                    КОНЕЦ
                |            ИНАЧЕ 1
                |        КОНЕЦ) КАК СуммаЗатрат
                |ПОМЕСТИТЬ ВременнаяТаблицаЗатраты
                |ИЗ
                |    РегистрНакопления.Запасы КАК Запасы
                |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &УпрВалюта) КАК КурсыВалютыЦены
                |        ПО (ИСТИНА)
                |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &РегВалюта) КАК КурсыВалюты
                |        ПО (ИСТИНА)
                |ГДЕ
                |    Запасы.Регистратор = &Документ
                |    И Запасы.ЗатратыНаВыпуск
                |    И Запасы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
                |
                |СГРУППИРОВАТЬ ПО
                |    Запасы.КоррНоменклатура,
                |    Запасы.КоррСпецификация,
                |    Запасы.Регистратор
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |    ВременнаяТаблицаПродукция.Номенклатура КАК Номенклатура,
                |    ВременнаяТаблицаПродукция.Спецификация КАК Спецификация,
                |    ВременнаяТаблицаПродукция.КоличествоМест КАК КоличествоМест,
                |    ВременнаяТаблицаПродукция.Количество КАК Количество,
                |    ВЫБОР
                |        КОГДА ВременнаяТаблицаЗатраты.СуммаЗатрат ЕСТЬ NULL
                |            ТОГДА 0
                |        ИНАЧЕ ВременнаяТаблицаЗатраты.СуммаЗатрат / ВременнаяТаблицаПродукция.Количество
                |    КОНЕЦ КАК ПлановаяСтоимость,
                |    ВременнаяТаблицаЗатраты.СуммаЗатрат КАК СуммаПлановая,
                |    ВременнаяТаблицаПродукция.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
                |    ВременнаяТаблицаПродукция.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                |    ВременнаяТаблицаПродукция.Коэффициент КАК Коэффициент
                |ИЗ
                |    ВременнаяТаблицаПродукция КАК ВременнаяТаблицаПродукция
                |        ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаЗатраты КАК ВременнаяТаблицаЗатраты
                |        ПО ВременнаяТаблицаПродукция.Документ = ВременнаяТаблицаЗатраты.Регистратор
                |            И ВременнаяТаблицаПродукция.Номенклатура = ВременнаяТаблицаЗатраты.Продукция
                |            И ВременнаяТаблицаПродукция.Спецификация = ВременнаяТаблицаЗатраты.СпецификацияПродукции
                |
                |УПОРЯДОЧИТЬ ПО
                |    ВременнаяТаблицаПродукция.НомерСтроки";

Если Источник.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.Разборка Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.СборкаЗапасов.Продукция", "Документ.СборкаЗапасов.Запасы");
КонецЕсли;

КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();

Меняю значения полей выборки запроса на цифры из головы,
Вставляю такой код:

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Документ", Источник.Ссылка);
Запрос.УстановитьПараметр("Дата", Источник.Дата);
Запрос.УстановитьПараметр("РегВалюта", Параметры.НациональнаяВалюта);
Запрос.УстановитьПараметр("УпрВалюта", Параметры.ВалютаУчета);
Запрос.Текст = "ВЫБРАТЬ
                |    МАКСИМУМ(СборкаЗапасовПродукция.НомерСтроки) КАК НомерСтроки,
                |    СборкаЗапасовПродукция.Ссылка КАК Документ,
                |    СборкаЗапасовПродукция.Номенклатура,
                |    СборкаЗапасовПродукция.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
                |    СборкаЗапасовПродукция.Спецификация,
                |    СУММА(10) КАК КоличествоМест,
                |    СУММА(20) КАК Количество,
                |    ВЫБОР
                |        КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
                |            ТОГДА СборкаЗапасовПродукция.Номенклатура.ЕдиницаИзмерения
                |        ИНАЧЕ СборкаЗапасовПродукция.ЕдиницаИзмерения
                |    КОНЕЦ КАК ЕдиницаИзмерения,
                |    30 КАК Коэффициент
                |ПОМЕСТИТЬ ВременнаяТаблицаПродукция
                |ИЗ
                |    Документ.СборкаЗапасов.Продукция КАК СборкаЗапасовПродукция
                |ГДЕ
                |    СборкаЗапасовПродукция.Ссылка = &Документ
                |
                |СГРУППИРОВАТЬ ПО
                |    СборкаЗапасовПродукция.Спецификация,
                |    СборкаЗапасовПродукция.Номенклатура,
                |    СборкаЗапасовПродукция.Ссылка,
                |    ВЫБОР
                |        КОГДА СборкаЗапасовПродукция.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
                |            ТОГДА СборкаЗапасовПродукция.Номенклатура.ЕдиницаИзмерения
                |        ИНАЧЕ СборкаЗапасовПродукция.ЕдиницаИзмерения
                |    КОНЕЦ,
                |    СборкаЗапасовПродукция.Номенклатура.НоменклатурнаяГруппа
                |;
                |
                |////////////////////////////////////////////////////////////////////////////////
                |
                |////////////////////////////////////////////////////////////////////////////////
                |ВЫБРАТЬ
                |    ВременнаяТаблицаПродукция.Номенклатура КАК Номенклатура,
                |    ВременнаяТаблицаПродукция.Спецификация КАК Спецификация,
                |    10 КАК КоличествоМест,
                |    20 КАК Количество,
                |    40 КАК ПлановаяСтоимость,
                |    50 КАК СуммаПлановая,
                |    ВременнаяТаблицаПродукция.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
                |    ВременнаяТаблицаПродукция.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                |    60 КАК Коэффициент
                |ИЗ
                |    ВременнаяТаблицаПродукция КАК ВременнаяТаблицаПродукция
                |
                |УПОРЯДОЧИТЬ ПО
                |    ВременнаяТаблицаПродукция.НомерСтроки";

Если Источник.ВидОперации = Перечисления.ВидыОперацийСборкаЗапасов.Разборка Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.СборкаЗапасов.Продукция", "Документ.СборкаЗапасов.Запасы");
КонецЕсли;

КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();

В результате после обмена все равно значения полей как в источнике.
Если в запросе прописать условие строк ТЧ, то тоже никакой реакции, все равно вся ТЧ выгружается.
Помогите,пожалуйста,разобраться, что не так делаю?
1 Sun125
 
19.03.15
14:07
Вставляю такой код:
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Документ", Источник.Ссылка);
Запрос.УстановитьПараметр("Дата", Источник.Дата);
Запрос.УстановитьПараметр("РегВалюта", Параметры.НациональнаяВалюта);
Запрос.УстановитьПараметр("УпрВалюта", Параметры.ВалютаУчета);
Запрос.Текст = "ВЫБРАТЬ
                |    0 КАК Номенклатура,
                |    0 КАК Спецификация,
                |    10 КАК КоличествоМест,
                |    20 КАК Количество,
                |    40 КАК ПлановаяСтоимость,
                |    50 КАК СуммаПлановая,
                |    0 КАК НоменклатурнаяГруппа,
                |    0 КАК ЕдиницаИзмерения,
                |    60 КАК Коэффициент";



КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();

Все равно ТЧ выгружается как полложено. Где это может быть прописано?
2 Sun125
 
19.03.15
14:33
Опытным путем пришел к тому, что любой текст (даже такой "ыавапвп"), помещенный в обработчик "Перед обработкой" приводит к нормальной конвертации ТЧ, один в один.
Стоит текст убрать, при обмене программа ругается:
Ошибка получения значения свойства подчиненного объекта (по имени свойства приемника)
    ПКО                    =  ОтчетПроизводстваЗаСмену  (Документ: Сборка запасов)
    ПКС                    =  9  ( --> КоличествоМест)
    Объект                 =  Производство 2 от 11.03.2015   (Документ объект: Производство)
    СвойствоПриемника      =  КоличествоМест  (Число)
    ОписаниеОшибки         =  Поле объекта не обнаружено (КоличествоМест)
    ПозицияМодуля          =  Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(10284)
    КСообщенияОбОшибках    =  17

Как такое может быть?
3 Sun125
 
19.03.15
14:52
Вот скриншот настроек.
https://yadi.sk/i/DLzwDQlCfMvEf
Как при таких настройках может нормально выгружаться ТЧ?
4 Sun125
 
19.03.15
15:25
up
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.