Имя: Пароль:
1C
1С v8
Начало конца или кривой код?
,
0 МосЭстрада
 
28.08.13
10:16
НовНом.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
НовНом.Записать();
// ЕдиницыИзмерения
ЕдиницаНом = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
ЕдиницаНом.Наименование = НовНом.БазоваяЕдиницаИзмерения.Наименование;
ЕдиницаНом.ЕдиницаПоКлассификатору = НовНом.БазоваяЕдиницаИзмерения;
ЕдиницаНом.Коэффициент  = 1;
ЕдиницаНом.Владелец = НовНом.Ссылка;

Внезапно, в понедельник дважды тринадцатого числа
возникла ЕдиницаНом с наименованием "компл"
1 МосЭстрада
 
28.08.13
10:17
До этого и после этого стабильно были "шт".
2 zak555
 
28.08.13
10:17
ЕдиницаНом.ЕдиницаПоКлассификатору = НовНом;
3 Maxus43
 
28.08.13
10:24
я за кривой код голосую
4 МосЭстрада
 
28.08.13
10:24
(2) неужели?
5 МосЭстрада
 
28.08.13
10:25
(3) что же надо поправить?
6 mzelensky
 
28.08.13
10:27
(0) переделай это

НовНом.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");


На поиск по коду. Т.к. классификатор на то и классификатор .чтобы содержать международные коды единиц измерения.
7 Maxus43
 
28.08.13
10:28
(5) поправить хз, а НайтиПоНаименованию("шт") - уже криво.
Что вобще задумал то?
8 Serg_1960
 
28.08.13
10:28
(0) Так и хочется сказать - "Кривой код, а автор - ...". Не провоцируй :)
9 МосЭстрада
 
28.08.13
10:35
(6), (7) принимается
но вот только НовНом.БазоваяЕдиницаИзмерения записалась "шт"
и верификация это доказывает.
Откуда "компл"?
10 mzelensky
 
28.08.13
10:38
(9) "после драки кулаками не машут!"

Напиши правильно и надейся, что больше не повторится.
11 МосЭстрада
 
28.08.13
10:43
ну так "компл" значит из-за НайтиПоНаименованию?
12 Serg_1960
 
28.08.13
10:51
мБазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");
    Если ЗначениеЗаполнено(мБазоваяЕдиницаИзмерения) Тогда
        НовНом.БазоваяЕдиницаИзмерения = мБазоваяЕдиницаИзмерения
        НовНом.Записать();
        // ЕдиницыИзмерения
        ЕдиницаНом = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
        ЕдиницаНом.Наименование = мБазоваяЕдиницаИзмерения.Наименование;
        ЕдиницаНом.ЕдиницаПоКлассификатору = мБазоваяЕдиницаИзмерения;
        ЕдиницаНом.Коэффициент  = 1;
        ЕдиницаНом.Владелец = НовНом.Ссылка;
    Иначе
        ...
    КонецЕсли;
13 Odavid
 
28.08.13
11:04
(6)>> Т.к. классификатор на то и классификатор .чтобы содержать международные коды единиц измерения.
и как наименование "шт" превратилось в "компл"?
(12)если не ищет по наименвоанию - где гарантия, что корректно найдет по коду?
(0) если не удается повторить ситуацию - значит, глюк.
А это - ничего удивительного в 1С.
(8) если без изменения исходных данных код 100 раз выдал "шт", а на 101 - "компл", то что кривое - код, автор или еще что?
14 Serg_1960
 
28.08.13
11:14
А вот почему "компл".... присвоение значения реквизиту, запись объекта, а потом обращение через присвоенное значение... а чёрт его знает почему :(

"НайтиПоНаименованию" возвращает ссылку, а обращение к реквизиту "Наименование"  - обращение к объекту через ссылку. Т.е. объект будет получен или кеша, или - из базы.

Как кеши ломают базу - примеров много. Может быть, раз такая пьянка, то стоит изменить (12) на запрос к базе за ссылкой и наименование... незнаю разумно ли это.
15 Serg_1960
 
28.08.13
11:23
И вот ещё, вспомнил. Маловероятно, но...

Проверь по журналу регистрации, на всякий случай, что никто из  юзверей не юзает классификатор.

Был у меня один такой упырь в моём УППырище - изменил наименование в классификаторе с "шт" на "кг". Вместо того чтобы изменить в настройке единицу измерения "по умолчанию".
16 МосЭстрада
 
28.08.13
11:38
(15) этот справочник никто не трогал.
17 Odavid
 
28.08.13
12:37
(14)>>Как кеши ломают базу - примеров много
так от этого никакой код не спасет. Аналогично - и по НайтиПоКоду вовзратит какой-нибудь "компл".
18 Odavid
 
28.08.13
12:39
(14)>>то стоит изменить (12) на запрос к базе за ссылкой и наименование
- именно, что двойная независимая проверка - самое разумное в 1С.