Имя: Пароль:
1C
1C 7.7
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
да точно не отрабатывает. Точнее не на всех, но учитывая что их там много...
Вообщем гранд мерси!
Независимо от того, куда вы едете — это в гору и против ветра!