8.х Обработка для справочника

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Korolev, 17 июл 2010.

  1. TopicStarter Overlay
    Korolev
    Offline

    Korolev Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    Всем доброго утра!
    Может кому встречалась подобная обработка.
    Есть справочник. В нем есть папки (например папка1 и папка2).
    В этих папках одинаковые элементы, которые различаются кодом (т.е. смело можно сравнивать по наименованию).
    Задача в том, что в папке1 есть элемент с заполненным поле1, а в папке2 есть этот же элемент, но поле1 у него не заполнено.

    Так вот задача в том, чтобы на основе папки1 заполнить это поле у элементов из папки2.

    Может кто видел подобную обработку?

    С другой стороны - ее писать не так долго, просто мне пока тяжеловаты подобные вещи :)

    Пользователю предлагается выбирать папку-источник и папку-приемник одного и того же справочника
    Как я понимаю, у обработки будет алгоритм такой:
    1. Делаю запрос к справочнику, в котором вытягиваю элементы и необходимый для заполнения реквизит.
    2. Применяю этот запрос к источнику (т.е. папка1)
    3. Делаю ТЗ с данными (наименование|реквизит)
    4. Применяю этот запрос к приемнику (т.е. папка2)
    5. Ну и пока выборка, передаю в реквизит элемента данные из ТЗ.
  2. TopicStarter Overlay
    Korolev
    Offline

    Korolev Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    Вот что получилось:
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
    |	Товары.Родитель КАК Родитель,
    |	Товары.Наименование КАК Наименование,
    |	Товары.Номенклатура КАК Номенклатура,
    |	Товары.КоэфПересчета КАК КоэфПересчета,
    |	Товары.Номенклатура.Ссылка КАК НСсылка
    |ИЗ
    |	Справочник.Товары КАК Товары
    |ГДЕ
    |	Товары.Родитель = &Папка";
    Запрос.УстановитьПараметр("Папка",Источник);
    ТЗ = Запрос.Выполнить().Выбрать();		
    
    ЗапросПриемник = Новый Запрос;
    ЗапросПриемник.Текст =  "ВЫБРАТЬ
    |	Товары.Родитель КАК Родитель,
    |	Товары.Наименование КАК Наименование,
    |	Товары.Номенклатура КАК Номенклатура,
    |	Товары.Ссылка КАК Ссылка,
    |	Товары.Номенклатура.Ссылка КАК НСсылка,
    |	Товары.КоэфПересчета КАК КоэфПересчета
    |ИЗ
    |	Справочник.Товары КАК Товары
    |ГДЕ
    |	Товары.Родитель = &Папка
    |	И Товары.Номенклатура.Ссылка ЕСТЬ NULL ";
    ЗапросПриемник.УстановитьПараметр("Папка",Приемник);
    Выборка = ЗапросПриемник.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
    Объект = Выборка.Ссылка.ПолучитьОбъект();
    Пока ТЗ.Наименование <> Объект.Наименование Цикл
    ТЗ.Следующий()
    КонецЦикла;
    
    Объект.Номенклатура = ТЗ.Номенклатура;
    Сообщить(Объект.Наименование);
    ТЗ = Запрос.Выполнить().Выбрать();	
    КонецЦикла;
    
    КонецПроцедуры
    
    
    
    Только вот проблема с записью.
    Когда смотрю через отладчик, то в строке
    Код:
    Объект.Номенклатура = ТЗ.Номенклатура;
    
    из ТЗ.Номенклатура передается информация в Объект.Номенклатура, но в сам справочник она не добавляется.
    Пробовал так:
    Код:
    Объект.Номенклатура.Ссылка = ТЗ.Номенклатура.Ссылка;
    
    то вылетает ошибка
    Как можно сделать поле доступным? Как я понимаю, нужно снова получить объект, но делаю так:
    Код:
    ОбъектН = Выборка.Номенклатура.Ссылка.ПолучитьОбъект();
    
    
    Вылетает:
  3. BVB_berserk
    Offline

    BVB_berserk Опытный в 1С

    Регистрация:
    30 янв 2009
    Сообщения:
    162
    Симпатии:
    0
    Баллы:
    26
    Объект.Записать() добавь в конце цикла ;)

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