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

1с 7.7 Склад Ошибка

Автор antoha86, 20 ноя 2013, 13:13

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

antoha86

Вопрос такой я создаю документ инвентаризация он  мне пишет, что по учету количество 6 шт, но у меня по факту 0 шт, я сохраняю документ инвентаризации, а документ списания он не может создать  на то количество, которое по учету у меня(пишет что количество по факту меньше что-то там..) а если у меня по факту 0 мне приходится ставить остаток равный учету и потом только создать документ списания на это количество, это норма?

antoha86

никаких соображений?B)

Вопрос такой подскажите пожалуйста модуль отчета:
Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;
   Если ВыбДата>ПолучитьДатуТА() Тогда
      Сообщить("Отчет построен по точку актуальности: "+ПолучитьДатуТА());
      ДатаОтчета=ПолучитьДатуТА();
   Иначе
      ДатаОтчета=ВыбДата;
   КонецЕсли;
   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ДатаОтчета по ДатаОтчета;
   |Номенклатура = Регистр.ОстаткиТоваров.Номенклатура, Регистр.СтоимостьТоваров.Номенклатура;
   |Количество = Регистр.ОстаткиТоваров.Количество;
   |Стоимость = Регистр.СтоимостьТоваров.Стоимость;
   |Функция КоличествоКонОст = КонОст(Количество);
   |Функция СтоимостьКонОст = КонОст(Стоимость);
   |Группировка Номенклатура без групп;
   |"//}}ЗАПРОС
   ;
   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
      Возврат;
   КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса
   Таб = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Сформировать");
   // Заполнение полей "Заголовок"
   Таб.ВывестиСекцию("Заголовок");
   Состояние("Заполнение выходной таблицы...");
   Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
   Пока Запрос.Группировка(1) = 1 Цикл
   СредняяСебестоимость=Формат((Запрос.Стоимость/Запрос.Количество),"Ч15.2,");
      // Заполнение полей Номенклатура
      Таб.ВывестиСекцию("Номенклатура");
   КонецЦикла;
   // Заполнение полей "Итого"
   Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы
   Таб.ТолькоПросмотр(1);
   Таб.Показать("Сформировать", "");
КонецПроцедуры


Выдает ошибку:
СредняяСебестоимость=Формат((Запрос.Стоимость/Запрос.Количество),"Ч15.2,");
{Отчет.Себестоимость.Форма.Модуль(38)}: Деление на 0
ПериодСтр(ВыбНачПериода<<?>>,ВыбКонПериода)
Переменная не определена (ВыбНачПериода)

Herby

первая ошибка: деление на нуль, перед делением делайте проверку

Если Запрос.Количество > 0 тогда
  СредняяСебестоимость=Формат((Запрос.Стоимость/Запрос.Количество),"Ч15.2,");
иначе
  СредняяСебестоимость = "";
КонецЕсли;


вторая ошибка связана с тем что у вас не определена переменная ВыбНачПериода: посмотрите на форме какой идентификатор у начальной даты.

antoha86

Цитата: Herby от 09 дек 2013, 13:30
первая ошибка: деление на нуль, перед делением делайте проверку

Если Запрос.Количество > 0 тогда
  СредняяСебестоимость=Формат((Запрос.Стоимость/Запрос.Количество),"Ч15.2,");
иначе
  СредняяСебестоимость = "";
КонецЕсли;


вторая ошибка связана с тем что у вас не определена переменная ВыбНачПериода: посмотрите на форме какой идентификатор у начальной даты.
В дате я в конструкторе выбрал выбор периода потом конечную дату удалил а начальную дату переименовал в ВыбДата
Хорошо, ошибку перестал выдавать, а как мне этот результат себестоимости вывести в отчет?

Herby

Цитата: antoha86 от 09 дек 2013, 14:55Хорошо, ошибку перестал выдавать, а как мне этот результат себестоимости вывести в отчет?

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

antoha86

Цитата: Herby от 09 дек 2013, 15:08
Цитата: antoha86 от 09 дек 2013, 14:55Хорошо, ошибку перестал выдавать, а как мне этот результат себестоимости вывести в отчет?

если количество равно нулю, то либо пустое значение себестоимости выводите, либо из справочника(если она хранится в справочнике), ну либо искать предыдущие движения этого товара и вычислять оттуда себестоимость (но это очень геморно, и производительность отчета снизится)
Я имею ввиду (значения количества у меня не ноль) вот это значения СредняяСебестоимость можно как нибуть вывести в отчет у меня только сумма и количество
Добавлено: 09 дек 2013, 16:39


Цитата: antoha86 от 09 дек 2013, 15:22
Цитата: Herby от 09 дек 2013, 15:08
Цитата: antoha86 от 09 дек 2013, 14:55Хорошо, ошибку перестал выдавать, а как мне этот результат себестоимости вывести в отчет?

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

Herby

Цитата: antoha86 от 09 дек 2013, 15:22Я имею ввиду (значения количества у меня не ноль) вот это значения СредняяСебестоимость можно как нибуть вывести в отчет у меня только сумма и количество

ну добавьте в макете таблицы колонку средняСебестоимость по аналогии с имеющимися.

antoha86

Помогите пожалуйста

Модуль расходной накладной:

