Консультация № 82225
12.04.2007, 13:21
0.00 руб.
0 1 1
Хочу сделать выгрузку справочника Товары с выбор выгрузки только по группе в текстовый файл и соответственно загрузки в справочник Товары в другой полностью эдентичной конфигурации.
Надо что бы если по коду нашли группу/элемент мправочника - если такая группа /элемент присутствуют просто перезаписать значения из файла.
Если такая группа/элемент во второй базе не найдены, то соответственно создать группу и добавить в нее новые элементы.

В приложении даны вырезки обработки выгрузки и загрузки подскажите где что не так.

Спасибо.

Приложение:
Процедура Выгрузить() Текст=СоздатьОбъект("Текст");Список=СоздатьОбъект("СписокЗначений");Спр=СоздатьОбъект("Справочник.Товары"); Если ВыбГруппа.Выбран()=1 Тогда // проверяем если что-то в нашем реквизите формы Если ВыбГруппа.ЭтоГруппа()=1 Тогда // проверяем группа ли это... Спр.ИспользоватьРодителя(ВыбГруппа); // в реквизите выбрана группа выбираем товары только из нее Спр.ВключатьПодчиненные(1); //это чтобы обработка заходила в подгруппы если есть КонецЕсли; КонецЕсли;Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Список.ДобавитьЗначение(Спр.Код); Список.ДобавитьЗначение(Спр.Наименование); Список.ДобавитьЗначение(Спр.Прих_Цена); Текст.ДобавитьСтроку(Список.ВСтрокуСРазделителями()); Список.УдалитьВсе(); КонецЦикла; Текст.Записать("C:111555.txt");КонецПроцедурыПроцедура Загрузить() Спр=СоздатьОбъект("Справочник.Товары"); Текст=СоздатьОбъект("Текст"); Список=СоздатьОбъект("СписокЗначений"); Текст.Открыть("C:111555.txt"); Для Ном=1 По Текст.КоличествоСтрок() Цикл Стр=Текст.ПолучитьСтроку(Ном); Список.ИзСтрокиСРазделителями(Стр); Если Спр.НайтиПоКоду(Список.ПолучитьЗначение(1))=1 Тогда Если Спр.ЭтоГруппа()=1 Тогда Спр.Наименование=Список.ПолучитьЗначение(2); Сообщить("ЕстьГруппа"); Иначе Спр.Наименование=Список.ПолучитьЗначение(2); Сообщить("ЕстьЭлемент"); КонецЕсли; Иначе Если Спр.ЭтоГруппа()=1 Тогда Спр.НоваяГруппа(); Спр.Наименование=Список.ПолучитьЗначение(2); Сообщить("Новая Группа"); Иначе Спр.Новый(); Спр.Наименование=Список.ПолучитьЗначение(2); Сообщить("Новый Элемент"); КонецЕсли; КонецЕсли; КонецЦикла;Сообщить("Конец");КонецПроцедуры

Обсуждение

Неизвестный
12.04.2007, 13:49
общий
это ответ
Здравствуйте, Аржаник Антон Николаевич!
Вроде так

Приложение:
Процедура Выгрузить() Текст=СоздатьОбъект("Текст");Список=СоздатьОбъект("СписокЗначений");Спр=СоздатьОбъект("Справочник.Товары"); Если ВыбГруппа.Выбран()=1 Тогда // проверяем если что-то в нашем реквизите формы Если ВыбГруппа.ЭтоГруппа()=1 Тогда // проверяем группа ли это... Спр.ИспользоватьРодителя(ВыбГруппа); // в реквизите выбрана группа выбираем товары только из нее // то что ниже лишнее // Спр.ВключатьПодчиненные(1); //это чтобы обработка заходила в подгруппы если есть КонецЕсли; КонецЕсли;Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Список.ДобавитьЗначение(Спр.Код); Список.ДобавитьЗначение(Спр.Наименование); Список.ДобавитьЗначение(Спр.Прих_Цена); Список.ДобавитьЗначение(?(Спр.ЭтоГруппа()=1,"Г","Э"); // группа или элемент Список.ДобавитьЗначение(Спр.Родитель.код); // для востановления подчинености Текст.ДобавитьСтроку(Список.ВСтрокуСРазделителями()); Список.УдалитьВсе(); КонецЦикла; Текст.Записать("C:\111555.txt");КонецПроцедурыПроцедура Загрузить() Спр=СоздатьОбъект("Справочник.Товары"); Род=СоздатьОбъект("Справочник.Товары"); Текст=СоздатьОбъект("Текст"); Список=СоздатьОбъект("СписокЗначений"); Текст.Открыть("C:\111555.txt"); Для Ном=1 По Текст.КоличествоСтрок() Цикл Стр=Текст.ПолучитьСтроку(Ном); Список.ИзСтрокиСРазделителями(Стр); Спр.ИспользоватьРодителя(0); Род.ИспользоватьРодителя(0); Если Спр.НайтиПоКоду(Список.ПолучитьЗначение(1))=1 Тогда Если Спр.ЭтоГруппа()=1 Тогда Спр.Наименование=Список.ПолучитьЗначение(2); Сообщить("ЕстьГруппа"); Иначе Спр.Наименование=Список.ПолучитьЗначение(2); Сообщить("ЕстьЭлемент"); КонецЕсли; Иначе Если Список.ПолучитьЗначение(4)="Г" Тогда Спр.НоваяГруппа(); Спр.Наименование=Список.ПолучитьЗначение(2); Род.НайтиПокоду(Список.ПолучитьЗначение(5)); Спр.Родитель(Род.ТекущийЭлемент()); Спр.Записать(); Сообщить("Новая Группа"); Иначе Спр.Новый(); Спр.Наименование=Список.ПолучитьЗначение(2); Спр.Прих_Цена=Число(Список.ПолучитьЗначение(3)); Род.НайтиПокоду(Список.ПолучитьЗначение(5)); Спр.Родитель(Род.ТекущийЭлемент()); Спр.Записать(); Сообщить("Новый Элемент"); КонецЕсли; КонецЕсли; КонецЦикла;Сообщить("Конец");КонецПроцедуры
Форма ответа