|
КА 1.1. После выполнения обработки создания документов сами док-ты исчезают | ☑ | ||
---|---|---|---|---|
0
Vigor06
20.05.15
✎
11:02
|
Доброго дня!
В организации используется самописная обработка по созданию пакета док-в реализация + счет-фактура+счет на оплату За март счета выставлялись нормально Выставляю за апрель, проверяю в отладчике: доки созданы, есть ссылка на них, делается запись в регистр сведений, на форме заполяняется ТЗ со списком созданных документов. Завершаю отладку,выходя из процедуры - доков нет, в регистре тоже записей нет. в ТЗ пишет "объект не найден" Открываю параллельно еще 1 сеанс,останавливаю на отладке после создания док-в, смотрю "ведомость по взаиморасчетам с контрагентами" - документ есть, правда открыть не дает.(после долгого думания пишет "Конфликт блокирововк при выполнении транзакции" Microsoft SQL Native Ckient 10/0: превышено время ожидания запроса на блокировку бла-бла-бла") Грешу на то,что отладка идет. Отладка заканчивается - в ведомости док-та нет..волшебство какое то База sql-ная, единственное,на что могу грешить - так это на нее. Хотя больше никто из бухгалтерии не звонил,значит просто так документы создаются и записыаются. С обработкой ничего не делали уже несколько месяцев, спокойно все работало |
|||
1
Apokalipsec
20.05.15
✎
11:14
|
RLS?
|
|||
2
lxndr
20.05.15
✎
11:14
|
транзакция откатывается
|
|||
3
Vigor06
20.05.15
✎
15:06
|
(1) неа
|
|||
4
Vigor06
20.05.15
✎
15:07
|
(2) а по изза чего так может бытЬ?ничего ж не менялось...
|
|||
5
Lamer1C
20.05.15
✎
15:08
|
(2) +1
(0) Код выкладывай |
|||
6
Vigor06
20.05.15
✎
15:13
|
(5)да нечего выкладывать..перед "конец Процедуры" еще все существует..
Вот процедура нажатия кнопки Процедура СоздатьДокументыНажатие(Кнопка) Если не ПроверитьКонстанты() тогда Если Вопрос("Не заполнены константы. Открыть форму констант?",РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да)=КодВозвратаДиалога.Да тогда ОткрытьФорму("Обработка.Регион_Константы.Форма.Форма"); КонецЕсли; Возврат; КонецЕсли; Если Организация.ОсновнойБанковскийСчет.Пустая() тогда Предупреждение("Для организации не указан основной банковский счет"); Возврат; КонецЕсли; ОбновитьСписокДокументов(); СоздатьДокументы(); КонецПроцедуры в процедуре "СоздатьДокументы" Если не отказ тогда //Сохраним информацию о сформированных документах запись=РегистрыСведений.АвтоСфрмированныеДокументы.СоздатьМенеджерЗаписи(); запись.Договор=стр.ДоговорКонтрагента; запись.СчетНаОплату=счет.Ссылка; запись.Реализация=реализация.Ссылка; запись.СчетФактура=счетФакт.Ссылка; запись.Период=ДатаМесяц; запись.Записать(); //Установим пометку в ТЧ стр=ТекущаяТЧ.Найти(стр.ДоговорКонтрагента,"ДоговорКонтрагента"); стр.ДокументыСозданы=Истина; стр.Пометка=Ложь; КонецЕсли; Если отказ тогда ОтменитьТранзакцию(); Прервать; иначе ЗафиксироватьТранзакцию(); КонецЕсли; КонецЦикла; ЗаполнитьСписокДокументов(); КонецПроцедуры Транзакция выполняется и если точку останова ставить на "КонецПроцедуры", то в записи регистра сведений есть все ссылки на документы.. |
|||
7
D_E_S_131
20.05.15
✎
15:17
|
хм, а где создание документов? Может ты их тупо не записываешь?
|
|||
8
ДенисЧ
20.05.15
✎
15:18
|
Где счет = Документы.Счет.СоздатьДокумент();
... счет.Записать? и прочее? |
|||
9
Lamer1C
20.05.15
✎
15:25
|
(6) отказ то наверняка равен истина
|
|||
10
Vigor06
20.05.15
✎
16:11
|
(9) отказ - Ложь) проверя 1000 раз)
Процедура СоздатьДокументы()Экспорт //Подготовка этоАренда=ТипДоговора=Перечисления.дмВидыДоговоров.Аренда; этоСчетчики=ТипДоговора=Перечисления.дмВидыДоговоров.Счетчик; этоВода=ТипДоговора=Перечисления.дмВидыДоговоров.Вода; ЭтоПени = ТипДоговора=Перечисления.дмВидыДоговоров.Пени; ЭтоУслуга =ТипДоговора=Перечисления.дмВидыДоговоров.Услуги; ЭтоТелефон = ТипДоговора = Перечисления.дмВидыДоговоров.Телефон; СтруктураПоискаДокумента=новый Структура("ДоговорКонтрагента,Вид"); структураЗаполненияДокумента= новый Структура("КратностьВзаиморасчетов,КурсВзаиморасчетов,ТипЦен,СуммаВключаетНДС,УчитыватьНДС, |Комментарий,Склад,ВидПередачи,ОтражатьВУправленческомУчете", 1,1,Константы.Регион_типЦенДокументовАренды.Получить(),Константы.Регион_типЦенДокументовАренды.Получить().ЦенаВключаетНДС,Ложь, ТекстКомментария,Константы.Регион_СкладДокументовАренды.Получить(),Перечисления.ВидыПередачиТоваров.СоСклада,истина); структураЗаполненияТЧ=новый Структура("СтавкаНДС,СуммаНДС",Перечисления.СтавкиНДС.БезНДС,0); ТекущаяТЧ=Неопределено; Если этоАренда тогда структураЗаполненияТЧ.Вставить("Номенклатура",Константы.Регион_НоменклатураДокументовАренды.Получить()); структураЗаполненияТЧ.Вставить("Количество",1); ТекущаяТЧ=ТЧАренда; ИначеЕсли ЭтоУслуга ТОгда структураЗаполненияТЧ.Вставить("Номенклатура",Номенклатура); структураЗаполненияТЧ.Вставить("Количество",1); ТекущаяТЧ = ТЧУслуги; ИначеЕсли ЭтоТелефон() ТОгда структураЗаполненияТЧ.Вставить("Номенклатура",Номенклатура); структураЗаполненияТЧ.Вставить("Количество",1); ТекущаяТЧ = ТЧТелефон; ИначеЕсли ЭтоПени Тогда структураЗаполненияТЧ.Вставить("Номенклатура",Справочники.Номенклатура.НайтиПоКоду("00000000011")); //Пени структураЗаполненияТЧ.Вставить("Количество",1); ТекущаяТЧ = ТЧПени; Иначе ТекущаяТЧ = ТЧСчетчики; КонецЕсли; Если этоАренда тогда ДатаРеализации=КонецМесяца(ДатаМесяц); иначе ДатаРеализации=ДатаСчетов; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | АвтоСфрмированныеДокументы.СчетНаОплату, | АвтоСфрмированныеДокументы.Реализация, | АвтоСфрмированныеДокументы.СчетФактура |ИЗ | РегистрСведений.АвтоСфрмированныеДокументы КАК АвтоСфрмированныеДокументы |ГДЕ | АвтоСфрмированныеДокументы.Договор = &Договор | И АвтоСфрмированныеДокументы.Период = &Период"; запрос.УстановитьПараметр("Период",НачалоМесяца(ДатаМесяц)); //Формирование документов инд=0; ТЧ=ПолучитьДанныеДляДокументов(); всего=ТЧ.Количество(); Если этоСчетчики или этоВода тогда ВыполнитьДвижениеПоСчетчикам(ТЧ); ТекущаяТЧ=ТЧСчетчики; КонецЕсли; содержание="за "+Формат(ДатаМесяц,"ДФ='ММММ yyyy'")+" г. "; для каждого стр из ТЧ цикл Состояние(""+инд+"/"+всего+" "+стр.ДоговорКонтрагента); инд=инд+1; счет=Неопределено; реализация=Неопределено;счетФакт=Неопределено; отказ=Ложь; НачатьТранзакцию(); Если стр.ДокументыСозданы тогда запрос.УстановитьПараметр("Договор",стр.ДоговорКонтрагента); выборка=запрос.Выполнить().Выбрать(); Если выборка.Следующий() тогда счет=выборка.СчетНаОплату; реализация=выборка.Реализация; счетФакт=выборка.СчетФактура; Продолжить; КонецЕсли; КонецЕсли; Если (не этоСчетчики) и (НЕ этоВода) Тогда Если (Стр.Сумма = 0) или (Стр.Сумма = "") Тогда Продолжить; КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(счет) тогда счет=счет.ПолучитьОбъект(); иначе счет=Документы.СчетНаОплатуПокупателю.СоздатьДокумент(); КонецЕсли; датаДок=стр.ДатаОплаты; //Счет на оплату ЗаполнитьЗначенияСвойств(счет,стр); ЗаполнитьЗначенияСвойств(счет,структураЗаполненияДокумента); Если ЭтоПени Тогда Счет.Дата = ТекущаяДата(); счет.ДатаОтгрузки=ТекущаяДата(); Иначе счет.Дата=ДатаСчетов; счет.ДатаОтгрузки=ДатаСчетов; КонецЕсли; счет.СтруктурнаяЕдиница = стр.Организация.ОсновнойБанковскийСчет; счет.ВалютаДокумента = стр.ДоговорКонтрагента.ВалютаВзаиморасчетов; счет.Услуги.Очистить(); Если (Организация = Справочники.Организации.НайтиПоНаименованию("Энергосервис ООО").ссылка) или (Организация = Справочники.Организации.НайтиПоНаименованию("Регион ОПТ ООО").ссылка) ТОгда //Энергосервис или Регион-ОПТ счет.УчитыватьНДС = Истина; Иначе счет.УчитыватьНДС = Ложь; КонецЕсли; Если этоАренда или ЭтоУслуга или ЭтоТелефон или ЭтоПени тогда стрТЧДок=счет.Услуги.Добавить(); ЗаполнитьЗначенияСвойств(стрТЧДок,стр); ЗаполнитьЗначенияСвойств(стрТЧДок,структураЗаполненияТЧ); Если ЭтоТелефон ТОгда стрТЧДок.Содержание =стрТЧДок.Номенклатура.Наименование + Содержание + стрЗаменить(СокрЛП(стр.ДоговорКонтрагента),Организация.Наименование,"");; ИначеЕсли этоАренда Тогда стрТЧДок.Содержание = содержание+СтрЗаменить(СокрЛП(стр.ДоговорКонтрагента),Стр.Организация,""); ИначеЕсли ЭтоПени Тогда стрТЧДок.Содержание = "Пени за несвоевременную уплату арендной платы с " + Лев(Строка(НачПериода),СтрДлина(Строка(НачПериода)) - 8) + " по " + Лев(Строка(КонПериода),СтрДлина(Строка(КонПериода)) - 8); иначе стрТЧДок.Содержание = содержание+СокрЛП(стр.ДоговорКонтрагента); КонецЕсли; Если этоСчетчики тогда стрТЧДок.Сумма=стрТЧДок.Количество*стрТЧДок.Цена; иначе стрТЧДок.Цена = стр.Сумма; КонецЕсли; счет.СуммаДокумента=стрТЧДок.Сумма; ИначеЕсли этоСчетчики или этоВода тогда //+Самсонов Счет.СуммаВключаетНДС = Истина; // стрТЧДок=счет.Услуги.Добавить(); ЗаполнитьЗначенияСвойств(стрТЧДок,структураЗаполненияТЧ); стрТЧДок.Количество=стр.Разница; Если этоВода тогда стрТЧДок.Цена=Цена1; стрТЧДок.Номенклатура=Номенклатура1; иначе стрТЧДок.Цена=Цена; стрТЧДок.Номенклатура=Номенклатура; КонецЕсли; стрТЧДок.Сумма=стрТЧДок.Количество*стрТЧДок.Цена; Сумма = стрТЧДок.Сумма; содержание= стрТЧДок.Номенклатура.Наименование + " (сч.№"+стр.Счетчик+", прош.пок.="+стр.ПрошлыеПоказания+", тек.пок.="+стр.ТекущиеПоказания+")" + " за " + Формат(ДатаМесяц,"ДФ='MMMM yyyy'"); стрТЧДок.Содержание=содержание; //+Самсонов стрТЧДок.СтавкаНДС = стрТЧДок.Номенклатура.СтавкаНДС; стрТЧДок.СуммаНДС = стрТЧДок.Сумма * УчетНДС.ПолучитьСтавкуНДС(стрТЧДок.СтавкаНДС)/118; // Если этоВода тогда стрТЧДок=счет.Услуги.Добавить(); ЗаполнитьЗначенияСвойств(стрТЧДок,структураЗаполненияТЧ); стрТЧДок.Количество=стр.Разница; стрТЧДок.Цена=Цена2; стрТЧДок.Номенклатура=Номенклатура2; стрТЧДок.Сумма=стрТЧДок.Количество*стрТЧДок.Цена; стрТЧДок.Содержание=стрТЧДок.Номенклатура.Наименование + " (сч.№"+стр.Счетчик+", прош.пок.="+стр.ПрошлыеПоказания+", тек.пок.="+стр.ТекущиеПоказания+")" + " за " + Формат(ДатаМесяц,"ДФ='MMMM yyyy'");; Иначе стрТЧДок=счет.Услуги.Добавить(); ЗаполнитьЗначенияСвойств(стрТЧДок,структураЗаполненияТЧ); СтрТЧДок.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000000031").Ссылка;//Обслуживание Электрооборудования стрТЧДок.Содержание = стрТЧДок.Номенклатура.Наименование; стрТЧДок.Количество = 1; стрТЧДок.Цена = ПолучитьЦенуУслугиПоШкале(Сумма); стрТЧДок.Сумма = стрТЧДок.Цена; стрТЧДок.СтавкаНДС = стрТЧДок.Номенклатура.СтавкаНДС; стрТЧДок.СуммаНДС = стрТЧДок.Сумма * УчетНДС.ПолучитьСтавкуНДС(стрТЧДок.СтавкаНДС)/118; КонецЕсли; счет.СуммаДокумента=счет.Услуги.Итог("Сумма"); КонецЕсли; Если не ЗаписатьДок(счет,стр,0) тогда отказ=Истина;КонецЕсли; Если не отказ тогда //Реализация Если ЗначениеЗаполнено(реализация) тогда реализация=реализация.ПолучитьОбъект(); иначе реализация=Документы.РеализацияТоваровУслуг.СоздатьДокумент(); КонецЕсли; строкаДок=Неопределено; реализация.Услуги.Очистить(); реализация.Заполнить(счет.Ссылка); Если НЕ ЭтоУслуга И НЕ ЭтоТелефон и НЕ ЭтоПени ТОгда реализация.Проект=стр.Проект; КонецЕсли; реализация.ОтражатьВУправленческомУчете=истина; Если НЕ ЭтоПени Тогда реализация.Дата=ДатаРеализации; Иначе реализация.Дата=ТекущаяДата(); КонецЕсли; реализация.Комментарий=структураЗаполненияДокумента.Комментарий; реализация.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.АктВыполненныхРабот; Если не ЗаписатьДок(реализация,стр,1) тогда отказ=Истина;КонецЕсли; КонецЕсли; Если не отказ тогда //Счет фактура Если ЗначениеЗаполнено(счетФакт) тогда счетФакт=счетФакт.ПолучитьОбъект(); иначе счетФакт=Документы.СчетФактураВыданный.СоздатьДокумент(); КонецЕсли; счетФакт.ДокументыОснования.Очистить(); счетФакт.Заполнить(реализация.Ссылка); счетФакт.СуммаДокумента=реализация.СуммаДокумента; счетФакт.Сумма=реализация.СуммаДокумента; счетФакт.Дата=ДатаРеализации; счетФакт.Комментарий=структураЗаполненияДокумента.Комментарий; Если не ЗаписатьДок(счетФакт,стр,2) тогда отказ=Истина;КонецЕсли; КонецЕсли; Если не отказ тогда //Сохраним информацию о сформированных документах запись=РегистрыСведений.АвтоСфрмированныеДокументы.СоздатьМенеджерЗаписи(); запись.Договор=стр.ДоговорКонтрагента; запись.СчетНаОплату=счет.Ссылка; запись.Реализация=реализация.Ссылка; запись.СчетФактура=счетФакт.Ссылка; запись.Период=ДатаМесяц; запись.Записать(); //Установим пометку в ТЧ стр=ТекущаяТЧ.Найти(стр.ДоговорКонтрагента,"ДоговорКонтрагента"); стр.ДокументыСозданы=Истина; стр.Пометка=Ложь; КонецЕсли; Если отказ тогда ОтменитьТранзакцию(); Прервать; иначе ЗафиксироватьТранзакцию(); КонецЕсли; КонецЦикла; ЗаполнитьСписокДокументов(); КонецПроцедуры |
|||
11
Vigor06
21.05.15
✎
10:26
|
апну разок)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |