Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Перемещение товаров          
alexkhua Подменю пользователя
сообщение 10.01.13, 15:41
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 181
Спасибо сказали: 2 раз
Рейтинг: 0

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

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

logist Подменю пользователя
сообщение 10.01.13, 15:54
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

Цитата(alexkhua @ 10.01.13, 15:41) *
при повторном проведении документа значения Регистров накопления задваиваются.

Очистите движения перед проведением.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

alexkhua Подменю пользователя
сообщение 10.01.13, 17:17
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 181
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(logist @ 10.01.13, 15:54) *
Очистите движения перед проведением.

Да вроде как очистил.


А, начинаю понимать. Попробую, спасибо.

alexkhua Подменю пользователя
сообщение 10.01.13, 21:54
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 181
Спасибо сказали: 2 раз
Рейтинг: 0

Очистка тут не причем. Выходит, что на момент проведения уже проведенного документа нужно сначала снять его проведение , а уже затем проводить снова, иначе программа видит остатки с учетом этого документа. Прастите если пишу тут понятные истины ))

logist Подменю пользователя
сообщение 11.01.13, 9:08
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

Цитата(alexkhua @ 10.01.13, 21:54) *
Прастите

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

alexkhua Подменю пользователя
сообщение 11.01.13, 10:43
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 181
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(logist @ 11.01.13, 9:08) *
ПрАстите, но истина в том, что нужно получать остатки без учета движений проводимого документа. Но отмена проведения - это полные глупости.

Намекните как это сделать.

logist Подменю пользователя
сообщение 11.01.13, 10:55
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

Я выше написал - очистить движения. Посмотрите типовые решения, что ли, общий модуль "ОбщегоНазначения" процедура "УдалитьДвиженияРегистратора".


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: alexkhua,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 05.07.25, 0:26
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!