Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 11:06

Ошибка в коде

Автор Ивашка, 25 дек 2019, 00:32

0 Пользователей и 2 гостей просматривают эту тему.

Ивашка

Здравствуйте!! Помогите исправить ошибку: Запись не верна! Вид субконто Номенклатура" не доступен для данной записи! (Регистр бухгалтерии: Хозрасчетный; Номер строки: 1)
Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.СебестоимостьТоваров.Записывать = Истина;
Движения.Хозрасчетный.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

// регистр ОстаткиНоменклатуры Расход
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Партия = Ссылка;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
КонецЦикла;

Движения.Записать();

Если Режим = РежимПроведенияДокумента.Оперативный Тогда
// проверяем на остатки товаров
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Номенклатура,
| -ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Номенклатура
| ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
| ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Ссылка)) КАК ОстаткиНоменклатурыОстатки
|ГДЕ
| ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

Если НЕ РезультатЗапроса.Пустой() Тогда

Отказ = Истина;

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

Пока Выборка.Следующий() Цикл
Сообщить("Недостаточно товара " + Выборка.Номенклатура + " в количестве " + Выборка.Количество + " шт.");
КонецЦикла;

КонецЕсли;

КонецЕсли;   

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

Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

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

СуммаСебестоимости = 0;

Пока Выборка.Следующий() Цикл
Если Выборка.Количество <> 0 Тогда
СебестоимостьЕдиницы = Выборка.Сумма/Выборка.Количество;
Иначе
    СебестоимостьЕдиницы = 0;
КонецЕсли;

// Движение по регистру СобестоимостьТоваров
Движение = Движения.СебестоимостьТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
СтрокаТЧ = Товары.Найти(Выборка.Номенклатура, "Товары");
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = СтрокаТЧ.Количество;
СебестоимостьСписания =  СебестоимостьЕдиницы * СтрокаТЧ.Количество;
Движение.Сумма = СебестоимостьСписания;

СуммаСебестоимости = СуммаСебестоимости + СебестоимостьСписания;

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

// Движение по регистру Хозрасчетный
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.СчетДт = ПланыСчетов.Управленческий.Себестоимость;
Проводка.СчетКт = ПланыСчетов.Управленческий.Материалы;
Проводка.Период = Дата;
Проводка.Сумма = СуммаСебестоимости;
Проводка.Количество = ТекСтрокаТовары.Количество;
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ТекСтрокаТовары.Номенклатура;
Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Контрагент;

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

alexandr_ll

Цитата: Ивашка от 25 дек 2019, 00:32
Здравствуйте!! Помогите исправить ошибку: Запись не верна! Вид субконто Номенклатура" не доступен для данной записи! (Регистр бухгалтерии: Хозрасчетный; Номер строки: 1)
Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.СебестоимостьТоваров.Записывать = Истина;
Движения.Хозрасчетный.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

// регистр ОстаткиНоменклатуры Расход
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Партия = Ссылка;
Движение.Количество = ТекСтрокаТовары.Количество;
Движение.Сумма = ТекСтрокаТовары.Сумма;
КонецЦикла;

Движения.Записать();

Если Режим = РежимПроведенияДокумента.Оперативный Тогда
// проверяем на остатки товаров
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Номенклатура,
| -ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Номенклатура
| ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
| ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Ссылка)) КАК ОстаткиНоменклатурыОстатки
|ГДЕ
| ОстаткиНоменклатурыОстатки.КоличествоОстаток < 0";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

Если НЕ РезультатЗапроса.Пустой() Тогда

Отказ = Истина;

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

Пока Выборка.Следующий() Цикл
Сообщить("Недостаточно товара " + Выборка.Номенклатура + " в количестве " + Выборка.Количество + " шт.");
КонецЦикла;

КонецЕсли;

КонецЕсли;   

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

Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

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

СуммаСебестоимости = 0;

Пока Выборка.Следующий() Цикл
Если Выборка.Количество <> 0 Тогда
СебестоимостьЕдиницы = Выборка.Сумма/Выборка.Количество;
Иначе
    СебестоимостьЕдиницы = 0;
КонецЕсли;

// Движение по регистру СобестоимостьТоваров
Движение = Движения.СебестоимостьТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
СтрокаТЧ = Товары.Найти(Выборка.Номенклатура, "Товары");
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = СтрокаТЧ.Количество;
СебестоимостьСписания =  СебестоимостьЕдиницы * СтрокаТЧ.Количество;
Движение.Сумма = СебестоимостьСписания;

СуммаСебестоимости = СуммаСебестоимости + СебестоимостьСписания;

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

// Движение по регистру Хозрасчетный
Проводка = Движения.Хозрасчетный.Добавить();
Проводка.СчетДт = ПланыСчетов.Управленческий.Себестоимость;
Проводка.СчетКт = ПланыСчетов.Управленческий.Материалы;
Проводка.Период = Дата;
Проводка.Сумма = СуммаСебестоимости;
Проводка.Количество = ТекСтрокаТовары.Количество;
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ТекСтрокаТовары.Номенклатура;
Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = Контрагент;

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

Движения делаете по регистру бухгалтерии "Хозрасчетный", а счет указываете Из плана счетов "Управленческий"

Ивашка

еще вопрос: почему у меня в продажах нету записей?, я же флажок истина поставил

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск