Имя: Пароль:
1C
1C 7.7
v7: Сохранение документа из табличной части
0 Slim747
 
18.03.13
11:59
Добрый день уважаемые программисты 1С. Помогите решить проблему. На днях столкнулся с задачей проведения документа из табличной части. Стандартные процедуры типа #Записать в табличной части не работают. Подскажите, есть ли какой-нибудь выход из ситуации? Заранее благодарен.
1 Галахад
 
гуру
18.03.13
12:01
Ого, "проведение из табличной части". Хорошая трава.
2 Mikeware
 
18.03.13
12:02
1986...
3 Slim747
 
18.03.13
12:02
Прошу прощения! Проведение документа из многострочной части!
4 fmrlex
 
18.03.13
12:03
(0) (3) Усе равно нифига не понятно. Чего хочешь то?
5 Галахад
 
гуру
18.03.13
12:03
Тоже не плохо...
6 mishaPH
 
18.03.13
12:04
(0) атвор. ты хочешь чтобы вводя каждую строку док проводился?
7 mishaPH
 
18.03.13
12:05
или при проведении конструкция типа
ВыбратьСтроки()

тебе не знакома?
8 Slim747
 
18.03.13
12:06
Есть Документ. В нем есть табличная часть. Как при выборе или установке значения реквизита табличной части инициировать сохранение документа?
9 Cthulhu
 
18.03.13
12:07
а теперь - по-русски. и главное - подробнее.
чего всё-таки хочешь?..
(не стесняйся если сильно странного - ну поглумимся и отпустим, один раз - не ...)))
10 Slim747
 
18.03.13
12:10
Хочу, чтобы при вводе или редактировании строки документ сохранялся.
11 Cthulhu
 
18.03.13
12:11
(10): в предопределенной процедуре, вызываемой при завершении редактирования строки, вызывай "ПриЗаписи(); Если СтатусВозврата()=1 Тогда Записать() КонецЕсли;"
12 Slim747
 
18.03.13
12:13
Спасибо. Попробуем. Извините за неверное выражение!
13 mishaPH
 
18.03.13
14:54
(11) (12) не выйдет. скажет, что мол дананя процедура не может быть вызвана из формы. как-то так.

записывать и тем более проводить док при изменении чего-то в табличной части - это мразм
14 varelchik
 
18.03.13
16:56
(13)+100
15 Cthulhu
 
18.03.13
17:33
(13): спецом проверил. вот код:

Процедура ПриОкончанииРедактированияСтроки() //предопределенная
   Перем тТхт,тМаркер;
   //Если ФлАвтоСохранение=1 Тогда    // если есть такой флаг на морде (минус Вопрос(ы)!)
       ПриЗаписи(); Если СтатусВозврата()<>0 Тогда
           тТхт="Откорректирована Строка #"+НомерСтроки+": СОХРанение "
           +?(Выбран()<>1,"НОВОГО ДОКУМента","Документа """+ТекущийДокумент()+"""");
           Если Вопрос(тТхт+" >>>>>>> ВЫПОЛНить?..","Да+Нет+Отмена",12)<>"Да" Тогда
               Сообщить(тТхт+" >>>>>>> НЕ ВЫПОЛНено!",".");
           Иначе
               Записать(); Сообщить(тТхт+" >>>>>>> ВЫПОЛНено!","i");
               Если (ПриЗаписиПереПроводить()<>1)ИЛИ(Проведен()<>1) Тогда
                   Если Найти("Нет,Отмена",Вопрос(тТхт+РазделительСтрок+СимволТабуляции
                   +">>>>>>> (пере)ПРОВЕСТи Документ?..","Да+Нат+Отмена",11))=0 Тогда
                       Если Провести()<>0 Тогда Сообщить(СимволТабуляции+">>>>>>> + Документ (пере)ПРОВедён!..","i");
                       Иначе Сообщить(СимволТабуляции+">>>>>>> + (пере)ПРОВедение Документа >>> НЕУДАЧНо!","!") КонецЕсли;
                   Иначе Сообщить(СимволТабуляции+">>>>>>> - Документ НЕ (пере)ПРОВедён...",".") КонецЕсли;
               Иначе Сообщить(СимволТабуляции+">>>>>>> * АВТО-(пере)ПРОВедение при сохранении...","") КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   //КонецЕсли;
КонецПроцедуры //ПриОкончанииРедактированияСтроки

=== ничего не "говорит". прекрасно всё "вышло". а тебе врать - стыдно должно быть.
Далее. Автосэйв в принципе может быть нужен, может быть не нужен, а может быть и действительно "мразм". как говорится, зависит от. причем подобные твоему категоричные обобщения, да ещё и в подобном претенцозном оформлении - в большинстве случаев свидетельство недалёкого ума при воспаленном ЧСВ. постарайся так больше не делать.
(14): о, ещё один. на свет вы лезете штоль?.. ))))
16 varelchik
 
18.03.13
18:27
(15) А если с ТЧ будет строк порядка 500 и более?
+ Атрибутов порядка 20.
Это ж какие тормоза начнуться?!
Юзьвер точно вас застрелит или сам повесится.
17 Cap_1977
 
18.03.13
18:34
(0) А чего добиться то хочешь постоянно дергая базу на запись ? Наверняка кривая постановка задачи.
18 Mikeware
 
18.03.13
18:36
(16) Ну, можно каждую десятую строку записывать...
правда, при этом стоит учитыввать, что "отката"-то не будет...
т.е. палка о двух концах...
19 varelchik
 
18.03.13
18:45
(18) пусть автор на (17) ответит.
Действительно нафига на каждый чих пользователя реагировать?
Тута явно кривая постановка.
+ Незабываем что призаписи в базу появляется Транзакция блокируя 1sjourn.
А за это надо по рукам давать!
20 Эльниньо
 
18.03.13
18:50
//_____________________________________________________________________________
Процедура Пересчет()
   Сумма = (Расценка + Коэфф / 10) * Количество;
   Пора = Пора + 1;
   Если Пора > 10 Тогда
       Форма.КнЗапись.Заголовок("Записать!");
       Если Пора > 20 Тогда
           Форма.КнЗапись.Заголовок("ЗАПИСАТЬ!");
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры //Пересчет

...

//_____________________________________________________________________________
Процедура ПриЗаписи()
   Автор = глПользователь;
   Форма.КнЗапись.Заголовок("Записать");
   Пора = 0;
КонецПроцедуры //ПриЗаписи
21 Cthulhu
 
18.03.13
18:51
(16): ты по слогам перечитай тот комментарий, на который отвечаешь. тебя что, кто-то заставляет, приставив нож к горлу, во ВСЕХ случаях делать автосэйв???
22 Cthulhu
 
18.03.13
18:54
(18): именно так. в каждом случае необходимо принимать взвешенное решение, отдавая себе отчет в том, что за все нужно платить (кстати, откат (частичный) - тоже возможен, в коде и трудоёмко).
например, если товарные запасы не "переоптимизированы" - то автосэйв лишается смысла. если же манагеры вынуждены вести "номенклатурные войны" - то нужно уже думать...
23 Cthulhu
 
18.03.13
18:55
(17): наверняка. не забивай себе голову. и - это не я хочу, сюрпраайс?..
(19): фу, вы своим эпидермисом с истерично трясущихся щёк замусорили топик.
24 Slim747
 
19.03.13
09:18
Ребята! Просто этот документ находится в течение дня в открытом состоянии. Всего в нем семь строк(неделя). На протяжении дня подъезжают автомобили. Автосохранение необходимо, чтобы исключить возможную потерю введенной информации.
25 ЧеловекДуши
 
19.03.13
09:19
(2) Это проклятый год? :)
26 Cap_1977
 
19.03.13
09:20
(24) Какие данные там кроме дней недели в строке ?
27 ЧеловекДуши
 
19.03.13
09:24
(24) Дак и проводи документ построчечно с явно указанным параметром: Провести(,ТвойПараметр)

ТвойПараметр - может быть строкой (текстовой), но лучше всего туда писать ТЗ (таблицу значений) с предустановленным форматом заполнения, т.е. ты в ту ТЗ выгрузишь одну нужную строчку из документа, а при проведении интерпретируешь её, как надо.
28 ЧеловекДуши
 
19.03.13
09:25
+(24) Если документ проведен, то не нужно все время вызывать Провести(), хватит и команды "Записать()" :)
29 ЧеловекДуши
 
19.03.13
09:26
+(24) >>> Автосохранение необходимо, чтобы исключить возможную потерю введенной информации.

У вас ленивые пользователи, не балуй Зверей, они потом на шею сядут :)
Лучше проинструктируй, что да как, что бы привыкли нажимать кнопку "Записать".
30 Cthulhu
 
19.03.13
20:51
(28): откуда такая святая уверенность в том, что "ПриЗаписиПереПроводить(1)" срабатывает при программной(!) записи?.. )))
31 Cthulhu
 
19.03.13
20:52
(24): о. ну тогда и вовсе не надо этот документ открытым держать.
обработкой все можно сделать.