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


1С:Предприятие :: 1С:Предприятие 8 общая

Номер платежного поручения.

Номер платежного поручения.
Я
   MiracMC
 
05.12.18 - 21:38
Добрый вечер.

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

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

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


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

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

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

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

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

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

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

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


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

Процедура ДатаПриИзменении(Элемент)
...
// Номер меняем, если документ не проведен и "перемещается" в другой день

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

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

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


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

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

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


(15) Согласен. не имеет.
По теме
ДокППИ.НомерПоручения = НомерПлатежки;  // не работает

ДокППИ.Комментарий = Назначение;  // не работает

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

ДокППИ.ОтраженоВОперУчете = Истина;  // не работает


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

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


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

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

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

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

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

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

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

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

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

надо

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

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

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

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

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

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

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


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