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

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

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

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

prog1c7.7

то и значит. Собсно , вопрос не понял

antoha86

Цитата: prog1c7.7 от 20 дек 2013, 15:53
то и значит. Собсно , вопрос не понял

А должен какой величиной считать, если не строковой?

antoha86

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

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

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

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


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

prog1c7.7

А вот у меня тоже теперь вопрос: Ты действительно учишься? Или работаешь, получаешь за это деньги, и предлагаешь нам здесь решать твои задачи за тебя?
При всем моем к Тебе уважении.

antoha86

Цитата: prog1c7.7 от 26 дек 2013, 11:04
А вот у меня тоже теперь вопрос: Ты действительно учишься? Или работаешь, получаешь за это деньги, и предлагаешь нам здесь решать твои задачи за тебя?
При всем моем к Тебе уважении.

Хех!))) Учусь конечно!!!)))Если такие вопросы начались может есть надежда, что моя компетенция повысилась!!)))Похвально...

antoha86

Помогите, пожалуйста отчет выдает ошибку:

<<?>>Перем КолГруппировок, Таб;
{Отчет.АнализПродаж.Форма.Модуль(14)}: Объявления переменных должны быть расположены в начале модуля, процедуры или функции
<<?>>Процедура СформироватьТаблицу(Знач Запрос, Знач НомГруппировки)
{Отчет.АнализПродаж.Форма.Модуль(15)}: Определения процедур и функций должны размещаться перед операторами основной программы
Модуль:


//*******************************************
Процедура ПриОткрытии()
   СЗ.ДобавитьЗначение("Номенклатура");
   СЗ.ДобавитьЗначение("Контрагент");   
КонецПроцедуры

Процедура СдвинутьЗначение ()
   Если СЗ.ТекущаяСтрока()=1 Тогда
      СЗ.СдвинутьЗначение(1, СЗ.ТекущаяСтрока());
   Иначе
      СЗ.СдвинутьЗначение(-1,СЗ.ТекущаяСтрока());
   КонецЕсли;
   КонецПроцедуры
                  Перем КолГруппировок, Таб;
                         Процедура СформироватьТаблицу(Знач Запрос, Знач НомГруппировки)
                            Отступ="";
                            Если НомГруппировки<>1 Тогда
                     Для КолСимвТабуляции=1 По НомГруппировки Цикл
                        Отступ=Отступ+"  ";
                     КонецЦикла;
                  КонецЕсли;
                  Пока Запрос.Группировка(НомГруппировки)=1 Цикл
                     Значение=Отступ+Запрос.ЗначениеУпорядочивания(НомГруппировки);
                     Выручка=Запрос.Выручка;
                     Таб.ВывестиСекцию("Строка");
                     Если НомГруппировки <> КолГруппировок Тогда
                        СформироватьТаблицу(Зарос, НомГруппировки+1);
                     КонецЕсли;
                  КонецЦикла;
               КонецПроцедуры
               
               Процедура Сформировать()
                  Таб=СоздатьОбъект("Таблица");
                  Таб.ИсходнаяТаблица("Таблица");
                  Таб.ВывестиСекцию("Шапка");
                  Запрос=СоздатьОбъект("Запрос");
                  
                  ТекстЗапроса=
                  "//((ЗАПРОС(Запрос1)
                  |Период с НачДата по КонДата;
                  |Номенклатура=Регистр.Прибыль.Номенклатура;
                  |Контрагент=Регистр.Прибыль.Контрагент;
                  |Сумма=Регистр.Прибыль.Сумма;
                  |Функция Прибыль=Сумма(Сумма);";
                  
                  КолГруппировок=0;
                  Для Ном=1 По СЗ.КоличествоСтрок() Цикл
                     Если СЗ.Пометка(Ном)=1 Тогда
                        ТекстЗапроса=ТекстЗапроса+"
                        |Группировка"СЗ.ПолучитьЗначение(Ном)+";";
                        КолГруппировок=КолГруппировок+1;
                     КонецЕсли;
                  КонецЦикла;
                  Если КолГруппировок = 0 Тогда
                     Предупреждение("Нельзя построить отчет без группировок!",60);
                     Возврат;
                  КонецЕсли;
                  Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
                     Возврат;
                  КонецЕсли;
                  СформироватьТаблицу(Запрос,1);
                  Таб.ТолькоПросмотр(1);
                  Таб.Опции(0,0,0,0);
                  Таб.Показать("");
                  КонецПроцедуры
   

Теги:

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

Рейтинг@Mail.ru

Поиск