|
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
|
да точно не отрабатывает. Точнее не на всех, но учитывая что их там много...
Вообщем гранд мерси! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |