helpf.pro
Регистрация

v8.2 УП: Битая Ссыль как решить ????

ilias54rus1
01.07.2013 15:35Прочитано: 3833
Код 1C v 8.х
 Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если ЗначениеНеЗаполнено(ДатаВступления) Тогда
Предупреждение("Не заполнена дата вступления приказа на стоимость обучения. Проведение документа отменено");
Отказ = Истина;
Возврат;
КонецЕсли;

Для каждого Строка из Товары Цикл

Если ЗначениеНеЗаполнено(ВУЗ) или ЗначениеНеЗаполнено(Строка.ПрограммаОбучения) или ЗначениеНеЗаполнено(Строка.ФормаОбучения) или ЗначениеНеЗаполнено(Строка.Специальность)
или ЗначениеНеЗаполнено(Строка.Сумма) или ЗначениеНеЗаполнено(Строка.Валюта) или ЗначениеНеЗаполнено(Строка.ПериодичностьОплаты) Тогда
Предупреждение("В строке "+Строка.НомерСтроки+" не установлены все реквизиты для установки стоимости обучения");
Если ЭтотОбъект.Проведен Тогда
ЭтотОбъект.Проведен = Ложь;
ЭтотОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
Прервать;
КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПриказПоСтоимостиОбучения.Ссылка,
| ПриказПоСтоимостиОбучения.Товары.(
| Справочник
| ),
| СтоимостьОбучения.Ссылка КАК СсылкаСправочник
|ИЗ
| Документ.ПриказПоСтоимостиОбучения КАК ПриказПоСтоимостиОбучения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СтоимостьОбучения КАК СтоимостьОбучения
| ПО ПриказПоСтоимостиОбучения.Товары.Справочник = СтоимостьОбучения.Ссылка
|ГДЕ
| СтоимостьОбучения.ВУЗ = &ВУЗ
| И СтоимостьОбучения.ФормаОбучения = &ФормаОбучения
| И СтоимостьОбучения.ПрограммаОбучения = &ПрограммаОбучения
| И СтоимостьОбучения.Специальность = &Специальность
| И СтоимостьОбучения.ДатаВступления = &Дата";

Запрос.УстановитьПараметр("ВУЗ", ВУЗ);
Запрос.УстановитьПараметр("ФормаОбучения",Строка.ФормаОбучения);
Запрос.УстановитьПараметр("ПрограммаОбучения", Строка.ПрограммаОбучения);
Запрос.УстановитьПараметр("Специальность", Строка.Специальность);
Запрос.УстановитьПараметр("Дата", ДатаВступления);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Если Выборка.Следующий() Тогда
СправочникСсылка = Выборка.СсылкаСправочник.ПолучитьОбъект();
Иначе
СправочникСсылка = Справочники.СтоимостьОбучения.СоздатьЭлемент();
КонецЕсли;

СправочникСсылка.ВУЗ = ВУЗ;
СправочникСсылка.ФормаОбучения = Строка.ФормаОбучения;
СправочникСсылка.ПрограммаОбучения = Строка.ПрограммаОбучения;
СправочникСсылка.Специальность = Строка.Специальность;
СправочникСсылка.Сумма = Строка.Сумма;
СправочникСсылка.Валюта = Строка.Валюта;
СправочникСсылка.ПериодичностьОплаты = Строка.ПериодичностьОплаты;
СправочникСсылка.НомерПриказа = НомерПриказа;
СправочникСсылка.ДатаВступления = ДатаВступления;
СправочникСсылка.Наименование = СокрЛП(Строка.ПрограммаОбучения)+" "+СокрЛП(Строка.Специальность)+" "+СокрЛП(Строка.ФормаОбучения)+" "+СокрЛП(ВУЗ)+" "+Формат(ДатаВступления, "ДФ=dd.MM.yyyy");
СправочникСсылка.Записать();
Строка.Справочник = СправочникСсылка.Ссылка;

//Запись истории номенклатуры
Запрос2 = Новый Запрос;
Запрос2.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Группы.ПрограммаОбучения = &ПрограммаОбучения
| И Номенклатура.Группы.ВУЗ = &ВУЗ
| И Номенклатура.Группы.ФормаОбучения = &ФормаОбучения
| И Номенклатура.Группы.Специальность = &Специальность";

Запрос2.УстановитьПараметр("ВУЗ", ВУЗ);
Запрос2.УстановитьПараметр("ПрограммаОбучения", Строка.ПрограммаОбучения);
Запрос2.УстановитьПараметр("ФормаОбучения", Строка.ФормаОбучения);
Запрос2.УстановитьПараметр("Специальность", Строка.Специальность);

Результат = Запрос2.Выполнить();
НоменклатураВыборка = Результат.Выбрать();

Пока НоменклатураВыборка.Следующий() Цикл


ПолеТаблица = Новый ТаблицаЗначений;

ПолеТаблица.Колонки.Добавить("ДатаВступления");
ПолеТаблица.Колонки.Добавить("Валюта");
ПолеТаблица.Колонки.Добавить("Сумма");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СтоимостьОбучения.Ссылка,
| СтоимостьОбучения.ВУЗ,
| СтоимостьОбучения.ФормаОбучения,
| СтоимостьОбучения.ПрограммаОбучения,
| СтоимостьОбучения.Специальность,
| СтоимостьОбучения.Сумма,
| СтоимостьОбучения.Валюта,
| СтоимостьОбучения.ПериодичностьОплаты,
| СтоимостьОбучения.Номенклатура,
| СтоимостьОбучения.НомерПриказа,
| СтоимостьОбучения.ДатаВступления
|ИЗ
| Справочник.СтоимостьОбучения КАК СтоимостьОбучения
|ГДЕ
| СтоимостьОбучения.ВУЗ = &ВУЗ
| И СтоимостьОбучения.ФормаОбучения = &ФормаОбучения
| И СтоимостьОбучения.ПрограммаОбучения = &ПрограммаОбучения
| И СтоимостьОбучения.Специальность = &Специальность";


Запрос.УстановитьПараметр("ВУЗ", ВУЗ);
Запрос.УстановитьПараметр("ПрограммаОбучения", Строка.ПрограммаОбучения);
Запрос.УстановитьПараметр("ФормаОбучения", Строка.ФормаОбучения);
Запрос.УстановитьПараметр("Специальность", Строка.Специальность);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Количество() = 0 Тогда

Продолжить;
КонецЕсли;
Пока Выборка.Следующий() Цикл
НоваяСтрока = ПолеТаблица.Добавить();
НоваяСтрока.ДатаВступления = Выборка.ДатаВступления;
НоваяСтрока.Валюта = Выборка.Валюта;
НоваяСтрока.Сумма = Выборка.Сумма;
КонецЦикла;
Для каждого СтрокаСтоимости из ПолеТаблица Цикл
НоваяДата = СтрокаСтоимости.ДатаВступления;
НоваяВалюта = СтрокаСтоимости.Валюта;
НоваяСумма = СтрокаСтоимости.Сумма;

Запрос1 = Новый Запрос;
Запрос1.Текст = "ВЫБРАТЬ
| ЦеныНоменклатуры.Период КАК Период,
| ЦеныНоменклатуры.Регистратор,
| ЦеныНоменклатуры.Номенклатура,
| ЦеныНоменклатуры.Валюта,
| ЦеныНоменклатуры.Цена,
| ЦеныНоменклатуры.ТипЦен
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
| ЦеныНоменклатуры.Период = &Дата
| И ЦеныНоменклатуры.Валюта = &Валюта
| И ЦеныНоменклатуры.Цена = &Сумма
| И ЦеныНоменклатуры.Номенклатура = &Номенклатура";

Запрос1.УстановитьПараметр("Номенклатура", НоменклатураВыборка.Ссылка);
Запрос1.УстановитьПараметр("Дата", НоваяДата);
Запрос1.УстановитьПараметр("Валюта", НоваяВалюта);
Запрос1.УстановитьПараметр("Сумма", НоваяСумма);

Результат = Запрос1.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Количество() = 0 Тогда
ПерСтоим = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ПерСтоим.Дата = НоваяДата;

