Имя: Пароль:
1C
1С v8
Номер платежного поручения.
,
0 MiracMC
 
05.12.18
21:38
Добрый вечер.

1С:Підприємство 8.3 (8.3.13.1513)
Бухгалтерия для Украины, редакция 1.2. (1.2.46.1)

Программно заполняю платежное поручение исходящее.
Передаю в него значение реквизита "НомерПоручения"...

ДокППИ = Документы.ПлатежноеПоручениеИсходящее.СоздатьДокумент();
ДокППИ.Контрагент  = Контрагент;
ДокППИ.Организация = Фирма;
ДокППИ.СчетОрганизации = СчетФирмы;
ДокППИ.ВалютаДокумента = Вадюта;
ДокППИ.Дата = ДатаДок;
ДокППИ.СуммаДокумента = Сумма;
ДокППИ.НомерПоручения = НомерПлатежки;
.....
ДокППИ.Записать();


но в итоге получаю в этом поле сквозной нумератор системы...

как обойти проблему?
1 AlvlSpb
 
05.12.18
23:07
(0) Если типовая, то в модуле объекта Документа.ПлатежноеПоручениеИсходящее в ПередЗаписью
устанавливается номер. Т.е. чтобы вы не назначили как номер при программном создании документа, при записи или проведении установится стандартный номер. Отключите в коде его установку (только надо ли)
2 MiracMC
 
06.12.18
02:03
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если (НЕ РасшифровкаПлатежа.Итог("СуммаПлатежа")= СуммаДокумента)
       и (ЕстьРасчетыСКонтрагентами или ЕстьРасчетыПоКредитам) Тогда

        
        Если Вопрос(НСтр("ru='Не совпадают сумма документа и ее расшифровка. Пересчитать сумму документа?';uk='Не збігаються сума документа і її розшифровка. Перерахувати суму документа?'"),РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да)=КодВозвратаДиалога.Да Тогда
            
            СуммаДокумента=РасшифровкаПлатежа.Итог("СуммаПлатежа");
            
        Иначе
            
            Отказ = Истина;
            
        КонецЕсли;
        
    КонецЕсли;
    
    Если Ответственный.Пустая() Тогда
        Ответственный = глЗначениеПеременной("глТекущийПользователь");
    КонецЕсли;
    
    Если РасшифровкаПлатежа.Количество()=1 Тогда
        ДоговорКонтрагента = СтрокаПлатеж.ДоговорКонтрагента;
        
        Если НЕ ЗначениеЗаполнено(СтрокаПлатеж.СчетУчетаРасчетовСКонтрагентом) Тогда
            СтрокаПлатеж.СчетУчетаРасчетовСКонтрагентом=СчетУчетаРасчетовСКонтрагентом;
        КонецЕсли;
        
    Иначе
        ДоговорКонтрагента=Новый(Тип("СправочникСсылка.ДоговорыКонтрагентов"));
    КонецЕсли;
    
    Если НЕ Оплачено Тогда
        ДатаВыписки = Дата;
    КонецЕсли;

    мМассивПлатежныхВедомостей = Новый Соответствие;
    Если Проведен Тогда
        Для каждого СтрокаТЧ Из Ссылка.ВыплатаЗаработнойПлаты Цикл
            мМассивПлатежныхВедомостей.Вставить(СтрокаТЧ.Ведомость,СтрокаТЧ.Ведомость)
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры
3 MiracMC
 
06.12.18
02:05
Дело в том что я перерыл весь модуль этого документа... нет там нигде явного НомерПоручения = ....

а заполняю я программно это документ из обработки импорта клиент-банка... и естественно мне надо вписать номер поручения который пришло из банка...
значение передается... но где то теряется по пути... и не могу найти где((((
4 Кулибин
 
06.12.18
02:53
Подписка?
5 dchumak
 
06.12.18
05:59
Процедура ПриУстановкеНовогоНомера или подписка на событие.
6 Мимохожий Однако
 
06.12.18
06:55
(3) Возможно, это реквизит формы , а не документа
7 MiracMC
 
06.12.18
08:19
(5)
Там всего 2 процедуры которые как то затрагивают нужный мне параметр

Процедура УстановитьДоступностьПоляВводаНомерПоручения()

    ЭлементыФормы.НомерПоручения.ТолькоПросмотр = НЕ ЗначениеЗаполнено(НомерПоручения);
    Если ЭлементыФормы.НомерПоручения.ТолькоПросмотр Тогда
        ЭлементыФормы.НомерПоручения.Подсказка =  НСтр("ru='Номер поручения будет присвоен при записи объекта.';uk=""Номер доручення буде привласнений при записі об'єкта.""");
    Иначе
        ЭлементыФормы.НомерПоручения.Подсказка =  НСтр("ru='Номер поручения';uk='Номер доручення'");
    КонецЕсли;

КонецПроцедуры

Процедура СброситьУстановленныйНомерПоручения()
    
    НомерПоручения = "";
    УстановитьДоступностьПоляВводаНомерПоручения();
    
КонецПроцедуры    


При всем этом СброситьУстановленныйНомерПоручения() вызываеться всего в одном слечае

Процедура ДатаПриИзменении(Элемент)
...
// Номер меняем, если документ не проведен и "перемещается" в другой день
    Если (НЕ Проведен) И (НачалоДня(Дата)<> НачалоДня(мТекущаяДатаДокумента)) Тогда
        СброситьУстановленныйНомерПоручения();
    КонецЕсли;
...
КонецПроцедуры
8 MiracMC
 
06.12.18
08:20
(6) увы нет.. это именно реквизит документа...
9 catena
 
06.12.18
08:34
(8)Подписки на событие смотрел?
10 Мимохожий Однако
 
06.12.18
09:08
Если конфигурация на УФ, то можно добавить код изменения номера через Расширение после\вместо типовой процедуры установки нового номера
11 AlvlSpb
 
06.12.18
10:05
(7) Ищи УстановитьНомерПоручения(). По крайней мере в УТП для Украины эта процедура устанавливает номер в ПлатежноеПоручениеИсходящее. Вполне возможно, что и в БП так же
12 dchumak
 
06.12.18
10:42
(7) нужно смотреть в модуле объекта, а не формы. Плюс подписки на события.
13 MiracMC
 
08.12.18
00:45
Да как бы все перерыл но так и не могу понять происходящее.
Сам в 8-рке очень не давно.. в 7.7. такого не было...
Натыкаюсь регулярно на какую то мистику... Может мне кто то сможет объяснить происходящее...

Все та же обработка что я писал выше.. Еще несколько полей заполняю (Комментарий, СумаПлатежа...) и тоже они не отображаются в документе...

С ТаблицейЗначения на форме играюсь...
Делаю так же как написано везде... уже все методы перепробовал... она на форме "табСДДС"

втаб = Новый ТаблицаЗначений;
    втаб.Колонки.Добавить("Действие",,"Дейтвие",);
    втаб.Колонки.Добавить("статья",Новый ОписаниеТипов("Справочники.СтатьиДвиженияДенежныхСредств"),"Статья движения денежных средств",);
    новстр = втаб.Добавить();
    новстр.Действие = "Получение денег от покупателя";
    новстр.статья = Справочники.СтатьиДвиженияДенежныхСредств.ПустаяСсылка();
    
    ЭлементыФормы.табСДДС.Ширина = 500;
    ЭлементыФормы.табСДДС.Высота = 350;
    ЭлементыФормы.табСДДС.Лево = 20;
    ЭлементыФормы.табСДДС.Верх = 20;
    
    ЭлементыФормы.табСДДС.Значение = втаб;
    ЭлементыФормы.табСДДС.СоздатьКолонки();
    ЭлементыФормы.табСДДС.Колонки[0].Ширина = 20;
    Сообщить("пришли туда куда надо");
    ЭтаФорма.Обновить();


Но таблица "визуально" просто пустая...
Сообщить(табСДДС.Колонки.Количество()) возвращает 2
Сообщить(табСДДС.Количество()) возвращает 1
А ан форме нет ничего....

Я, толи мало пъю что б это понять, то ли надо что то покрепче)))

Заранее благодарен всем за помощь....
14 hhhh
 
08.12.18
02:23
(13) а в какую процедуру вставляете этот код? может он не выполняется?
15 Мимохожий Однако
 
08.12.18
08:12
(13) "С ТаблицейЗначения на форме играюсь..."
В этом ошибка. Надо обращаться к реквизитам объекта.
И второе. Этот код к изменению номера никак не относится.
16 MiracMC
 
08.12.18
11:06
(14) Вопрос снят... действительно не выполнялся код из (13). Наверно вчера совсем уже уставший был))


(15) Согласен. не имеет.
По теме

ДокППИ.НомерПоручения = НомерПлатежки;   // не работает
ДокППИ.Комментарий = Назначение;   // не работает
ДокППИ.ОтражатьВБухгалтерскомУчете = Истина;  // не работает
ДокППИ.ОтраженоВОперУчете = Истина;  // не работает

Переда каждой передачей значение я проверил что б значение было... оно есть... и даже "по пути" выводил

Сообщить(ДокППИ.НомерПоручения );   // значение есть!

Но после того как документ записывается значение значения меняются на что то иное


НомерПоручения =  заполняет автонумеротор
Комментарий = пустое
ОтражатьВБухгалтерскомУчете = Ложь
ОтраженоВОперУчете = Ложь

Про касается модуля документа...
Про НомерПоручения там есть вот такая формулировка

Если НЕ ЗначениеЗаполнено(НомерПоручения) ИЛИ ЭтоНовый() Тогда

Попытка
        НомерПорученияЧисло = Число(ТаблицаЗначений[0].Номер) + 1;
        НомерПоручения = Формат(НомерПорученияЧисло, "ЧГ=0");
    Исключение
        НомерПоручения = 1;
    КонецПопытки;
КонецЕсли;

Я так понимаю что именно это и влияет. Как обойти ЭтоНовый()?

Про остальные реквизиты ничего похожего ни в модуле форму документа, ни в модуле документ нет(

Заранее спасибо за Вашу помощь.
17 Мимохожий Однако
 
08.12.18
11:14
(16) В каком модуле находится этот код, в какой процедуре?
18 MiracMC
 
08.12.18
11:21
(17) в модуле Объекта, процедура ПередЗаписью()
19 hhhh
 
08.12.18
12:43
(18) почему тогда

ДокППИ.НомерПоручения = НомерПлатежки;   ??

надо

НомерПоручения = НомерПлатежки;
20 MiracMC
 
10.12.18
14:37
(19) Вы немного недопоняли..
Конечно же в моей обработке, где у меня не получается сделать то о чем я пишу выше должно быть написано

ДокППИ.НомерПоручения = НомерПлатежки;

Выше приведен пример из тела самого документа в системе где я пытаюсь найти логику происходящего... так вот там есть

Процедура ПередЗаписью()
.....
Если НЕ ЗначениеЗаполнено(НомерПоручения) ИЛИ ЭтоНовый() Тогда

Попытка
        НомерПорученияЧисло = Число(ТаблицаЗначений[0].Номер) + 1;
        НомерПоручения = Формат(НомерПорученияЧисло, "ЧГ=0");
    Исключение
        НомерПоручения = 1;
    КонецПопытки;
КонецЕсли;

.....
КонецПроцедуры;

Так вот и вопрос...  задействуется ли эта процедура из модуля документа при том что я выполняю ДокППИ.Записть() в своей обработке или нет?
Если задействуется - то как тогда обойти ЭтоНовый() проверку.....????
21 catena
 
11.12.18
04:53
(20)Да, из модуля документа все событийные процедуры срабатывают.
Если это типовая процедура, скорее всего у нее в самом начале есть
Если ОбменДанными.Загрузка = Истина тогда
   Возврат;
КонецЕсли;
Независимо от того, куда вы едете — это в гору и против ветра!