7.7 Средняя стоимость

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем AD1986, 25 май 2012.

  1. TopicStarter Overlay
    AD1986
    Offline

    AD1986 Опытный в 1С

    Регистрация:
    8 фев 2011
    Сообщения:
    138
    Симпатии:
    0
    Баллы:
    26
    Добрый день возникла такая проблема, при отписании накладной нужно дополнительно сделать выбор расчита средней стоимости товара(тоесть остаток на конец периода/ количество) . Сделал дополнительный элемент расчет средней стоисомти флажок. если стоит то расчитывает среднею если нет то считает в обычном порядке. Хотелось бы узнать как можноэто прописать в коде. Заранее спасибо.Индификатор элемента флажка называеться СредняяСтоимость это так к слову. Просто не знаю как программно вытянуть остаток на конец периода и количество .как расчитать среднею это понятно.
    Код:
    Процедура ОбработкаПроведения()
    
    Если ДатаДок > ТекущаяДата() Тогда
    Предупреждение("Нельзя проводить документ будущей датой!");
    НеПроводитьДокумент();
    Возврат;
    КонецЕсли;
    Если Клиент.Выбран() = 0 Тогда
    Предупреждение("Не выбран клиент!");
    НеПроводитьДокумент();
    Возврат;
    КонецЕсли;
    Варианты=СоздатьОбъект("Справочник.ВариантыРеализации");
    Кодд="48";
    Варианты.НайтиПоКоду(Кодд,2);
    ВариантРеализации=Варианты.ТекущийЭлемент();
    СуммаРеквизиты=0;
    Платеж=СоздатьОбъект("Справочник.ПлатежиВбюджет");
    Коддд="1";
    Платеж.НайтиПоКоду(Коддд,2);
    ПлатежиВБюджет=Платеж.ТекущийЭлемент();
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Если (Товар.Наименование="Деревянные прокладки") или (Товар.Код=1) или (Товар.Код=404)  Тогда
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("90.8",ПланыСчетов.Основной);
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("43.1",ПланыСчетов.Основной);
    Операция.Кредит.Номенклатура = Товар;
    Операция.Кредит.МестаХранения = Склад;
    Операция.Количество = Количество;
    Операция.Сумма = Сумма;
    
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("90.2",ПланыСчетов.Основной);
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("68.2",ПланыСчетов.Основной);
    Операция.Кредит.ПлатежиВБюджет = ПлатежиВБюджет;
    Операция.Сумма = СуммаНДС;
    
    
    
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("91.3",ПланыСчетов.Основной);
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("68.14",ПланыСчетов.Основной);
    Операция.Кредит.ПлатежиВБюджет = ПлатежиВБюджет;
    Операция.Сумма = НалогСПродаж;
    
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("62.1",ПланыСчетов.Основной);
    Операция.Дебет.Контрагенты = Клиент;
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("90.7",ПланыСчетов.Основной);
    Операция.Кредит.ВариантыРеализации = ВариантРеализации;
    Операция.Сумма = ИтогоСНалогом;
    СуммаРеквизиты=ИтогоСНалогом;
    Иначе
    Если Розница=1 Тогда
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("90.4",ПланыСчетов.Основной);
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("41.2",ПланыСчетов.Основной);
    Операция.Кредит.Номенклатура = Товар;
    Операция.Кредит.МестаХранения = Склад;
    Операция.Количество = Количество;
    Операция.Сумма = Всего;
    Иначе 
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("90.4",ПланыСчетов.Основной);
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("43.1",ПланыСчетов.Основной);
    Операция.Кредит.Номенклатура = Товар;
    Операция.Кредит.МестаХранения = Склад;
    Операция.Количество = Количество;
    Операция.Сумма = Сумма;
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("90.2",ПланыСчетов.Основной);
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("68.2",ПланыСчетов.Основной);
    Операция.Кредит.ПлатежиВБюджет = ПлатежиВБюджет;
    Операция.Сумма = СуммаНДС;
    
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("90.3",ПланыСчетов.Основной);
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("68.14",ПланыСчетов.Основной);
    Операция.Кредит.ПлатежиВБюджет = ПлатежиВБюджет;
    Операция.Сумма = НалогСПродаж;
    ИтогВсего=ИтогВсего+ИтогоСНалогом;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Операция.НоваяПроводка();
    Операция.Дебет.Счет = СчетПоКоду("62.1",ПланыСчетов.Основной);
    Операция.Дебет.Контрагенты = Клиент;
    Операция.Дебет.ВариантыРеализации = ВариантРеализации;
    Операция.Кредит.Счет = СчетПоКоду("90.1",ПланыСчетов.Основной);
    Операция.Кредит.ВариантыРеализации = ВариантРеализации;
    Операция.Сумма = Итог("ИтогоСНалогом")-СуммаРеквизиты;
    Операция.СуммаОперации = Итог("ИтогоСНалогом");
    Операция.Записать();
    //}}ФОРМИРОВАНИЕ_ОПЕРАЦИИ
    
    КонецПроцедуры
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
    БухИт.ИспользоватьСубконто(ВидыСубконто.Номенклатура, СписокТоваров, 2);
    БухИт.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
    БухИт.ВыполнитьЗапрос(,ТекущийДокумент(),"43.1",,,,,"СК");
    
    Если БухИт.ПолучитьСчет(,СчетПоКоду("43.1")) = 1 Тогда
    Если БухИт.ПолучитьСубконто(ВидыСубконто.Номенклатура,,Товар) = 1 Тогда
    СуммаНаСкладах = Макс(БухИт.СКД("С"), 0);
    КоличествоНаСкладах = БухИт.СКД("К");
    Если БухИт.ПолучитьСубконто(ВидыСубконто.МестаХранения,,МестоХранения) = 1 Тогда
    КоличествоНаСкладе = БухИт.СКД("К");
    СуммаНаСкладе = Макс(БухИт.СКД("С"), 0);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    
    
  3. TopicStarter Overlay
    AD1986
    Offline

    AD1986 Опытный в 1С

    Регистрация:
    8 фев 2011
    Сообщения:
    138
    Симпатии:
    0
    Баллы:
    26
    Я извеняюсь может я что то неправильно написал или не так понял. Для расчета средней я сделал переменную средняя тоетсь при нажатии флажка.(товар по которому будет происходить расчет на ходиться на 10 счету и имеет субконто Матреиалы и МОЛ)код самого модуля вот и я все не могу понять как же правильно сделать что бы потом срднею сумму по товару записал в проводку...
    Код:
    Перем НовДок;
    Перем Кол;
    Перем ВсегоКоличество;
    Перем _Курс;
    Перем НДС1;
    Перем _ВалСумбНДС1;
    Перем Авто;
    //_____________________________________________________________________________
    Процедура Очистить()
    УдалитьСтроки();
    КонецПроцедуры
    ////-----------------------------------------------------------------------------------------------
    Процедура ПривыбореСчета()
    // Устанавливает значение счета
    НазначитьВид(Товар,СчетТ.ВидСубконто(1));
    Форма.Товар.НеизменятьВид(1);
    КонецПроцедуры
    Процедура ПроверкаВалюты()
    
    ФлагВал=0;
    Форма.Вал1.Доступность(0);
    Форма.Вал1.Видимость(0);
    Форма.Вал2.Доступность(0);
    Форма.Вал2.Видимость(0);
    Форма.Валюта.Доступность(0);
    Форма.Валюта.Видимость(0);
    Форма.КурсВал.Доступность(0);
    Форма.КурсВал.Видимость(0);
    Форма.ЦенаВал.Доступность(0);
    Форма.ЦенаВал.Видимость(0);
    Форма._ЦенаВал.Доступность(0);
    Форма._ЦенаВал.Видимость(0);
    Форма.СуммаСНДСвал.Доступность(0);
    Форма.СуммаСНДСвал.Видимость(0);
    Форма.СуммаНДСВал.Доступность(0);
    Форма.СуммаНДСВал.Видимость(0);
    Форма.СуммаБезНДСВал.Доступность(0);
    Форма.СуммаБезНДСВал.Видимость(0);
    КонецПроцедуры
    
    //-----------------------------------------------
    Процедура ДобРекв(Стр,Рекв,Подск1,Подск2)
    Если ПустаяСтрока(Стр)=0 Тогда
    Подск=Подск1+Подск2;
    Иначе
    Подск=Подск2;
    КонецЕсли;
    Если ПустаяСтрока(Рекв)=0 Тогда
    Стр=Стр+Подск+СокрП(Рекв);
    КонецЕсли;
    КонецПроцедуры
    ////_____________________________________________________________________________
    //
    Процедура Проверка()
    Если Число(Флагг)=1 Тогда
    Возвраты=1;
    Иначе
    Возвраты=0;
    КонецЕсли;
    КонецПроцедуры
    //==================================
    Процедура ПриОткрытии()
    глПроверкаРазрешенияРедактирования(Контекст);
    Флагг=0;
    Если Число(Возвраты)=1 Тогда
    Флагг=1;
    КонецЕсли;
    ВосстановитьЗначение("СохрВидТТН",ВидТТН);// Текущее значение поля "Вид ТТН"
    ВосстановитьЗначение("СохрДлинаСтраницы",ДлинаСтраницы);// Текущее значение поля "ДлинаСтраницы"
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение(1,"Накладная");
    Форма.ИспользоватьСлой("Основной, Накладная",2);
    Форма.ИспользоватьСлой("Общий",1);
    Сч46 = СчетПоКоду("90.1");
    Сч45 = СчетПоКоду("45.1");
    Форма.Подбор.Доступность(1);
    Форма.Подбор.Видимость(1);
    Форма.СуммаСНДС.Доступность(1);
    Форма.СуммаБезНДС.Доступность(?(ЦеныВклНДС=1,0,1));
    Форма.Товар.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.Количество.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма._Цена.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.СуммаСНДС.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.СуммаБезНДС.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.НДС.ВыполнятьФормулуТолькоПриИзменении(1);
    Форма.Вреализации.Видимость(1);
    Форма.Вреализации.Доступность(1);
    Форма.ПодписьВР.Видимость(1);
    
    Форма.Флаг42.Видимость(0);
    Форма.Флаг42.Доступность(0);
    Форма.ПодписьФлага.Видимость(0);
    ФлагВ=ФлагВал;
    Разрешил = Константа.Разрешил;
    КонецПроцедуры
    //_____________________________________________________________________________
    Процедура ПриВыбореЗакладки(Ном,Значение);
    Если Значение=3 Тогда
    Форма.ИспользоватьСлой("Валюта",2);
    
    ФлагВ=0;
    Форма.Вал1.Доступность(0);
    Форма.Вал1.Видимость(0);
    Форма.Вал2.Доступность(0);
    Форма.Вал2.Видимость(0);
    Форма.Валюта.Доступность(0);
    Форма.Валюта.Видимость(0);
    Форма.КурсВал.Доступность(0);
    Форма.КурсВал.Видимость(0);
    Форма.ЦенаВал.Доступность(0);
    Форма._ЦенаВал.Доступность(0);
    Форма.СуммаСНДСвал.Доступность(0);
    Форма.СуммаНДСВал.Доступность(0);
    Форма.СуммаБезНДСВал.Доступность(0);
    Форма.ЦенаВал.Видимость(0);
    Форма._ЦенаВал.Видимость(0);
    Форма.СуммаСНДСвал.Видимость(0);
    Форма.СуммаНДСВал.Видимость(0);
    Форма.СуммаБезНДСВал.Видимость(0);
    Иначе 
    Форма.ИспользоватьСлой("Основной, Накладная",2);
    Форма.ИспользоватьСлой("Общий",1);
    Форма.ИспользоватьСлой("Автомобиль, Сведения об автомобиле",2);
    КонецЕсли;
    КонецПроцедуры
    
    //*********************************************************************
    Процедура ПриВыбореОтгрузки()
    Форма.Вреализации.Видимость(1);
    Форма.Вреализации.Доступность(1);
    Форма.ПодписьВР.Видимость(1);
    Если (Константа.МетодОпределенияВыручки.Получить(ДатаДок)=2) Тогда
    Форма.Флаг42.Видимость(1);
    Форма.Флаг42.Доступность(1);
    Форма.ПодписьФлага.Видимость(1);
    КонецЕсли;
    КонецПроцедуры
    //_____________________________________________________________________________
    Функция ПроверкаКоличества()
    Если ПустоеЗначение(счетТ)=1 тогда
    С=СчетПоКоду("10.1");
    СчетТ=С;
    конецесли;
    Ит= СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ВключатьСубсчета(1);
    Если ""+Лев(СчетТ,2)="10" Тогда
    Ит.ИспользоватьСубконто(ВидыСубконто.Материалы,Товар,2);
    Ит.ИспользоватьСубконто(ВидыСубконто.МОЛ,МОЛ,2);
    ИначеЕсли  (""+Лев(СчетТ,2)="99") Тогда
    Ит.ИспользоватьСубконто(ВидыСубконто.ПрибылиУбытки,,);
    Иначе
    Предупреждение("В данном документе не предусмотрено использование введенного счета!",5);
    Возврат 1;
    КонецЕсли;
    СчетКредита=СчетТ;
    Если НовДок=1 Тогда
    Ит.ВыполнитьЗапрос(ДатаДок,ДатаДок,СчетКредита,,,,,"СК");
    Кол = Ит.СКД("К");
    Сум = Ит.СКД("С");
    Иначе
    //			    (датаНач ,ДатаКон  Счет	   ,Корсчет,Вал,ТипИтог,Период,ТипСуммы)
    Ит.ВыполнитьЗапрос(ДатаДок,ДатаДок,СчетКредита, ,   ,1	  ,	  ,"СК");
    Кол = Ит.СНД("К");
    Сум = Ит.СНД("С");
    КонецЕсли;
    Возврат Кол;
    КонецФункции
    //_____________________________________________________________________________
    Процедура Пересчет()
    Если Константа.ЦеныВключаютНДС = 1 Тогда
    Если Число(ФлагВал)=1 Тогда
    СуммаСНДСВал=Окр(ЦенаВал*Количество,2,1);
    СуммаНДСВал=Окр((СуммаСНДСВал*_СтавкаНДС.Ставка)/(100+_СтавкаНДС.Ставка),2,1);
    СуммаБезНДСВал=СуммаСНДСВал-СуммаНДСВал;
    СуммаСНДС=Окр(СуммаСНДСВал*КурсВал,0,1);
    НДС=Окр(СуммаНДСВал*КурсВал,0,1);
    СуммаБезНДС=СуммаСНДС-НДС;
    Иначе
    СуммаСНДС = Окр(Количество*_Цена,0,1);
    НДС = (СуммаСНДС*_СтавкаНДС.Ставка)/(100+_СтавкаНДС.Ставка);
    СуммаБезНДС = СуммаСНДС-НДС;
    КонецЕсли;
    Иначе
    Если Число(ФлагВал)=1 Тогда
    _ЦенаВал=Цена/КурсВал;
    СуммаБезНДСВал=Окр(ЦенаВал*Количество,2,1);
    СуммаНДСВал=Окр((СуммаБезНДСВал*_СтавкаНДС.Ставка)/100,2,1);
    СуммаСНДСВал=СуммаБезНДСВал+СуммаНДСВал;
    СуммаБезНДС=Окр(СуммаБезНДСВал*КурсВал,0,1);
    НДС=Окр(СуммаНДСВал*КурсВал,0,1);
    СуммаСНДС=СуммаБезНДС+НДС;
    Иначе
    СуммаБезНДС = Окр(_Цена*Количество,0,1);
    НДС=Окр(СуммаБезНДС*_СтавкаНДС.Ставка/100,0,1);
    СуммаСНДС = СуммаБезНДС+НДС;   
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
    //_____________________________________________________________________________
    Процедура ПриСменеКоличества()
    Если (Константа.РазрешитьОтрицательныеОстатки=Перечисление.Булево.Нет) и (Число(Флагг)=0)  тогда
    Если (Количество>ПроверкаКоличества()) Тогда
    Предупреждение("Количество выписанного товара не может превышать количество на складе");
    Количество=ПроверкаКоличества();
    Возврат;
    Иначе
    Пересчет();
    КонецЕсли;
    Иначе
    Пересчет();
    КонецЕсли;
    КонецПроцедуры
    //==============================
    Процедура ПриВыбореТовара()
    ЕдИзм=Товар.ЕдИзм;
    Количество=ПроверкаКоличества();
    _СтавкаНДС=20;
    
    Если (Количество=0) Тогда
    Предупреждение("У МОЛа "+ МОЛ+" на складе "+СКлад+ " не обнаружено: "+ Товар);
    СтатусВозврата(0);
    КонецЕсли;
    КонецПроцедуры
    //_____________________________________________________________________________
    Процедура Подбор() 
    С="";
    ВвестиЗначение(С,"Выберите счет","Счет",,);
    ТекущийСчет=с;
    ДатаТекущегоДокумента=ДатаДок;
    ОткрытьПодбор("Справочник.Материалы","");
    КонецПроцедуры
    //_____________________________________________________________________________
    Процедура ПриВыбореРасчетногоСчета()
    РС = СоздатьОбъект("Справочник.БанковскиеСчета");
    Если РС.Выбрать("Укажите расчетный счет","ФормаСписка") = 1 Тогда
    РасчетныйСчет = РС.ТекущийЭлемент();
    СохранитьЗначение("ПлатежноеПоручениеРасчетныйСчет",РасчетныйСчет);
    КонецЕсли;
    КонецПроцедуры
    //================
    Процедура ПриВыбореМОЛ()
    Если МОЛ.Выбран() = 1 Тогда
    СохранитьЗначение("НакладнаяМОЛ",МОЛ);
    Иначе
    МОЛ = ВосстановитьЗначение("НакладнаяМОЛ");
    КонецЕсли;
    КонецПроцедуры
    //================
    Процедура Печать()
    
    АдресТелефон="";
    ДобРекв(АдресТелефон,Константа.ЮрАдресОрганизации.Получить(ДатаДок),"","Адрес: ");
    ДобРекв(АдресТелефон,Константа.ТелефоныОрганизации.Получить(ДатаДок),", ","тел.: ");
    
    Таб=СоздатьОбъект("Таблица");
    Если ВидТТН = Перечисление.ВидТТН.ГрузоваяВертикальная Тогда
    Таб.ИсходнаяТаблица("ТТН");
    ИначеЕсли ВидТТН = Перечисление.ВидТТН.Товарная Тогда
    Таб.ИсходнаяТаблица("ТН");
    КонецЕсли;
    Перевод=0;
    Если Пустоезначение(Заказчик)=0 тогда
    СтрЗак=СокрЛП(Заказчик.ПолнНаим)+", "
    +СокрЛП(Заказчик.ЮрАдрес)+"; "+"р/с"+СокрЛП(СчетЗаказчика.РасчСчет)+", банк: "+СокрЛП(СчетЗаказчика.БанкРасч)+","+СокрЛП(СчетЗаказчика.АдресБанкаРасч)+", код "+СокрЛП(СчетЗаказчика.БИКБанкаРасч);
    иначе
    СтрЗак=" ";
    конецесли;
    Таб.ВывестиСекцию("Шапка");
    ВыбратьСтроки();
    Ном=0;
    ВсегоКоличество=0;
    Стр=0;
    Пока ПолучитьСтроку()=1 Цикл
    СтрокаНаименования=СокрЛП(Товар.Наименование);
    Ном=Ном+1;
    Перевод=Перевод+1;
    ВсегоКоличество=Итог("Количество");
    Таб.ВывестиСекцию("Строка");
    
    КонецЦикла;
    Таб.ВывестиСекцию("Итого");
    Таб.ВывестиСекцию("Подвал1");
    Таб.ТолькоПросмотр(0);
    Таб.Опции(0,0,0,0,"ОпцииПечатиНакладной");
    Таб.ПараметрыСтраницы(1,,,5,5,5,5,5,5,1);
    Таб.Показать("Печать накладной","");
    
    КонецПроцедуры
    //_____________________________________________________________________________
    Процедура ПриЗаписи()
    Если глМожноЗаписатьДокумент(Контекст) = 0 Тогда
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    Операция.СуммаОперации = Итог("СуммаСНДС");
    Операция.Содержание = "Отгрузка получателю: "+Получатель;
    КонецПроцедуры
    Бухитоги.ПериодМ(ДатаДок);
    Я так понимаю что должно получиться следующеее

    Код:
    Процедура Сред()
    БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
    БухИт.ИспользоватьСубконто(ВидыСубконто.материалы, МОЛ, 2);
    БухИт.ВыполнитьЗапрос(,ТекущийДокумент(),"10",,,,,"СК");
    Если БухИт.ПолучитьСчет(,СчетПоКоду("10")) = 1 Тогда
    Если БухИт.ПолучитьСубконто(ВидыСубконто.Материалы,,Товар) = 1 Тогда
    СуммаНаСкладах = Макс(БухИт.СКД("С"), 0);
    КоличествоНаСкладах = БухИт.СКД("К");
    СредняяСумма=СуммаНаСкладах/ КоличествоНаСкладах;
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вот так нужно
    Код:
    СредняяСумма=СуммаНаСкладах/ ?(КоличествоНаСкладах=0,1,КоличествоНаСкладах);
    А проводку нужно в модуле проведения делать.

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