Если НоваяВалюта.Пустая() Тогда
Сообщить("Не установлена валюта стоимости. Принята валюта руб!");
НоваяВалюта = Справочники.Валюты.НайтиПоКоду("810");
СпрЦенТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в РУБ");
СпрСтоимТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в РУБ");
КонецЕсли;
СпрСтоимВалюта = НоваяВалюта.Ссылка;
Если Найти(ВРег(НоваяВалюта), "РУБ") <> 0 Тогда
СпрСтоимТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в РУБ");
СпрЦенТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в РУБ");
ИначеЕсли Найти(ВРег(НоваяВалюта), "USD") <> 0 Тогда
СпрСтоимТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в USD");
СпрЦенТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в USD");
ИначеЕсли Найти(ВРег(НоваяВалюта), "УЕ") <> 0 Тогда
СпрСтоимТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в УЕ");
СпрЦенТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основной в УЕ");
КонецЕсли;
СпрСтоимЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("год");
СпрСтоим = ПерСтоим.Товары.Добавить();
СпрЦен = ПерСтоим.ТипыЦен.Добавить();
СпрЦен.ТипЦен = СпрЦенТипЦен;
СпрСтоим.ТипЦен = СпрСтоимТипЦен;
СпрСтоим.Цена = НоваяСумма;
СпрСтоим.Валюта = СпрСтоимВалюта;
СпрСтоим.ЕдиницаИзмерения = СпрСтоимЕдиницаИзмерения;
СпрСтоим.Номенклатура = НоменклатураВыборка.Ссылка;
Попытка
ПерСтоим.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
Сообщить("Создан документ "+СокрЛП(ПерСтоим)+" для записи истории номенклатуры!");
Исключение
Сообщить("Документ установки цен номенклатуры с такими параметрами уже существует");
КонецПопытки;
КонецЕсли;
КонецЦикла;

КонецЦикла;
КонецЦикла;
ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);

КонецПроцедуры
Проблема при записи справочника изза этого не могу идти далее

Изменено 01.07.13 16:04:43
Yandex
Возможно, вас также заинтересует
Реклама на портале
ilias54rus1
01.07.2013 15:36Ответ № 1
Справочник стоимость обучения
ilias54rus1
01.07.2013 15:37Ответ № 2
он завивисмый от приказов на стоимость обучения
E_Migachev
01.07.2013 16:05Ответ № 3
(2) ilias54rus1, так с какой ошибкой вылетает?
ilias54rus1
01.07.2013 16:37Ответ № 4
64 ошибка типо есть а его нету вот что я думаю просто сделать проверку а не запись зависмого документа что он существует потому что код разрабов может и праывильный но возможно не полный
ilias54rus1
02.07.2013 07:36Ответ № 5
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.ПриказПоСтоимостиОбучения.МодульОбъекта(64)}: Ошибка при вызове метода контекста (Записать)

по причине:

по причине:
В данной транзакции уже происходили ошибки!
E_Migachev
02.07.2013 10:37Ответ № 6
(5) ilias54rus1,
строка 64 это:
Код 1C v 8.х
 ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);   
?
ошибка В данной транзакции уже происходили ошибки!
попробуй разбить код на чисти и таким образом найдешь ошибку
ilias54rus1
02.07.2013 14:52Ответ № 7
СправочникСсылка.Записать(); проблема возникает даже здесь при банальной записи в справочник СТоимостьОбучения данные берем из таблицы товары в данном документе
)
ilias54rus1
02.07.2013 14:54Ответ № 8
хотя справочник пуст как стеклышко
*06
Mokey
02.07.2013 14:59Ответ № 9
(7) ilias54rus1, а данные подходят? с какой ошибкой не записывается элемент справочника? Чудес не бывает. У меня нет конфы, я смотрю только на приведённый Вами код.
ilias54rus1
03.07.2013 07:09Ответ № 10
С ошибкой <Объект не найден> (77:8a9f001a4bf17cb111e2e38db6904be4) вот такой но строки он должен читать с формы приказа четко понимаю этот факт но как у них это реализовано не вижу )
E_Migachev
03.07.2013 17:52Ответ № 11
(10) ilias54rus1, а то за объект ты можешь определить? отладчиком?
ilias54rus1
04.07.2013 12:22Ответ № 12
Определяю есть подозрение что он не сохраняет выходной документ
E_Migachev
04.07.2013 17:43Ответ № 13
ну так не понять, разбивай код на куски и отладчиком прогоняй, только так поймешь почему ошибка
Подсказка: Вы получили ответ на свой вопрос - закройте вопрос!
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.