Имя: Пароль:
1C
1C 7.7
v7: Нужна помощь (СуммаВзаиморасчетов)
0 bestship
 
14.10.15
08:45
Программно создается подчиненный документ (сделан на основе КорректировкаДолга), всё заполняется на основании документа-родителя.
Вопрос следующий: если Сумма отличная от Договор.ВалютаВзаиморасчетов, то СуммаВзаиморасчетов подчиненного документа = сумме, что не верно.
Но если в ручном режиме изменить валюту документа, то СуммаВзаиморасчетов пересчитывается правильно.
Сумма по документу прописана формула:
глФРМ(СуммаВзаиморасчетов, Договор.ВалютаВзаиморасчетов)
Подскажите, КАК сделать автоматический пересчет, чтобы не подчиненный документ сам правильно пересчитывал СуммуВзаиморасчетов без ручного изменения и пересчета валюты?
http://savepic.su/6225830.png
1 mishaPH
 
модератор
14.10.15
08:46
фигасе.
2 mishaPH
 
модератор
14.10.15
08:47
Ну вот проследи, какой код работает при изменении ручном. И задействуй его при вводе на основании
3 Смотрящий
 
14.10.15
08:47
(0) Посмотреть какая функция вызывается при изменении Сумма, в ней найти изменени СуммаВзаиморасчетов
4 bestship
 
14.10.15
08:52
(2) Всё вроде правильно говорите, вызывается как и во всех остальных стандартных документах Процедура ПриИзмененииВалюты(). НО... она работает только в ручном режиме. Даже во всех остальных докуметах.
5 mishaPH
 
модератор
14.10.15
08:54
(4) ну так запхни ее в процедуру приВводеНаосновании() в доке. после заполнения еще и пройдись этой процедурой
6 mishaPH
 
модератор
14.10.15
08:55
сначала идет как идет заполнение цифр при вводе на основании, а затем добавь ПриИзмененииВалюты() она все и досчитает
7 bestship
 
14.10.15
08:59
(6) Я извиняюсь за тупые вопросы.
Есть еще Процедура ПересчетСуммыВзаиморасчетов().
Она прописана последней строкой в процедурах ПриИзмененииДаты / Валюты / Договора// Курса и т.д.
А может эту процедуру тогда было бы логично прописать в ВводНаОсновании(ДокументОснование)?
8 mishaPH
 
модератор
14.10.15
09:00
(7) можно. при вводе на основании либо что-то неак, либо не хватает этого финала про пересчет, который вызывается всегда при изменении табличных частей например.
9 HawkEye
 
14.10.15
09:00
(7) сначала заполняешь реквизиты документа (Сумма, Валюта, Курс, Договор) потом делаешь:
    
СуммаВзаиморасчетов = глПересчет(Сумма,
                    Валюта,Курс,
                    Договор.ВалютаВзаиморасчетов,ДатаДок);
10 mishaPH
 
модератор
14.10.15
09:00
ставь любую, которая выдает нужный тебе результат
11 mishaPH
 
модератор
14.10.15
09:00
Коллега. кстати как вас в Афган занесло. не часто такое тут увидишь.
12 Масянька
 
14.10.15
09:05
(7) А ты хорошо посмотрел ВводНаОсновании?
У меня ТиС: в вводнаосновании есть заполнениепоитогам, там и идет пересчет взаиморасчетов.
Может чего не досмотрел?
13 bestship
 
14.10.15
09:15
(11) ну тут много российских компаний. только у них учет российский и им не нужно перед местной налоговой сдаваться.
мне же приходится делать 7ку под себя.
14 bestship
 
