8.х Приказ По Стоимости Обучения

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Ilias54rus, 3 июл 2013.

  1. TopicStarter Overlay
    Ilias54rus
    Offline

    Ilias54rus

    Регистрация:
    3 июл 2013
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Если ЗначениеНеЗаполнено(ДатаВступления) Тогда
    Предупреждение("Не заполнена дата вступления приказа на стоимость обучения. Проведение документа отменено");
    Отказ = Истина;
    Возврат;
    КонецЕсли;

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

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

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

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

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

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

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

    КонецПроцедуры
    У этого кода две проблемы первая не может провести приказ вторая не гененерирует справочник стоимость обучения !!!!!
    Помогите решить.
    Ошибки прикладываю ниже:
    Это про сам приказ.
    Ошибка при выполнении обработчика - 'ОбработкаПроведения'
    по причине:
    {Документ.ПриказПоСтоимостиОбучения.МодульОбъекта(64)}: Ошибка при вызове метода контекста (Записать)

    по причине:

    по причине:
    В данной транзакции уже происходили ошибки!
    Это про справочник.
    <Объект не найден> (77:8a9f001a4bf17cb111e2e38db6904be4)
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    1. укажите конфигурацию, характер приложения (обычное, управляемое)
    2. код офомляйте по правилам в егах (ну ведь нечитаемо совсем)

    3. вы отладчиком смотрели? может не отрабатывает код?
  3. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    справочник то у вас вообще существует? раз такая ошибка
  5. TopicStarter Overlay
    Ilias54rus
    Offline

    Ilias54rus

    Регистрация:
    3 июл 2013
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Приложение 1С предриятие 8.2
    Конфигурация Управление Образовательным Учереждением 2.0

    Существует, но при создании приказа он должен быть заполнен автоматически, а это не происходит,

    И его наименования занесено в приказ
  6. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    запустите отладчик и пошагово посмотрите как выполняется ваш код
  7. TopicStarter Overlay
    Ilias54rus
    Offline

    Ilias54rus

    Регистрация:
    3 июл 2013
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Затыкаеться в 2 местах одна из них запись справочника

Поделиться этой страницей