| 
    
            
         
         | 
    
    
  | 
Задача: создать 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С в РС СписанныеТовары в партионном учете: в обработке заполнения добавляешь строки в РС, какие объекты надо создать, после записи - создаешь нужные объекты и удаляешь строки из РС.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |