Вход | Регистрация


1С:Предприятие ::

Метки:

Записывает дважды

Я
   Dmitry
 
28.02.04 - 20:40
Процедура ПриЗаписи()
       СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");
    СпрКонтр.ВыбратьЭлементы(); 
    Пока СпрКонтр.ПолучитьЭлемент()=1 Цикл

    Если СпрКонтр.ЭтоГруппа()=1 Тогда
         Гр=СпрКонтр.ТекущийЭлемент();
         Если Строка(СпрКонтр.Наименование)=Строка(Группа) тогда
              СпрКонтр.ИспользоватьРодителя(Гр); 
              СпрКонтр.Новый(); 
              СпрКонтр.Наименование=Наименование;
              СпрКонтр.НомерДоговора=НомерДоговора;
              СпрКонтр.Записать(); 
              Прервать; 
           КонецЕсли
    КонецЕсли; 

    КонецЦикла; 
КонецПроцедуры

Подскажите почему происходит запись дважды. Первая в нужную группу, а второй в корень справочника. Может я не правильно выбрал предопределенную процедуру. Или не в том месте. Если отключить мой модуль, то запись происходит все равно после нажатии кнопки ОК. Где редактируется программный код стандартной кнопки "ОК" (формула #записать?Закрыть).
 
  Рекламное место пустует
   GrayT
 
1 - 28.02.04 - 20:52
Потому, что я в прошлой ветке ответил
Как добавить элемент?
   Dmitry
 
2 - 28.02.04 - 21:08
Как понять я сижу в новом элементе? Как сделать чтобы я там не сидел?
   GrayT
 
3 - 28.02.04 - 21:11
Да зачем - не сидел
Все нормально. Просто в процедуре при записи не надо создавать Новый()
Достаточно просто написать ИспользоватьВладельца() (без Спр.)
И еще pit писал про Выбор групп, аль все с перечислением ,мягко говоря, ерундой занимаемся?
   Dmitry
 
4 - 28.02.04 - 21:42
Если не создавать новый(), то выдает ошибку, "Изменено Наименование" и не записывает!!
   GrayT
 
5 - 28.02.04 - 21:54
А ты его не изменяй, оно ведь на форме лежит, ну и пусть лежит.
   СпрКонтр = СоздатьОбъект("Справочник.Контрагенты"); 
   СпрКонтр.ВыбратьЭлементы(); 
   Пока СпрКонтр.ПолучитьЭлемент()=1 Цикл 
     Если СпрКонтр.ЭтоГруппа()=1 Тогда 
        Гр=СпрКонтр.ТекущийЭлемент(); 
        Если Строка(СпрКонтр.Наименование)=Строка(Группа) тогда 
            ИспользоватьРодителя(Гр); 
            Прервать; 
        КонецЕсли 
        КонецЕсли; 
   КонецЦикла; 

И все таки, посмотри ВыборГруппы()
   GrayT
 
6 - 28.02.04 - 21:56
+ Через перечисления криво это очень. А если группу переименуют, а если новая потребуется, бр-р-р...
   Dmitry
 
7 - 28.02.04 - 22:12
В этом случае элемент добавляется в корень, а не в группу.
   GrayT
 
8 - 28.02.04 - 22:15
млин, кидай в мыло модуль grayt<СОбака>front.ru
   GrayT
 
9 - 28.02.04 - 22:32
Проверь почту, постучись в аську
   GrayT
 
10 - 28.02.04 - 23:44
Хм и впрямь криво - Перепозиционировать новый элемент нельзя.
Ну уж если очень хочется, тогда так:
Процедура ПриЗаписи() 
    Спр = СоздатьОбъект("Справочник.Контрагенты");
    Спр.Новый();
    Спр.Код=Код;
    Спр.Наименование = Наименование;
    спр.Родитель = Группа;
    Спр.Записать();
    СтатусВозврата(0);
    Форма.Закрыть(0);
КонецПроцедуры// ПриЗаписи 

откуда возьмется Группа - это твои проблемы, хошь по наименованию ищи, хошь через выбор групп. По почте сброшу файлик с комментариями
 
  Рекламное место пустует
   327
11 - 29.02.04 - 00:01
Фигня какато.....

Не ясна цель.... Чего надо то ...
   Дмитрий
 
12 - 29.02.04 - 02:57
Процедура ПриЗаписи() где прописана?
   GrayT
 
13 - 29.02.04 - 09:08
Дык, модуль формы элемента.
   Львенок
 
14 - 29.02.04 - 09:48
Да, после тыканья выяснилось, то задача нетривиальная. А именно нетривиально изменить Родителя (по своему усмотрению) у элемента, коий открыт на редактирование (т.е. в форме элемента изменить родителя этого элемента). 1С-ка говорит: Объект не может быть перепозиционрован. Так вот, поэтому метод GrayT, мне кажется наиболее простым из действенных. Создается программно новый элемент - копия текущего. Он пишется в нужную группу, а текущий просто не записывается. Вот в чем смысл примера GrayT.
___
Искренне Ваш, Львенок.
   327
15 - 29.02.04 - 10:16
Фигня... Все нормально записывается и меняется ... Просто кошек нужно уметь готовить ...

В данном случае есть маленькая закавыка ...
   GrayT
 
16 - 29.02.04 - 10:20
(15)Ну так просвети, плз
   Кое-кто@где-то.там
17 - 29.02.04 - 11:06
(14) Для нового элемента это сработает, а сможешь из модуля формы элемента изменить родителя для _записанного_ элемента ?
   afk
18 - 29.02.04 - 12:11
(17) по-моему, так не получится... через ОбработкуОжидания() - но это уже не из модуля формы элемента
   327
19 - 29.02.04 - 12:11
есть несколько типовых ошибок ... при работе с элементом справочника ...

(14) не катит
\"Создается программно новый элемент - копия текущего. Он пишется в нужную группу, а текущий просто не записывается. \"  --  А ЕСЛИ ОТКРЫТА ФОРМА УЖЕ ЗАПИСАННОГО ЭЛЕМЕНТА? Последствия посмотрел?

Вообще есть несколько комбинаций условий... В каждом случае действия различаются ....
   327
20 - 29.02.04 - 12:12
(18) - можно и не через обработку ожидания ... но как замечено ... это не из модуля формы ....
   afk
21 - 29.02.04 - 13:08
(17) так ты знаешь способ? или все-таки блокировка открытого элемента не позволит?
   327
22 - 29.02.04 - 13:28
не позволит ...
   afk
23 - 29.02.04 - 13:29
327, спасибо
   GrayT
 
24 - 29.02.04 - 14:09
(17)(19) Проверитьвыбран элемент или нет не так уж и сложно.
(15)Так можно изменить изменить родителя у вновь созданного или нет?
   Кое-кто@где-то.там
25 - 29.02.04 - 17:52
Неужели я только один знаю, как в модуле формы  элемента изменить родителя? Без всяких там ОбработокОжидания и т.п.?
   327
26 - 29.02.04 - 18:01
(25) плиз... отдельно для меня, тупого.... по русски... можно по английски
   afk
27 - 29.02.04 - 19:46
(25) получается, из здесь присутствующих - один.
Расскажи, пожалуйста, как снять (обойти) блокировку элемента справочника.
   Кое-кто@где-то.там
28 - 29.02.04 - 19:48
(26, 27) ок, но чуть позже.
У кого-нить есть варианты? Кстати, этим же способом вполне можно воспользоваться для изменения даты проведенного документа непосредственно из самого документа ...
   327
29 - 29.02.04 - 19:51
колитесь, Шурочка, колитесь.... хотя я подозреваю как ....
   Кое-кто@где-то.там
30 - 29.02.04 - 19:52
Или это развод?!
   afk
31 - 29.02.04 - 19:52
да вроде больше никого эта тема не интересует...
   Львенок
 
32 - 29.02.04 - 19:53
Ребята, вот что в вас Т1С'овских реально тревожит, так это то, что от вас много умных слов и мало толку. Мы тут не на поле чудес, не на слабом звене и не на передаче уники и умницы. Знаете ответ, говорите, не знаете не пудрите мозги. Для записанного элемента у меня тоже ничего не получилось, если имеете ввиду что-то вроде:
Записать();
Родитель=...;
Записать();

Может Вы и знаете, но пока толку от ваших знаний меньше чем от нашего с GrayT незнания. Потому что мы не зная как сделать нормально, делаем ненормально, но работающе.
___
Искренне Ваш, Львенок.
   afk
33 - 29.02.04 - 19:54
(30) это к кому?
 
  Рекламное место пустует
   Кое-кто@где-то.там
34 - 29.02.04 - 19:56
(32) Во как тебя заело ;) А решение-то есть ...
   Dmitry
 
35 - 29.02.04 - 19:56
Давайте все-таки добъем мой вопрос до конца. А то у меня уже мозги кипятся. Помогите, а то я так и не освою 1С, энтузиазм пропадет!!!
   skunk
 
36 - 29.02.04 - 19:57
(32)как можно... а вдруг потом, кто покажет как это работать не будет, это же при всех обкаться... а ведь они круты только тем, что других обкакивать могут... через интернет...
   Кое-кто@где-то.там
37 - 29.02.04 - 20:00
(33) Это реплика.
   afk
38 - 29.02.04 - 20:00
а вроде Кое-кто модератор?
.
и если не хочешь знать - то можешь тихонько посидеть в уголочке...
а если хочешь - то выступаешь совершенно не по делу
   afk
39 - 29.02.04 - 20:02
skunk, да с вашим уровнем знаний... учиться бы да учиться
   Кое-кто@где-то.там
40 - 29.02.04 - 20:03
(36) Да вы чего-тут? Злые, блин, какие-то.
Да ладно, ща выложу и ссылку дам.
З.Ы, ну все-таки какие-же они злые ...
   Dmitry
 
41 - 29.02.04 - 20:05
Почему вы тут играете в кошки-мышки? Помогите вы реально с проблемой. Или вы тут только разговариваете

GrayT почти единственный кто реально мне помогает, а остальные только друг перед другом выпендриваются.

Сплошной флуд!!
   afk
42 - 29.02.04 - 20:05
(33) аа... ну тогда я купился
   Кое-кто@где-то.там
43 - 29.02.04 - 20:07
Вообщем качайте, смотрите.
И продолжаем обсуждение ...
http://disk.tom.ru/cgi-bin/down.cgi?pass=tQLdvSob
   afk
44 - 29.02.04 - 20:11
ндаа... мля... шутник
   327
45 - 29.02.04 - 20:12
а он нулевой... и на диске - скачка однократная ...

лучше кинь в мыло karkarde@pisem.net
   Dmitry
 
46 - 29.02.04 - 20:14
Почему на мыло, мне тоже надо!!!
   afk
47 - 29.02.04 - 20:14
да все это выступление начинает походить на дешевый вы**ончик... че бы код то не кинуть ... хе-хе-хе
   Кое-кто@где-то.там
48 - 29.02.04 - 20:18
Сорри, про "одноразовость" забыл.
Ща, на дапхаузе повторюсь ...
   afk
49 - 29.02.04 - 20:21
(48) да кинь код и делу конец! хе-хе-хе ... че ты так мучаешься, бедный
 
  Рекламное место пустует
   Кое-кто@где-то.там
50 - 29.02.04 - 20:22
   Львенок
 
51 - 29.02.04 - 20:22
(47) Вы все же поосторжней в выражениях. От вас я наблюдаю грубости, чем вы нарушаете первый (и основной) пункт правил. Забаню.
___
Искренне Ваш, Львенок.
   Кое-кто@где-то.там
52 - 29.02.04 - 20:27
(49) Не выкладываю код, потому что не уверен, что новички могут его вставить куда надо. А так - готовая конфочка ~10 Кб, можно сразу попробовать в Предприятии, или посмотреть в Конфигураторе ...
   Львенок
 
53 - 29.02.04 - 20:28
(50) ИМХО не прямее чем вариант, GrayT. Кода явно больше.
___
Искренне Ваш, Львенок.
   skunk
 
54 - 29.02.04 - 20:29
один баг, уже есть... но подождем, чего другие скажут...
   Кое-кто@где-то.там
55 - 29.02.04 - 20:34
(54) Даже догадываюсь какой ;)
Надо ещё пару Блокировок(1/0) в нужные места поставить ...
   skunk
 
56 - 29.02.04 - 20:36
нет так далеко я не ходил ;)

это второе что пришло на ум проверить посмотрев код...
   skunk
 
57 - 29.02.04 - 20:38
хотя признаться, честно решение лучше чем предлогал GrayT... тот обламывается на первом тесте...
   Кое-кто@где-то.там
58 - 29.02.04 - 20:48
А господ со звездами - официальных лиц форума - прошу перечитать их высказывания и сделать для себя выводы.
   afk
59 - 29.02.04 - 20:51
Кое-кто@где-то.там !!! Был не прав, извини ! ты крут! и шоумен неплохой хе-хе-хе
.
при работе нескольких пользователей придется добавить Блокировка(), но это копейки...
.
Спасибо!!
   Dmitry
 
60 - 29.02.04 - 20:54
Кое-кто@где-то.там Спасибо пример реальный. Сижу разбираюсь и понимаю, что понимаю я мало. Но ничего разберусь!
Спасибо!!!!
   afk
61 - 29.02.04 - 20:58
Кое-кто, баг о котором скунк говорит, скорее всего, - отсутствует проверка: ВыбРодитель.ЭтоГруппа() = 1
   skunk
 
62 - 29.02.04 - 21:03
(61)мимо... баг в другом...

(..)реально, сижу и думаю а на фиха менять родителя из формы элемента....
   Кое-кто@где-то.там
63 - 29.02.04 - 21:04
(61) Это не баг, это фича ;)
   skunk
 
64 - 29.02.04 - 21:04
+62 больше всего хочу узнать найдет его afk или нет...
   afk
65 - 29.02.04 - 21:08
хе-хе-хе ... я нашел самый примитивный "баг", вот и предположил ...
хе-хе-хе-хе ... а ты че реально представил что я сижу и ищу  - а нуу какооой же баг нашел скунк ???!!! хе-хе-хе
   skunk
 
66 - 29.02.04 - 21:11
"Для каждой сложной задачи существует ответ, который короток, прост и неправилен." (с)Х.Л.Менкен

просто в тему...


(65)даже не думаю об этом... желаю не наступить на грабли когда будешь это использовать в реале ;)  удачного использования...
   327
67 - 29.02.04 - 21:28
Красиво.... приятно посмотреть ...

Есть еще одна решаемая плюшка (просто некрасиво).... но тоже решаемая... юзер будет пугаться сообщения "Сохранить изменения" просто при просмотре...


А вообще я тож сразу не въехал - а на кой менять родителя в форме элемента

Скунк верно заметил ....
"(..)реально, сижу и думаю а на фиха менять родителя из формы элемента.... "

Посомтрел - у меня смена прикручена в форме списка... с вопросом - "Куда пхаем"....
   Кое-кто@где-то.там
68 - 29.02.04 - 21:49
Честно сказать я особой нужды в этом (смены родителя внутри элемента) тоже не вижу ;)
Но можно применять эту технологию для, повторюсь, измения даты проведенного документа без лишних телодвижений или, н-р, совместной работы нескольких пользователей над одним документом вполне даже возможно. Наверняка можно найти и другие сферы применения ...
   327
69 - 29.02.04 - 21:58
Ну уж нет.... Пусть штатно корячатся... Чтобы был протокол .... и мордой их в стол в случае чего ...

А совместную работу я делал на другом принципе ... пахать там надо много.... Делал несколько раз... как то мало привлекает .... ублюдочными средствами делать такие вещи ....
   Dmitry
 
70 - 29.02.04 - 22:03
Дак подскажите более простой способ, как заполнить справочник элементами, с помощью диалога, и записывать в выбранную группу! (Там кроме наименования много и других реквизитов, поэтому нужен диалогое заполнение)
   GrayT
 
71 - 29.02.04 - 22:50
Кажеться. я что -то пропустил :)
(70) Там функция КопироватьЭлемент(Контекст,С) копирует
все реквизиты.
С остальным пока не разобрался
   GrayT
 
72 - 29.02.04 - 23:20
ИМНО. Не спорю - предложенный вариант более правильный. Но для меня, честно признаюсь, было неожиданностью, что не так-то просто изменить родителя у нового элемента. И возможно не для меня одного - ветка то вон где начиналась
Как добавить элемент?
И так как я наткнулся на проблему, то старался решить ее БЫСТРО, не задаваяь вопросом: зачем так надо? Ну хочеться ему так. Если мой вариант дожимать, то в нечто подобное он запросто мог вырасти. То что он смертельно кривой я естественно понимал. Но вот такой кусок ради непонятной задачи: "Сохранить новый элемент в какую-нибудь другую группу" - сложно все это, особенного для "молодого" см (70).

И зачем вы опять расшумелись - кто круче? Лично я, очень внимательно прислушиваюсь к ребятам с территории. У них есть чему мне можно поучиться, особенно когда они говорят по делу, например как в этом примере   :)))
   Dmitry
 
73 - 01.03.04 - 00:01
Зачем написан код в форме списка справочника, ведь условие  "Если" никогда не выполняется?
   Львенок
 
74 - 01.03.04 - 00:07
И я прислушиваюсь... И я знаю, что они много знают. Но меня всегда убивает, что ради пары десятков строчек кода, приходится просмотреть не менее пары сотен строчек флэйма (и хорошо если вида: "Нет так. И не так. И так не сработает. А я знаю как. А вы не знаете сами как? А кто еще знает как?", а не вида "Эксперты не экспертны. Всэх убью одын останусь. Только люди с отставаниями в умственном развитии не знают, как это сделать...").
P.S.: Эксперты в контексте этого форума, это те, кто вроде GrayT, "натолкнувшись на ЧУЖУЮ проблему, стараются решить ее БЫСТРО, не задаваясь вопросом: зачем так надо?".
___
Искренне Ваш, Львенок.
   GrayT
 
75 - 01.03.04 - 00:34
Вот покавырялся в модуле. Идея с подменой текущего элемента - класс. Только из пушки по воробьям - стОит ли? Придется постоянно помнить что не простой это элемент.
А что получиться если у этого справочника будут подчиненные и на форме потребуется кнопка записать? ...
   SnarkHunter
 
76 - 01.03.04 - 04:39
(74)БЫСТРО и НЕПРАВИЛЬНО... См. (57) и (66)... К тому же те, кому отвечают, быстро привыкают к стилю работы "спросил - сделал - забыл"... Через некоторое время всплывают те же самые вопросы...
   skunk
 
77 - 01.03.04 - 05:01
(68)изменение даты так может ойкунуться в ТиСе... а ЗиК подбросит основательно... за Бухию незнаю...

дату можно изменить и не открывая дока, если уж так сильно надо... без лишних телодвижений...
   SAS_Chelny
 
78 - 01.03.04 - 05:15
Думал затихла ветка...ан нет жив курилка :)
   327
79 - 01.03.04 - 06:06
Вот код процедуры, которая пишет элементы в справочник.
заготовки экспортируются из экселя в тз (это отсутствует), затем правятся, если надо (это отсутствует), затем пишутся в справочник с заполнением параметров

Процедура Сформировать()     
   //---------------------------------------

   // проверки - все, что возможно проверить

    if ВыбГруппа.Selected() <> 1 then DoMessageBox ("Не выбрана группа для записи"); return; endIf; 
    if ОсновнаяЕдиница.Selected() <> 1 then DoMessageBox ("Не выбрана основная единица");  return; endIf;  
   if ВидНоменклатуры.Selected() <> 1 then DoMessageBox ("Не указан вид номенклатуры");   return; endIf;
   if СтавкаНДС.Selected() <> 1 then       DoMessageBox ("Не указана ставка НДС");        return; endIf;
   if СтавкаНП.Selected() <> 1 then        DoMessageBox ("Не указана ставка НП");         return; endIf;
   if Form.тз.Visible() <> 1 then          DoMessageBox ("Проблемы с таблицей");          return; endIf;
    if тз.LinesCnt() =0 then                DoMessageBox ("Нечего записывать в справочник"); return;endIf; 
   //----------------------------------------

    Деталь = CreateObject("Reference.Номенклатура");          
    ЕдиницаИзм = CreateObject("Reference.Единицы");
   //=========================================

    т = CreateObject("Table");
    т.SourceTable("Таблица");

   //---------------------------------------

   // перебор ТЗ

for индекс = 1 to ТЗ.LinesCnt()  do
    ТЗ.GetLineByNumber(индекс);
        ПолныйКодДетали =  TrimAll(Тз.Артикул);
   // поищем деталь в справочнике по полному коду

    if Деталь.FindByAttribute ("Артикул", ПолныйКодДетали, 1) =0 then
        Деталь.New();
        if TrimAll(ТЗ.Товар) ="" 
            then     Деталь.Description = TrimAll(ТЗ.Артикул);
            else       Деталь.Description = TrimAll(ТЗ.Товар);
        endIf; 
        Деталь.Артикул = ПолныйКодДетали; 
        Деталь.Весовой =0;      // штучный товар

        Деталь.ПолнНаименование =     Деталь.Description +
        " "+TrimAll(тз.Артикул)+
        " "+TrimAll(тз.Кол2)+
        " "+TrimAll(тз.Кол3);
        Деталь.ВидНоменклатуры = ВидНоменклатуры;
        Деталь.СтавкаНДС = СтавкаНДС; 
        Деталь.СтавкаНП  = СтавкаНП;
       //            Деталь.СтавкаНП =  Const.ДляЗагрузкиСтавкаНП;

        Деталь.Комментарий = Деталь.Description +
    " "+TrimAll(тз.Артикул)+
    " "+TrimAll(тз.Кол2)+
    " "+TrimAll(тз.Кол3);
    Деталь.Parent = ВыбГруппа;
    Деталь.Write();
    пЭлемент = Деталь.CurrentItem();
    пАрт     = Деталь.Артикул;
    пЭ          = Деталь.CurrentItem();
    т.PutSection("А1");
    status (""+деталь.CurrentItem());
    
   //----------------------------------------------

   // дозапишем единицы измерения


        ЕдиницаИзм.UseOwner(Деталь);
        ЕдиницаИзм.New();
        ЕдиницаИзм.ОКЕИ = ОсновнаяЕдиница;
        ЕдиницаИзм.Коэффициент = 1;
        ЕдиницаИзм.Write();
        Деталь.БазоваяЕдиница = ЕдиницаИзм.CurrentItem();
        Деталь.Write();
    else 
       //  выведем в отчет, когда деталь найдена по артикулу

        пЭлемент = Деталь.CurrentItem();
        пАрт     = Деталь.Артикул;
        пЭ          = Деталь.CurrentItem();
        т.PutSection("А2");              
        status (""+деталь.CurrentItem());
    endIf;
endDo;

    т.ReadOnly(1); 
    т.Options(0,0,, ,"мм ", "мм" ); 
    т.PageSetup(1 ,  ,  ,  ,  ,  ,  ,  ,  , 1 ,  1 );
    т.Show("Отчет");

EndProcedure
   SnarkHunter
 
80 - 01.03.04 - 06:07
Хыхы... Сейчас будут претензии... По поводу англоязычности... :-)
   skunk
 
81 - 01.03.04 - 06:27
(79)если, честно то не понял к чему
   327
82 - 01.03.04 - 06:33
Программное создание элементов с записью в выбранную группу, с заполнением многих параметров по умолчанию .... см 70....
   skunk
 
83 - 01.03.04 - 06:34
(82)сорри... не вымал глазки...



Список тем форума
Рекламное место пустует   Рекламное место пустует
Основная теорема систематики: Новые системы плодят новые проблемы.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует