Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 03:30

Программно перезаписать элементы справочника

Автор ls600, 19 сен 2013, 08:21

0 Пользователей и 1 гость просматривают эту тему.

mixqn

вы посмотрите, что именно туда ставится то, те ли это единицы.
вы при переносе из другой базы единицы измерения не переносили?
если нет, тогда может быть такой вариант: в коде модуля формы описан алгоритм создания единицы хранения остатков на основе базовой единицы.
вас этот вариант устраивает?
если да, то лучше перенести алгоритм создания единицы измерения на основе базовой из модуля формы в вашу обработку, чем открывать формы и записывать.

ls600

добавил в форму списка колонку "ЕдиницаХраненияОстатков" (Реквизит справочника Номенклатуры. тип СправочникСсылка.ЕдиницыИзмерения). как ее можно заполнить?, справочник единицы измерения заполнен. 



ls600

если кому интересно единицы хранения остатков заполнил, вот запрос:
Запрос = Новый Запрос;

ТекстЗапроса = "ВЫБРАТЬ
               | Номенклатура.Ссылка,
               | Номенклатура.БазоваяЕдиницаИзмерения,
               | ЕдиницыИзмерения.Ссылка КАК ЕдиницаИзмерения
               |ИЗ
               | Справочник.Номенклатура КАК Номенклатура
               | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
               | ПО Номенклатура.Ссылка = ЕдиницыИзмерения.Владелец
               | И Номенклатура.БазоваяЕдиницаИзмерения = ЕдиницыИзмерения.ЕдиницаПоКлассификатору
               |ГДЕ
               | Номенклатура.ЭтоГруппа = ЛОЖЬ
               | И Номенклатура.ЕдиницаХраненияОстатков = &ПустаяЕдиница
               | И НЕ Номенклатура.БазоваяЕдиницаИзмерения = &ПустаяЕдиницаКл";

Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ПустаяЕдиница",Справочники.ЕдиницыИзмерения.ПустаяСсылка());
Запрос.УстановитьПараметр("ПустаяЕдиницаКл",Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка());
РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
КоличествоСтрок = Выборка.Количество();

НачатьТранзакцию();
КоличествоОбработанных = 0;
Пока Выборка.Следующий() Цикл

ОбработкаПрерыванияПользователя();

КоличествоОбработанных = КоличествоОбработанных + 1;
   
Если ЗначениеЗаполнено(Выборка.ЕдиницаИзмерения) Тогда
НайденнаяЕдиница = Выборка.ЕдиницаИзмерения.Ссылка;
Иначе
НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НайденнаяЕдиницаОбъект.Наименование            = Выборка.БазоваяЕдиницаИзмерения.Наименование;
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = Выборка.БазоваяЕдиницаИзмерения;
НайденнаяЕдиницаОбъект.Коэффициент             = 1;
НайденнаяЕдиницаОбъект.Владелец                = Выборка.Ссылка;

НайденнаяЕдиницаОбъект.Записать();

НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
КонецЕсли;

Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
Объект.ЕдиницаДляОтчетов       = НайденнаяЕдиница;
Объект.Записать();

Если КоличествоОбработанных = 200 Тогда

// промежуточную транзакцию закрываем и открываем новую
ЗафиксироватьТранзакцию();
НачатьТранзакцию();

КоличествоОбработанных = 0;
КонецЕсли;

КонецЦикла;

ЗафиксироватьТранзакцию();



myr4ik07

Цитата: ls600 от 23 сен 2013, 08:20
если кому интересно единицы хранения остатков заполнил, вот запрос:
Запрос = Новый Запрос;

ТекстЗапроса = "ВЫБРАТЬ
               | Номенклатура.Ссылка,
               | Номенклатура.БазоваяЕдиницаИзмерения,
               | ЕдиницыИзмерения.Ссылка КАК ЕдиницаИзмерения
               |ИЗ
               | Справочник.Номенклатура КАК Номенклатура
               | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
               | ПО Номенклатура.Ссылка = ЕдиницыИзмерения.Владелец
               | И Номенклатура.БазоваяЕдиницаИзмерения = ЕдиницыИзмерения.ЕдиницаПоКлассификатору
               |ГДЕ
               | Номенклатура.ЭтоГруппа = ЛОЖЬ
               | И Номенклатура.ЕдиницаХраненияОстатков = &ПустаяЕдиница
               | И НЕ Номенклатура.БазоваяЕдиницаИзмерения = &ПустаяЕдиницаКл";

Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ПустаяЕдиница",Справочники.ЕдиницыИзмерения.ПустаяСсылка());
Запрос.УстановитьПараметр("ПустаяЕдиницаКл",Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка());
РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
КоличествоСтрок = Выборка.Количество();

НачатьТранзакцию();
КоличествоОбработанных = 0;
Пока Выборка.Следующий() Цикл

ОбработкаПрерыванияПользователя();

КоличествоОбработанных = КоличествоОбработанных + 1;
   
Если ЗначениеЗаполнено(Выборка.ЕдиницаИзмерения) Тогда
НайденнаяЕдиница = Выборка.ЕдиницаИзмерения.Ссылка;
Иначе
НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НайденнаяЕдиницаОбъект.Наименование            = Выборка.БазоваяЕдиницаИзмерения.Наименование;
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = Выборка.БазоваяЕдиницаИзмерения;
НайденнаяЕдиницаОбъект.Коэффициент             = 1;
НайденнаяЕдиницаОбъект.Владелец                = Выборка.Ссылка;

НайденнаяЕдиницаОбъект.Записать();

НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
КонецЕсли;

Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
Объект.ЕдиницаДляОтчетов       = НайденнаяЕдиница;
Объект.Записать();

Если КоличествоОбработанных = 200 Тогда

// промежуточную транзакцию закрываем и открываем новую
ЗафиксироватьТранзакцию();
НачатьТранзакцию();

КоличествоОбработанных = 0;
КонецЕсли;

КонецЦикла;

ЗафиксироватьТранзакцию();


не поленился даже зарегистрироваться, чтобы сказать СПАСИБО за приведенный код добрый человек. Идентичная проблема была, больше тысячи записей нужно было заполнить ед. измерениями. Спасибо. С вашего позволения выложу данный код на блоге у себя. СПАСИБО ))

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск