Имя: Пароль:
1C
 
Записать Элемент Справочника
,
0 myr4ik07
 
04.01.15
00:11
Использую обработку Загрузка данных из табличного документа для загрузки Элементов Справочника.
Данные загружаются но  что бы заполнилась информация Единица измерения нужно открывать и нажимать Ок на каждом объекте Справочника (открыв форму справочника, нажал ок, закрылась форма в итоге единица измерения заполнилось "шт").
так вот есть много объектов справочника , решил "открыть, закрыть" выполнить с помощью данного кода

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Родитель = &Родитель";

    Запрос.УстановитьПараметр("Родитель", Группа);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбСпр = ВыборкаДетальныеЗаписи.Ссылка;
        Форма = ОбСпр.ПолучитьОбъект();
        Форма.Записать();
    КонецЦикла;

КонецПроцедуры
но "шт." так и не заполняются
Пробовал
...
Форма = ОбСпр.ПолучитьФорму();
        Форма.Закрыть();
...
тоже нет результата
1 Dmitry1c
 
04.01.15
00:19
Единица измерения вроде как подчиненный справочник для справочника номенклатуры.

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

Так будет правильнее.
2 Фокусник
 
04.01.15
00:19
(0) включи замер производительности, выполни интерактивно действие, выключи замер, анализируй выполнившийся код
3 myr4ik07
 
04.01.15
00:21
(1) у меня в обработке Загрузка данных из табличного документа ед. измерения заполняются таким кодом

СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ТекущиеДанные["Номенклатура"]); Результат=СсылкаНоменклатуры.ЕдиницаХраненияОстатков;

и он выполняется удачно и работает, но только после того когда я открою и закрою каждый обьект номенклатуры
4 Фокусник
 
04.01.15
00:26
(3) при интерактивном открытии/записи единица измерения заполняется другим (типовым) кодом, а не твоим. Вычислить этот код можно, например, выполнив действия в (2)
5 myr4ik07
 
04.01.15
00:34
(4) попробую разобраться, да, типовый механизм лезет куда то в другие процедуры для записи, наверное там загвоздка, а может проще отключить стандартные обработки в это коде?
6 13_Mult
 
04.01.15
08:03
(0) Надо было свой код в обработке "Загрузка данных из табличного документа " вставить по созданию ед. изм.
Теперь ищи с пустыми и пиши отдельно.
7 iceman2112
 
04.01.15
08:57
(5) Нет не проще, там 5 строк
8 Мимохожий Однако
 
04.01.15
10:27
В разных конфигурациях по-разному хранятся единицы измерения. А какая конфигурация так никто и не догадался.
9 myr4ik07
 
04.01.15
15:39
УТП для Украины 1.2
10 myr4ik07
 
04.01.15
16:08
(2) а чем отличается включение замера производительности от Отладки? Точнее Точке останова?
11 myr4ik07
 
04.01.15
16:21
(6) ну так кодом
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ТекущиеДанные["Номенклатура"]); Результат=СсылкаНоменклатуры.ЕдиницаХраненияОстатков;
и создается ед. измерения но они только тогда показываются на форме когда вручную открываю и закрываю форму
12 Фокусник
 
04.01.15
16:51
(10) Точку останова ставят когда уже известно какой код нужно "остановить".
Замер производительности (кроме прямого назначения - измерить производительность) еще имеет второе назначение: определить код, который выполняется (ведь он может быть разбросан по разным обработчикам событий, по разным подпискам на события).
13 myr4ik07
 
04.01.15
16:55
в итоге нашел код в гинтернетах
Запрос = Новый Запрос;
    
    ТекстЗапроса = "ВЫБРАТЬ
                   |    Номенклатура.Ссылка,
                   |    Номенклатура.БазоваяЕдиницаИзмерения,
                   |    ЕдиницыИзмерения.Ссылка КАК ЕдиницаИзмерения
                   |ИЗ
                   |    Справочник.Номенклатура КАК Номенклатура
                   |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
                   |        ПО Номенклатура.Ссылка = ЕдиницыИзмерения.Владелец
                   |            И Номенклатура.БазоваяЕдиницаИзмерения = ЕдиницыИзмерения.ЕдиницаПоКлассификатору
                   |ГДЕ
                   |    Номенклатура.ЭтоГруппа = ЛОЖЬ
                   |    И Номенклатура.ЕдиницаХраненияОстатков = &ПустаяЕдиница
                   |    И НЕ Номенклатура.БазоваяЕдиницаИзмерения = &ПустаяЕдиницаКл";
    
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("ПустаяЕдиница",Справочники.ЕдиницыИзмерения.ПустаяСсылка());
    Запрос.УстановитьПараметр("ПустаяЕдиницаКл",Справочники.КлассификаторЕдиницИзмерения.ПустаяСсылка());
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    КоличествоСтрок = Выборка.Количество();    
    
    НачатьТранзакцию();
    КоличествоОбработанных = 0;    
    Пока Выборка.Следующий() Цикл
        
        ОбработкаПрерыванияПользователя();

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

код работоспособный
14 myr4ik07
 
04.01.15
16:56
(12) вот спасибо, да, такое тоже мне было нужно, попробую и "замер производительности"