Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » 1С Программирование и поддержка (1C)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

DJMC



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
Процедура ОбработкаПроведения(Отказ, Режим)
     Запрос = Новый Запрос;
      Запрос.Текст= "ВЫБРАТЬ
                    |    ВложенныйЗапрос.Наименование,
                    |    ВложенныйЗапрос.Количество КАК КолДок,
                    |    ВложенныйЗапрос.Цена КАК ЦенаДок,
                    |    ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК КолОст,
                    |    ЕСТЬNULL(ОстаткиТоваровОстатки.СебестоимостьОстаток, 0) КАК Себестоимость,
                    |    ЕСТЬNULL(РезервыТоваровОстатки.КоличествоОстаток, 0) КАК КолОстРезерв,
                    |    ВложенныйЗапрос.Сумма КАК СуммаДок
                    |ИЗ
                    |    (ВЫБРАТЬ
                    |        РасходнаяТовары.Наименование КАК Наименование,
                    |        СУММА(РасходнаяТовары.Количество) КАК Количество,
                    |        СУММА(РасходнаяТовары.Цена) КАК Цена,
                    |        РасходнаяТовары.Сумма КАК Сумма
                    |    ИЗ
                    |        Документ.Расходная.Товары КАК РасходнаяТовары
                    |    ГДЕ
                    |        РасходнаяТовары.Ссылка = &Ссылка
                    |    
                    |    СГРУППИРОВАТЬ ПО
                    |        РасходнаяТовары.Наименование,
                    |        РасходнаяТовары.Сумма) КАК ВложенныйЗапрос
                    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РезервыТоваров.Остатки(
                    |                &Момент,
                    |                Наименование В
                    |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
                    |                        Док.Наименование
                    |                    ИЗ
                    |                        Документ.Расходная.Товары КАК Док
                    |                    ГДЕ
                    |                        Док.Ссылка = &Ссылка)) КАК РезервыТоваровОстатки
                    |        ПО ВложенныйЗапрос.Наименование = РезервыТоваровОстатки.Наименование
                    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
                    |                &Момент,
                    |                Наименование В
                    |                    (ВЫБРАТЬ РАЗЛИЧНЫЕ
                    |                        Док.Наименование
                    |                    ИЗ
                    |                        Документ.Расходная.Товары КАК Док
                    |                    ГДЕ
                    |                        Док.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки
                    |        ПО ВложенныйЗапрос.Наименование = ОстаткиТоваровОстатки.Наименование";
      
                    запрос.УстановитьПараметр("Ссылка", ссылка);
                    Запрос.УстановитьПараметр("Момент", МоментВремени());
                    Результат = Запрос.Выполнить();
    Выборка = результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
// если нет в резерве не выберет ничего из рег резерва
 
// Если товары просто покупают, без предварительного резерва
Если счет.Пустая() тогда
        СвободныйОстаток = Выборка.КолОст-Выборка.КолОстРезерв;
        нехватка = Выборка.КолДок - СвободныйОстаток ;
                        Если Нехватка > 0 тогда  
                            Сообщить("Нехватка товара"+СокрЛП(Выборка.наименование)+":"+Нехватка);
                               Сообщить("Расходная накладная"+ Номер +"не может быть проведена!");
                               Отказ= Истина;
                           КонецЕсли;
                        
        Если не Отказ тогда
                           //вычисление себестоимости
                           Если Выборка.КолДок< СвободныйОстаток тогда
                               СебестоимостьСП = Выборка.Себестоимость/Выборка.КолОст*Выборка.КолДок;
                           Иначе  
                                СебестоимостьСП = Выборка.Себестоимость;
                           КонецЕсли;
                            
            
                
        // регистр ОстаткиТоваров Расход
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Наименование = Выборка.Наименование;
        Движение.Количество = Выборка.КолДок;
        Движение.Себестоимость = СебестоимостьСП;
        
        // регистр Бухгалтерия  
        Движение = Движения.Бухгалтерия.Добавить();
        Движение.СчетДт = ПланыСчетов.Бухгалтерский.Капитал;
        Движение.СчетКт = ПланыСчетов.Бухгалтерский.Товары;
        Движение.Период = Дата;
        Движение.Сумма = СебестоимостьСП;
        Движение.Содержание = "Списание на сумму СС";
 
         // регистр Бухгалтерия  
        Движение = Движения.Бухгалтерия.Добавить();
        Движение.СчетДт = ПланыСчетов.Бухгалтерский.Покупатели;
        Движение.СчетКт = ПланыСчетов.Бухгалтерский.Капитал;
        Движение.Период = Дата;
        Движение.Сумма = Выборка.СуммаДок;
        Движение.Содержание = "Продажа товаров";
        КонецЕсли;
        
    ИначеЕсли не счет.Пустая() тогда
        
        СвободныйОстаток = Выборка.КолОст;
        нехватка = Выборка.КолДок - СвободныйОстаток ;
                        Если Нехватка > 0 тогда  
                            Сообщить("Нехватка товара"+СокрЛП(Выборка.наименование)+":"+Нехватка);
                               Сообщить("Расходная накладная"+ Номер +"не может быть проведена!");
                               Отказ= Истина;
                           КонецЕсли;
                        
        Если не Отказ тогда
                           //вычисление себестоимости
                           Если Выборка.КолДок< СвободныйОстаток тогда
                               СебестоимостьСП = Выборка.Себестоимость/Выборка.КолОст*Выборка.КолДок;
                           Иначе  
                                СебестоимостьСП = Выборка.Себестоимость;
                           КонецЕсли;
 
        
        
        // регистр РезервыТоваров Расход
        Движение = Движения.РезервыТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Наименование = Выборка.Наименование;
        если Выборка.КолДок< Выборка.КолОстРезерв тогда
            Движение.Количество = выборка.КолДок;
            Иначе
            Движение.Количество = выборка.КолОстРезерв;
        КонецЕсли;
 
        
        
        // регистр ОстаткиТоваров Расход
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Наименование = Выборка.Наименование;
        Движение.Количество = Выборка.КолДок;
        Движение.Себестоимость = СебестоимостьСП;
        
        // регистр Бухгалтерия  
        Движение = Движения.Бухгалтерия.Добавить();
        Движение.СчетДт = ПланыСчетов.Бухгалтерский.Капитал;
        Движение.СчетКт = ПланыСчетов.Бухгалтерский.Товары;
        Движение.Период = Дата;
        Движение.Сумма = СебестоимостьСП;
        Движение.Содержание = "Списание на сумму СС";
        
        // регистр Бухгалтерия  
        Движение = Движения.Бухгалтерия.Добавить();
        Движение.СчетДт = ПланыСчетов.Бухгалтерский.Покупатели;
        Движение.СчетКт = ПланыСчетов.Бухгалтерский.Капитал;
        Движение.Период = Дата;
        Движение.Сумма = Выборка.СуммаДок;
        Движение.Содержание = "Продажа товаров";
        
        // регистр Бухгалтерия  
        Движение = Движения.Бухгалтерия.Добавить();
        Движение.СчетКт = ПланыСчетов.Бухгалтерский.РЗ;
        Движение.Период = Дата;
                
        если Выборка.КолДок<= Выборка.КолОстРезерв тогда
            Движение.КоличествоКт = выборка.КолДок;
            Иначе
            Движение.КоличествоКт = выборка.КолОстРезерв;
        КонецЕсли;
        
        Движение.Содержание = "Списание с резерва";
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = Выборка.Наименование;
        Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Счет] = Счет;
    КонецЕсли;
 
 КонецЕсли;
    КонецЦикла;
    
    
    КонецПроцедуры
 

Всего записей: 12269 | Зарегистр. 26-09-2005 | Отправлено: 13:51 31-03-2010
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » 1С Программирование и поддержка (1C)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru