Имя: Пароль:
1C
1С v8
Как оптимизировать данный код?
,
0 SherifSP
 
23.04.13
13:53
Есть РС "ФКР" непериодический, независимый. В него записываю данные при обработке действий фискального регистратора. Ищу записи, если нет, тогда записываю, если есть, циклом прохожу по записям и проверяю совпадения данных ресурса РС "ТоварКод" с данными фискального регистратора. Все бы ничего, но данных "ТоварКод" в РС может не быть, как мне проверить если нет, тогда записываю новую запись?

   НЗ = РегистрыСведений.ФКР.СоздатьНаборЗаписей();
           НЗ.Отбор.КассовыйАпарат.Установить(Модель);
           НЗ.Отбор.НомерZОтчета.Установить(НомерZОтчета);
           НЗ.Прочитать();
           Если НЗ.Количество() = 0 Тогда
               НоваяЗапись = НЗ.Добавить();
               НоваяЗапись.КассовыйАпарат = Модель;
               НоваяЗапись.НомерZОтчета = НомерZОтчета;
               НоваяЗапись.ТоварКод = Строка(Код1С);
               НоваяЗапись.КодАртикула = КодАртикула;
               НоваяЗапись.Наименование = Наименование1С;
               НоваяЗапись.НалоговаяГруппа = НалоговаяГруппа1С;
               НоваяЗапись.Цена = Окр(Цена1С,2);
               НоваяЗапись.ТоварДелимость = Делимость1С;
               НЗ.Записать();
           Иначе
               Для Каждого СтрокаНЗ Из НЗ Цикл
                   Если СтрокаНЗ.ТоварКод = Строка(Код1С) Тогда
                       Если (СтрокаНЗ.Цена <> Окр(Цена1С,2)) ИЛИ(СтрокаНЗ.НалоговаяГруппа <> НалоговаяГруппа1С)  
                           ИЛИ (СтрокаНЗ.Наименование  <> Наименование1С) Тогда
                           НЗ.Цена = Окр(Цена1С,2);
                           НЗ.ТоварКод = Строка(Код1С);
                           НЗ.НалоговаяГруппа = НалоговаяГруппа1С;
                           НЗ.Наименование = Наименование1С;  
                           НЗ.Записать();
                           Прервать;
                       КонецЕсли;    
                   КонецЕсли;
               КонецЦикла;
           КонецЕсли;
1 zak555
 
23.04.13
13:55
а если есть данные -- нужно их перезаписывать ?
2 1C-band
 
23.04.13
13:55
Прервать или Продолжить?
3 SherifSP
 
23.04.13
13:57
(1) Если есть тогда сравниваю Если СтрокаНЗ.ТоварКод = Строка(Код1С) Тогда  и если в записи не совпадает к примеру цена, перезаписываю данные
4 SherifSP
 
23.04.13
13:58
(2) Прервать
5 Рэйв
 
23.04.13
13:58
Прсто делай отбор, добавляй новые записи по фиск. регистратору и делай

Набор.Записать(Истина)

Были записи или не были - все будет поновому как надо
6 Галахад
 
гуру
23.04.13
13:59
Почему не писать все?
7 1C-band
 
23.04.13
13:59
(0) Вообще, конечно, такое делается запросом. Потом смотришь на .Количество() результата запроса и добавляешь нужные строки.
8 SherifSP
 
23.04.13
14:01
(5) По вот этому отбору несколько записей
  НЗ.Отбор.КассовыйАпарат.Установить(Модель);
           НЗ.Отбор.НомерZОтчета.Установить(НомерZОтчета);
А вы предлагаете все записи удалить и записать одну новую
9 SherifSP
 
23.04.13
14:03
(7) Могу, но весь код выполняется в цикле, это на каждую запись нужно будит запросом в базу лазить и выгребать данные, посчитал что не кошерно
10 SherifSP
 
23.04.13
14:05
+(9) Могу перед циклом выбрать все записи и методом найти строки найти свою строку, но как ее потом перезаписать?
11 Галахад
 
гуру
23.04.13
14:05
Не понимаю. Если два раза пробьют батон, в регистре одно событие будет?
12 Fragster
 
гуру
23.04.13
14:05
получить запросом нужные данные и создать/именить нужное
13 Рэйв
 
23.04.13
14:06
(8)Запись будет для каждого Отбора
14 SherifSP
 
23.04.13
14:07
(13) Ладно, сейчас попробую
15 Рэйв
 
23.04.13
14:25
для каждого набора отборов!  а то щас начнешь на каждую строку записывать в самом деле:-)
16 SherifSP
 
23.04.13
14:26
(15) Да нет, вот так вот сделал

НЗ = РегистрыСведений.ФКР.СоздатьНаборЗаписей();
           НЗ.Отбор.КассовыйАпарат.Установить(Модель);
           НЗ.Отбор.НомерZОтчета.Установить(НомерZОтчета);
           НЗ.Прочитать();
           
               НоваяЗапись = НЗ.Добавить();
               НоваяЗапись.КассовыйАпарат = Модель;
               НоваяЗапись.НомерZОтчета = НомерZОтчета;
               НоваяЗапись.ТоварКод = Строка(Код1С);
               НоваяЗапись.КодАртикула = КодАртикула;
               НоваяЗапись.Наименование = Наименование1С;
               НоваяЗапись.НалоговаяГруппа = НалоговаяГруппа1С;
               НоваяЗапись.Цена = Окр(Цена1С,2);
               НоваяЗапись.ТоварДелимость = Делимость1С;
               НЗ.Записать(Истина);
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан