Имя: Пароль:
1C
 
Обработка "Загрузка данных из табличного документа"
0 CrazyProg
 
30.01.11
11:32
Добрый день.

Начал осваивать обработка "Загрузка данных из табличного документа"
Сталкнулся с проблемой:
Загружаю данные из экселя в спр.Номенклатура
Заполняються все реквизиты кроме Единицы хранения остатков.
Я понимаю что при ее заполнении нужно использовать выражанение, вопрос: что в этом выражение должно быть написано
1 1cnik2
 
30.01.11
11:46
что за конфа? в модуле объекта в при записи разве нет кода, который создает единицу и заполняет поле?
2 DimG
 
30.01.11
11:48
Автоматом не получится, надо там в событиях понаписАть еще руками создание этой единицы.
3 CrazyProg
 
30.01.11
11:48
Торговля 10.3
платформа 8.2
4 CrazyProg
 
30.01.11
11:49
(2) вот я про то и говорю что нужно дописать, вот только что?
5 DimG
 
30.01.11
11:51
(4) Что вы как первый год замужем. Элементарного сообразить не можете. Смотрим как создается эта единица при записи номенклатуры, копируем и адаптируем код для обработки. Там есть события, туда практически один в один вставляем этот код.
6 1cnik2
 
30.01.11
11:55
(5) ну так-то она сама должна создаваться в УТ, при записи, если ее нет, на основании заполненой базовой единицы
конфы нет, поэтому посмотреть, создается она, или нет, не могу
попробуй ничего не писать и не ставить галку загрузки реквизита
7 DimG
 
30.01.11
11:57
(6) Она создается при записи из формы. А из формы не обрабатывает при программной записи.
8 CrazyProg
 
30.01.11
11:59
СпрКлассЕдОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();

СпрКлассЕдОбъект.Наименование = СокрЛП(ТекстыЯчеек[2]);
СпрКлассЕдОбъект.Записать();
СпрКлассЕд = СпрКлассЕдОбъект.Ссылка;

Во как...
9 CrazyProg
 
30.01.11
11:59
Единственное просит указать владельца
10 КнОпка
 
30.01.11
12:02
(8) а поискать? вдруг уже такой элемент есть в справочнике?
11 CrazyProg
 
30.01.11
12:03
(10) элемент та есть, только там нужно чтоб родител другой был?
12 КнОпка
 
30.01.11
12:03
(11) не помню, этот справочник не подчиненный разве?
13 DimG
 
30.01.11
12:04
(8) Записывать нужно в СОБЫТИЯ, а не в формулу вычислить. Там в обработке этой, есть события. Там есть Объект который и будет владелец. Внимательней смотрим, внимательней блин.
14 1cnik2
 
30.01.11
12:05
(7) ну если в форме, то придется писать самому :)

а вообще, конечно, вопрос на двоечку
15 CrazyProg
 
30.01.11
12:06
(13) хорошо буду внимательнее
16 CrazyProg
 
30.01.11
12:10
СпрКлассЕдОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
// на счет этой строки сомневаюсь
СпрКлассЕдОбъект.Владелец = Объект.Ссылка;

С ней или без нее
выдает сообщение: Значение поля "Владелец" не заполнено или заполнено неверно


СпрКлассЕдОбъект.Наименование = СокрЛП(ТекстыЯчеек[2]);
СпрКлассЕдОбъект.Записать();
Результат = СпрКлассЕдОбъект.Ссылка;


Весь код вставил в событие обработки
17 DimG
 
30.01.11
12:12
(16) Просто объект
18 1cnik2
 
30.01.11
12:13
(16) правильно говорит, потому что в тот момент, когда СпрКлассЕдОбъект.Владелец = Объект.Ссылка;
Объект еще не записан..
19 CrazyProg
 
30.01.11
12:13
(17)остовляю просто объект выдает туже ошибку
20 DimG
 
30.01.11
12:13
(18) Так ведь там разные события есть :), и после записи тоже :).
21 CrazyProg
 
30.01.11
12:15
(20) у меня только "перед" и "при"
22 1cnik2
 
30.01.11
12:15
запиши Объект перед заполнением владельца единицы, это проще всего
еще есть ПолучитьСсылкуНового(), как то так называется
23 CrazyProg
 
30.01.11
12:17
(22) ок все получилось
24 CrazyProg
 
30.01.11
12:17
Объект.Записать();
СпрКлассЕдОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
СпрКлассЕдОбъект.Владелец = Объект.Ссылка;
СпрКлассЕдОбъект.Наименование = СокрЛП(ТекстыЯчеек[2]);
СпрКлассЕдОбъект.Записать();
Результат = СпрКлассЕдОбъект.Ссылка;
25 CrazyProg
 
30.01.11
12:18
Всем спасибо что помогли!!!
26 DimG
 
30.01.11
12:18
(21) Да? Странна, как же у меня получалось то. Не помню за давностью. Лан, щас гляну что там у меня написано, так и быть.
27 DimG
 
30.01.11
12:20
Событие ПослеДобавленияСтроки
28 1cnik2
 
30.01.11
12:21
(25) сомневаюсь, что ты таки все правильно сделал..
где заполнение поля коэффициента? классификатора единицы?

и правильно говорили, делать надо было в обработчике, а не в формуле вычисления поля!
29 1cnik2
 
30.01.11
12:22
посмотри, как форме записывается единица, и скопируй 1 в 1
30 DimG
 
30.01.11
12:25
Так и быть, дарю свой хлеб :). Событие ПриЗаписиОбъекта
Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаХраненияОстатков) Тогда

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

   Объект.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
   Объект.ЕдиницаДляОтчетов = НайденнаяЕдиница;
КонецЕсли;
31 1cnik2
 
30.01.11
12:28
(30) а если он уже насоздавал там единиц с пустым классификатором и коэффициентом?
32 DimG
 
30.01.11
12:29
(31) Ну что могу сказать, его база :). Пусть набивает шишки.
Ошибка? Это не ошибка, это системная функция.