|
Как оптимизировать данный код? | ☑ | ||
---|---|---|---|---|
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С; НЗ.Записать(Истина); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |