Имя: Пароль:
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
да точно не отрабатывает. Точнее не на всех, но учитывая что их там много...
Вообщем гранд мерси!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn