![]() |
![]() |
|
Необъяснимая ошибка метода "Записать()" или ошибка в ДНК? | ☑ | ||
---|---|---|---|---|
0
YF
21.10.04
✎
10:46
|
Бхгалтерия 7.7 4.5, SQL 21, База ДБФ
Задача: Найти все договоры (Спр.Договоры), где ДатаВозникновения обязательства отличается от даты выписки СчФ. Решение: //------- © YF -------------------- Процедура ПроверкаДат(индекс) Док=СоздатьОбъект("Документ.СчетФактура"); Если Врег(Индекс)="ПЕЧАТЬ" Тогда Таб=СоздатьОбъект("Таблица"); Таб.ВывестиСекцию("Шапка"); Таб.ИсходнаяТаблица("Даты"); Таб.Опции(0,0,Таб.ВысотаТаблицы()); Таб.ПовторятьПриПечатиСтроки(2,Таб.ВысотаТаблицы()); КонецЕсли; //Врег(Индекс)="ПЕЧАТЬ" НачатьТранзакцию(); Док.ВыбратьДокументы(, ДатаО); Пока Док.ПолучитьДокумент()=1 Цикл ДатаДок=Док.ДатаДок; Договор=Док.Договор; Состояние("Проверка СчФ за "+СокрЛП(ДатаДок)); Если Договор.Выбран()=1 Тогда ДатаДоговора=Договор.ДатаВозникновенияОбязательства; Если ДатаДоговора<>ДатаДок Тогда Если Врег(Индекс)="ПЕЧАТЬ" Тогда Таб.ВывестиСекцию("Строка"); ИначеЕсли Врег(Индекс)="РЕДАКТИРОВАНИЕ" Тогда Спр=СоздатьОбъект("Справочник.Договоры"); Если Спр.НайтиЭлемент(Договор)=1 Тогда Спр.ДатаВозникновенияОбязательства=ДатаДок; Спр.Записать(); КонецЕсли; //Спр.НайтиЭлемент(Договор)=1 КонецЕсли; //Врег(Индекс)="ПЕЧАТЬ" КонецЕсли; //ДатаДоговора<>ДатаДок КонецЕсли; //Договор.Выбран()=1 КонецЦикла; ЗафиксироватьТранзакцию(); Если Врег(Индекс)="ПЕЧАТЬ" Тогда Таб.ПараметрыСтраницы(1,,,5,5,5,5,5,5,1,1,"Вася"); Таб.ТолькоПросмотр(1); Таб.Показать("Даты договоров, СчФ"); ИначеЕсли Врег(Индекс)="РЕДАКТИРОВАНИЕ" Тогда Сообщить("Даты договоров, приведены в соответствие с датами СчФ. Запустите проверку ещё раз.", "i"); КонецЕсли; //Врег(Индекс)="ПЕЧАТЬ" КонецПроцедуры //ПроверкаДат Сначала запускаю спараметром "Печать" - выводится табличка, в ней "Кнопка" далее: //------- © YF -------------------- Процедура ОбработкаЯчейкиТаблицы(Зн, Флаг, Табл) Если Врег(Зн)="РЕДАКТИРОВАТЬ" Тогда Табл.Показать(,,-1); ПроверкаДат("Редактирование"); иначе Флаг=1; КонецЕсли; //Врег(Зн)="РЕДАКТИРОВАТЬ" КонецПроцедуры //ОбработкаЯчейкиТаблицы Результат: После повторного запуска проверки выводится та же таблица, т.е. даты в справочнике не поменялись. Чо за фигня? |
|||
1
YF
21.10.04
✎
10:52
|
Понимаю, что влом читать код, но че-то я с утра туплю - не могу понять почему записать() не работает.
АУ |
|||
2
Rovan
гуру
21.10.04
✎
10:52
|
Я вот Вижу что "РЕДАКТИРОВАТЬ" <> Врег("Редактирование")
|
|||
3
YF
21.10.04
✎
10:56
|
(2)
Не, вроде там все ОК. В кнопке в таблице расшифровка равна "Редактировать" - > запуск Обработки ячейки. - > ПроверкаДат("Редактирование"); В отладчике смотрел, доходит до метода "Записать", т.е. находит договор и т.п. и далее процедура выполняется до конца и Сообщить("Даты договоров, приведены в соответствие с датами СчФ. Запустите проверку ещё раз.", "i"); выполняется. |
|||
4
Шапокляк
21.10.04
✎
10:56
|
Наверно
Спр=СоздатьОбъект("Справочник.Договоры"); Если Спр.НайтиЭлемент(Договор)=1 Тогда Спр.ДатаВозникновенияОбязательства=ДатаДок; Спр.Записать(); КонецЕсли; //Спр.НайтиЭлемент(Договор)=1 подчиненный справочник Договора, не так ли? Значит по владельцу договор искать надо Спр.Использовать Владельца(Док.Контрагент); передЕсли Спр.НайтиЭлемент(Договор)=1 Тогда |
|||
5
Rovan
гуру
21.10.04
✎
11:00
|
Что это ДатаО ?
|
|||
6
YF
21.10.04
✎
11:02
|
(5)
Ето дата отчета - > реквизит формы отчета |
|||
7
YF
21.10.04
✎
11:02
|
(4)
Попробовал - > то же самое ? |
|||
8
Шапокляк
21.10.04
✎
11:09
|
Ну тогда полтергейст или права. Я сталкивалась с подобной ситуацией - когда при записи одного документа перезаписывался другой. Так вот если этот другой не мог перезаписаться по причине, например, задвоенности номера, он молча не перезаписывался и все. Может, в самом справочнике договоров причину поискать?
|
|||
9
YF
21.10.04
✎
11:12
|
(8)
Чо там искать-то? Сделал Тест. и исправл. |
|||
10
Шапокляк
21.10.04
✎
11:16
|
Сделал и что? Заработало?
|
|||
11
YF
21.10.04
✎
11:24
|
(10)
Нет |
|||
12
Шапокляк
21.10.04
✎
11:28
|
А! Так это вопрос был - что искать?
Интересно, если не в транзакции делать - заработает?... И я бы права посмотрела на справочник Договоры. Может, пользователь правов не имеет Договоры менять? |
|||
13
Rovan
гуру
21.10.04
✎
11:28
|
Убери транзакции вобще.
|
|||
14
SnarkHunter
21.10.04
✎
11:30
|
(12)А права тут при чем?
|
|||
15
Rovan
гуру
21.10.04
✎
11:31
|
(12) В 7.7 программно можно чё угодно менять (а вот в 8.0 обломись).
|
|||
16
YF
21.10.04
✎
11:31
|
(12), (13)
1. Сначала было без транзакции 2. Я с правами админа, +при обработке кодом права не проверяются |
|||
17
YF
21.10.04
✎
11:33
|
+ Офигеть
Сейчас только заметил, даты в справочнике меняются, не не на те, что нужно? Круто да? |
|||
18
Шапокляк
21.10.04
✎
11:37
|
Извиняюсь за абсурдное предположение. Не может быть такого: счетов фактур с одним контрагентом и одним договором несколько в разные даты. Вот и записывается справочник несколько раз?
|
|||
19
Rovan
гуру
21.10.04
✎
11:43
|
(18) Точно !!!
|
|||
20
ПроходилМимо
21.10.04
✎
11:45
|
(0)Попробовал твой код у себя в базе - работет нормально.
(18,19) не влияет. записывается последнее изменение. |
|||
21
Шапокляк
21.10.04
✎
11:48
|
На что не влияет, на погоду?
Если один документ от 1-го числа, другой от 10-го, а договор в них один. Ну запишется 10-го. И что? |
|||
22
YF
21.10.04
✎
11:48
|
Всем
Ищу СчФ по одному договору, пока не нашел. |
|||
23
Rovan
гуру
21.10.04
✎
11:50
|
(21) а ты не глазами ищи, а создай объект СписокЗначений и заполняй его и смотри ищи в нем на предмет повтора!
|
|||
24
ПроходилМимо
21.10.04
✎
11:52
|
(21) в (1) пишет, что Записать() не работает.
Вот и говорю что не влияет. Работает нормально и записывает последнее что нашел. Что не ясно? |
|||
25
YF
21.10.04
✎
11:53
|
Всем спасибо!
Ошибка в ДНК оказалась Бухи ведь сторнирование делают отриц. СчФ по тем же договорам Звиняйте все что доставал. Хотя может полезно иногда голову поломать :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |