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

Помогите разобраться с ошибкой в коде

Автор The, 16 окт 2015, 20:21

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

The

Приветствую! :bleh:

Я только-только начал разбираться с 1С и тут проблема. 1С используется 8.2
При выполнении действия выскакивает ошибка:
Цитировать
{ОбщийМодуль.Ценообразование.Модуль(876)}: Ошибка при вызове метода контекста (Выполнить)
    ТЗ=Запрос.Выполнить().Выгрузить();
по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Ошибка SQL: Деление на 0
по причине:
Ошибка SQL: Деление на 0
по причине:
Деление на 0 значения типа Numeric

Вот кусок кода на который ссылается конфигуратор:

Функция СформироватьСебестВсейНоменклРасширеная(ДатаДок,ВыбратьВидыНоменкл="",типЦены=Неопределено) Экспорт/// вначале формируем цены товаров на складах
/// в форме создать Перем ВыбратьВидыНоменкл;/// что выбрать : блюда, товары или всё ?
/// "Все"               Тогда  ВыбратьВидыНоменкл = "";
/// "Блюда и Заготовки" Тогда  ВыбратьВидыНоменкл = "  И (НоменклатураСправочник.ВидНоменклатуры = &Блю ИЛИ НоменклатураСправочник.ВидНоменклатуры = &Заг)";
/// "Товары и Продукты" Тогда  ВыбратьВидыНоменкл = " И (НоменклатураСправочник.ВидНоменклатуры = &Тов ИЛИ НоменклатураСправочник.ВидНоменклатуры = &Прод) ";
     /// возвращает :       средняя цена по остаткам
///                       средняя цена по приходам на склад
///                       остаток на складе
///    последняя установленная цена (типЦены) из РегСведений ЦеныНоменклатуры,
         ///           все это по номенклатуре и по всем единицам измерения конкретной номенклатуры
ТЗ = Новый ТаблицаЗначений;
Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
              | НоменклатураСправочник.Ссылка КАК Номенклатура,
              | 0 КАК Себестоимость,
              | ЕдиницыИзмерения.Ссылка КАК ЕдИзм,
              | ЕдиницыИзмерения.Коэффициент КАК КоэфЕдИзм,
              | НоменклатураСправочник.ВидНоменклатуры КАК Вид,
              | ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / ЕдиницыИзмерения.Коэффициент, 0) КАК Остаток,
              | ВЫБОР
              | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход <> 0
              | ТОГДА ТоварыНаСкладахОстаткиИОбороты.СуммаПриход / ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход
              | ИНАЧЕ 0
              | КОНЕЦ КАК ПоСреднемуПриходу,
              | ВЫБОР
              | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <> 0
              | ТОГДА ТоварыНаСкладахОстаткиИОбороты.СуммаКонечныйОстаток / ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
              | ИНАЧЕ 0
              | КОНЕЦ КАК ПоОстаткам,
              | ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
              | 0 КАК Разница
              |ИЗ
              | Справочник.Номенклатура КАК НоменклатураСправочник
              | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
              | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦены = &ТипЦены) КАК ЦеныНоменклатурыСрезПоследних
              | ПО ЕдиницыИзмерения.Ссылка = ЦеныНоменклатурыСрезПоследних.Единица
              | ПО НоменклатураСправочник.Ссылка = ЕдиницыИзмерения.Владелец.Ссылка
              | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, &ПоДату, , , ) КАК ТоварыНаСкладахОстаткиИОбороты
              | ПО (ТоварыНаСкладахОстаткиИОбороты.Номенклатура = НоменклатураСправочник.Ссылка)
              |ГДЕ
              | НоменклатураСправочник.ЭтоГруппа = ЛОЖЬ "+ВыбратьВидыНоменкл+"
              |
              |СГРУППИРОВАТЬ ПО
              | НоменклатураСправочник.Ссылка,
              | ЕдиницыИзмерения.Ссылка,
              | ЕдиницыИзмерения.Коэффициент,
              | НоменклатураСправочник.ВидНоменклатуры,
              | ВЫБОР
              | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход <> 0
              | ТОГДА ТоварыНаСкладахОстаткиИОбороты.СуммаПриход / ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход
              | ИНАЧЕ 0
              | КОНЕЦ,
              | ВЫБОР
              | КОГДА ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток <> 0
              | ТОГДА ТоварыНаСкладахОстаткиИОбороты.СуммаКонечныйОстаток / ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
              | ИНАЧЕ 0
              | КОНЕЦ,
              | ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / ЕдиницыИзмерения.Коэффициент, 0),
              | ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
              |
              |УПОРЯДОЧИТЬ ПО
              | НоменклатураСправочник.Наименование";
 
     ///ДатаДок=ТекущаяДата();                             "+ВыбратьВидыНоменкл+"
