Имя: Пароль:
1C
1С v8
Как вам такой код работы с РС?
,
0 Обработка
 
17.09.21
08:28
Вот таких записей у меня много оказалось.
Постарался кто-то из предыдущих...

НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(ДокЗаказаПокупателя);
НаборЗаписей.Отбор.Свойство.Установить(СтатусCOF000047);
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
    
Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
Запись.Объект = ДокЗаказаПокупателя;
Запись.Свойство = СтатусCOF000047;
Запись.Значение = Справочники.А_СтатусыЗаказов.НайтиПоНаименованию("Возврат");
Запись.Записать();
1 Обработка
 
17.09.21
08:28
Нафига набором отбирать и чистить запись потом менеджером писать еще?
2 Галахад
 
гуру
17.09.21
08:33
(0) Ну что сказать. Старательный программист...
3 ДенисЧ
 
17.09.21
08:42
Зато гарантировано там ничего лишнего не будет...
4 Mikeware
 
17.09.21
08:47
(3) для гарантии надо минимум три раза очистить-записать... а потом еще прочитать и проверить...
5 ДенисЧ
 
17.09.21
08:51
(4) Ну, я так понимаю, ТС не в ФСБ работает, это там такие способы практикуются... Да ещё с перезаписью 19ю паттернами...
6 Обработка
 
17.09.21
08:53
Я начал рефакторинг делать даже статусы были через найти . Я вытащил их в переменные.
И тут я увидел такой расклад )))

СтатусCOF000050 = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("COF000050"); //Строка 28 - [N] Новый
    СтатусCOF000047 = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("COF000047"); //СпрСтатус 29 - Новый
    СтатусCOF000027 = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("COF000027"); //Строка 30 - N
    
    Если Строка(Статус) = "Новый" Тогда
        
        //28 строка
        НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Объект.Установить(ДокЗаказаПокупателя);
        НаборЗаписей.Отбор.Свойство.Установить(СтатусCOF000050);
        НаборЗаписей.Очистить();
        НаборЗаписей.Записать();

        Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        Запись.Объект = ДокЗаказаПокупателя;
        Запись.Свойство = СтатусCOF000050;
        Запись.Значение = "[N] Новый";
        Запись.Записать();
        
        //29 строка
        НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Объект.Установить(ДокЗаказаПокупателя);
        НаборЗаписей.Отбор.Свойство.Установить(СтатусCOF000047);
        НаборЗаписей.Очистить();
        НаборЗаписей.Записать();
        
        Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        Запись.Объект = ДокЗаказаПокупателя;
        Запись.Свойство = СтатусCOF000047;
        Запись.Значение = Справочники.А_СтатусыЗаказов.НайтиПоНаименованию("Новый");
        Запись.Записать();
        
        //30 строка
        НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Объект.Установить(ДокЗаказаПокупателя);
        НаборЗаписей.Отбор.Свойство.Установить(СтатусCOF000027);
        НаборЗаписей.Очистить();
        НаборЗаписей.Записать();
        
        Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
        Запись.Объект = ДокЗаказаПокупателя;
        Запись.Свойство = СтатусCOF000027;
        Запись.Значение = "N";
        Запись.Записать();
        
    ИначеЕсли Строка(Статус) = "В обработке" Тогда
7 Ненавижу 1С
 
гуру
17.09.21
08:54
Вы лучше скажите зачем платформа заставляет заполнять измерения, участвующие в отборе, если никаким другим образом (кроме как значениями отбора) их заполнить невозможно?
8 ДенисЧ
 
17.09.21
08:55
(6) "Я начал рефакторинг"
Надеюсь, у тебя 100% code testing coverage?
9 Ненавижу 1С
 
гуру
17.09.21
08:55
(6) мотивация по количеству строк кода
10 Mikeware
 
17.09.21
08:56
(7) "так заведено в этом зоопарке"©
11 Вафель
 
17.09.21
08:57
Очистить не не нужно.
Можно сразу писать
12 Mikeware
 
17.09.21
09:00
(11) а зачем двойное отрицание?
13 Широкий
 
17.09.21
09:02
(11) ладно что хоть не читает записи
14 Обработка
 
17.09.21
09:03
Кодеры нынче не читают мануалы.

https://its.1c.ru/db/metod8dev/content/2486/hdoc

НаборЗаписей = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Объект.Установить(ПолеВводаНоменклатура);

Для Каждого СтрокаТаблицы Из ТаблицаСвойств Цикл
  
   НоваяЗапись = НаборЗаписей.Добавить();
  
   НоваяЗапись.Объект = ПолеВводаНоменклатура;
   НоваяЗапись.Свойство = СтрокаТаблицы.Свойство;
   НоваяЗапись.Значение = СтрокаТаблицы.ЗначениеСвойства;
КонецЦикла;

НаборЗаписей.Записать();
В результате выполнения этого кода новые записи будут добавлены в регистр, или, если регистр уже содержит записи с указанным значением измерения "Объект" (по которому установлен отбор в наборе записей), - существующие записи будут заменены новыми.
15 Галахад
 
гуру
17.09.21
09:04
(14) Покажешь свой код после рефакторинга? :-)
16 Обработка
 
17.09.21
09:06
(15) Да тут куда не плюнь везде засада.
Просто руки опускаются.
Коллега говорит - забей. Работает и не трожь, пока нам поддержать работу баз до перехода в КА2. ...
17 Галахад
 
гуру
17.09.21
09:07
(16) Коллега не прав. Наверное часть функционала придется переносить и в КА2.
18 Обработка
 
17.09.21
09:08
Кстати как лучше набором отобрать и записать или просто тупо менеджером записать?
19 Обработка
 
17.09.21
09:09
+ 18 В обсуждении пишут что для одной записи не принципиально.
20 Megas
 
17.09.21
10:22
(16) Наоборот норм,  берёшь и исправляешь, даже думать не нужно. И сразу виден результат!
Очень приятные задачи, расслабляют!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.