Имя: Пароль:
1C
1С v8
Помогите разобраться с единицами измерения в Комплексной Автоматизации 2.0
0 АндрейВоронин
 
25.05.16
12:23
Доброго времени суток! Пытаюсь разобраться со справочником "УпаковкиЕдиницыИзмерения". В нём реквизит "ЕдиницаИзмерения" - это СправочникСсылка "УпаковкиЕдиницыИзмерения". Как в демо базе создаю единицу "штуки", код "796", владелец - СправочникСсылка.НаборыУпаковок.БазоваяЕдиницаИзмерения. Теперь хочу заполнить "УпаковкиЕдиницыИзмерения" с учётом владельца соответствующей номенклатурой. Пишу такой код:

СпрЕд=Справочники.УпаковкиЕдиницыИзмерения;
НайденнаяСсылка=СпрЕд.НайтиПоКоду("796");
выборка=Справочники.Номенклатура.Выбрать();
Пока выборка.Следующий() цикл
НовыйОбъект = Справочники.УпаковкиЕдиницыИзмерения.СоздатьЭлемент();
НовыйОбъект.Наименование="шту";
НовыйОбъект.НаименованиеПолное="Штукенция";
НовыйОбъект.Владелец=Выборка.Ссылка;
НовыйОбъект.ЕдиницаИзмерения=НайденнаяСсылка;
НовыйОбъект.Записать();
КонецЦикла;

И смотрю в отладчике. Всё записывается кроме единиц измерения. В отладчике видно, что НовыйОбъект.ЕдиницаИзмерения становится "штуками", но после выполнения НовыйОбъект.Записать() штуки пропадают и в этот реквизит запись не происходит.

Подскажите почему запись не проходит? Как в таком случае организовать запись?
1 Cyberhawk
 
25.05.16
12:36
потому что владелец элемента справочника - элемент справочника "НаборыЕИ", в этом случае реквизит ЕИ пустой
2 Cyberhawk
 
25.05.16
12:37
+(1) поправка: не "НаборыЕИ", а "НаборыУпаковок" + еще и предопределенные
3 Cyberhawk
 
25.05.16
12:40
Еще и реквизит ТипИзмеряемойВеличины заполнять надобно...
4 АндрейВоронин
 
25.05.16
12:50
Тогда, пожалуйста, объясните такой момент. Смотрю демо базу. Там в "УпаковкиЕдиницыИзмерения" такие данные:
очередной элемент:
Код - "" (пустой)
Наименование - "штуки"
Владелец - Номенклатура такая-то
ЕдиницаИзмерения - "штуки" (СпрСсылка "УпЕдИзм")
ЕдиницаИзмерения.Владелец - СпрСсылка.НаборыУпаковок.БазоваяЕдИзмерения

То есть в демо базе все реквизиты заполняются?

ТипИзмеряемойВеличины задал
5 АндрейВоронин
 
25.05.16
13:36
Другими словами как организовать запись в справочник, если есть такая закольцовка: реквизит справочника имеет тип СправочникСсылка.Этот же справочник?
6 Cyberhawk
 
25.05.16
13:44
Никакой закольцовки нет, все базовые ЕИ ссылаются (через владельца) на предопределенные наборы упаковок, а реквизит "ЕИ" у них не заполнена.
Все производные ЕИ (упаковки) ссылаются (через владельца) либо на номенклатуру, либо непредопределенные наборы упаковок, а реквизит "ЕИ" у них - это базовая ЕИ (см. выше)
7 Cyberhawk
 
25.05.16
13:45
Я бы тебе посоветовал завести в пользовательском режиме нужную тебе ЕИ, убедиться, что результат удовлетворительный (по документам и движениям), потом посмотреть все реквизиты и уже только тогда по образу и подобию заводить ЕИ программно (в режиме загрузки)
8 АндрейВоронин
 
25.05.16
14:18
Загвоздка в том, что никаких документов нет, база чистая и туда переносится номенклатура из старой базы 7.7. Можно только сравнить с демо базой.

Все производные ЕИ (упаковки) ссылаются (через владельца) либо на номенклатуру... ,а реквизит "ЕИ" у них - это базовая ЕИ (см. выше)

Это вроде понятно, но разве в коде который я писал в самом начале не это реализовано?
//Создал штуки с пустыми "ЕИ" (как базовую единицу)
//Далее назначаем эту "ЕИ" номенклатуре
СпрЕд=Справочники.УпаковкиЕдиницыИзмерения;
НайденнаяСсылка=СпрЕд.НайтиПоКоду("796");
НовыйОбъект.Владелец=Ссылка на номенклатуру
НовыйОбъект.ЕдиницаИзмерения=НайденнаяСсылка;
9 АндрейВоронин
 
25.05.16
14:27
Причём ведь в отладчике видно, что выполнение строки
НовыйОбъект.ЕдиницаИзмерения=НайденнаяСсылка;
проходит, штуки присваиваются. Если бы что-то было не так то должна же ошибка пройти.
А вот следующая строка
НовыйОбъект.Записать();
всё сбрасывает.
10 Cyberhawk
 
25.05.16
14:32
У тебя ТипИзмеряемойВеличины не заполнен и запись идет не в режиме загрузки, поэтому прикладной код конфигурации тебе "обнуляет" этот реквизит. Неужели это так сложно было посмотреть в отладчике?
11 Cyberhawk
 
25.05.16
14:33
"А вот следующая строка
НовыйОбъект.Записать();
всё сбрасывает."
Там еще дохрена строк кода выполняется, по F11 жми и если база серверная, то сервер должен быть в режиме отладки
12 АндрейВоронин
 
25.05.16
15:42
Тип заполнил, по F11 смотрел, но так не определил где запись теряется. Судя по всему у меня пробел в теории... Можете объяснить, что нужно сделать, что бы реквизит не обнулялся? Или тут без кучи строк кода не обойтись?
13 Cyberhawk
 
25.05.16
16:48
Я вроде бы в (10) довольно понятно написал...
Поищи код ".ЕдиницаИзмерения = Неопределено" в модулях конфигурации, может быть так сообразишь, раз "по F11 смотрел, но так не определил где запись теряется"...
14 АндрейВоронин
 
26.05.16
09:50
Я вроде бы в (10) довольно понятно написал... Имеется в виду "запись идет не в режиме загрузки"? К сожалению это для меня набор слов... Я с этой версией раньше не работал никогда, документации нет, всё приходится методом тыка изучать. Помогла строка НовыйОбъект.ОбменДанными.Загрузка = Истина;
Но вы мне хорошо помогли, подсказали направление, где нужно внимательнее разобраться и найти причину. Искренне благодарю за помощь! Хорошего дня!
15 Cyberhawk
 
26.05.16
20:15
(14) Да, "режим загрузки" - это когда "ОбменДанными.Загрузка = Истина"
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn