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

Хранилище

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

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



> Не формуються рухи по регістру          
Vadim67567567 Подменю пользователя
сообщение 20.06.22, 23:03
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 19
Спасибо сказали: 0 раз
Рейтинг: 0

Добрий день!
Підкажіть будь ласка, чому не формуються рухи по регістру?

Движения.Продажи.Записывать = Истина; // встановлюємо значення цього регістра в значення Истина


Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Зіставляємо строки вибірки, зі строками табличної частини нашого док-та..
// це необхідно для того щоб з'ясувати яка кількість товара, буде списуватися..

Для Каждого Движение Из Движения.ОстаткиТоваров Цикл
Если Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура Тогда

Движение.Сумма = Движение.Количество * ВыборкаДетальныеЗаписи.Сума / ВыборкаДетальныеЗаписи.Количество;


// Рух по регістру Продажі. Заповнюємо Рухи по регістру Продажі..
// Валовий прибуток..

ДвижениеПродажи = Движение.Продажи.Добавить ();
ДвижениеПродажи.Период = Дата;
ДвижениеПродажи.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
ДвижениеПродажи.Контрагент = Контрагент;
ДвижениеПродажи.Сумма = Движение.Выручка;
ДвижениеПродажи.Себестоимость = Движение.Сумма;
ДвижениеПродажи.Количество = Движение.Количество;

sava1 Подменю пользователя
сообщение 21.06.22, 6:51
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2715
Из: Проскуров
Спасибо сказали: 692 раз
Рейтинг: 669.9

Установить отбор по документу
прочитать
изменить
записать

Vofka Подменю пользователя
сообщение 21.06.22, 8:54
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13988
Из: Киев
Спасибо сказали: 4562 раз
Рейтинг: 3690.8

// ...
Движения.Записать();

Vadim67567567 Подменю пользователя
сообщение 21.06.22, 15:20
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 19
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 9:54 * ,
Дякую

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

Общительный
**
Группа: Пользователи
Сообщений: 19
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vofka @ 21.06.22, 9:54) *
// ...
Движения.Записать();



// Контроль Залишків.... 

Движения.Записать();