Запрос.УстановитьПараметр("Блю",Перечисления.ВидыНоменклатуры.Блюдо);
Запрос.УстановитьПараметр("Заг",Перечисления.ВидыНоменклатуры.Заготовка);
Запрос.УстановитьПараметр("Тов",Перечисления.ВидыНоменклатуры.Товар);
Запрос.УстановитьПараметр("Прод",Перечисления.ВидыНоменклатуры.Продукт);

Запрос.УстановитьПараметр("ТипЦены",типЦены);
Запрос.УстановитьПараметр("ПоДату",ДатаДок);
ТЗ=Запрос.Выполнить().Выгрузить();
Возврат ТЗ;
КонецФункции




Помогите пожалуйста решить эту делему. Я не могу никак ошибку найти :(
По возможности поясните пожулуйста откуда она могла взяться? ведь в код конфигурации вроде как никто не лез... :dfbsdfbsdf:

vitasw

Часом нуля в коэфициенте единицы измерения нет?

The

Цитата: vitasw от 16 окт 2015, 20:58
Часом нуля в коэфициенте единицы измерения нет?
Может и есть. Меня можно назвать 1С дебилом, поэтому не скромный вопрос где это посмотреть?

какие то коэффициенты нашел, но в некоторых товарах они вообще не проставлены...

vitasw

У номенклатуры есть единица измерения - это справочник. Кроме наименования в единицах измерения есть/должно быть поле коэффициент. Этот коэфициент не должен быть равен нулю. Если ничего не стоит - это ноль.

The

Цитата: vitasw от 16 окт 2015, 22:38
У номенклатуры есть единица измерения - это справочник. Кроме наименования в единицах измерения есть/должно быть поле коэффициент. Этот коэфициент не должен быть равен нулю. Если ничего не стоит - это ноль.
то есть ошибка может возникать даже из одного товара? А как отфильтроватьь по этому полю? просто товаров больше 1000....
Добавлено: 17 окт 2015, 05:13


Цитата: vitasw от 16 окт 2015, 22:38
У номенклатуры есть единица измерения - это справочник. Кроме наименования в единицах измерения есть/должно быть поле коэффициент. Этот коэфициент не должен быть равен нулю. Если ничего не стоит - это ноль.
коэффициент не равен нулю. Какие еще варианты есть?

Luzer1C

Цитата: The от 16 окт 2015, 20:21ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / ЕдиницыИзмерения.Коэффициент, 0) КАК Остаток,
Попробовать вот здесь.
Написать так
ВЫБОР
КОГДА ЕдиницыИзмерения.Коэффициент = 0 Тогда
0
Иначе
ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / ЕдиницыИзмерения.Коэффициент, 0)
Конец Как Остаток
Халамбалам.

pavl_vs

The, если Вы готовы править конфигуратор, то воспользуйтесь советом Luzer1C; и позаботьтесь о сохранении изменений при очередном обновлении.

А мой совет - следует правильно, и по возможности полно, заполнять справочники.
"просто товаров больше 1000...." - это не количество, за выходной управитесь, важно понимать назначение коэффициента.

vitasw

Пдправте СКД таким образом чтобы добавить просто отдельным полем коэффициент, а поле "Остаток" вообще выключите. Тогда увидите номенклатуру без коэффициентов.

The

Цитата: Luzer1C от 17 окт 2015, 08:36
Цитата: The от 16 окт 2015, 20:21ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / ЕдиницыИзмерения.Коэффициент, 0) КАК Остаток,
Попробовать вот здесь.
Написать так
ВЫБОР
КОГДА ЕдиницыИзмерения.Коэффициент = 0 Тогда
0
Иначе
ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток / ЕдиницыИзмерения.Коэффициент, 0)
Конец Как Остаток

Спасибо Вам большое, но Ваш совет мне к сожалению не помог. Ошибка выводилась. Но все же спасибо огромное за участие в решении моей проблемы! :bleh:

Но найдя сортировку по коэффициенту я все смог быстро исправить коэффициенты. Четыре нулевых было. После их исправления все как по волшебству заработало! :zebzdr:

Так что товарищи Вы мне очень сильно помогли. Особенно vitasw. И не обижайтесь, тк я теперь будут к Вам обращаться вот с такими дурацкими вопросами. :nhsrm:

Luzer1C

Цитата: The от 16 окт 2015, 20:21Ошибка выполнения запросапо причине:Ошибка при выполнении операции над данными:Ошибка SQL: Деление на 0
Ну так проблема очевидна. Тут же русским языком написано.:)
Халамбалам.

Теги:

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

Рейтинг@Mail.ru

Поиск