Имя: Пароль:
1C
1С v8
Перезаполнить единицу хранения и единицу для отчетов в 1 С Рознице
0 ToJIuK
 
06.08.12
11:54
Тема обсуждалась в ветке.
v8: Как перезаполнить единицу хранения и единицу для отчетов?
Ситуация идентичная. Перенес номенклатуру из 1С ТиС(Торговля и Склад) в 1С Розницу.
Но у меня не получается перезаписать эти реквизиты, ни первым ни вторым способом.
Первый описан в пункте (29)
Создаю внешнюю обработку. С кодом
Запрос = Новый Запрос("ВЫБРАТЬ
                         |    спрНоменклатура.Номенклатура,
                         |    спрНоменклатура.БазоваяЕдиницаИзмерения,
                         |    спрНоменклатура.ЕдиницаИзмерения,
                         |    спрНоменклатура.КоличествоОдинаковых
                         |ИЗ
                         |    (ВЫБРАТЬ
                         |        Номенклатура.Ссылка КАК Номенклатура,
                         |        Номенклатура.БазоваяЕдиницаИзмерения КАК БазоваяЕдиницаИзмерения,
                         |        ЕдиницыИзмерения.Ссылка КАК ЕдиницаИзмерения,
                         |        СУММА(1) КАК КоличествоОдинаковых
                         |    ИЗ
                         |        Справочник.Номенклатура КАК Номенклатура
                         |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
                         |            ПО Номенклатура.Ссылка = ЕдиницыИзмерения.Владелец
                         |                И Номенклатура.БазоваяЕдиницаИзмерения = ЕдиницыИзмерения.ЕдиницаПоКлассификатору
                         |    ГДЕ
                         |        (НЕ Номенклатура.ЭтоГруппа)
                         |    
                         |    СГРУППИРОВАТЬ ПО
                         |        Номенклатура.Ссылка,
                         |        Номенклатура.БазоваяЕдиницаИзмерения,
                         |        ЕдиницыИзмерения.Ссылка) КАК спрНоменклатура
                         |ГДЕ
                         |    спрНоменклатура.КоличествоОдинаковых = 1");
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Номенклатура = Выборка.Номенклатура.ПолучитьОбъект();
       Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
       Номенклатура.ЕдиницаХраненияОстатков    = Выборка.ЕдиницаИзмерения;
       Номенклатура.ЕдиницаДляОтчетов             = Выборка.ЕдиницаИзмерения;
      Попытка
           Номенклатура.Записать();
       Исключение
           Сообщить("Не удалось записать номенклатуру: """ + Номенклатура + """");
           Сообщить(ОписаниеОшибки());
       КонецПопытки;
           КонецЦикла;

Выдает ошибку

{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(33)}: Ошибка при вызове метода контекста (Записать): Не удалось записать: "Номенклатура"!
Перед записью в элементе справочника "Номенклатура" необходимо заполнить "вид номенклатуры"!
Перед записью в элементе справочника "Номенклатура" необходимо заполнить ""Ед" (базовая единица)"!
Не удалось записать номенклатуру: "<>"

Способ 2. (36) сообщение.
Вроде все отрабатывает : пишет обработано 4500 элементов, но по факту все остается как было. Подскажите может кто решал эту проблему.
1 Popkorm
 
06.08.12
12:24
НайденаяНом = СпрНоменклатура.НайтиПоКоду(ВыбНоменклатура.Код);
       Если НЕ ЗначениеЗаполнено(НайденаяНом.ЕдиницаХраненияОстатков) Тогда
           ЕдиницаИзмерения = СпрЕдиницыИзмерения.СоздатьЭлемент();
           ЕдиницаИзмерения.Владелец = СпрНоменклатура.НайтиПоКоду(ВыбНоменклатура.Код).Ссылка;
           ЕдиницаИзмерения.Наименование = НайденаяНом.БазоваяЕдиницаИзмерения.Наименование;
           ЕдиницаИзмерения.ЕдиницаПоКлассификатору = НайденаяНом.БазоваяЕдиницаИзмерения.Ссылка;
           ЕдиницаИзмерения.Коэффициент = 1;
           ЕдиницаИзмерения.Записать();
           ОбъекНом = НайденаяНом.Получитьобъект();
           ОбъекНом.ЕдиницаХраненияОстатков    = ЕдиницаИзмерения.Ссылка;
           ОбъекНом.ЕдиницаДляОтчетов          = ЕдиницаИзмерения.Ссылка;
           ОбъекНом.ЕдиницаИзмеренияМест       = ЕдиницаИзмерения.Ссылка;
           ОбъекНом.Записать();
           Сообщить("Добавлена Ед.Хран.Ост для: "+НайденаяНом+НайденаяНом.ЕдиницаХраненияОстатков);
       КонецЕсли;
2 ToJIuK
 
06.08.12
12:39
Это куда вставлять в первый способ или второй? Если в первый то вместо каких строчек?
3 ToJIuK
 
06.08.12
12:41
Это после  

Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
.......
......
......
Конец Цикла надо вставить если я правильно понял
4 Popkorm
 
06.08.12
12:47
(3)ты в сам метод приглядись что я тебе дал
5 ToJIuK
 
06.08.12
12:53
Прости пожалуйста но я не гуру 1с. Пытаюсь подставить и в первый и во второй способ не работает пишет

(1,16)}: Переменная не определена (СпрНоменклатура)
НайденаяНом = <<?>>СпрНоменклатура.НайтиПоКоду(ВыбНоменклатура.Код);
6 Popkorm
 
06.08.12
13:32
(5)дааааа.............стажер?!Запрос походу не сам писал
Пока Выборка.Следующий() Цикл
       Номенклатура = Выборка.Номенклатура.Код;
       НайденаяНом = Справочники.Номенклатура.НайтиПоКоду(Выборка.Номенклатура.Код);
      Если НЕ ЗначениеЗаполнено(НайденаяНом.ЕдиницаХраненияОстатков) Тогда
           ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
           ЕдиницаИзмерения.Владелец = Справочники.Номенклатура.НайтиПоКоду(Номенклатура).Ссылка;
           ЕдиницаИзмерения.Наименование = НайденаяНом.БазоваяЕдиницаИзмерения.Наименование;
           ЕдиницаИзмерения.ЕдиницаПоКлассификатору = НайденаяНом.БазоваяЕдиницаИзмерения.Ссылка;
           ЕдиницаИзмерения.Коэффициент = 1;
           ЕдиницаИзмерения.Записать();
           ОбъекНом = НайденаяНом.Получитьобъект();
           ОбъекНом.ЕдиницаХраненияОстатков    = ЕдиницаИзмерения.Ссылка;
           ОбъекНом.ЕдиницаДляОтчетов          = ЕдиницаИзмерения.Ссылка;
           ОбъекНом.ЕдиницаИзмеренияМест       = ЕдиницаИзмерения.Ссылка;
           ОбъекНом.Записать();
           Сообщить("Добавлена Ед.Хран.Ост для: "+НайденаяНом+НайденаяНом.ЕдиницаХраненияОстатков);
       КонецЕсли;
7 ToJIuK
 
06.08.12
14:24
ДА ТЫ ПРОСТО ГРЕБАННЫЙ ГОССУ-МЕН!!!В хорошем смысле)))
Всемогущий далай-лама 1с!!!
Спс тебе Большое . А то пришлось бы щас 15т наименование пересохранять в ручную))
8 ToJIuK
 
06.08.12
14:27
Вот полный код внешней обработки для сохранения ЕдХранения И Ед для отчетов

Запрос = Новый Запрос("ВЫБРАТЬ
                         |    спрНоменклатура.Номенклатура,
                         |    спрНоменклатура.БазоваяЕдиницаИзмерения,
                         |    спрНоменклатура.ЕдиницаИзмерения,
                         |    спрНоменклатура.КоличествоОдинаковых
                         |ИЗ
                         |    (ВЫБРАТЬ
                         |        Номенклатура.Ссылка КАК Номенклатура,
                         |        Номенклатура.БазоваяЕдиницаИзмерения КАК БазоваяЕдиницаИзмерения,
                         |        ЕдиницыИзмерения.Ссылка КАК ЕдиницаИзмерения,
                         |        СУММА(1) КАК КоличествоОдинаковых
                         |    ИЗ
                         |        Справочник.Номенклатура КАК Номенклатура
                         |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
                         |            ПО Номенклатура.Ссылка = ЕдиницыИзмерения.Владелец
                         |                И Номенклатура.БазоваяЕдиницаИзмерения = ЕдиницыИзмерения.ЕдиницаПоКлассификатору
                         |    ГДЕ
                         |        (НЕ Номенклатура.ЭтоГруппа)
                         |    
                         |    СГРУППИРОВАТЬ ПО
                         |        Номенклатура.Ссылка,
                         |        Номенклатура.БазоваяЕдиницаИзмерения,
                         |        ЕдиницыИзмерения.Ссылка) КАК спрНоменклатура
                         |ГДЕ
                         |    спрНоменклатура.КоличествоОдинаковых = 1");
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Номенклатура = Выборка.Номенклатура.Код;
       НайденаяНом = Справочники.Номенклатура.НайтиПоКоду(Выборка.Номенклатура.Код);
      Если НЕ ЗначениеЗаполнено(НайденаяНом.ЕдиницаХраненияОстатков) Тогда
           ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
           ЕдиницаИзмерения.Владелец = Справочники.Номенклатура.НайтиПоКоду(Номенклатура).Ссылка;
           ЕдиницаИзмерения.Наименование = НайденаяНом.БазоваяЕдиницаИзмерения.Наименование;
           ЕдиницаИзмерения.ЕдиницаПоКлассификатору = НайденаяНом.БазоваяЕдиницаИзмерения.Ссылка;
           ЕдиницаИзмерения.Коэффициент = 1;
           ЕдиницаИзмерения.Записать();
           ОбъекНом = НайденаяНом.Получитьобъект();
           ОбъекНом.ЕдиницаХраненияОстатков    = ЕдиницаИзмерения.Ссылка;
           ОбъекНом.ЕдиницаДляОтчетов          = ЕдиницаИзмерения.Ссылка;
           ОбъекНом.Записать();
           Сообщить("Добавлена Ед.Хран.Ост для: "+НайденаяНом+НайденаяНом.ЕдиницаХраненияОстатков);
       КонецЕсли;
       КонецЦикла


В Реквизитах Внешней обработки нужно добавить Справочник.ссылку "НОМЕНКЛАТУРА"
9 Popkorm
 
06.08.12
15:06
15т наименование пересохранять в ручную = жесть