Имя: Пароль:
1C
1С v8
КД. модификация регистра сведений при переносе
,
0 DmitryPavlik
 
17.12.12
21:02
Все привет.
Есть переписанные УПП и УТ, в каждой конфе имеется регистр сведений Штрихкоды, данные передаются из УПП в УТ, в УПП допускается дублирование ШК,а в УТ нет, через КД сделал следующее: добавил в УТ в РС ШК поле "ЛожныйШтрихКод", куда пишу дубль, а взамен генерирую новый, в в ПКО Штрихкоды в модуль ПослеЗагрузки добавил такой код.

Если ОбъектНайден Тогда
   
   // повторно записывать не будем
   //Отказ = Истина;
   
Иначе
       
   Запрос=Новый Запрос();
   Запрос.Текст =        "ВЫБРАТЬ
                       |    Штрихкоды.Владелец,
                       |    Штрихкоды.ЕдиницаИзмерения
                       |ИЗ
                       |    РегистрСведений.Штрихкоды КАК Штрихкоды
                       |ГДЕ
                       |     Штрихкоды.Штрихкод = &ШтрихКод";
   Запрос.УстановитьПараметр("ШтрихКод"        , Объект.Штрихкод);
   Выборка = Запрос.Выполнить().Выбрать();
   
   Если Выборка.Следующий() Тогда
       
       // Такой записи нет, но есть другая с таким-же ШК
       // Создаём ложный ШК
       
       Запрос.Текст = "ВЫБРАТЬ
                       |    Штрихкоды.Владелец,
                       |    Штрихкоды.ЕдиницаИзмерения,
                       |    Штрихкоды.ЛожныйШтрихКод
                       |    
                       |ИЗ
                       |    РегистрСведений.Штрихкоды КАК Штрихкоды
                       |ГДЕ
                       |    Штрихкоды.ЛожныйШтрихКод = &ШтрихКод
                       |    И Штрихкоды.Владелец = &Владелец
                       |    И Штрихкоды.ЕдиницаИзмерения = &ЕдиницаИзмерения";
       Запрос.УстановитьПараметр("ШтрихКод"            , Объект.Штрихкод);            
       Запрос.УстановитьПараметр("Владелец"        , Объект.Владелец);            
       Запрос.УстановитьПараметр("ЕдиницаИзмерения"    , Объект.ЕдиницаИзмерения);            
       Выборка = Запрос.Выполнить().Выбрать();
       
       Если Выборка.Следующий() Тогда
           //такой шк есть
           //такой ложный шк есть
           // значит, мы уже генерировали шк
           Объект.ЛожныйШтрихКод = Выборка.ЛожныйШтрихКод;
           //Отказ = Истина;
       Иначе
           Объект.ЛожныйШтрихКод = Объект.Штрихкод;
           Объект.Штрихкод      = Формат(Число(ИТИ_КлиентСерверыеПроцедуры.СформироватьШтрихКод())+1, "ЧГ=");
       КонецЕсли;
   Иначе
       // ничего не делаем: объекта нет, такого ШК нет - записываем
       
   КонецЕсли;
   
КонецЕсли;

и вот что получается: при снятой галочке "записывать регистры наборами записей" они вообще не появляются,а если поставить, то будет ошибка отбора (я же модифирую набор).

Вопрос: какое решение проблемы можете подсказать?
1 echo77
 
17.12.12
21:15
Если ОбъектНайден? Вы в регистрах сведений по полям поиска что-то пишите? Там же поиск не работает, ИМХО, он просто тупо переписывает запись
2 DmitryPavlik
 
17.12.12
21:24
(1) По-сути, это строка из регистра.
3 DmitryPavlik
 
17.12.12
21:24
(1) а Объект - это типа структуры получается, куда пишутся поля
4 DrShad
 
17.12.12
21:29
объект это набор записей
5 DmitryPavlik
 
17.12.12
21:33
(4) объяснял для (1) :)
6 DrShad
 
17.12.12
21:34
(5) что-то ты и в (2) и в (3) ошибся
7 DmitryPavlik
 
17.12.12
21:35
(4) по делу есть какие-либо мысли?
как вариант - обрабатывать записи на этапе записи в "МодульНабораЗаписей", но прикол в том, что это именно набор записей, и если в нем менять запись, а именно сам штрихкод, то появится ошибка о не соответствии отбору.
8 DrShad
 
17.12.12
21:37
[то появится ошибка о не соответствии отбору.] ни о чем не говорит?
9 echo77
 
17.12.12
21:38
Если ОбъектНайден не пробовал турнуть?
10 DrShad
 
17.12.12
21:38
при выгрузке сразу все передавать либо потом только через менеджер записи смог что-то сделать
11 DrShad
 
17.12.12
21:39
(9) зачем!?
12 DmitryPavlik
 
17.12.12
21:40
в идеале просто собрать в таблицу всё, а потом из КД уже обработать её и записать самому нужные записи, но что-то не вижу такого функционала.
13 DrShad
 
17.12.12
21:44
(12) сформируй нормальную выборку для выгрузки и ее выгружай, а не физические записи регистра
14 echo77
 
17.12.12
21:44
(11) Ах, да, у тебя же все работает!
(12) Собирай все в параметр, при записи ставь отказ. В обработчике конвертации После... чего-то там пиши записи в регистр по твоему алгоритму
15 DmitryPavlik
 
17.12.12
21:52
(14) вот это идея - совсем забыл про Параметры!!!
16 DmitryPavlik
 
19.12.12
07:48
Через параметры не получилось - передать так можно тот параметр, который был задан в диалоге.
Сделал так: передаю рс шк, потом при загрузка заполняю промежуточную таблицу, отказываюсь от записи регистра, после загрузки данных (самый конец) обрабатываю и записываю регистры по своему алгоритму.
17 Defender aka LINN
 
19.12.12
08:04
(16) Месье знает толк в извращениях...
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс