Группа: Пользователи
Сообщений: 19
Спасибо сказали: 0 раз
Рейтинг: 0
Добрий день! Підкажіть будь ласка, чому не формуються рухи по регістру?
Движения.Продажи.Записывать = Истина; // встановлюємо значення цього регістра в значення Истина
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Зіставляємо строки вибірки, зі строками табличної частини нашого док-та.. // це необхідно для того щоб з'ясувати яка кількість товара, буде списуватися..
Для Каждого Движение Из Движения.ОстаткиТоваров Цикл Если Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура Тогда
Группа: Пользователи
Сообщений: 19
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(Vofka @ 21.06.22, 9:54)
// ... Движения.Записать();
// Контроль Залишків....
Движения.Записать();
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура, | ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки( | , | Номенклатура В | (ВЫБРАТЬ | РеализацияТоваровТовары.Номенклатура КАК Номенклатура | ИЗ | Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары | ГДЕ | РеализацияТоваровТовары.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки |ГДЕ | ОстаткиТоваровОстатки.КоличествоОстаток < 0";
Если Не РезультатЗапроса.Пустой () Тогда // тоді потрібно повідомляти про помилкі і відмовитися від проедення док-та.. для цього використовується параметр Отказ.. Отказ = Истина; КонецЕсли; ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Сообщить("В документе "+ Ссылка+" образовались отрицательные остатки");
Возврат; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура, | ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток, | ОстаткиТоваровОстатки.СумаОстаток КАК СумаОстаток |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки( | &МоментВремени, | Номенклатура В | (ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура | ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки | ГДЕ | ОстаткиТоваровОстатки.Номенклатура.Ссылка = &Ссылка)) КАК ОстаткиТоваровОстатки";
Движения.ОстаткиТоваров.Записывать = Истина; Движения.Продажи.Записывать = Истина; // встановлюємо значення цього регістра в значення Истина
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Зіставляємо строки вібірки, зі строками табличної частини нашого док-та.. // це необхідно для того щоб з'ясувати яка кількість товара, буде списуватися..
Для Каждого Движение Из Движения.ОстаткиТоваров Цикл Если Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура Тогда
Группа: Пользователи
Сообщений: 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% (але % відсоткі ми не пишемо)...
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!