Если Режим = РежимПроведенияДокумента.Оперативный Тогда
    
     Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
        |    ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрНакопления.ОстаткиТоваров.Остатки(
        |            ,
        |            Номенклатура В
        |                (ВЫБРАТЬ
        |                    РеализацияТоваровТовары.Номенклатура КАК Номенклатура
        |                ИЗ
        |                    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |                ГДЕ
        |                    РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки
        |ГДЕ
        |    ОстаткиТоваровОстатки.КоличествоОстаток < 0";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    

Если Не РезультатЗапроса.Пустой () Тогда
    // тоді потрібно повідомляти про помилкі і відмовитися від проедення док-та.. для цього використовується параметр Отказ..
    Отказ = Истина;
КонецЕсли;
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Сообщить("В документе "+ Ссылка+" образовались отрицательные остатки");

    Сообщить("По номенклатуре "+ВыборкаДетальныеЗаписи.Номенклатура+" остаток "+ВыборкаДетальныеЗаписи.Количество);

КонецЦикла;
        
КонецЕсли;


Если НЕ  Отказ Тогда
                
    Возврат;
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
        |    ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток,
        |    ОстаткиТоваровОстатки.СумаОстаток КАК СумаОстаток
        |ИЗ
        |    РегистрНакопления.ОстаткиТоваров.Остатки(
        |            &МоментВремени,
        |            Номенклатура В
        |                (ВЫБРАТЬ
        |                    ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура
        |                ИЗ
        |                    РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
        |                ГДЕ
        |                    ОстаткиТоваровОстатки.Номенклатура.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки";
    
    
    
  

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


// Рух по регістру Продажі. Заповнюємо Рухи по регістру Продажі..

ДвижениеПродажи = Движение.Продажи.Добавить ();
ДвижениеПродажи.Период = Дата;
ДвижениеПродажи.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
ДвижениеПродажи.Контрагент =  Контрагент;
ДвижениеПродажи.Сумма = Движение.Выручка;
ДвижениеПродажи.Себестоимость = Движение.Сумма;
ДвижениеПродажи.Количество = Движение.Количество;

КонецЕсли;

КонецЦикла;
КонецЦикла;

КонецЕсли;
КонецПроцедуры


записани рухи, але не відображаються..

Vofka Подменю пользователя
сообщение 23.06.22, 7:32
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13988
Из: Киев
Спасибо сказали: 4562 раз
Рейтинг: 3690.8

Записувати потрібно після того, як додаєте.

ДвижениеПродажи = Движение.Продажи.Добавить ();
// ...
Движение.Записать();

Vadim67567567 Подменю пользователя
сообщение 23.06.22, 19:24
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 19
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 8:32 * ,
smile.gif Дякую!

Vadim67567567 Подменю пользователя
сообщение 25.06.22, 22:49
Сообщение #8

Общительный
**
Группа: Пользователи
Сообщений: 19
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ 23.06.22, 8:32 * ,
Не знайшов де і в чому саме помилка. Підкажіть будь ласка..

// Контроль Залишків.... 

//1)  спочатку  товар списується, створюються Рухи у регістрі Залишкі.. Вида - Видаток..
// Після цього, примусово записуємо Рухи в БД.. для цього ми використовуємо метод Записать();  -  Движения.Записать();
//У цьому випадку записуються всі ті набори записів
// в яких прапорець взведен у Истина..

Движения.Записать();

//2)  Після цього потрібно виконати Контроль Залишків, і для цього потрібно виконати Запит..
// Звертаємось до ВТ Залишкі.. Прописуємо Умову - ОстаткиТоваровОстатки.КоличествоОстаток < 0
// (ця умова з & не буде корректною, так як, система буде розпізнавати 0 як параметр..
//тому потрібно через довілну умову прибрати прапорець, і видалити &)
//3) редагуємо Псевдними...

//4) Даний Запит буде повертати Залишкі по всім товарам з БД... А нам потрібні Залишкі які є в нашому проводимому док-ті..
// Тому потрібно задати параметри ВТ.. і пригадуємо що потрібно отфільтровати входження Номенклатури в Список.. /
// У запиті ми звертаємось до ТЧ - РеализациЯТоваровТовары.. - вибираємо Номенклатуру..
// і вказуємо Умову..  Тільки Товари з нашого док-та.., фільтр по полю - Ссылка..
// OK.. Запит готовий..


// Записувати потрібно після того, як додаєте.

//5) Контроль залишків виконується для Опертивного проведення док-тів..
// Накладуємо Умову на  параметр обробки проведення Режим..
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
    
     Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
        |    ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрНакопления.ОстаткиТоваров.Остатки(
        |            ,
        |            Номенклатура В
        |                (ВЫБРАТЬ
        |                    РеализацияТоваровТовары.Номенклатура КАК Номенклатура
        |                ИЗ
        |                    Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары
        |                ГДЕ
        |                    РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки
        |ГДЕ
        |    ОстаткиТоваровОстатки.КоличествоОстаток < 0";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    
// перевірка пустий запит чи ні..
Если Не РезультатЗапроса.Пустой () Тогда
    // тоді потрібно повідомляти про помилкі і відмовитися від проедення док-та.. для цього використовується параметр Отказ..
    
    Отказ = Истина;
// Відмова = Істина; - це не скасування проведення, а відмова від проведення зараз
//це просто відступ для уточнення.відмова від проведення - документ залишається у тому стані, в якому був,
// а скасування проведення - це жорстко - було проведено, став непроведений.        
КонецЕсли;

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Сообщить("В документе "+ Ссылка+" образовались отрицательные остатки");
// в рамках цикла по вибірки вставимо діагностичне повідомлення..
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    // Вставляємо повідомлення про Залишок поНоменклатурі..     
    Сообщить("По номенклатуре "+ВыборкаДетальныеЗаписи.Номенклатура+" остаток "+ВыборкаДетальныеЗаписи.Количество);
// Після цього запускаємо платформу і виконуємо перевірку.. Перевірка працює тільки для Оперативно проведених док-тів.. Тому якщо будуть проводитися
// док-ти учорашнім числом, то ніяких Помилок не буде...
КонецЦикла;
        
КонецЕсли;


// Розрахунок Собывартості..

//1) В задачі не йде мова про стоврення окремого регістра для вирішення питання..     Не сказано нічого ніяких вимог для розрахунку Собівартості..
//     В нас один Склад одна Органызація - тому Собівартість буде зберігатися в розрізі Номенклатури..  
// дані про Собівартість будемо зберігати в окремому Регістрі - ОстаткиТоваров..

//2) Створюємо окремий ресурс - Сума...  Далі потрібно  забеспечити формування прибуткових записів по Собівартості..
// тобто при проведенні Надходження товарів потрібно - заповнювати інформацію про Сумі..  
// Движение.Сумма = ТекСтрокаТовары.Сумма - прибуткові рухи за Собівартістю заповнені..
// для того щоб вони створилися у БД - потрібно провести док-т..     (документ поступление товаров)

// 3) забеспечуєм проведення док-тів Реалізація Товарів..  Якщо Контроль Негативних Залишків не пройшов, то Собівартості проводити нічого не потрібно.. /
// У противному випадку, якщо док-т коректно проводиться, то потрыбно розрахувати Собывартысть, яку ми будемо списувати з регістра..
// для цього потрібно до Залишків вибираємо Кількість і Сумму..
// Створюємо Умову,  що нас  цікавить інформація тільки по той Номенклатурі яка є в докуенті Реалізація Товарів..  



Если НЕ  Отказ Тогда
    
    // 4) Якщо Контроль Негативних  Залишків не пройшов, то по Собівартості..                          
    Возврат;
//5) Якщо відмова то поветаємось з Процедури..  У противному випадку - мені потрібно буде отримати дані з Собівартості...  
// 6) Якщо документ коректно проводиться  - то потрібно вичисляти Собівартість яку потрібно Списувати з регістра..

// 7)Для  цього звертаємось до Залишків..   Вибираємо дані (усі три поля)..  Звертаємось до Вт...
// Створюємо Умову, що нас цікавить інформація по тій Номенклатурі, яка є в документі Реалізація Товарів..
// прописуэмо Умову по ссилці у цьому вкладеному запиті..

// 8) Визначили умову для параметрів ВТ.. та також вкажемо - Період.. - &МоментВремени..
// Змінюємо Псевдоніми..
//КонецЕсли;

        Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
        |    ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество,
        |    ОстаткиТоваровОстатки.СумаОстаток КАК Сума
        |ИЗ
        |    РегистрНакопления.ОстаткиТоваров.Остатки(
        |            &МоментВремени,
        |            Номенклатура В
        |                (ВЫБРАТЬ
        |                    ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура
        |                ИЗ
        |                    РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
        |                ГДЕ
        |                    ОстаткиТоваровОстатки.Номенклатура.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки";
    
    
    
//9)  Щоб корректно отримати даны про Собівартість, нам необхідно перед проведенням поточного  док-та, очисти його Рухи..  
// які йомовірно були записані в БД..
// Тому у властивостях док-та, вказуємо видалення рухів автоматично..  
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени() );
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Движения.ОстаткиТоваров.Записывать = Истина;  // встановлюємо значення цього регістра в значення Истина  
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// На кожній ітераціїї цикла, цикл обробляє певну номенклатуру,         
Для Каждого Движение Из Движения.ОстаткиТоваров Цикл
// І серед списка рухів, потрібно знайти Рухи по відповідній номенклатурі..
Если Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура Тогда
    // Якщо Рухи Номенклатура збігається з тим що в нас є в вибірці то тоді потрібно дозаповнити суму..
                
                // Розрахунок Собывартості..
Движение.Сумма = Движение.Количество *  ВыборкаДетальныеЗаписи.Сума / ВыборкаДетальныеЗаписи.Количество;

// Рух по регістру Продажі. Заповнюємо Рухи по регістру Продажі..
// Валовий прибуток..

// Валовий прибуток - це різниця між виручккой та собівартістю.. Це прибуток без врахування загальногосподпарських затрат..
// Рентабільсть - це відношення Прибутку до Виручки
// Рентабільність = Це відношення  Валового прибутку к Виручці.. * 100% (але % відсоткі ми не пишемо)...

ДвижениеПродажи = Движение.Продажи.Добавить ();
ДвижениеПродажи.Период = Дата;
ДвижениеПродажи.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
ДвижениеПродажи.Контрагент =  Контрагент;
ДвижениеПродажи.Сумма = Движение.Выручка;
ДвижениеПродажи.Себестоимость = Движение.Сумма;
ДвижениеПродажи.Количество = Движение.Количество;

КонецЕсли;

КонецЦикла;
КонецЦикла;

КонецЕсли;
КонецПроцедуры


Сообщение отредактировал Vofka - 27.06.22, 8:43

Vofka Подменю пользователя
сообщение 27.06.22, 8:51
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13988
Из: Киев
Спасибо сказали: 4562 раз
Рейтинг: 3690.8

Тут халепа:
Если НЕ  Отказ Тогда 
    // 4) Якщо Контроль Негативних  Залишків не пройшов, то по Собівартості..                          
    Возврат;


Возврат-а в цьому випадку як раз бути не повинно. Якщо ви робите Отказ = Истина, це означає, що проведення не відбудеться.

Інша халепа в тому, що ці рухи в БД не потраплять:
ДвижениеПродажи = Движение.Продажи.Добавить ();
ДвижениеПродажи.Период = Дата;
ДвижениеПродажи.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
ДвижениеПродажи.Контрагент =  Контрагент;
ДвижениеПродажи.Сумма = Движение.Выручка;
ДвижениеПродажи.Себестоимость = Движение.Сумма;
ДвижениеПродажи.Количество = Движение.Количество;

Тому що ви їх не записуєте. Перед останнім
КонецЕсли;

потрібно
Движения.Записать();


PS. не потрібно дублювати теми.

Сообщение отредактировал Vofka - 27.06.22, 10:21

Vadim67567567 Подменю пользователя
сообщение 29.06.22, 15:40
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 19
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ 27.06.22, 9:51 * ,
smile.gif дякую

не працює..

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


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

 

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