Перем Рег, СтоимРег, РегПартии;
Процедура ИнициализацияПеременных() 
   Рег=СоздатьОбъект("Регистр.ОстаткиТоваров");
   СтоимРег=СоздатьОбъект("Регистр.СтоимостьТоваров");
   Если Константа.МетодСписания<>Перечисление.МетодыСписания.ПоСреднему Тогда
         РегПартии=СоздатьОбъект("Регистр.ПартииТоваров");
   КонецЕсли;
   СЗ=СоздатьОбъект("СписокЗначений");
   ВыгрузитьТабличнуюЧасть(СЗ,"Номенклатура");
   Рег.УстановитьЗначениеФильтра("Номенклатура",СЗ,2);
   СтоимРег.УстановитьЗначениеФильтра("Номенклатура",СЗ,2);
   Если ИтогиАктуальны()=0 Тогда
      Рег.ВременныйРасчет(1);
      СтоимРег.ВременныйРасчет(1);
      Если Константа.МетодСписания<>Перечисление.МетодыСписания.ПоСреднему Тогда
         РегПартии.УстановитьЗначениеФильтра("Номенклатура",СЗ,2);
         РегПартии.ВременныйРасчет(1);
      КонецЕсли;
      РассчитатьРегистрыНа(ТекущийДокумент());
   КонецЕсли;
   КонецПроцедуры

Процедура СписатьПартии()   
   //РегПартии=СоздатьОбъект("Регистр.ПартииТоваров");
   //СЗ=СоздатьОбъект("СписокЗначений");
    //ВыгрузитьТабличнуюЧасть(СЗ,"Номенклатура");
   //РегПартии.УстановитьЗначениеФильтра("Номенклатура",СЗ,2);
   ТЗ=СоздатьОбъект("ТаблицаЗначений");
   РегПартии.ВыгрузитьИтоги(ТЗ,1);
   Если Константа.МетодСписания=Перечисление.МетодыСписания.FIFO Тогда
      Направление = "+";
   Иначе
      Направление="-";
   КонецЕсли;
   ТЗ.Сортировать("+Номенклатура,"+Направление+"Партия",1);
   ВыбратьСтроки();
   Пока ПолучитьСтроку()=1 Цикл
      ОсталосьСписать=Количество;
      ТЗСтрока=0;
      ТЗ.НайтиЗначение(Номенклатура,ТЗСтрока,"Номенклатура");
      Для Ном=ТЗСтрока По ТЗ.КоличествоСтрок() Цикл
         ТЗ.ПолучитьСтрокуПоНомеру(ном);
         ОстКол=ТЗ.Количество;
         ОстСум=ТЗ.Стоимость;
         Списать=МИН(ОстКол,ОсталосьСписать);
         СебестоимостьСписания=Списать/ОстКол*ОстСум;
         

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

Процедура ОбработкаПроведения()     
   ИнициализацияПеременных();
   //Рег=СоздатьОбъект("Регистр.ОстаткиТоваров");
   //СтоимРег=СоздатьОбъект("Регистр.СтоимостьТоваров");
   ВыбратьСтроки();
   Пока ПолучитьСтроку()=1 Цикл
      ОстКол=Рег.Остаток(Номенклатура,Склад,"Количество");
      Если ОстКол < Количество Тогда
         Сообщить ("В строке № "+НомерСтроки
         +"не хватает товара"""+Номенклатура+
         """, из необходимых"+Количество+
         "на складе "+Склад+" имеется" +ОстКол+",");
         СтатусВозврата(0);
      КонецЕсли;
      Если СтатусВозврата()<> 1 Тогда
         Продолжить;
      КонецЕсли;
      ОстСум=СтоимРег.Остаток(Номенклатура,"Стоимость");
      ОстКолОбщ=Рег.СводныйОстаток(Номенклатура,,"Количество");
      СебестоимостьСписания=Количество/ОстКолОбщ*ОстСум;
      Регистр.ОстаткиТоваров.Номенклатура=Номенклатура;
      Регистр.ОстаткиТоваров.Склад=Склад;
      Регистр.ОстаткиТоваров.Количество=Количество;
      Регистр.ОстаткиТоваров.ПривязыватьСтроку(НомерСтроки);
      Регистр.ОстаткиТоваров.ДвижениеРасходВыполнить();
      
      Регистр.СтоимостьТоваров.Номенклатура=Номенклатура;
      Регистр.СтоимостьТоваров.Стоимость=СебестоимостьСписания;
      Регистр.СтоимостьТоваров.ДвижениеРасходВыполнить();
      Регистр.Прибыль.Движение(Номенклатура, Контрагент, Сумма-СебестоимостьСписания);
   КонецЦикла;
   Если СтатусВозврата()<>1 Тогда
      Сообщить ("Документ"+ТекущийДокумент()+"не проведен!");
   
Иначе
   Если  Константа.МетодСписания<>Перечисление.МетодыСписания.ПоСреднему Тогда
      СписатьПартии();
   КонецЕсли;
   КонецЕсли;
Регистр.Взаиморасчеты.ДвижениеПриход(Контрагент, Итог("Сумма"));
   
  КонецПроцедуры

Выдает ошибку:
Регистр.Прибыль.Движение(Номенклатура, Контрагент, Сумма-СебестоимостьСписания);
{Документ.РасходнаяНакладная.Модуль Документа(95)}: Операция вычитания не определена для строковых величин


prog1c7.7

Базе не удалось получить либо  "Сумма"  либо "СебестоимостьСписания",
поэтому она считает кого то из них строковой величиной

antoha86

Цитата: prog1c7.7 от 19 дек 2013, 11:25
Базе не удалось получить либо  "Сумма"  либо "СебестоимостьСписания",
поэтому она считает кого то из них строковой величиной
А, что значит строковая величина?

Теги:

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

Рейтинг@Mail.ru

Поиск