8.х Копирование ТЧ документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Victor031, 25 янв 2016.

  1. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток, уважаемые форумчане! Делаю обработку, которая копирует строки табличной части из одного документа в другой. Все это делается в обычном приложении. Не пойму, где допустил ошибку? подскажите пожалуйста, заранее спасибо!

    Процедура КнопкаВыполнитьНажатие(Кнопка)
    ДокументРодитель = ЭлементыФормы.ПолеВвода1.Значение.Ссылка.ПолучитьОбъект();
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДокументРодитель", ДокументРодитель);
    Запрос.Текст =
    "ВЫБРАТЬ
    | уатОприходованиеТоваров.Товары.(
    | Ссылка,
    | НомерСтроки,
    | Номенклатура,
    | ЕдиницаИзмерения,
    | Количество,
    | Коэффициент,
    | Цена,
    | Сумма
    | )
    |ИЗ
    | Документ.уатОприходованиеТоваров КАК уатОприходованиеТоваров
    |ГДЕ
    | уатОприходованиеТоваров.Ссылка = &ДокументРодитель";

    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    ДокументПриемник = ЭлементыФормы.ПолеВвода2.Значение.Ссылка.ПолучитьОбъект();

    Пока РезультатЗапроса.Следующий() Цикл

    СтрокаТабличнойЧасти = ДокументПриемник.Товары.Добавить();
    СтрокаТабличнойЧасти.Номенклатура = РезультатЗапроса.Номенклатура;
    СтрокаТабличнойЧасти.ЕдиницаИзмерения = РезультатЗапроса.ЕдиницаИзмерения;
    СтрокаТабличнойЧасти.Количество = РезультатЗапроса.Количество;
    СтрокаТабличнойЧасти.Коэффициент = РезультатЗАпроса.Коэффициент;
    СтрокаТабличнойЧасти.Цена = РезультатЗапроса.Цена;
    СтрокаТабличнойЧасти.Сумма = РезультатЗапроса.Сумма;
    //СчетаУчета = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Организация, СтрокаТЧ.Номенклатура, Склад);

    КонецЦикла;


    КонецПроцедуры
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Выбирать данные нужно напрямую из ТЧ.
  3. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
  4. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Изменил на вот такой вариант:
    Процедура КнопкаВыполнитьНажатие(Кнопка)


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

    Но все равно не чего не переносится почему то
    Последнее редактирование модератором: 25 янв 2016
  5. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    А объект-то точно получаете ? Отладчик что говорит ?
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Да все ок, просто после изменения объекта записать его все же необходимо, а то 1С не умеет догадываться :)
  7. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Если честно не знаю, что он говорит, потому что не имею права обновить конфигурацию, и стыдно это признать, не знаю как отлаживать внешние обработки( ставлю точку останова, но не чего не происходит). Так в чем проблема, подскажите пожалуйста? Может и в правду объект не получаю просто? или же какая ошибка в запросе?
  8. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Ну посмотрите ваш запрос в консоли, передайте туда параметр - ссылку на ваш документ.
    --- Объединение сообщений, 25 янв 2016 ---
    И действительно, как вы поняли, что ничего не копируется? Может вчерашний день ищите?
    Как написал nomad_irk
    ДокументПриемник.Записать()
    не пробовали?
  9. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    ну как понял....в конфигурации через меню файл открыть, открыл внешнюю эту обработку, заполнил документ приемник и документ родитель, нажал на кнопку выполнить. Проверил документ приемник, и там пусто. Щас проверю в консоли
  10. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Ну т.е документ после заполнения не записали и он остался таким, каким был до ваших заполнений
  11. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    да, все верно
    --- Объединение сообщений, 25 янв 2016 ---
    проверил в консоле. Запрос составлен верно. Выбирает нужные данные из моего документа
    Последнее редактирование: 25 янв 2016
  12. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Ну так напишите после вашего "КонецЦикла"
    ДокументПриемник.Записать();
  13. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Добавил строчку, как вы посоветовали, что бы документ записывался, но все равно результат тот же. МНе почему то кажется и в правду, что не получен объект просто
    --- Объединение сообщений, 25 янв 2016 ---
    получилось все таки прикрутить эту обработку в систему ( 8.2 через дополнительные внешние обработки для табличной части). Но теперь вот такая ошибка : Метод объекта не обнаружен (Инициализировать)
    --- Объединение сообщений, 25 янв 2016 ---
    а если подключать просто как внешнюю обработку, то вообще ничего не происходит( ни ошибок, ни заполнения табличной части)
    Последнее редактирование: 25 янв 2016
  14. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Обработка по прежнему не работает, но решил чуть изменить запрос, что бы у нас копировалась не только табличная часть, но и реквизиты. Сделал два пакета запросов. В одном пакете копируется табличная часть, а в другом реквизиты:

    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
     
       ДокументРодитель = ЭлементыФормы.ПолеВвода1.Значение.ПолучитьОбъект();
     
       Запрос = Новый Запрос;
       Запрос.УстановитьПараметр("ДокументРодитель", ДокументРодитель);
     
       Запрос.Текст =
     
        "ВЫБРАТЬ
        |   уатОприходованиеТоваровТовары.Ссылка,
        |   уатОприходованиеТоваровТовары.НомерСтроки,
        |   уатОприходованиеТоваровТовары.Номенклатура,
        |   уатОприходованиеТоваровТовары.ЕдиницаИзмерения,
        |   уатОприходованиеТоваровТовары.Количество,
        |   уатОприходованиеТоваровТовары.Коэффициент,
        |   уатОприходованиеТоваровТовары.Цена,
        |   уатОприходованиеТоваровТовары.Сумма
        |ИЗ
        |   Документ.уатОприходованиеТоваров.Товары КАК уатОприходованиеТоваровТовары
        |ГДЕ
        |   уатОприходованиеТоваровТовары.Ссылка = &ДокументРодитель
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   уатОприходованиеТоваров.Организация,
        |   уатОприходованиеТоваров.ТипЦен,
        |   уатОприходованиеТоваров.СуммаДокумента,
        |   уатОприходованиеТоваров.Основание,
        |   уатОприходованиеТоваров.Комментарий,
        |   уатОприходованиеТоваров.ИнвентаризацияТоваровНаСкладе,
        |   уатОприходованиеТоваров.Ответственный
        |ИЗ
        |   Документ.уатОприходованиеТоваров КАК уатОприходованиеТоваров
        |ГДЕ
        |   уатОприходованиеТоваров.Ссылка = &ДокументРодитель";
      
        РезультатЗапроса = Запрос.ВыполнитьПакет().Выбрать();
     
       ДокументПриемник = ЭлементыФормы.ПолеВвода2.Значение.ПолучитьОбъект();
    
     
       Пока РезультатЗапроса.Следующий() Цикл
       
         СтрокаТабличнойЧасти = ДокументПриемник.Товары.Добавить();
         СтрокаТабличнойЧасти.Номенклатура = РезультатЗапроса.Номенклатура;
         СтрокаТабличнойЧасти.ЕдиницаИзмерения = РезультатЗапроса.ЕдиницаИзмерения;
         СтрокаТабличнойЧасти.Количество = РезультатЗапроса.Количество;
         СтрокаТабличнойЧасти.Коэффициент = РезультатЗАпроса.Коэффициент;
         СтрокаТабличнойЧасти.Цена = РезультатЗапроса.Цена;
         СтрокаТабличнойЧасти.Сумма = РезультатЗапроса.Сумма;
          ДокументПриемник.Склад = РезультатЗапроса.Склад;
          ДокументПриемник.Организация = РезультатЗапроса.Организаци;
          ДокументПриемник.ТипЦен = РезультатЗапроса.ТипЦен;
          ДокументПриемник.СуммаДокументаа = РезультатЗапроса.СуммаДокумента;
          ДокументПриемник.Основание = РезультатЗапроса.Основание;
          ДОкументПриемник.Ответственный = РезультатЗапроса.Ответственный;
          ДокументПриемник.Комментарий = РезультатЗапроса.Комментарий;
       
       КонецЦикла;
        ДокументРодитель.Записать();
    КонецПроцедуры
    Подскажите, правильно сделал, или что то не так? Проверить не могу, так как обработка сама не работает). Заранее спасибо!
  15. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Отладчик на эту строчку:
    Код:
    ДокументПриемник = ЭлементыФормы.ПолеВвода2.Значение.ПолучитьОбъект();
    И смотрите, что у вас в ДокументПриемник.
    И впредь оформляйте код тегами CODE, а не жирным шрифтом :)
  16. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Тогда уж выкладывайте файл вашей обработки
  17. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Я просто не пойму, как отлаживать внешнюю обработку. Добавлять её в конфигураторе не имею права.
    По поводу шрифта спасибо за замечание, буду внимательней
    --- Объединение сообщений, 26 янв 2016 ---

    Вот скидываю обработку

    Вложения:

  18. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Ну так тут модуль чистый. Если не ошибаюсь, помимо вашего кода на форме нужна еще
    "Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт"
    В которой вы описываете заполнение.
    Можете тут открыть вашу форму, выбрать на ней нужные параметры, и при ее закрытии передать результат (таблицу с товарами) в модуль
    А в самом модуле заполнять таблицу документа - приемника
  19. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    А еще кнопка выполнить у вас ничего не выполняет. Процедура " КнопкаВыполнитьНажатие" к ней не привязана
    http://joxi.ru/V2VLP0wu08jkEr?d=1
  20. TopicStarter Overlay
    Victor031
    Offline

    Victor031

    Регистрация:
    25 янв 2016
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    упс, точно спасибо большое. Функция нажатия то была, но она не выла привязана к кнопке. Привязал в кнопке, и теперь вот такую ошибку мне показало:

    Код:
    {Форма.Форма.Форма(244)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
        РезультатЗапроса = Запрос.ВыполнитьПакет().Выбрать();
    по причине:
    {(13, 39)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
     неограниченной длины и поля несовместимых типов.
    уатОприходованиеТоваровТовары.Ссылка <<?>>= &ДокументРодитель
    
    --- Объединение сообщений, 26 янв 2016 ---
    подскажите почему параметры не правильные? ведь вроде по логике ссылка на документ равняется параметру документРодитель, заранее спасибо!
    Последнее редактирование: 26 янв 2016

Поделиться этой страницей