Помогите разобраться с обработкой по модификации данных
Сначала написал ERT по выгрузке норм в эксел Там изменил стоимость. Теперь пишу обраб.по загрузке стоимости норм расхода обратно в 1с,но данные не меняются Помогите разобраться:
имя1-наименование изделия
имя-стоимость из нормРасхода в номенклатурном СП в экселе
Процедура Сформировать ()
НачатьТранзакцию();
xl=СоздатьОбъект("Excel.Application");
rows=xl.ActiveSheet.UsedRange.Rows.Count;
спр=СоздатьОбъект("Справочник.Номенклатура");
спрнормы=СоздатьОбъект("Справочник.НормыРасходов");
//цикл по строкам
Для row = 1 По rows Цикл
имя=(xl.Cells(row,1).Value);
имя1=(xl.Cells(row,2).Value);
Состояние(""+row+"/"+rows+" "+имя1);
Если спр.НайтиПоНаименованию(имя, 0, 1)=0 Тогда
//если элемент с таким наименованием не найден, то создаем его
спрнормы.Новый();
спрнормы.Стоимость=имя;
спрнормы.Записать();
КонецЕсли;
спрнормы.Записать();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецПроцедуры
На всякий случай прилагаю прогу по выгрузке,она работает:
//*******************************************
Процедура сформировать()
xl=СоздатьОбъект("Excel.Application");
xl.Caption="ИзменНорматива";
row=1; //первая строка
спр=СоздатьОбъект("Справочник.Номенклатура");
спрнормы=СоздатьОбъект("Справочник.НормыРасходов");
спр.ВыбратьЭлементы(0);
пока спр.получитьэлемент() =1 цикл
спрнормы.использоватьвладельца(спр.текущийэлемент());
спрнормы.выбратьэлементы(1);
пока спрнормы.получитьэлемент(1) = 1 цикл
//xl.Cells(row,1).Value=спр.наименование;
xl.Cells(row,2).Value=спрнормы.стоимость.Получить(текущаядата());
//xl.Cells(row,3).Value=спрнормы.Код;
// xl.Cells(row,4).Value=спр.Код;
// xl.Cells(row,5).Value=спрнормы.наименование;
// xl.Cells(row,6).Value=спр.себестоимость.Получить(текущаядата());
row=row+1;//переходим на следующую строку
КонецЦикла;
КонецЦикла;
КонецПроцедуры
имя1-наименование изделия
имя-стоимость из нормРасхода в номенклатурном СП в экселе
Процедура Сформировать ()
НачатьТранзакцию();
xl=СоздатьОбъект("Excel.Application");
rows=xl.ActiveSheet.UsedRange.Rows.Count;
спр=СоздатьОбъект("Справочник.Номенклатура");
спрнормы=СоздатьОбъект("Справочник.НормыРасходов");
//цикл по строкам
Для row = 1 По rows Цикл
имя=(xl.Cells(row,1).Value);
имя1=(xl.Cells(row,2).Value);
Состояние(""+row+"/"+rows+" "+имя1);
Если спр.НайтиПоНаименованию(имя, 0, 1)=0 Тогда
//если элемент с таким наименованием не найден, то создаем его
спрнормы.Новый();
спрнормы.Стоимость=имя;
спрнормы.Записать();
КонецЕсли;
спрнормы.Записать();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецПроцедуры
На всякий случай прилагаю прогу по выгрузке,она работает:
//*******************************************
Процедура сформировать()
xl=СоздатьОбъект("Excel.Application");
xl.Caption="ИзменНорматива";
row=1; //первая строка
спр=СоздатьОбъект("Справочник.Номенклатура");
спрнормы=СоздатьОбъект("Справочник.НормыРасходов");
спр.ВыбратьЭлементы(0);
пока спр.получитьэлемент() =1 цикл
спрнормы.использоватьвладельца(спр.текущийэлемент());
спрнормы.выбратьэлементы(1);
пока спрнормы.получитьэлемент(1) = 1 цикл
//xl.Cells(row,1).Value=спр.наименование;
xl.Cells(row,2).Value=спрнормы.стоимость.Получить(текущаядата());
//xl.Cells(row,3).Value=спрнормы.Код;
// xl.Cells(row,4).Value=спр.Код;
// xl.Cells(row,5).Value=спрнормы.наименование;
// xl.Cells(row,6).Value=спр.себестоимость.Получить(текущаядата());
row=row+1;//переходим на следующую строку
КонецЦикла;
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Таже фигня, что у тебя была при выгрузке из 1С, ты не можещ просто присвоить значение для периодического реквизита. Пиши так:
спрнормы.Новый();
спрнормы.Наименование=имя;
спрнормы.Записать();
спрнормы.Стоимость.Установить(ТекущаяДата(), имя1);
спрнормы.Записать();
спрнормы.Новый();
спрнормы.Наименование=имя;
спрнормы.Записать();
спрнормы.Стоимость.Установить(ТекущаяДата(), имя1);
спрнормы.Записать();
А так получится ? Если требуется увеличить стоимость норматив нормРасхода в номенклатурнике
спр=СоздатьОбъект("Справочник.Номенклатура");
спрнормы=СоздатьОбъект("Справочник.НормыРасходов");
СпрНормы.ИспользоватьДату(ТекущаяДата());
спр.ВыбратьЭлементы(0);
пока спр.получитьэлемент() =1 цикл
спрнормы.использоватьвладельца(спр.текущийэлемент());
спрнормы.выбратьэлементы(1);
пока спрнормы.получитьэлемент(1) =1 цикл
спрнормы.Стоимость=спрнормы*1.15;
спрнормы.Записать();
КонецЦикла;
КонецЦикла;
КонецПроцедуры
спр=СоздатьОбъект("Справочник.Номенклатура");
спрнормы=СоздатьОбъект("Справочник.НормыРасходов");
СпрНормы.ИспользоватьДату(ТекущаяДата());
спр.ВыбратьЭлементы(0);
пока спр.получитьэлемент() =1 цикл
спрнормы.использоватьвладельца(спр.текущийэлемент());
спрнормы.выбратьэлементы(1);
пока спрнормы.получитьэлемент(1) =1 цикл
спрнормы.Стоимость=спрнормы*1.15;
спрнормы.Записать();
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Использовал ваш код для обновления спр.Материалы... Все работает...
//*******************************************
Процедура Сформировать()
Перем текМатериал,ТекКПВЭД,ТекКоэфф;
Таб = СоздатьОбъект("Таблица");
НачатьТранзакцию();
xl=СоздатьОбъект("Excel.Application");
rows=xl.ActiveSheet.UsedRange.Rows.Count;
Cпр = СоздатьОбъект("Справочник.Материалы");
КПВЭД=СоздатьОбъект("Справочник.НПВЭД");
спр.ИспользоватьДату(НачГода(РабочаяДата()));
//цикл по строкам
Для row = 2 По rows Цикл
текМатериал = (xl.Cells(row,1).Value);
ТекКПВЭД = (xl.Cells(row,2).Value);
ТекКоэфф = (xl.Cells(row,3).Value);
Состояние(""+row+"/"+rows+" "+текМатериал);
Если спр.НайтиПоКоду(СокрЛП(текМатериал))=0 Тогда
Сообщить("Материал "+ СокрЛП(текМатериал) +" в базе не найден...");
Таб.ВывестиСекцию("Материал");
Продолжить;
КонецЕсли;
Если КПВЭД.НайтиПоКоду(СокрЛП(ТекКПВЭД))=0 Тогда
Сообщить("КПВЭД "+ ТекКПВЭД +" в базе не найден...");
Таб.ВывестиСекцию("КПВЭД");
Продолжить;
КонецЕсли;
Спр.НПВЭДСНС = КПВЭД.ТекущийЭлемент();
Спр.КоэффНПВЭД = ТекКоэфф;
Спр.Записать();
Сообщить("Материал "+Спр.ТекущийЭлемент()+" успешно обновлен...");
КонецЦикла;
ЗафиксироватьТранзакцию();
Таб.Показать();
КонецПроцедуры
//*******************************************
Процедура Сформировать()
Перем текМатериал,ТекКПВЭД,ТекКоэфф;
Таб = СоздатьОбъект("Таблица");
НачатьТранзакцию();
xl=СоздатьОбъект("Excel.Application");
rows=xl.ActiveSheet.UsedRange.Rows.Count;
Cпр = СоздатьОбъект("Справочник.Материалы");
КПВЭД=СоздатьОбъект("Справочник.НПВЭД");
спр.ИспользоватьДату(НачГода(РабочаяДата()));
//цикл по строкам
Для row = 2 По rows Цикл
текМатериал = (xl.Cells(row,1).Value);
ТекКПВЭД = (xl.Cells(row,2).Value);
ТекКоэфф = (xl.Cells(row,3).Value);
Состояние(""+row+"/"+rows+" "+текМатериал);
Если спр.НайтиПоКоду(СокрЛП(текМатериал))=0 Тогда
Сообщить("Материал "+ СокрЛП(текМатериал) +" в базе не найден...");
Таб.ВывестиСекцию("Материал");
Продолжить;
КонецЕсли;
Если КПВЭД.НайтиПоКоду(СокрЛП(ТекКПВЭД))=0 Тогда
Сообщить("КПВЭД "+ ТекКПВЭД +" в базе не найден...");
Таб.ВывестиСекцию("КПВЭД");
Продолжить;
КонецЕсли;
Спр.НПВЭДСНС = КПВЭД.ТекущийЭлемент();
Спр.КоэффНПВЭД = ТекКоэфф;
Спр.Записать();
Сообщить("Материал "+Спр.ТекущийЭлемент()+" успешно обновлен...");
КонецЦикла;
ЗафиксироватьТранзакцию();
Таб.Показать();
КонецПроцедуры
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот