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


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)сорри... не вымал глазки...



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