Имя: Пароль:
1C
1С v8
v8: Регистр сведений
,
0 fenlork
 
05.08.13
10:03
Подскажите, пож-ста, в рс должна попадать лишь одна запись за период получается (истина)т.е запись провел и должен сработать счетчик-запись с отбором по фильму/кинотеатру/количеству мест-в виде А/кинос/1, второй раз провел-запись формата А/Кинос/2 и т.д. 3, 4, 5 с утра туплю очень сильно не серчайте)
НаборЗаписей=РегистрыСведений.проданнобилетов.СоздатьНаборЗаписей();
    Наборзаписей.Отбор.Фильм.Установить(ЭтотОбъект.фильм);
    Наборзаписей.Отбор.Кинотеатр.Установить(ЭтотОбъект.Кинотеатр);
    НоваяЗапись=НаборЗаписей.Добавить();
    новаязапись.период=дата;
    НоваяЗапись.Кинотеатр=Кинотеатр;
    НоваяЗапись.фильм=фильм;
    //место=этотобъект.Место;
    //Пока место>-1 цикл ??счетчик?
        место=0;
        
    НоваяЗапись.количествомест= место+1;
    //конеццикла;
    НаборЗаписей.Записать(истина);
   //очисть после записи в РС
    ЭтотОбъект.место = неопределено;
    этотобъект.Ряд=неопределено;
    этотобъект.Сумма=неопределено;
1 Maxus43
 
05.08.13
10:07
РегистрыСведений.проданнобилетов - надеюсь так не будешь сдавать? с ошибками даже имена регистров, не позорь сообщество 1с, с одной "Н" слово продано!
2 Maxus43
 
05.08.13
10:08
Да и судя по задаче - классический регистр накопления должен быть, оборотный...
3 fenlork
 
05.08.13
10:08
лень пока исправлять..
4 fenlork
 
05.08.13
10:08
дело в том, что я через обработку делаю-без проведения документов
5 fisher
 
05.08.13
10:10
(0) Это оборотным регистром делается. Сведениями можно активные сеансы.
6 Maxus43
 
05.08.13
10:10
ну сделай запрос к регистру сначала, посчитай сколько уже мест, потом нужную цифру и пиши в регистр
7 fenlork
 
05.08.13
10:12
ок-спасибо, меняю все на ложь и пусть потом считают)каждую запись -1, 1, 1)
8 Maxus43
 
05.08.13
10:13
(7) лучше перепроектируй систему, кривая реализация, чесно. Оборотные регистры, документы и т.д.
9 fisher
 
05.08.13
10:16
(4) Очень зря. Обработкой или нет - но событие покупки билетов должно фиксироваться документом.
Вообще, если немножко подумать...
Тогда регистр должен быть
1) остаточный регистр. На него закидываются места и по мере покупки списываются. Потом закрытие некупленных. Зато при любых нагрузках работа с актуальными местами будет быстрой.
2) оборотный регистр для нормального анализа и отчетности. Типа регистра продаж.
10 fenlork
 
05.08.13
10:16
это все от кривого задания
11 fenlork
 
05.08.13
10:18
а, точно нельзя никакой счетчик впихнуть?
12 Maxus43
 
05.08.13
10:18
(10) это реализация такая, а не задание) никто не запрещает документ создавать программно и проводить из той же обработки, если юзер не должен видеть его.
13 fenlork
 
05.08.13
10:19
начальник запретил документы
14 Maxus43
 
05.08.13
10:19
(11) ну где ты его хранить то будешь?
15 fenlork
 
05.08.13
10:19
я на обучение просто
16 Maxus43
 
05.08.13
10:20
(13) ну и словите проблем, собственно уже сейчас ловите совершенно дурацкие проблемы
17 Maxus43
 
05.08.13
10:20
(11) > (6), что не получается то?
18 Starhan
 
05.08.13
10:21
(2) имхо нужна просто сетка мест с признаком занято/свободно по каждому сеансу.
19 fenlork
 
05.08.13
10:21
у меня все работает-хотелось улучшить
20 fenlork
 
05.08.13
10:23
кстати, за советы перемоделировать-спасибо, подумаю на досуге!
21 fisher
 
05.08.13
10:23
(19) Метод набора записей "Прочитать" тебя спасет. Добавляешь в сабжевый код для получения старого значения.
22 fenlork
 
05.08.13
10:24
хм..получить старое значение и + 1, так?
23 fisher
 
05.08.13
10:25
(22) Вот ты и смог описать алгоритм работы счетчика.
24 fisher
 
05.08.13
10:26
Только упаси тебя бог реальные задачи так автоматизировать. Это даже как тестовая задача очень странненько выглядит.
25 fenlork
 
05.08.13
10:29
мы простых путей не ищем-только так "по дальней прокси через Китай"))
26 fisher
 
05.08.13
10:36
(25) Речь не о простых путях. Речь о подходах. С таким подходом можно только однопользовательскую систему реализовать, да и то с кучей оговорок. Как только появится второй кассир - всё. Сливай воду.
27 fenlork
 
05.08.13
19:43
Подскажите пож-ста, вопрос такой, у меня есть записи в регистре сведений,в формате кинотеатр/фильм/кол-во мест,при продаже-продается один билет,в определенном кинотеатре на определенный фильм. Запись в регистре должна быть всего одна(истина). но при каждой так сказать"проводке" делаю через обработку без документов(так нужно, уж простите) количество мест увеличивается с шагам +1. В коде сначала сделал записи в регистр сведений, потом методом Прочитать() перебрал в цикле, и выбрал запись-вот тут проблема-место увеличивается лишь 1 раз, если сново провести за тот же период в том же кинотеатре и на тот же фильм-запись не меняется..
//запись по колличеству билетов
      НаборЗаписей=РегистрыСведений.проданобилетов.СоздатьНаборЗаписей();
      Наборзаписей.Отбор.Фильм.Установить(ЭтотОбъект.фильм);
      Наборзаписей.Отбор.Кинотеатр.Установить(ЭтотОбъект.Кинотеатр);
      НоваяЗапись=НаборЗаписей.Добавить();
      новаязапись.период=дата;
      НоваяЗапись.Кинотеатр=Кинотеатр;
      НоваяЗапись.фильм=фильм;
      НоваяЗапись.количествомест=1;
      НаборЗаписей.Записать();
      //изменитькол-во билетов
      НаборЗаписей = РегистрыСведений.проданобилетов.СоздатьНаборЗаписей();
      Наборзаписей.Отбор.Фильм.Установить(ЭтотОбъект.фильм);
      Наборзаписей.Отбор.Кинотеатр.Установить(ЭтотОбъект.Кинотеатр);

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

Для Каждого Запись Из НаборЗаписей Цикл

// Чтение и сообщение данных полей записи.
Сообщить(Строка(Запись.Период) + " " + Строка(Запись.кинотеатр) + " " + Строка(Запись.фильм)+" "+строка(запись.количествомест));

// Изменение данных полей записи.
      
Запись.количествомест =запись.количествомест+1 ;

КонецЦикла;
28 hhhh
 
05.08.13
20:50
а где Записать()  ?
29 fenlork
 
05.08.13
20:54
//запись по колличеству билетов
    НаборЗаписей=РегистрыСведений.проданобилетов.СоздатьНаборЗаписей();
    Наборзаписей.Отбор.Фильм.Установить(ЭтотОбъект.фильм);
    Наборзаписей.Отбор.Кинотеатр.Установить(ЭтотОбъект.Кинотеатр);
    НоваяЗапись=НаборЗаписей.Добавить();
    новаязапись.период=дата;
    НоваяЗапись.Кинотеатр=Кинотеатр;
    НоваяЗапись.фильм=фильм;
    НоваяЗапись.количествомест=1;
    НаборЗаписей.Записать();
    //изменитькол-во билетов
    НаборЗаписей = РегистрыСведений.проданобилетов.СоздатьНаборЗаписей();
    Наборзаписей.Отбор.Фильм.Установить(ЭтотОбъект.фильм);
    Наборзаписей.Отбор.Кинотеатр.Установить(ЭтотОбъект.Кинотеатр);

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

Для Каждого Запись Из НаборЗаписей Цикл

