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

Приход/Расход в одном модули или Перемещение между складами

Автор Fess, 11 апр 2017, 14:56

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

Fess

Добрый день! Не давно начал изучать 1с-ку.
1С:Предприятие 8.3 (8.3.9.2170)

Решил написать простенькую конфигурацию для себя. Идея заключается в учете товара на складах с дальнейшем его передвижением по ним. Своего рода - учета картриджей.
Сделал для этого два справочника (Расходники и Склад),Документ (Приход/Перемещение) и Рег.Накопления.
Идея была такова, что бы одним документом можно было Приходовать товар, Перемещать Товар или списывать товар.

  • Код получился такой:
Движения.Перемещения.Записывать = Истина;



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

Если ЗначениеЗаполнено(СоСклада) Тогда
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.СоСклада = СоСклада;
//Движение.НаСклад = НаСклад;
Движение.Наименование = ТекСтрокаНоменклатура.Материал;
Движение.Количество = ТекСтрокаНоменклатура.Количество;
КонецЕсли;


По итогу, получилось так, что программа в общем-то работает, но как:
1) Делаем Приход товара. Выбираем НаСклад - Приходуется нормально.
2) Делаем перемещение. Выбираем СоСклада - НаСклад. Приходуется товар в минус у "НаСклад", и не минусуется этот же товар у "СоСклада"
3) Списываем товар "СоСклада". Минусует его, все хорошо, но не с нашего склада.
Такое ощущение что он обращается к другим Складам. В общем, не понятно мне это. Помогите разобраться.

alex0402

Я не понял. Данные РН какие? На сколько я понял у тебя в измерениях два склада наСклад и соСклада, а должен быть один Склад.
Спасибо за Сказать спасибо

Fess

Цитата: alex0402 от 11 апр 2017, 15:49
Я не понял. Данные РН какие? На сколько я понял у тебя в измерениях два склада наСклад и соСклада, а должен быть один Склад.

Да, верно. Мне уже объяснили где я накосячил. Чуть попозже код переделаю и вышлю итоговый, правильный вариант. Как надо было.

Dethmontt

Если ЗначениеЗаполнено(НаСклад) Тогда
   Движение = Движения.Перемещения.Добавить();
//........
Если ЗначениеЗаполнено(СоСклада) Тогда
   Движение = Движения.Перемещения.Добавить();
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Fess

Как и обещал, вот код.
Ошибка была, как уже сказано было выше, в создание двух измерений в регистре накоплений.   

Движения.ОстаткиМатериалов.Записывать = Истина;

// регистр ОстаткиМатериалов Расход

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


// регистр ОстаткиМатериалов Приход

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

Добавлено: 12 апр 2017, 14:24


Цитата: Dethmontt от 12 апр 2017, 03:15
Если ЗначениеЗаполнено(НаСклад) Тогда
   Движение = Движения.Перемещения.Добавить();
//........
Если ЗначениеЗаполнено(СоСклада) Тогда
   Движение = Движения.Перемещения.Добавить();


Имеется ввиду, Движение = Давижения. ... Надо ставить после условия Если?

alex0402


Цитата: Fess от 12 апр 2017, 14:23Имеется ввиду, Движение = Давижения. ... Надо ставить после условия Если?
нет. в твоем коде все правильно.
нужно добавить в движения столько записей, сколько в табличной части документа.
(для каждого склада).
т.е. если оба склада не пусты, то количество движений = количество строк тч * 2.
Спасибо за Сказать спасибо

Dethmontt

Так за два цикла
Цитата: Fess от 12 апр 2017, 14:23Движения.ОстаткиМатериалов.Записывать = Истина;
   
    // регистр ОстаткиМатериалов Расход
   
    Если ЗначениеЗаполнено(СоСклада) Тогда
        Для Каждого ТекСтрокаСвойства Из Свойства Цикл
            Движение = Движения.ОстаткиМатериалов.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
            Движение.Период = Дата;
            Движение.Наименование = ТекСтрокаСвойства.Наименование;
            Движение.Склад = СоСклада;
            Движение.Количество = ТекСтрокаСвойства.Количество;
        КонецЦикла;
    КонецЕсли;
   
   
    // регистр ОстаткиМатериалов Приход
   
    Если ЗначениеЗаполнено(НаСклад) Тогда
        Для Каждого ТекСтрокаСвойства Из Свойства Цикл
            Движение = Движения.ОстаткиМатериалов.Добавить();
            Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
            Движение.Период = Дата;
            Движение.Наименование = ТекСтрокаСвойства.Наименование;
            Движение.Склад = НаСклад;
            Движение.Количество = ТекСтрокаСвойства.Количество;
        КонецЦикла;
    КонецЕсли;

Так за один цикл
Цитата: Fess от 12 апр 2017, 14:23Если ЗначениеЗаполнено(НаСклад) Тогда
   Движение = Движения.Перемещения.Добавить();
//........
Если ЗначениеЗаполнено(СоСклада) Тогда
   Движение = Движения.Перемещения.Добавить();


Добавлено: 14 апр 2017, 16:39


    Движения.Перемещения.Записывать = Истина;

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

Fess


Теги:

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

Рейтинг@Mail.ru

Поиск