Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Проведение 1С 7

v7: Проведение 1С 7
Я
   cyberandr
 
15.09.16 - 12:24
Всем привет!
Подскажите может кто знает как решить эту проблему.
Есть документ В форме которого при записи есть такой код

Процедура ПриЗаписи()
    СтрТЗДок = ЗначениеВСтрокуВнутр(ТЗДок);
КонецПроцедуры // ПриЗаписи
где ТЗДок - таблица значений (выведена на форму)
В обработке проведения документа:

Процедура ОбработкаПроведения()

    ТЗДок = ЗначениеИзСтрокиВнутр(СтрТЗДок);
    
    Если ТипЗначенияСтр(ТЗДок) <> "ТаблицаЗначений" Тогда
        Возврат;
    КонецЕсли;//
/////////////////////////////////////////////////////////////////

Мне необходимо программно провести (точнее даже перепровести) эти документы. при использовании
НашДок.Провести(); ЗначениеИзСтрокиВнутр(СтрТЗДок)- видимо пустое и проведение отрабатывает не верно. Подскажите как мне обойти эту проблему. Из идей пока только открывать форму документа с каким-нить параметром,  а в самом документе при открытии прописать что-то типа если наш параметр= истина Провести(); Закрыть();
 
 
   Ёпрст
 
1 - 15.09.16 - 12:26
(0) Вон из профессии!
   Chieftain
 
2 - 15.09.16 - 12:33
(0) Эмулируй форму документа обработкой, ТЗДок закидываю в табличную часть/подчиненный документ. Проводи сам документ и таблицу в одной транзакции из обработки
   Ёпрст
 
3 - 15.09.16 - 12:37
>>>начениеИзСтрокиВнутр(СтрТЗДок)- видимо пустое и проведение отрабатывает не верно.

Это откуда такие выводы ?
Отладчик не судьба открыть и посмотреть, чем  заполнен реквизит шапки при проведении ?
   Ёпрст
 
4 - 15.09.16 - 12:37
Хранить доп табличную часть в строке, моветон, ибо могут быть потерянные ссылки в восстановленной ТЗ.
   cyberandr
 
5 - 15.09.16 - 12:40
(4) Это документ из типовой ХС. Мне надо только перепровести кучу документов в обработке.
   cyberandr
 
6 - 15.09.16 - 12:42
(3) Эмпирический вывод. Я почти все что было в проведении документа (это не бух документ) флаги которые устанавливает, реквизиты, справочники и тд. Но в итоге если документ перепровести из формы - результат отличается- при выгрузки во внешнее приложение.
   cyberandr
 
7 - 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и как потом передать в Обработку проведения мою СтрТЗДок?
   cyberandr
 
8 - 15.09.16 - 12:46
сорри это к (2)
   Chieftain
 
9 - 15.09.16 - 13:16
(8)
1. Делаешь обработку, в которой будет продублирован функционал обычной формы.
2. Добавляешь табличную часть в составе колонок ТЗДок. Если табличная часть уже используется - создаешь новый документ с реквизитом ДокРодитель и табличной частью в составе колонок ТЗДок.
3. При нажатии "записать" записываешь все в документ. Если используешь подчиненный документ - записываешь в него ТЗДок.
4. При нажатии "провести" проводишь сам документ, перебираешь строки табличной части и проводишь документы.

В обработке проведения твоего документа НЕ НУЖНО проводить другие.
   Garykom
 
10 - 15.09.16 - 13:20
Эээ 8-шник полез в древнюю 77-ку? Ыыыыы
 
 Рекламное место пустует
   Chieftain
 
11 - 15.09.16 - 13:22
+(9) Подход из (0) вполне возможен.
Как минимум нужно ограничить проведение документов из ТЗДок при групповом проведении, восстановлении последовательности и массовом программном проведении.
Ну и не хранить ТЗДок в строке.
   Garykom
 
12 - 15.09.16 - 13:22
(10)+ В смысле эти "ЗначениеВСтрокуВнутр/ЗначениеИзСтрокиВнутр" как то подозрительно напоминают ЗначениеВРеквизитФормы и т.д. ))
   Garykom
 
13 - 15.09.16 - 13:23
(12)+ Т.е. РеквизитФормыВЗначение
   cyberandr
 
14 - 15.09.16 - 14:41
слушайте а как програмно закрыть документ?
Я пытаюсь 1вар.
Приоткрытии()
открытьФорму(нашДок.Текущийдокумент(),1);
Если форма.параметр=1 Тогда
провести();
Форма.закрыть(0);
Возврат;
Конецесли;

2.
открытьФорму(нашДок.Текущийдокумент(),Конт);
Конт.Форма.Закрыть();
В отладчике закрывается, а так - упорно нет :(
Где я туплю?
   Chieftain
 
15 - 15.09.16 - 14:48
(14) В ПриОткрытии()
  СтатусВозврата(0)
   cyberandr
 
16 - 15.09.16 - 14:52
Не помогло
   Chieftain
 
17 - 15.09.16 - 15:00
(16) Что не помогло? СтатусВозврата(0) в ПриОткрытии равнозначно восьмерочному
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Отказ = Истина;

и не дает открыться форме.
   cyberandr
 
18 - 15.09.16 - 16:05
Формы документов открываются и не закрываются  Я уже итак и эдак. И ПередОткрытием() и ПОслеоткрытия()...
   Chieftain
 
19 - 15.09.16 - 16:46
(18) Это работает только в "ПриОткрытии" в любой форме
   cyberandr
 
20 - 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);
            Форма.Закрыть();
            
            Возврат;
        КонецЕсли;
    КонецЕсли//

    УстановитьВидимостьФормы();
    
КонецПроцедуры
//==============================
   Salimbek
 
21 - 15.09.16 - 17:47
(20) А СтрТЗДок - реквизит документа?
   Chieftain
 
22 - 15.09.16 - 17:48
(20) Уверен, что у тебя условие срабатывает?
Оставь вот так:

Процедура ПриОткрытии()
    .....
    Если ПустоеЗначение(СтрТЗДок) = 0 Тогда
        Попытка
            _ТЗДок = СоздатьОбъект("ТаблицаЗначений");
            _ТЗДок.Загрузить(ЗначениеИзСтрокиВнутр(СтрТЗДок));
            _ТЗДок.ВыбратьСтроки();
            Пока _ТЗДок.ПолучитьСтроку() = 1 Цикл
                ТЗДок.НоваяСтрока();
                глЗаполнитьЗначениеСвойств(ТЗДок,_ТЗДок);
            КонецЦикла;
        Исключение
        КонецПопытки;
    КонецЕсл//


    Если Форма.Параметр=1 Тогда
        Провести(); 
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;

    УстановитьВидимостьФормы();
КонецПроцедуры
   cyberandr
 
23 - 16.09.16 - 10:04
да точно не отрабатывает. Точнее не на всех, но учитывая что их там много...
Вообщем гранд мерси!


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