Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перенумерация по xls
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
mapk
Добрый вечер, необходимо изменить коды товаров в справочнике. Его перенумеровали и теперь коды не соответствуют товару выгруженному на сайт. Позиций 5к+.
есть xls в котором проставленно соответствие наименования, оригинального кода и нового кода.
Параметры из файла я считываю, а потом не знаю как изменить значение кода у позици. Ибо в этом я нуб
Буду весьма благодарен за помощь.
kosalex
Цитата(mapk @ 20.04.15, 21:58) необходимо зарегистрироваться для просмотра ссылки
Добрый вечер, необходимо изменить коды товаров в справочнике. Его перенумеровали и теперь коды не соответствуют товару выгруженному на сайт. Позиций 5к+.
есть xls в котором проставленно соответствие наименования, оригинального кода и нового кода.
Параметры из файла я считываю, а потом не знаю как изменить значение кода у позици. Ибо в этом я нуб
Буду весьма благодарен за помощь.


Ищите по коду, получаете объект, и меняете код.
//Чтение файла.....................
//.........
//.......................
//.....................


ПоискНоменклатура = Справочники.Номенклатура.НайтиПоКоду("ВашКодИзФайла");

Если НЕ ПоискНоменклатура.Пустая() Тогда
обНоменклатура = ПоискНоменклатура.ПолучитьОбъект();
обНоменклатура.Код = //Нужный вам Код
обНоменклатура.Записать();
КонецЕсли;
miha74
//*******************************************
Процедура Сформировать()
    Перем СпрТМЦ;
    Перем тзДанныеИзЭксель;  
    
    тзДанныеИзЭксель = СоздатьОбъект("ТаблицаЗначений");
    тзДанныеИзЭксель.НоваяКолонка("Код","Число");
    тзДанныеИзЭксель.НоваяКолонка("Наименование","Строка");
    
    //здесь какой-то импорт из док.Эксель, заполняем тз данными
    
    СпрТМЦ = СоздатьОбъект("Справочник.ТМЦ");
    
    //перебираем тз , в цикле ищем ТМЦ в справочнике по наимен.(должно совпадать)
    тзДанныеИзЭксель.ВыбратьСтроки();
    Пока тзДанныеИзЭксель.ПолучитьСтроку() = 1 Цикл
        Если СпрТМЦ.НайтиПоНаименованию(СокрЛП(тзДанныеИзЭксель.Наименование),0,1) = 1 Тогда
            СпрТМЦ.Код = тзДанныеИзЭксель.Код;
            СпрТМЦ.Записать();
        Иначе
            // не найдено такое наименование (где-то несовпадение)
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Еще надо что-то придумать про уникальность кодов, ибо если в базе уже есть какой-либо код у другого ТМЦ - не даст назначить такой же.
mister-x
Цитата(kosalex @ 22.04.15, 8:11) необходимо зарегистрироваться для просмотра ссылки
Если НЕ ПоискНоменклатура.Пустая() Тогда обНоменклатура = ПоискНоменклатура.ПолучитьОбъект();

в 7.7 таких методів немає wink.gif
Домовик
в вопросе было указано, что есть старый код и новый. можно искать и по коду.
если таблицу значений упорядочить по старому коду. А справочник обойти перебором.( для условия из таблицы значений брать первую строку, и при совпадении с кодом элемента удалять), то будет перебор справочника без методов НайтиПоНаименованию(), без НайтиПоРеквизиту().
Интересно, что может и не медленнее будет работать.


Но в общем - да. автору вопроса смотреть пост номер 3.


kosalex
Цитата(mister-x @ 22.04.15, 9:39) необходимо зарегистрироваться для просмотра ссылки
в 7.7 таких методів немає wink.gif



Ага, не обратил внимание на категорию smile.gif
volodya1122
СпрТМЦ.Записать();
Это поместить в Попытку.
В Исключении выводить все что не записалось. Тогда будет понятно есть ли, и сколько неуникальных кодов.
Домовик
моптель, мои рассуждение не верные, так как через выборку справочника, код и наименование нельзя менять. разве что загружать в табзнач, упорядочивать.
volodya1122
Цитата(Домовик @ 23.04.15, 9:44) необходимо зарегистрироваться для просмотра ссылки
моптель, мои рассуждение не верные, так как через выборку справочника, код и наименование нельзя менять. разве что загружать в табзнач, упорядочивать.


Как это нельзя?
А ПорядокКодов и ПорядокНаименований для чего придумали?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.