|
Задача: создать N объектов в одной процедуре, записать их всех в другой | ☑ | ||
---|---|---|---|---|
0
e2e4
02.07.15
✎
11:08
|
от
Задача инвентаризации однотипных объектов - каков канонический подход? ответвилась следующая задача: надо создать НЕ ЗАПИСЫВАЯ в одной процедуре (ОбработкаЗаполнения в модуле документа) N элементов справочника. Потом (когда документ проводится) их, наконец, записать в справочник. С первой частью удалось успешно справиться: Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) //...что-то делаем; наконец, начинаем штамповать новые объекты: Для Счетчик = 1 По ЗаданноеКоличество Цикл //создаем, но пока не записываем новый элемент НовыйОбъект = Справочники.МойСправочник.СоздатьЭлемент(); НовыйОбъектСсылка = Справочники.МойСправочник.ПолучитьСсылку(Новый УникальныйИдентификатор); НовыйОбъект.УстановитьСсылкуНового(НовыйОбъектСсылка); НовыйОбъект.УстановитьНовыйКод(); //добавляем новую строку ТЧ - в ее первый реквизит надо ПОТОМ записать только что созданный элемент НоваяСтрока = МояТЧ.Добавить(); НоваяСтрока.МойОбъект = НовыйИнвНомер.Ссылка; //этот реквизит имеет тип СправочникСсылка.МойСправочник НоваяСтрока.Реквизит1 = тратата; //... НоваяСтрока.РеквизитN = туруру; КонецЦикла; //...что-то еще, если надо КонецПроцедуры А вот второй пункт плана пока не очень... Процедура ОбработкаПроведения(Отказ, Режим) Для Каждого МояСтрока Из МояТЧ Цикл //я хочу сейчас записать каждый элемент, созданный ранее //вариант 1. так не получится - метод Записать() недоступен: МояСтрока.МойОбъект.Записать(); //вариант 2. тоже не получится - "Элемент не выбран" (логично): НовыйОбъект = МояСтрока.МойОбъект.ПолучитьОбъект(); НовыйОбъект.Записать(); КонецЦикла; КонецПроцедуры ........какие будут идеи?... |
|||
1
mikecool
02.07.15
✎
11:09
|
ты сам когда думать начнешь?
|
|||
2
Лефмихалыч
02.07.15
✎
11:09
|
я предлагаю позвать программиста
|
|||
3
bolobol
02.07.15
✎
11:10
|
В ТЧ объект не сохранить, там нет такого типа
|
|||
4
Garykom
гуру
02.07.15
✎
11:11
|
(2) +1
и никогда не пытаться "записать" сторонние объекты "при проведении" |
|||
5
e2e4
02.07.15
✎
11:13
|
(4) дико плюсую, но если требования ТЗ дебильные, то я-то тут причем?
|
|||
6
bolobol
02.07.15
✎
11:13
|
А ссылка незаписанного объекта ссылается на несуществующий в базе объект, т.е. и получаете несуществующий.
|
|||
7
bolobol
02.07.15
✎
11:14
|
А раз уж на то пошло, хоть и пошло пошло, то создать ТЗ, синхронизированную с ТЧ, в одной из колонок ТЗ хранить сам объект.
|
|||
8
e2e4
02.07.15
✎
11:15
|
(6) вот, и я так и думаю...а что делать-то? помимо (2) (ха*3!)
|
|||
9
Fish
02.07.15
✎
11:15
|
(5) Объяснить это тому, кто составил такое ТЗ, и предложить нормальный вариант реализации.
|
|||
10
e2e4
02.07.15
✎
11:16
|
(7) то есть, объект все-таки записывать?))..тогда смысл...
|
|||
11
bolobol
02.07.15
✎
11:18
|
(10) Нет, в ТЗ можно хранить тип ***.Объект, а не только ссылки, как в ТЧ. Там и хранить до момента записи.
|
|||
12
Garykom
гуру
02.07.15
✎
11:18
|
создавать (и сразу записывать) объекты при вводе(добавлении) новой строки в ТЧ
|
|||
13
bolobol
02.07.15
✎
11:19
|
Так превьюшки перед загрузкой, например, данных из другой базы делаются - ТЗ на форму с незаписанными, но полностью заполненными объектами.
|
|||
14
Garykom
гуру
02.07.15
✎
11:19
|
(12) если эту строку ТЧ удалили или вообще док не стали записывать то просто пометить на удаление эти "созданные объекты"
|
|||
15
e2e4
02.07.15
✎
11:21
|
(12) (14) hello, cap!))
(11) покумекаем...спасибо! |
|||
16
Garykom
гуру
02.07.15
✎
11:25
|
а потом кто нибудь добавит что при записи объектов делаются исправления в документах каких то... и если это будут по совпадению того же вида документы
то будет интересная цикла при проведении документов... |
|||
17
Лефмихалыч
02.07.15
✎
11:26
|
При перепроведении что будет происходить? При изменении задним числом с перепроведением? При записи в режиме обмена данных? При восстановлении последовательности?
нельзя так делать. Потому, что последствия будут проблемой того, кто куйню сделал, а не того, кто куйню заказал |
|||
18
Лефмихалыч
02.07.15
✎
11:29
|
а речь-то оказывается про создание серий Задача инвентаризации однотипных объектов - каков канонический подход?
|
|||
19
Garykom
гуру
02.07.15
✎
11:29
|
(18) как бы в (0) он так и написал
|
|||
20
Garykom
гуру
02.07.15
✎
11:30
|
но такое впечатление что ТС с программированием вообще и БД каким то образом знаком, но только в теории или с реальными БД совсем не работал, по разным прикладным прогам хз
|
|||
21
Бубка Гоп
02.07.15
✎
11:31
|
(0) Лучше повесь создание этих объектов на отдельную кнопочку, отдай это на откуп юзерам. Не надо к проведению цепляться.
|
|||
22
e2e4
02.07.15
✎
11:41
|
(21) приходила эта хорошая мысль, но отвалилась по той же простой причине - а если юзер передумает проводить док? загаживать БД...
(1)(2) вообще, умные люди советуют учиться каждый день. А то можно застыть в позе "а позовите-ка программиста [==меня]" надолго, и прохлопать собственную профдеградацию... (20) раскрою секрет - теоретически подкован намного лучше, чем практически знаком с 1С (особенно восьмеркой). К сожалению, среди "спецов 1С" очень часто встречается обратный перекос - гораздо труднее устранимый. (сорри за ответную колкость;)) |
|||
23
hhhh
02.07.15
✎
11:46
|
(22) вроде наоборот, вы практик. Потому что в теории такого как в (0) вообще не может быть.
|
|||
24
e2e4
02.07.15
✎
11:50
|
(23) в каждой новой для себя среде я первым делом стараюсь нащупать границы дозволенного))
|
|||
25
e2e4
02.07.15
✎
11:52
|
(23) но, да - в (22) я имел в виду теоретическую подкованность в "программировании вообще и БД", а вот теоретический базис 1С изучаю. Как раз нащупыванием границ))
|
|||
26
Garykom
гуру
02.07.15
✎
11:58
|
(22) загадить бд пустыми неиспольземыми нигде объектами нестрашно
явно никогда кучу дублей наколоченных юзверями не чистили |
|||
27
Бубка Гоп
02.07.15
✎
12:00
|
(22) если боитесь загадить - можно написать регламентное. Раз в неделю будут удаляться объекты, созданные из непроведенных документов, например. Авторам будут прописываться розги прелюдно.
|
|||
28
e2e4
02.07.15
✎
12:38
|
(26) (27) даа....помню, в одном проекте (Perl+MySql) 2 миллиона пустых мусорных записей в справочнике)) - программист небольшую ошибочку сделал, вовремя не обнаружили:D
|
|||
29
bolobol
02.07.15
✎
13:10
|
(28) Да уж, два миллиона не обнаружить - это говорит об особой важности справочника)
|
|||
30
Лефмихалыч
модератор
02.07.15
✎
13:23
|
фалометрия детектед. У дельфина 50см - ни кто не выиграл
|
|||
31
ILM
гуру
02.07.15
✎
13:46
|
События и отложенные регламенты вам в помощь, хотя я против такой архитектуры.
|
|||
32
e2e4
02.07.15
✎
14:20
|
(30) согласен на ничью:D
(29) а тут, коллеги, вмешалась ее величество математика - в виде геометрической прогрессии. Этот справочник (как и куча других) тягался из центральной базы в региональные при каждой репликации. Из-за ошибки программиста он тягался и обратно в ЦБ (как обычные таблицы-факты), причем, по схеме репликации, каждой записи справочника присваивалась метка региональной БД. Поэтому ЦБ воспринимала эти записи как новые - и вставляла их себе в этот же справочник, снова помечая их своими. При следующей репликации ВСЕ записи эти записи опять отправлялись в регионы...И снова из каждой РБ возвращались и вставлялись в ЦБ! :D При этом, каждый регион видел только записи с пометкой ЦБ - поэтому никто из пользователей ничего дурного не замечал. Разве что процедура репликации чуть затягивалась... А когда я пришел в проект и стал расковыривать систему изнутри, мне часто приходилось проводить процедуру ПОЛНОЙ репликации - и она занимала от 20 минут до... в общем, смотря какой проц (его ресурсы сжирались на 100%, вентиляторы крутились как бешеные, обогреватель в квартире был не нужен!:))) Пока не расковырял, в чем дело. |
|||
33
ХардHard
02.07.15
✎
14:23
|
(0) Было или нет . Транзакции предлагали?
|
|||
34
Serg_1960
02.07.15
✎
14:29
|
(33) Фи, тривиальное решение предлагать - себя не уважать.
|
|||
35
ХардHard
02.07.15
✎
14:30
|
(34) Хз , я такое обычно в них делаю. Простите убогого.)
|
|||
36
e2e4
02.07.15
✎
14:33
|
(33) О! нет еще (тут в основном пока piсями мерялись)
копну! спасибо) |
|||
37
Serg_1960
02.07.15
✎
14:38
|
Ооо... вспомнил, я же делал подобную гадость для заказчика :)
Надо создавать новые объекты, заполнять их и, когда новый документ записывается в базу) - записывать в хранилище значений, а ссылки на хранилище - в ТЧ документа. Когда документ проводится (а с момента записи до момента проведения много времени может пройти - вот зачем нужно хранилище) - доставать из хранилища и записывать в справочник. Бред, конечно, однозначно, но за ваши деньги - любой каприз. |
|||
38
Lamer1C
02.07.15
✎
15:06
|
(0) тему не читал - транзакции уже предлагали?
|
|||
39
mTema32
02.07.15
✎
15:08
|
(38) [:|||:] :)
|
|||
40
dmpl
02.07.15
✎
15:23
|
(0) Делай все в обработке, которая и заполненный документ создаст, и нужные объекты.
|
|||
41
dmpl
02.07.15
✎
15:32
|
На крайний случай можно поступить как 1С в РС СписанныеТовары в партионном учете: в обработке заполнения добавляешь строки в РС, какие объекты надо создать, после записи - создаешь нужные объекты и удаляешь строки из РС.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |