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

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

программное изменение табличной части при записи документа

программное изменение табличной части при записи документа
Я
   almaz102
 
05.02.18 - 22:56
Добрый вечер! Подскажите пожалуйста как мне правильно реализовать?
Есть обработка мобильное приложение в котором менеджер формирует заказ с планшета и выгружает в 1с, после выгрузки  в 1с создается документ заказ и записывается. Мне нужно именно при записи документа перезаполнить цены табличной части по определенному условию в моем случаи по виду цен который указан в договоре. Я прикрутил код в процедуру ПередЗаписью() в модуле объекта, когда документ падает в 1с он не перезаполняется, такие же цены как заполнил менеджер, но если этот созданный документ я  еще раз запишу он перезаполняет. Может мне использовать другой обработчик событий? кто сталкивался с такой проблемой?
 
 
   МимохожийОднако
 
1 - 05.02.18 - 23:17
Проблема в том, что не надо это делать при записи или проведении.
   romix
 
2 - 06.02.18 - 00:32
Если нужно в запросе перед записью видеть содержимое табличной части документа, я использую запрос по таблице значений (в нее сначала эту тч надо выгрузить).

По-моему, так правильнее всего и проверять еще не записанный документ, и дозаполнять его запросом.

Другие способы по-моему не всегда подходят - всякие переборы объекта в цикле обернутся запросами в цикле. Два раза записывать тоже как-то не то, что надо. А запрос по тз позволяет произвольно усложнять и при этом делать всё правильно.
   catena
 
3 - 06.02.18 - 05:59
(0)Обычно помощь можно получить быстрее, если не надеяться на телепатов и выложить свой код.
А еще нужно помнить, что в процедуре "ПередЗаписью" есть доступ к двум вариантам объекта: к бывшему и к будущему. Если обращаться к реквизитам через Ссылку или в запросе - это бывший. Естественно, что у нового документа бывшие значения будут пустыми.
   Повелитель
 
4 - 06.02.18 - 06:03
(0) Это нужно делать не при записи.
А в момент когда заказ приходит с КПК, в том месте, где создается документ.
   Рэйв
 
5 - 06.02.18 - 06:13
Еще есть вариант, что из КПК объект записывается с ОбменДанными.Загрузка=Истина и если в ПередЗаписью это обрабатывается,то все проверки и заполнения не работают.
   RomaH
 
6 - 06.02.18 - 07:37
+(5)

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    

есть такое?
   RomaH
 
7 - 06.02.18 - 07:38
если нет - то это косяк - оно должно быть
см (4)
   Сияющий в темноте
 
8 - 06.02.18 - 10:20
Проще вписать все,что нужно в обработку создания,при записи документа так делать нехорошо,т.к.пользователь может интерактивно создать документ,а потом записать,  после этого все косяки будут списываться на 1с сама все перезаписала
   FIXXXL
 
9 - 06.02.18 - 11:04
ПередЗаписью() надеюсь не в модуле Формы?
   romix
 
10 - 06.02.18 - 12:35
Пример запроса по таблице значений (чтобы видеть до записи документа содержимое табличной части в запросе; изменение табличной части в цикле по результатам запроса):

&НаСервере
Процедура ПересчитатьСуммыНаСервере(ИмяТч)

    // ДебиторскаяЗадолженность    

    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    тзДок.Сумма,
    |    тзДок.ДокументВзаиморасчетов,
    |    тзДок.НомерСтроки
    |ПОМЕСТИТЬ тзДок
    |ИЗ
    |    &тзДок КАК тзДок
    |;
    |
    ////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    тзДок.НомерСтроки,
    |    Акт.СуммаОплаты
    |ИЗ
    |    тзДок КАК тзДок
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.АктВыполненныхРабот КАК Акт
    |        ПО тзДок.ДокументВзаиморасчетов = Акт.Ссылка
    |
    |УПОРЯДОЧИТЬ ПО
    |    тзДок.НомерСтроки";

    Запрос.УстановитьПараметр("тзДок", Объект[ИмяТЧ].Выгрузить());   
    сч=0;
    РезультатЗапроса = Запрос.Выполнить();
    вв = РезультатЗапроса.Выбрать();
    пОтбор=Новый Структура("НомерСтроки");
    Для Каждого стр из Объект[ИмяТЧ] Цикл
        пОтбор.НомерСтроки=стр.НомерСтроки;
        Если вв.НайтиСледующий(пОтбор) Тогда
            стр.СуммаОплаты = вв.Сумма;
            стр.СуммаВзаиморасчетов=стр.Сумма - стр.СуммаОплаты;
        Иначе
            ВызватьИсключение("Ошибка поиска суммы в строке "+ИмяТЧ+" "+стр.НомерСтроки+".");
        КонецЕсли;    
    КонецЦикла;    
КонецПроцедуры


Этот образец может использоваться для контроля правильности заполнения документа или для дозаполнения документа по результатам запроса, пока он еще не записан.
 
 Рекламное место пустует

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