| 
    
            
         
         | 
    
  | 
v7: Проведение 1С 7 | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        cyberandr    
     15.09.16 
            ✎
    12:24 
 | 
         
        Всем привет!
 
        Подскажите может кто знает как решить эту проблему. Есть документ В форме которого при записи есть такой код Процедура ПриЗаписи() СтрТЗДок = ЗначениеВСтрокуВнутр(ТЗДок); КонецПроцедуры // ПриЗаписи где ТЗДок - таблица значений (выведена на форму) В обработке проведения документа: Процедура ОбработкаПроведения() ТЗДок = ЗначениеИзСтрокиВнутр(СтрТЗДок); Если ТипЗначенияСтр(ТЗДок) <> "ТаблицаЗначений" Тогда Возврат; КонецЕсли;// ///////////////////////////////////////////////////////////////// Мне необходимо программно провести (точнее даже перепровести) эти документы. при использовании НашДок.Провести(); ЗначениеИзСтрокиВнутр(СтрТЗДок)- видимо пустое и проведение отрабатывает не верно. Подскажите как мне обойти эту проблему. Из идей пока только открывать форму документа с каким-нить параметром, а в самом документе при открытии прописать что-то типа если наш параметр= истина Провести(); Закрыть();  | 
|||
| 
    1
    
        Ёпрст    
     гуру 
    15.09.16 
            ✎
    12:26 
 | 
         
        (0) Вон из профессии!     
         | 
|||
| 
    2
    
        Chieftain    
     15.09.16 
            ✎
    12:33 
 | 
         
        (0) Эмулируй форму документа обработкой, ТЗДок закидываю в табличную часть/подчиненный документ. Проводи сам документ и таблицу в одной транзакции из обработки     
         | 
|||
| 
    3
    
        Ёпрст    
     гуру 
    15.09.16 
            ✎
    12:37 
 | 
         
        >>>начениеИзСтрокиВнутр(СтрТЗДок)- видимо пустое и проведение отрабатывает не верно.
 
        Это откуда такие выводы ? Отладчик не судьба открыть и посмотреть, чем заполнен реквизит шапки при проведении ?  | 
|||
| 
    4
    
        Ёпрст    
     гуру 
    15.09.16 
            ✎
    12:37 
 | 
         
        Хранить доп табличную часть в строке, моветон, ибо могут быть потерянные ссылки в восстановленной ТЗ.     
         | 
|||
| 
    5
    
        cyberandr    
     15.09.16 
            ✎
    12:40 
 | 
         
        (4) Это документ из типовой ХС. Мне надо только перепровести кучу документов в обработке.     
         | 
|||
| 
    6
    
        cyberandr    
     15.09.16 
            ✎
    12:42 
 | 
         
        (3) Эмпирический вывод. Я почти все что было в проведении документа (это не бух документ) флаги которые устанавливает, реквизиты, справочники и тд. Но в итоге если документ перепровести из формы - результат отличается- при выгрузки во внешнее приложение.     
         | 
|||
| 
    7
    
        cyberandr    
     15.09.16 
            ✎
    12:46 
 | 
         
        (0) Вариант хороший меня только не много волнует 2 вещи 
 
        1 как отрабоает ТЗДок.НоваяКолонка("Контрагент","Справочник",,,"Контрагент",20,,1); ТЗДок.НоваяКолонка("КарточкаЭСЧФКомиссия","Справочник",,,"Карточка ЭСЧФ",20,,1); ТЗДок.НоваяКолонка("НомерДок","Строка",,,"Номер",7,,1); ТЗДок.НоваяКолонка("ДатаДок","Дата",,,"Дата",7,,1); ТЗДок.НоваяКолонка("Документ","Справочник",,,"Документ",20,,1); ТЗДок.НоваяКолонка("Договор","Справочник.Договора",,,"Договор",20,,1); ТЗДок.НоваяКолонка("СуммаНДС","Число",18,2,"Сумма НДС",10,"Ч18."+глТочностьОсновнойВалюты+". ",2); ТЗДок.НоваяКолонка("СуммаСНДС","Число",18,2,"Сумма с НДС",10,"Ч18."+глТочностьОсновнойВалюты+". ",2); ТЗДок.НоваяКолонка("СуммаНДСПеревыставление","Число",18,2,"в т.ч. сумма НДС к перевыставлению",10,"Ч18."+глТочностьОсновнойВалюты+". ",2); ТЗДок.НоваяКолонка("СуммаСНДСПеревыставление","Число",18,2,"в т.ч. сумма с НДС к перевыставлению",10,"Ч18."+глТочностьОсновнойВалюты+". ",2); Если ПустоеЗначение(СтрТЗДок) = 0 Тогда Попытка _ТЗДок = СоздатьОбъект("ТаблицаЗначений"); _ТЗДок.Загрузить(ЗначениеИзСтрокиВнутр(СтрТЗДок)); _ТЗДок.ВыбратьСтроки(); Пока _ТЗДок.ПолучитьСтроку() = 1 Цикл ТЗДок.НоваяСтрока(); глЗаполнитьЗначениеСвойств(ТЗДок,_ТЗДок); КонецЦикла; Исключение КонецПопытки; КонецЕсли;// 2и как потом передать в Обработку проведения мою СтрТЗДок?  | 
|||
| 
    8
    
        cyberandr    
     15.09.16 
            ✎
    12:46 
 | 
         
        сорри это к (2)     
         | 
|||
| 
    9
    
        Chieftain    
     15.09.16 
            ✎
    13:16 
 | 
         
        (8)
 
        1. Делаешь обработку, в которой будет продублирован функционал обычной формы. 2. Добавляешь табличную часть в составе колонок ТЗДок. Если табличная часть уже используется - создаешь новый документ с реквизитом ДокРодитель и табличной частью в составе колонок ТЗДок. 3. При нажатии "записать" записываешь все в документ. Если используешь подчиненный документ - записываешь в него ТЗДок. 4. При нажатии "провести" проводишь сам документ, перебираешь строки табличной части и проводишь документы. В обработке проведения твоего документа НЕ НУЖНО проводить другие.  | 
|||
| 
    10
    
        Garykom    
     гуру 
    15.09.16 
            ✎
    13:20 
 | 
         
        Эээ 8-шник полез в древнюю 77-ку? Ыыыыы     
         | 
|||
| 
    11
    
        Chieftain    
     15.09.16 
            ✎
    13:22 
 | 
         
        +(9) Подход из (0) вполне возможен.
 
        Как минимум нужно ограничить проведение документов из ТЗДок при групповом проведении, восстановлении последовательности и массовом программном проведении. Ну и не хранить ТЗДок в строке.  | 
|||
| 
    12
    
        Garykom    
     гуру 
    15.09.16 
            ✎
    13:22 
 | 
         
        (10)+ В смысле эти "ЗначениеВСтрокуВнутр/ЗначениеИзСтрокиВнутр" как то подозрительно напоминают ЗначениеВРеквизитФормы и т.д. ))     
         | 
|||
| 
    13
    
        Garykom    
     гуру 
    15.09.16 
            ✎
    13:23 
 | 
         
        (12)+ Т.е. РеквизитФормыВЗначение     
         | 
|||
| 
    14
    
        cyberandr    
     15.09.16 
            ✎
    14:41 
 | 
         
        слушайте а как програмно закрыть документ?
 
        Я пытаюсь 1вар. Приоткрытии() открытьФорму(нашДок.Текущийдокумент(),1); Если форма.параметр=1 Тогда провести(); Форма.закрыть(0); Возврат; Конецесли; 2. открытьФорму(нашДок.Текущийдокумент(),Конт); Конт.Форма.Закрыть(); В отладчике закрывается, а так - упорно нет :( Где я туплю?  | 
|||
| 
    15
    
        Chieftain    
     15.09.16 
            ✎
    14:48 
 | 
         
        (14) В ПриОткрытии()
 
        СтатусВозврата(0)  | 
|||
| 
    16
    
        cyberandr    
     15.09.16 
            ✎
    14:52 
 | 
         
        Не помогло     
         | 
|||
| 
    17
    
        Chieftain    
     15.09.16 
            ✎
    15:00 
 | 
         
        (16) Что не помогло? СтатусВозврата(0) в ПриОткрытии равнозначно восьмерочному
 
        Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) Отказ = Истина; и не дает открыться форме.  | 
|||
| 
    18
    
        cyberandr    
     15.09.16 
            ✎
    16:05 
 | 
         
        Формы документов открываются и не закрываются  Я уже итак и эдак. И ПередОткрытием() и ПОслеоткрытия()...     
         | 
|||
| 
    19
    
        Chieftain    
     15.09.16 
            ✎
    16:46 
 | 
         
        (18) Это работает только в "ПриОткрытии" в любой форме     
         | 
|||
| 
    20
    
        cyberandr    
     15.09.16 
            ✎
    17:13 
 | 
         
        Процедура ПриОткрытии()
 
        //Форма.ТолькоПросмотр(1); Форма.ИспользоватьЗакладки(1); Форма.Закладки.ДобавитьЗначение("Поставщик","Поставщик"); Форма.Закладки.ДобавитьЗначение("Получатель","Получатель"); Форма.Закладки.ДобавитьЗначение("ГрузоотправительГрузополучатель","Грузоотправитель и грузополучатель"); Форма.Закладки.ДобавитьЗначение("УсловияПоставки","Условия поставки"); Форма.Закладки.ДобавитьЗначение("ДанныеПоТМЦ","Данные по ТМЦ"); Форма.Закладки.ДобавитьЗначение("Допольнительно","Допольнительно"); ПриВыбореЗакладки(1,"Поставщик"); ТЗДок.НоваяКолонка("Контрагент","Справочник",,,"Контрагент",20,,1); ТЗДок.НоваяКолонка("КарточкаЭСЧФКомиссия","Справочник",,,"Карточка ЭСЧФ",20,,1); ТЗДок.НоваяКолонка("НомерДок","Строка",,,"Номер",7,,1); ТЗДок.НоваяКолонка("ДатаДок","Дата",,,"Дата",7,,1); ТЗДок.НоваяКолонка("Документ","Справочник",,,"Документ",20,,1); ТЗДок.НоваяКолонка("Договор","Справочник.Договора",,,"Договор",20,,1); ТЗДок.НоваяКолонка("СуммаНДС","Число",18,2,"Сумма НДС",10,"Ч18."+глТочностьОсновнойВалюты+". ",2); ТЗДок.НоваяКолонка("СуммаСНДС","Число",18,2,"Сумма с НДС",10,"Ч18."+глТочностьОсновнойВалюты+". ",2); ТЗДок.НоваяКолонка("СуммаНДСПеревыставление","Число",18,2,"в т.ч. сумма НДС к перевыставлению",10,"Ч18."+глТочностьОсновнойВалюты+". ",2); ТЗДок.НоваяКолонка("СуммаСНДСПеревыставление","Число",18,2,"в т.ч. сумма с НДС к перевыставлению",10,"Ч18."+глТочностьОсновнойВалюты+". ",2); Если ПустоеЗначение(СтрТЗДок) = 0 Тогда Попытка _ТЗДок = СоздатьОбъект("ТаблицаЗначений"); _ТЗДок.Загрузить(ЗначениеИзСтрокиВнутр(СтрТЗДок)); _ТЗДок.ВыбратьСтроки(); Пока _ТЗДок.ПолучитьСтроку() = 1 Цикл ТЗДок.НоваяСтрока(); глЗаполнитьЗначениеСвойств(ТЗДок,_ТЗДок); КонецЦикла; Исключение КонецПопытки; Если Форма.Параметр=1 Тогда Провести(); СтатусВозврата(0); Форма.Закрыть(); Возврат; КонецЕсли; КонецЕсли;// УстановитьВидимостьФормы(); КонецПроцедуры //==============================  | 
|||
| 
    21
    
        Salimbek    
     15.09.16 
            ✎
    17:47 
 | 
         
        (20) А СтрТЗДок - реквизит документа?     
         | 
|||
| 
    22
    
        Chieftain    
     15.09.16 
            ✎
    17:48 
 | 
         
        (20) Уверен, что у тебя условие срабатывает?
 
        Оставь вот так: Процедура ПриОткрытии() ..... Если ПустоеЗначение(СтрТЗДок) = 0 Тогда Попытка _ТЗДок = СоздатьОбъект("ТаблицаЗначений"); _ТЗДок.Загрузить(ЗначениеИзСтрокиВнутр(СтрТЗДок)); _ТЗДок.ВыбратьСтроки(); Пока _ТЗДок.ПолучитьСтроку() = 1 Цикл ТЗДок.НоваяСтрока(); глЗаполнитьЗначениеСвойств(ТЗДок,_ТЗДок); КонецЦикла; Исключение КонецПопытки; КонецЕсли// Если Форма.Параметр=1 Тогда Провести(); СтатусВозврата(0); Возврат; КонецЕсли; УстановитьВидимостьФормы(); КонецПроцедуры  | 
|||
| 
    23
    
        cyberandr    
     16.09.16 
            ✎
    10:04 
 | 
         
        да точно не отрабатывает. Точнее не на всех, но учитывая что их там много... 
 
        Вообщем гранд мерси!  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |