Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Семантическая ошибка или невнимательность?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
murderface
Всем доброго времени суток!



Пишу код:

Для поз=1 По СтрДлина(семестр) Цикл
    Если Сред(семестр,поз,1)="1" или Сред(семестр,поз,1)="2" или Сред(семестр,поз,1)="3"
                            или Сред(семестр,поз,1)="4" или Сред(семестр,поз,1)="5" или Сред(семестр,поз,1)="6"
                            или Сред(семестр,поз,1)="7" или Сред(семестр,поз,1)="8" Тогда
        НаборЗаписей = РегистрыСведений.НавчальнийПлан.СоздатьНаборЗаписей();
        запись=НаборЗаписей.Добавить();
        запись.Дисципліна=Дисциплина;
        запись.Групи=Групи;
        запись.Номер=Номер;
        запись.Семестр=Сред(семестр,поз,1);
        запись.ІДПодії=ид;
        запись.Подія=событие;
        НаборЗаписей.Записать(ЛОЖЬ);
    КонецЕсли;
КонецЦикла;


тоесть в случае, если в "семестр" записано 1,2 - будет создано две записи...

все отлично работает, но если значение будет 2,3 - обработка пытается создать либо еще одну запись со значением 2, либо еще одну со значением 3...
Ardi
Цитата(murderface @ 15.05.11, 23:48) необходимо зарегистрироваться для просмотра ссылки
все отлично работает, но если значение будет 2,3 - обработка пытается создать либо еще одну запись со значением 2, либо еще одну со значением 3...

Так со значением 2 или 3?

i Как добавить запись в непериодический независимый регистр сведений?
Для непериодического регистра сведений (рис. 3.4) создаем набор записей (листинг 3.87).


Рис. 3.4. Регистр Значения свойств
Листинг 3.87. Добавление записи в непериодический независимый регистр сведений
НаборЗаписей = РегистрыСведений.ЗначенияСвойств.СоздатьНаборЗаписей();
    
НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);
НаборЗаписей.Отбор.Свойство.Установить(ТекущееСвойство);
    
НоваяЗапись = НаборЗаписей.Добавить();

НоваяЗапись.Номенклатура = ТекущаяНоменклатура;
НоваяЗапись.Свойство = ТекущееСвойство;
НоваяЗапись.Значение = ТекущееЗначение;

НаборЗаписей.Записать();

Далее применяем отборы по нужным полям. Как правило, по измерениям, входящим в основной отбор.
Создаем новую запись, заполняем ее поля. Записываем новый набор записей с замещением всех записей, соответствующих отбору. Параметр Замещение метода Записать() по умолчанию имеет значение Истина.
Для чего нужно замещение?
Дело в том, что в любом регистре запись с конкретным ключом записи всегда уникальна. Для непериодического независимого регистра сведений ключом записи является конкретная комбинация значений измерений.
То есть запись с определенной комбинацией значений измерений может присутствовать только в единственном экземпляре. Попытка записать новую запись с тем же набором значений измерений привела бы к ошибке.
Кроме того, в подобной работе можно удариться в другую крайность.
Если не применить отбор, то при записи система попытается заместить все существующие записи регистра. В результате, добавляя новый набор записей с замещением, мы бы удалили все ранее введенные записи регистра!
murderface
Цитата(Ardi @ 15.05.11, 23:02) необходимо зарегистрироваться для просмотра ссылки
Так со значением 2 или 3?


а вот тут совсем интересно...

данные читаю из екселя...
так вот если значение 2,3 будет стоять первым - тогда будет создано две записи с двойкой и тройкой и обработка попытается создать еще одну запись с 3..

если же значение будет стоять в середине - тогда будет создана только одна запись с 2 и обработка попытается создать еще одну запись с 2..

соответственно процедура загрузки из екселя ругается что не может создать еще одну запись с такими ключевыми полями..
Ardi
Цитата
создано две записи с двойкой и тройкой и обработка попытается создать еще одну запись с 3..
одна запись с 2 и обработка попытается создать еще одну запись с 2..

ничего не понятно. Но к утру наверно туман с глаз спадает у вас спадет.
murderface
охох...
он 2,3 читает как 2,2999999..
как сделать чтобы он прочел 2,3?
GreenFox
Цитата(murderface @ 16.05.11, 11:06) необходимо зарегистрироваться для просмотра ссылки
охох...
он 2,3 читает как 2,2999999..
как сделать чтобы он прочел 2,3?


Окр(<Число>,2,1), где <Число> - переменная с Вашим значением.

Цитата
Окр (Round)
Синтаксис:

Окр(<Число>, <Разрядность>, <РежимОкругления>)

Параметры:

<Число> (обязательный)

Тип: Число. Исходное число.
<Разрядность> (необязательный)

Тип: Число. Определяет число знаков дробной части, до которых производится округление. Если параметр отрицательный, то число округляется до соответствующего разряда в целой части, начиная с младших разрядов.
Параметр обязательный, если указан параметр <РежимОкругления>.
Значение по умолчанию: 0
<РежимОкругления> (необязательный)

Тип: РежимОкругления. Определяет режим округления. Помимо системного перечисления допускается использование числового параметра: 0 - если при округлении 1.5 = 1; 1 - если при округлении 1.5 = 2.
Значение по умолчанию: Окр15как20
Возвращаемое значение:

Тип: Число. Число, полученное в результате округления.
Описание:

Округляет исходное число до нужной разрядности в соответствии с заданным режимом округления.
murderface
понял, спасибо)
Ardi
Это вы что тут прикалываетесь?
Как Сред(семестр,поз,1) может вернуть 2,2999999 ?
murderface
Цитата(Ardi @ 16.05.11, 14:04) необходимо зарегистрироваться для просмотра ссылки
Это вы что тут прикалываетесь?
Как Сред(семестр,поз,1) может вернуть 2,2999999 ?


не не не!
в "семестр" читается 2,29999
Ardi
какой тип данных семестр

в общем в текст нужно принудительно преобразовывать.
DartRomanius
Цитата(Ardi @ 16.05.11, 15:13) необходимо зарегистрироваться для просмотра ссылки
какой тип данных семестр

в общем в текст нужно принудительно преобразовывать.


Excel + Ole + 1С = 3 = 2,9999999 smile.gif
murderface
Цитата(DartRomanius @ 16.05.11, 14:17) необходимо зарегистрироваться для просмотра ссылки
Excel + Ole + 1С = 3 = 2,9999999 smile.gif


эт ж какая потеря данных!! biggrin.gif
Ardi
Если это из экселя - то считывать данные нужно из другого параметра.
murderface
Цитата(Ardi @ 16.05.11, 14:30) необходимо зарегистрироваться для просмотра ссылки
Если это из экселя - то считывать данные нужно из другого параметра.


я считал значение как .Text и все отлично заработало) спасибо за старания!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.