// Чтение и сообщение данных полей записи.
Сообщить(Строка(Запись.Период) + " " + Строка(Запись.кинотеатр) + " " + Строка(Запись.фильм)+" "+строка(запись.количествомест));

// Изменение данных полей записи.
    
Запись.количествомест =запись.количествомест+1 ;

КонецЦикла;

НаборЗаписей.Записать();
30 fenlork
 
05.08.13
20:54
все есть..
31 hhhh
 
05.08.13
22:24
(30) в 1с есть регистр: называется регистр сведений. Его основная фишка - каждому набору измерений соответствует ровно одна запись. У вас какие там измерения в вашем регистре?
32 fenlork
 
06.08.13
08:09
кинотеатр и фильм, ресур-колвомест
33 fenlork
 
06.08.13
08:14
Для Каждого Запись Из НаборЗаписей Цикл
   Запись.количествомест =запись.количествомест+1 ;
   Запись.Период=дата;
   запись.Кинотеатр=кинотеатр;
   запись.Фильм=фильм;
   Запись.Записать(истина);
КонецЦикла;     
если в цикле делать ругаеться на метод записать()
34 fenlork
 
06.08.13
08:15
может запись.наборзаписей.записать()
35 cw014
 
06.08.13
08:20
Регистр периодический? А на струя?
36 fenlork
 
06.08.13
08:42
делаю иначе-
НаборЗаписей = РегистрыСведений.проданобилетов.СоздатьНаборЗаписей();
    Наборзаписей.Отбор.Фильм.Установить(ЭтотОбъект.фильм);
    Наборзаписей.Отбор.Кинотеатр.Установить(ЭтотОбъект.Кинотеатр);

    НаборЗаписей.Прочитать();
    Если НаборЗаписей.Количество() = 0 Тогда
    НоваяЗапись=НаборЗаписей.Добавить();
    новаязапись.период=дата;
    НоваяЗапись.Кинотеатр=Кинотеатр;
    НоваяЗапись.фильм=фильм;
    НоваяЗапись.количествомест=1;

    ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
    Запись.КоличествоМест=запись.КоличествоМест+1;
   Запись.Период=дата;
   запись.Кинотеатр=кинотеатр;
   запись.Фильм=фильм;
    
            КонецЕсли;
            НаборЗаписей.Записать(истина);
37 fenlork
 
06.08.13
08:44
первую запись по условие добавляет, а по второму условию ругаеться
{Обработка.Обработка2.Форма.Форма1.Форма(53)}: Поле объекта не обнаружено (КоличествоМест)
    Запись.КоличествоМест=запись.КоличествоМест+1;
хотя запись в рс сохранилась
38 V01tk2010
 
06.08.13
08:55
(37) Почему Запись.КоличествоМест, а не НаборЗаписей[0].КоличествоМест
39 fenlork
 
06.08.13
09:01
НаборЗаписей = РегистрыСведений.проданобилетов.СоздатьНаборЗаписей();
    Наборзаписей.Отбор.Фильм.Установить(ЭтотОбъект.фильм);
    Наборзаписей.Отбор.Кинотеатр.Установить(ЭтотОбъект.Кинотеатр);

    НаборЗаписей.Прочитать();
    Если НаборЗаписей.Количество() = 0 Тогда
    НоваяЗапись=НаборЗаписей.Добавить();
    новаязапись.период=дата;
    НоваяЗапись.Кинотеатр=Кинотеатр;
    НоваяЗапись.фильм=фильм;
    НоваяЗапись.количествомест=1;

ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
    новаязапись=наборзаписей[0];
    НоваяЗапись=НаборЗаписей.Добавить();
    количествомест=новаязапись.КоличествоМест;
       НоваяЗапись.количествомест=запись.КоличествоМест+1;
    
            КонецЕсли;
            НаборЗаписей.Записать(истина);
40 V01tk2010
 
06.08.13
09:05
(39) А зачем добавлять если она уже есть?
ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
    наборзаписей[0].количествомест = наборзаписей[0].КоличествоМест+1;
КонецЕсли;
41 fenlork
 
06.08.13
09:07
спасибо  V01tk2010 работает..