14.10.15
09:16
(12) у меня Комплексная
Там так:
Процедура ВводНаОсновании(ДокументОснование)
        
    СинонимДокумента    = ПредставлениеВида();
    СинонимОснования    = ДокументОснование.ПредставлениеВида();
    
    Список    = глПолучитьСписокВводимыхНаОсновании(ДокументОснование);
    Поз        = Список.НайтиЗначение(Вид());
    
    // выполним проверку, можно ли вводить документ на основании ДокументОснование
    Если Поз = 0 Тогда
        // ДокументОснование не найден в списке разрешенных
        Предупреждение("Документ """ + СинонимДокумента +
                        """ нельзя вводить на основании """ + СинонимОснования + """", 60);
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
    
    КодОперации    = Перечисление.КодыОпераций.Продажа;
    глЗаполнитьШапкуНаОсн(Контекст,ДокументОснование);
    
    ДатаОплаты = глБанковскаяДата(ДатаДок, Договор.ГлубинаКредита);
    
    // По умолчанию выписываем в той же валюте и по тому же курсу, что и документ-основание
    Валюта = ДокументОснование.Валюта;
    Курс   = ДокументОснование.Курс;
    Кратность = ДокументОснование.Кратность;
    ДокОснование = ДокументОснование.ТекущийДокумент();

    СтарыйКонтрагент    = Контрагент;
    СтарыйДоговор        = Договор;
        
КонецПроцедуры // ВводНаОсновании()
15 Масянька
 
14.10.15
09:17
(14) Вижу. А где заполнение таб. части на основании?
16 bestship
 
14.10.15
09:18
(9) Так это всё прописано стандартно здесь:
Процедура ПересчетСуммыВзаиморасчетов()
        
    Если ПустоеЗначение(Договор.ВалютаВзаиморасчетов) = 1 Тогда
        СуммаВзаиморасчетов    = 0;    
    Иначе
        СуммаВзаиморасчетов = глПересчет(Сумма, Валюта,Курс, Договор.ВалютаВзаиморасчетов,ДатаДок,Кратность);
    КонецЕсли;
    
    Форма.Обновить();

КонецПроцедуры // ПересчетСуммыВзаиморасчетов()
17 bestship
 
14.10.15
09:19
(15) У меня нет Таб.части в этом документе. Это документ КорректировкаДолга в типовой
18 Масянька
 
14.10.15
09:21
(17) У меня в КорректировкаДолга нет ВводНаОсновании. Есть ВводНового:

Процедура ВводНового(Скопирован)
                      
    глЗаполнитьШапку(Контекст, Скопирован);
    
    Если Скопирован = 1 Тогда    //копирование документа
        ПересчетСуммыВзаиморасчетов();
        Возврат;
    КонецЕсли;
    
    Если Форма.Параметр = "Покупатель" Тогда  
        ВидОперации = Перечисление.ВидыОперацийКоррДолга.Покупатель;
    Иначе
        ВидОперации = Перечисление.ВидыОперацийКоррДолга.Поставщик;
    КонецЕсли;    
    
КонецПроцедуры
19 bestship
 
14.10.15
09:22
(18) Такое тоже есть. 1 в 1
20 Масянька
 
14.10.15
09:24
(19) Показывай, что в ПересчетСуммыВзаиморасчетов.
21 bestship
 
14.10.15
09:27
(20) Получается по факту, что документ заполняется на основании родителя. И валюта правильно заполняется. НО... не пересчитывает, только если ручками происходит типа изменение валюты.

Процедура ПересчетСуммыВзаиморасчетов()
        
    Если ПустоеЗначение(Договор.ВалютаВзаиморасчетов) = 1 Тогда
        СуммаВзаиморасчетов    = 0;    
    Иначе
        СуммаВзаиморасчетов = глПересчет(Сумма, Валюта,Курс, Договор.ВалютаВзаиморасчетов,ДатаДок,Кратность);
    КонецЕсли;
    
    Форма.Обновить();

КонецПроцедуры// ПересчетСуммыВзаиморасчетов()
22 Масянька
 
14.10.15
09:30
(21) Один в один...
Только ради тебя ( :)))) ) - сейчас ввела корректировку долга (новую, без основания) по новому договору в евро - у меня все шикарно сразу же отображается на форме.
Попробуй - без основания (просто новый док-т) тоже глючит?
23 bestship
 
14.10.15
09:32
(22) В том то и дело(((, что Корректировка у меня обязана создаваться программно (по галочке) на основании ПКО/РКО/Банк +/Банк-
24 Масянька
 
14.10.15
09:34
(23) То есть ты её сам писал?
25 bestship
 
14.10.15
09:36
(24) Зачем?!)))
Просто скопировал типовой Корректировка. Переименовал, как мне надо.
В родителях дописал Функцию СоздатьДокументWithholdingTaxOnContractor(Док)
с заполненим данных
26 Масянька
 
14.10.15
09:41
(25) Понятно. А ПересчетСуммыВзаиморасчетов воткнул? В ВводНаОсновании. В (14) не вижу.
27 Злопчинский
 
14.10.15
09:42
(0) >  Сумма отличная от Договор.ВалютаВзаиморасчетов
сумма всегда не равна валюте взаиморасчетов
28 bestship
 
14.10.15
09:45
(26) Да, не работает((((
....
    // По умолчанию выписываем в той же валюте и по тому же курсу, что и документ-основание
    Валюта = ДокументОснование.Валюта;
    Курс   = ДокументОснование.Курс;
    Кратность = ДокументОснование.Кратность;
    ДокОснование = ДокументОснование.ТекущийДокумент();
    ПересчетСуммыВзаиморасчетов();
    
    СтарыйКонтрагент    = Контрагент;
    СтарыйДоговор        = Договор;
        
КонецПроцедуры // ВводНаОсновании()
29 bestship
 
14.10.15
09:47
(27) Выебнулся!? Доволен!?
Да, ошибся! Конечно же ВАЛЮТА не равна ... и далее по тексту.
30 Масянька
 
14.10.15
09:48
(28) Со мной отладчик не разговаривает, поэтому я использую Сообщить(). Либо смотри отладчиком, либо вставляй Сообщить() и лови, где и в чем косяк.
(29) Не надо ругаться.
31 oslokot
 
14.10.15
09:50
(30) [Со мной отладчик не разговаривает, поэтому я использую Сообщить()]

о_О !!!
32 HawkEye
 
14.10.15
09:51
(16) я в курсе, только это не вызывается при вводе на основании...
34 Масянька
 
14.10.15
09:53
(31) Что "о_О"? Да, не разговаривает.
35 Смотрящий
 
14.10.15
09:54
(33) ДАй посмотреть что у тебя там твоится
36 HawkEye
 
14.10.15
09:57
(33) что-то ты не договариваешь...
если у тебя реквизиты документы совпадают, то и суммаВзаиморасчетов должна совпадать без всяких пересчетов

показывай целиком ВводаНаОсновании
37 bestship
 
14.10.15
09:59
(36) (14)
38 HawkEye
 
14.10.15
10:02
(37) ну а сумма где?
39 Масянька
 
14.10.15
10:06
(38) Да, сказала уже.
40 bestship
 
14.10.15
10:07
ВСЕМ СПАСИБО!
Особенно Масяньке и HawkEye-за наводку.
Спасла такая конструкция в родителе:
Док.СуммаВзаиморасчетов    = глПересчет(Док.Сумма,Док.Валюта,Док.Курс,Док.Договор.ВалютаВзаиморасчетов,Док.ДатаДок,Док.Кратность);

Может и неправильно, зато работает.)))
41 Масянька
 
14.10.15
10:08
(40) Мне - шоколадку :)))))
42 HawkEye
 
14.10.15
10:08
(39) я все не читал )))


(40) можно и так, но зачем лезть в код "Родителя"?
надо просто в ВводНаОсновании()
добавить:
Сумма = ДокументОснование.Сумма
СуммаВзаиморасчетов    = ДокументОснование.СуммаВзаиморасчетов
43 mishaPH
 
модератор
14.10.15
10:09
Я на эту Док.СуммаВзаиморасчетов уже наступал и не раз. движения и проводки идут по этому реквизиту и после перезаполнения таблички доки если не пересчитать его - проблемы.
44 HawkEye
 
14.10.15
10:10
+42... блин ты же программно создаешь документ.. при чем тут вообще тогда ВводНаОсновании.....
45 mishaPH
 
модератор
14.10.15
10:12
(44) а программно через ввод на основании нельзя? я так делал ;)

а при программном вообще 100% надо этот Док.СуммаВзаиморасчетов пересчитывать в итоге
46 HawkEye
 
14.10.15
10:12
(40)
так пиши в коде где создаешь документ...
Док.Сумма = Сумма
Док.СуммаВзаиморасчетов    = СуммаВзаиморасчетов.
47 Масянька
 
14.10.15
10:12
(42) (44) Не знаю полной задачи. Вполне вероятно, что можно и не создавать новый док-т (в конфигураторе).
48 bestship
 
14.10.15
10:12
(42) Неее, так не пойдет, потому что ДокументОснование у меня может быть на миллион, а подчиненный документ только на 2 или 7% от этой суммы. И подчиненный создается автоматом от родителя. поэтому в родителе и дописал.

(44) как причем!? именно на основании родителя и создается документ и заполняется тоже.
49 HawkEye
 
14.10.15
10:13
(45) при чем тут льзя\нельзя... он же не так делает...
50 HawkEye
 
14.10.15
10:15
(48) так тебя же 100 раз спросили.. как сумму подчиненного рассчитываешь...

п.2 - читай описание методов... в твоем случае - он не причем...
51 oslokot
 
14.10.15
10:15
(34) В смысле, "отладчик не разговаривает"?

Не запускается, не срабатывает по точке останова или не умеешь им пользоваться?
52 HawkEye
 
14.10.15
10:15
(51) последнее...
53 Масянька
 
14.10.15
10:17
(51) Не начинай.
Мне уже и help рисовали... Не получается. А может привыкла к Сообщить...
54 aka AMIGO
 
14.10.15
10:17
(41) ТС пожалел? Ну, так и я тебя пожалею, держи: http://taline.ru/wp-content/uploads/2012/01/2012-02-26-Масяня-768x1024.jpg :)


ЗЫ. Проблема ТС решена. Смысл обсуждать личность?
55 bestship
 
14.10.15
10:17
(51) ну я, например, не умею и не понимаю, как им пользоваться. Не давно показали.
И чЁ!?
Литературы, написанной ЧЕЛОВЕЧЕСКИМ языком нет. А остальные умничают, а показать слабо, т.к. сами не умеют.
56 Масянька
 
14.10.15
10:18
(54) Канибализмом попахивает :)))))))))))))))))))
58 Масянька
 
14.10.15
10:19
(55) Поддержу.
В классике (языки программирования) таких проблем не было (у меня) :(
59 HawkEye
 
14.10.15
10:20
(55) чего там уметь то?
минимум кликаешь на желтой полосе мышкой - получишь точку останова, запускаешь 1С как алгоритм дойдет до поставленной  точки - откроется отладчик... и смотри значение любой переменной... или дальше шагай по строчкам...
60 aka AMIGO
 
14.10.15
10:21
(55) описание работы в нём не особенно нужно.
Список иконок сверху, пройдись мышой, и будет ясно, как работать
А также применить Метод научного тыка - залог победы тобой  отладчика.
61 Масянька
 
14.10.15
10:24
(55) Если хочешь - давай мыло, я тебе отправлю help.
62 bestship
 
14.10.15
10:24
(60) Исключительно вечный Метод научного тыка помогает решать возникающие проблемы по 1С.
Вам хорошо - Вы все программисты и учились на это. А когда надо работать и нет возможности ждать, приходится учиться и  использовать Метод научного тыка.
63 Масянька
 
14.10.15
10:25
(62) Как раз "программисты" очень мешает. Очень :(
64 bestship
 
14.10.15
10:25
(61) Конечно же хочу)))
bestship@mail.ru
65 Масянька
 
14.10.15
10:27
(64) Лови :)
66 aka AMIGO
 
14.10.15
10:28
(62) начало работы, путь в отладчик: http://pics.rsh.ru/img/22_uvnniplr.png
67 Масянька
 
14.10.15
10:30
(66) А не ты мне делал help по отладчику?
68 aka AMIGO
 
14.10.15
10:31
+66 продолжение, правда, это анализ производительности:
http://pics.rsh.ru/img/22_fpml6st1.png

(67) кажись, я :) остались doc"и :)
69 Масянька
 
14.10.15
10:32
(68) Вот я и скинула автору :)
Еще раз - спасибо :)
70 aka AMIGO
 
14.10.15
10:33
(69) да не за что :)
71 aka AMIGO
 
14.10.15
10:36
1с-овский отладчик очень напоминает клипперовский, году так в 1993-м пришлось заниматься отладкой прожки-бухучета, очень помогал :)
Правда, в клиппере только значения переменных.. Но это не суть важно :)
72 Масянька
 
14.10.15
10:48
(71) Не соглашусь. В Clipper'е всё было легко и просто.
И маленький ОФФ: - Дедушка, а ты динозавров видел? :)))))))
73 aka AMIGO
 
14.10.15
10:50
(72) видел! они такиииеее!! вот такие :)
74 bestship
 
14.10.15
11:57
(69) Мася, спасибо за help. Буду разбираться и тыкать по кнопочкам по инструкции)))
75 Масянька
 
14.10.15
12:13
(74) По большей части, "спасибо" не мне, а aka AMIGO. :)

PS А как вставлять ник, как ссылку?
76 aka AMIGO
 
14.10.15
12:16
(75) пкм на нике, копировать ссылку, в поле сообщения пкм вставить :)
77 aka AMIGO
 
14.10.15
12:18
альтернатива - лкм на нике, тащить его в поле Сообщщения :)
78 vicof
 
14.10.15
12:20
или собаку перед ником поставить
79 Масянька
 
14.10.15
12:21
vicof
пробую
80 Масянька
 
14.10.15
12:22
(76) (77) (78) Спасибо огромное!
81 mishaPH
 
модератор
14.10.15
12:27
к конфигуратору советую поставить набор плагинов расширения конфигуратора. собраны в одном пакте от пенконфа помоему. там и телепат есть
82 Масянька
 
14.10.15
12:41
(81) Да подождите Вы с портретом... Дайте ему со статуей разобраться. (С)
Если автор не бросит это гиблое дело, то - дойдет :)
83 Злопчинский
 
14.10.15
21:29
(29) да ты не представляешь как я доволен!
как пишем - так и думаем.
ошибки в письме (концептуальные) - следствие беспорядка и непоследовательности мышления - о чем здесь говорить...? Одно дело вместо "здравствуйте" написать "зрдаствуйте" - это я еще могу понять.. и простить... Но сравнить сумму с валютой - не, мое чувство прекрасного - бунтует!
84 Злопчинский
 
14.10.15
21:30
(72) Clarion 2.1 по сравнению с Clipper был как небоскреб с лачугой нищего...