1с 8.3 дозволити негативні залишки. Бухоблік інфо

Бренди

Контроль за складськими залишками є обов'язковою процедурою обліку будь-якому підприємстві, що працює з товарами. Найчастіше можна зіштовхнутися із ситуацією, як у програмі товару немає, але складі він фактично перебуває. У такій ситуації є два варіанти дії:

  • Направити їх у продаж;
  • Залишити на складі до з'ясування обставин такої ситуації.

Вибір залежить від кількох факторів, наприклад політики організації або конкретної ситуації. При знаходженні товару на прилавку та інтересу до нього покупця (тримає в руках) відмовляти у продажу не доцільно.

Окремі підприємства практикують формування документа продажу без його проведення, але користуються такою практикою не всі. На випадок подібних ситуаційпрограма 1С у своїх останніх версіяхпередбачає можливість відключення контролю негативних залишків.

При активованому контролі реалізація товару, відсутнього за програмою складі видасть користувачеві попередження: «Некоректно заповнена колонка «Кількість» у рядку 1 списку «Товари». «Вказана кількість перевищує залишок. Залишок: 18. Бракує 111.093».

Відключення контролю негативних залишків у 1С

Операція увімкнення/вимкнення контролю залишків у 1С здійснюється через меню «Головне» - «Налаштування» - «Параметри обліку» - «Запаси». Тут потрібно встановити прапорець «Дозволити списання запасів за відсутності запасів за даними обліку».

Після цього дія підтверджується кнопкою «Записати та закрити». У свою чергу, подібні дії гарантовано стануть основою для формування в обліку негативних залишків. Їх потрібно усунути.

Звіт «Контроль негативних залишків»

Формування цього звітуздійснюється через меню "Склад" - "Звіти", де представлений документ. Від користувача потрібно визначити інтервал запиту та клацнути на кнопку «Сформувати». Відсутність заданого періоду не дозволить показати негативні залишки, що є особливістю системи, яка потребує обов'язкового заповненняграфи "Період".

Готовий звіт має такий зовнішній вигляд.

Для самого звіту доступний стандартний набір фільтрів, включаючи групування, сортування та інші трансформації даних відповідно до запитів та потреб користувачів. За допомогою кнопки «Показати налаштування» можна включити до звіту додаткові рядки вручну.

У своїх відеоуроках я часто говорю про те, що базу 1С потрібно обов'язково підготувати до закриття періоду та складання звітності. І один із важливих пунктівтакої підготовки – це контроль негативних залишків товарів, матеріалів та готової продукції. Якими звітами потрібно скористатися, щоб перевірити стан рахунків обліку ТМЦу 1С: Бухгалтерії? Давайте розглянемо деякі з них.

1. Звіт «Оборотно-сальдова відомість по рахунку»

Багато бухгалтерів звикли працювати з оборотно-сальдовою відомістю за рахунком. Цей звіт дійсно можна використовувати для контролю залишків ТМЦ, тільки потрібно переконатися, що в налаштуваннях встановлено відображення кількісних показників.
Натискаємо кнопку «Показати налаштування», переходимо на вкладку «Показники».

Потім уважно переглядаємо звіт та аналізуємо виявлені помилки

Оборотно-сальдова відомість зручна тим, що дозволяє оцінити як наявність негативних кількісних залишків, а й виявити інші проблемні ситуації:
- кількісний залишок ТМЦ без суми;
- сумовий залишок без кількості;
- Негативний сумовий залишок.
Однак, якщо в обліку задіяна велика кількість номенклатурних позицій, то така перевірка може бути досить складною. До того ж, ОСО доведеться формувати для кожного рахунку обліку окремо (10, 41, 43), що теж дещо ускладнює процес роботи.

2. Звіт "Контроль негативних залишків"

У конфігурації 1С: Бухгалтерія підприємства 8 редакції 3.0 передбачено звіт, який ідеально підходить для контролю негативних кількісних залишків ТМЦ. Розташований звіт на вкладці «Склад».

Вказуємо період, організацію та формуємо звіт.

До звіту потрапляють лише номенклатурні позиції, якими виявлено негативний кількісний залишок. Великим плюсом є те, що аналізуються дані з усіх рахунків обліку ТМЦ. Працювати зі звітом, на мій погляд, зручніше, ніж із ОСВ.
Але є й мінус – звіт дозволяє контролювати лише негативні кількісні залишки, залишаючи за кадром інші проблеми, що дозволяє виявити ОСВ.

3. Звіт «Аналіз субконто»

Про цей звіт я розповідала вже неодноразово. Аналіз субконто - один із моїх улюблених звітів, який дозволяє не тільки виявити помилки, а й у багатьох ситуаціях зрозуміти їхні причини.
Переходимо до розділу «Звіти» - «Аналіз субконто».

Вибираємо субконто "Номенклатура", перевіряємо, щоб у налаштуваннях звіту було включено відображення кількісних показників.

Аналіз субконто хороший тим, що дозволяє отримати інформацію про рух ТМЦ за всіма рахунками обліку. Наприклад, відстежити ситуації, коли товар надійшов однією рахунок обліку, а був реалізований – з іншого.

Однак за великої кількості номенклатури аналізувати дані може бути складно.
Докладніше про роботу з цим звітом я розповідала у відеоуроці Як працювати зі звітом "Аналіз субконто" у 1С - ВІДЕО.
Таким чином, кожен із розглянутих звітів має свої плюси та мінуси. У роботі я рекомендувала б їх комбінувати:
- знайти грубі помилки звітом "Контроль негативних залишків";
- потім переглянути ОСО за всіма рахунками обліку ТМЦ;
- для виявлення причин некоректного сальдо скористатися звітом "Аналіз субконто".
Цікаві приклади, пов'язані з пошуком та виправленням помилок при обліку ТМЦ, я також розбирала у двох корисних відео:

Цей звіт допомагає в будь-який момент часу отримати зведену або детальну інформацію про негативні залишки на 41 рахунку. Результат роботи звіту виводиться з деталізацією за умовчанням (див. рис.1)

Т.к. звіт повністю написаний з використанням схеми компонування даних, то користувачеві не важко змінити розрізи звіту з режиму користувача (див. рис.2)

Зовнішній звіт призначений для конфігурації «1С:Бухгалтерія підприємства 8, редакція 3.0» та «Редакція 3.0 (КОРП)», що працює на платформі версії 8.2 в режимі «КЕРУВАНИЙ ДОДАТОК».

Термін дії безкоштовної підтримки: 1 місяць.

Причини купити

Негативні залишки завжди є головним болем будь-якого бухгалтера. Негативні залишки за рахунком 41 подвійно посилюють цю ситуацію. Цей звіт швидко і наочно показує всю "почервоніння" по 41 рахунку у зручній та наочній формі. Причому любий негативний залишок за 41 рахунком, може бути розшифрований за допомогою звітів «Аналіз субконто» та «Картка рахунка». При цьому, комбінуючи використання даних звітів можна опуститися прямо до рівня документів-реєстраторів, що викликали рух товару. Для цього достатньо натиснути на потрібну цифру у звіті і вибрати звіт для розшифровки.

За численними побажаннями користувачів, створено окрему версію звіту «Контроль негативних залишків за рахунками ТМЦ», в якій додано можливість контролю негативних залишків, не лише за 41 рахунком, а й іншими основними рахунками руху ТМЦ:

Рахунок 07 Обладнання для встановлення
- Рахунок 08.04 Придбання об'єктів основних засобів
- Рахунок 10 весь, крім 10.07 (Матеріали, передані у переробку на бік)
- Рахунок 21 Напівфабрикати власного виробництва
- Рахунок 41 весь, крім 41.12 (Товари в роздрібній торгівлі (у НТТ за продажною вартістю))
- Рахунок 42.01 Торгова націнка в автоматизованих торгових точках
- Рахунок 43 Готова продукція

Також, пригадаємо, що негативні залишки можуть виникати не лише за рахунками руху ТМЦ, а й за рахунком ВМД. Якщо у вас є потреба в контролі і цього рахунку теж, рекомендуємо вам ознайомитися з зовнішнім звітом

Переваги

  1. Підключення через механізм зовнішніх обробок та звітів. Це дозволяє використовувати звіт, не вносячи жодних змін до типової конфігурації. Також можливе стандартне відкриття звіту через «Файл» - > «Відкрити».
  2. Можливість налаштування звіту "під себе" з режиму користувача.

Гарантія повернення грошей

ТОВ "Інфостарт" гарантує Вам 100% повернення оплати, якщо програма не відповідає заявленому функціоналу з опису. Гроші можна повернути в повному обсязі, якщо ви заявите про це протягом 14 днів з дня надходження грошей на наш рахунок.

Програма настільки перевірена в роботі, що ми цілком впевнено можемо дати таку гарантію. Ми хочемо, щоб усі наші покупці залишалися задоволені покупкою.

На торгових або виробничих підприємстваху бухгалтерському обліку в обліковій системі "вискакують" негативні залишки. Вони відбивають надмірно списаний товар/матеріали.

Які причини їхнього виникнення?

Відсутність приходу

Найчастіше найпоширенішою причиною може бути відсутність проведеного надходження товарів чи введення початкових залишків. Наприклад, придбали товар, але ще не встигли оприбуткувати його в системі, проте його вже встигли продати. А трапляється – товар був оприбуткований, потім переміщений до магазину та проданий, проте хтось скасував проведення документа надходження.

У цій ситуації правильним способом впливу буде перевірка наявності документа надходження на базі. Якщо вона є і не проведена, перевірити заповнення та провести. Якщо документа надходження у базі взагалі немає, необхідно ввести його заднім числом. При цьому необхідно розуміти, що додавання заднім числом документів у закритому податковий періодможе спричинити зміни сум податків, зокрема – ПДВ.

Пересортиця

Ще однією поширеною причиною аналізованого нами явища є пересорт чи надлишок одного найменування товару (матеріалу) і при цьому нестача іншого. Наприклад, у програмі в наявності відмічено лише чорний гаманець у кількості 10 шт., а в магазині продавець продає червоний гаманець та оформляє в базі його продаж у кількості 5 шт. У результаті основі залишок чорних гаманців не зменшується, а й у червоних гаманців з'являється наш залишок.

У даному випадкувиправлення залишків вирішується наступним способом: оформляється оприбуткування одного товару та списання іншого. Для цього створюється документ «Оприбуткування товарів» та в ньому оприбутковується 5 шт. червоні гаманці. Далі створюється документ «Списання товарів» і списується 5 шт. чорні гаманці.

Коли в 1С:Бухгалтерія 3.0 за товаром (матеріалами) існує негативний залишок, то при проведенні документа «Реалізація товарів» виводиться інформаційне повідомленняпро те, що даний документпровести неможливо, оскільки відображене в табличній частині документа кількість одиниць перевищує залишок.

Рис.1 Повідомлення в документі за відсутності залишку на складі

Застерігають сигнали в оборотно-сальдовій відомості- Негативні залишки виділяються червоним!



Рис.2 Відстеження ОСВ

Як включити або вимкнути контроль негативних залишків у 1С БП 3.0

Налаштувати контроль можна в розділі "Адміністрування", потім натиснути на посилання "Проведення документів".



Рис.3 Налаштування

Для відключення контролю потрібно активувати прапор на параметрі "Дозволити списання запасів за відсутності залишків за даними обліку".



Рис.4 Дозвіл до списання одиниць за негативних показників залишку

Трапляється, для термінового продажу товару, який також терміново треба відвантажити, треба на якийсь час відключити контроль. Документ «Реалізації» проводиться в системі, а потім контроль знову вмикається. Потім обов'язково треба не забути провести аналіз залишків, щоб виправити помилку в обліку, через яку виник негативний товар.

Для того, щоб контролювати залишки в розрізі складів, треба налаштувати за ними аналітику в параметрах обліку через адміністрування.



Рис.5 Параметри

Тиснемо «Налаштування плану рахунків».



Рис.6 Параметр налаштування

Тиснемо «За номенклатурою, партіями і складами (за кількістю та сумою)».



Рис.7 Параметри обліку запасів

Під час встановлення аналітики, натиснувши «За складами (місцями зберігання)», вибираємо, як вести облік.



Рис.8 Активація аналітики за складами

Якщо вибрано налаштування «за кількістю та сумою», відповідно, облік буде в кількісному та сумовому обліку за складами окремо, а якщо – «за кількістю», то лише кількісний у розрізі кожного складу, а суми списання визначаються шляхом поділу ціни запасів на всю кількість на всіх складах.

Контрольні звіти

Звіт "Контроль негативних залишків" використовується для аналізу виявлених негативних залишків товарів організацій. Відкрити його можна через "Склад - Контроль негативних залишків".



Рис.9 Звіти контролю залишків



Рис.10 Форма контрольного звіту

У налаштуваннях звіту можна вказати, за якими даними будувати звіт, наприклад, групувати дані щодо Організації, Складу, Документу списання, Номенклатури та ін.



Рис.11 Налаштування контрольного звіту

У відборі можна вказати, за якими даними формувати звіт, наприклад, за певним складом або проблемною номенклатурою.



Рис.12 Відбори у контрольному звіті



Рис.13 Формування контрольного звіту

Негативні залишки є своєрідним індикатором помилок в обліку. Важливо постійно відстежувати залишки на складах та своєчасно виправляти їх. Існуючі некоректні залишки створюють проблеми для оперативної роботи користувачів, а також можуть стати причиною неправильного розрахунку собівартості, переоцінки та інших. важливих показниківбухгалтерського обліку.

Ця стаття призначена для впроваджених 1С – і особливо для тих, хто готується до Атестації на 1С:Фахівець з платформи.

Сьогодні ми розберемо 2 методики контролю залишків – причому не лише залишків на складі, а й, наприклад, взаєморозрахунків ("яка поточна заборгованість клієнта і чи можна відвантажувати йому товари")

Обидві методики застосовуються і в типових конфігураціях, і Атестаційних завданнях. І оскільки їх дві – потрібно чітко розуміти, коли застосовна "нова" методика, а коли тільки "стара".

Це базові знання для програмістів 1С, рекомендуємо не залишати прогалин у таких областях. На вивчення у Вас має піти 15 хвилин :)

Постановка задачі

Візьмемо просту конфігурацію з документами "Надходження товарів" та "Реалізація товарів":

Для обліку залишків використовується регістр накопичення "Вільні залишки":

Під час проведення документа “Надходження товарів” виконуються рухи-прихід:

Процедура ОбробкаПроведення(Відмова, Режим)


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

КінецьПроцедури

Обробка проведення документа «Надходження товарів» виконана за допомогою конструктора рухів та інтересу не представляє, тому що при надходженні на склад контроль залишків не потрібен.

Іноді контроль залишків реалізують й у документа «Надходження товарів» – щоб у разі скасування проведення чи перепроведення документа не утворився негативний залишок.

Наприклад, на склад надійшли 10 нових телевізорів LG, 6 із них було продано. Якщо у документі надходження 10 шт. виправити 5 шт. - Утворюється негативний залишок "мінус 1 шт.".

У типовий УТ 11 подібний контроль включається за допомогою функціональної опції «Контролювати товари організацій при скасуванні приходів».

Під час проведення документа «Реалізація товарів» необхідно організувати контроль залишків. Якщо товару на залишках недостатньо, документ не проводиться та видається діагностичне повідомлення. У цьому полягає завдання.

Ми свідомо працюємо над простим завданням, коли собівартість при списанні не розраховується. Це дозволить нам зосередитись саме на нюансах контролю залишків.

Примітка- Наведені нижче алгоритми розроблені для навчання і повинні бути максимально зрозумілими.
Їх можна оптимізувати, але тоді «коефіцієнт розуміння» буде нижчим, тому в цій статті ми на цьому не зупиняємось.

Звичайно, Ви можете оптимізувати їх самостійно, або пройти наш курс з прискорення та оптимізації 1С :)

Як Ви вже зрозуміли, розв'язання задачі може бути виконане двома способами. Почнемо з методики, яка застосовувалась ще з часів «1С:Підприємство 8.0».

Стара методика контролю залишків

Принцип старої методики контролю залишків наступний: перевіряємо, чи є залишок товарів у потрібній кількості. Якщо є – списуємо, якщо ні – повідомляємо про помилку.

Алгоритм у старій методиці складається з кількох блоків:

  1. Запитом виходять залишки товарів та дані документа
  2. У циклі виконується контроль достатності товарів
  3. Якщо товарів недостатньо, то документ не проводиться
  4. Якщо товарів достатньо – виконуються рухи-витрата

Ось так виглядає програмний код:

// 1. Очищення старих рухів регістру
Рухи.ВільніЗалишки.Записувати = Істина;
Рухи.Записати();

// 2. Отримання запитом даних документа та залишків регістру
Запит = Новий Запит;
Запит.Текст =
"ВИБРАТИ

|ПОМІСТИТИ Товари

|ДЕ
| Товари.Посилання = &Посилання
|ЗГРУПУВАТИ ПО
| Товари.Номенклатура
|ІНДЕКСУВАТИ ПО
| Номенклатура
|;

| ВИБРАТИ
,
| ПОДАННЯ ПОСИЛАННЯ(Товари.Номенклатура) ЯК НоменклатураУявлення,
| Товари.Кількість ЯК Кількість,
| Є NULL (Залишки. Кількість Залишок, 0) ЯК Залишок

| Товари ЯК
| ЛІВОЕ З'ЄДНАННЯ РеєстрНакопичення.ВільніЗалишки.Залишки(
| &Момент часу,
| Номенклатура В
| (ВИБРАТИ
| Номенклатура ЯК Номенклатура
| З
| ПЗ Товари.Номенклатура = Залишки.Номенклатура";
Запит.УстановитиПараметр("МоментЧасу", МоментЧасу());

// 3. Обхід результатів запиту

// 4. Перевірка на достатність товарів
Дефіцит = ВибіркаТовари.Кількість - ВибіркаТовари.Залишок;
Якщо Дефіцит>0 Тоді
Відмова = Істина;
Повідомлення.Текст = "Товари "+ВибіркаТовари.НоменклатураУявлення+" недостатньо в кількості "+Дефіцит+" шт.";
Повідомлення.Повідомити();
КінецьЯкщо;

// 5. Перехід початку циклу, якщо були помилки
Якщо Відмова Тоді
Продовжити;
КінецьЯкщо;

// 6. Виконання рухів у регістри
Рух. Період = Дата;

КінецьЦикл;

// 7. Встановлення прапора запису рухів наприкінці транзакції
Рухи.ВільніЗалишки.Записувати = Істина;

КінецьПроцедури

Прокоментуємо ключові точки алгоритму.

1. Очищення старих рухів регістру

Нижче в алгоритмі буде запит до залишків регістру.

Якщо поточний документ було раніше проведено, то існує можливість отримати у запиті старі рухи документа- Це серйозна проблема.

Коли можлива така ситуація? Коли дата документа зрушується вперед.

Покажемо на прикладі, до чого це призведе:

  1. Залишок настільних ламп 10 шт.
  2. Проводиться документ від 16.02.17, списуємо 6 ламп
  3. У документі змінюється дата на 17.02.17 (дату можна перемістити хоч на 1 секунду вперед), перекладаємо документ.

Якщо очищення рухів не виконувати, система повідомить про брак 2 штук. Чому? Та тому що старі рухи документа списали 6 із 10 наявних ламп. Далі система намагається списати ще 6 штук, а на рештках є лише 4.

Проблема вирішується у 3 рядки коду:

  • Виконується очищення набору записів (він міг бути прочитаний на формі або попередніх обробників)
  • У набору записів встановлюється прапор "Записувати"
  • Виконується запис усіх наборів, які мають прапор «Записувати»

Строго кажучи, ми можемо керувати очищенням рухів під час проведення документів:

Варіант із видаленням рухів при скасуванні проведення є рекомендованим – ми самі керуємо, коли потрібно дійсно видаляти рухи.

2. Отримання запитом даних документа та залишків регістру

Запит складається з двох пакетів:

  • У першому виходять згруповані дані табличної частини - створюється тимчасова таблиця
  • У другому запиті до даних документа приєднуються залишки з регістру.

На що варто звернути увагу на цей запит:

  1. При створенні тимчасової таблиці індексується поле, яким далі буде виконуватися з'єднання – це зроблено для оптимальної продуктивності
  2. Момент отримання залишків – відповідають положенню документа на часовій осі
  3. Залишків у регістрі може бути – тому виконується ліве з'єднання й у ресурсу «Кількість» застосовується функція «ECТЬNULL» – значення NULL призводить до нулю.

3. Обхід результатів запиту

Розроблений запит містить згруповані дані документа та залишки за номенклатурними позиціями.

У циклі обходимо результат цього запиту.

4. Перевірка на достатність товарів

Визначаємо дефіцит за товарами.

Якщо дефіцит більший за нуль, значить, товару не вистачає:

  • Видаємо діагностичне повідомлення
  • Виставляємо параметр «Відмова» обробки проведення значення «Істина»

Якщо «Відмова» дорівнюватиме «Істина», то результат транзакції проведення документа не буде зафіксовано. Говорячи простою мовою– це команда системи не проводити цей документ.

5. Перехід на початок циклу, якщо були помилки

Якщо цьому чи попередніх кроках циклу були помилки (Відмова = Істина), тоді немає сенсу формувати руху. Все одно до бази даних вони не будуть записані.

6. Виконання рухів у регістри

Якщо перевірка залишків пройшла успішно, формуємо рух-витрату.

7. Встановлення прапора запису рухів наприкінці транзакції

Якщо цей прапор не встановити, то рухи НЕ будуть записані.

Наприкінці транзакції проведення документа записуються лише набори записів, які мають прапор «Записувати».

Заради справедливості зазначимо, що встановлення якості "Записувати" набору записів має сенс за однієї умови - у якості документа "Запис рухів при проведенні" має бути вказано значення "Записувати вибрані":

Однак саме значення "Записувати вибрані" є стандартом де-факто:

  • Воно використовується у типових рішеннях
  • Встановлюється за замовчуванням під час створення нових документів.

Інше значення якості - "Записувати модифіковані" є застарілим і в сучасних конфігураціях майже не зустрічається.

Нова методика контролю залишків

У новій методиці використовується принцип: списуємо необхідні товари, далі перевіряємо – чи утворилися негативні залишки по товарах документа. Якщо так, то необхідно відкотити проведення документа.

Як бачите, важлива різниця в моменті контролю залишків:

  • Стара методика – спочатку перевіряємо залишок, потім списуємо
  • Нова методика – спочатку списуємо, потім перевіряємо решту.

В результаті програмний код буде виглядати так:

Процедура ОбробкаПроведення(Відмова, РежимПроведення)

// 1. Отримання запитом даних документа
Запит = Новий Запит;
Запит.МенеджерТимчасовихТаблиць = Новий МенеджерТимчасовихТаблиць;
Запит.Текст =
"ВИБРАТИ
| Номенклатура ЯК Номенклатура,
| СУМА(Товари.Кількість) ЯК Кількість
|ПОМІСТИТИ Товари

| Документ.РеалізаціяТоварівПослуг.Товари ЯК
|ДЕ
| Товари.Посилання = &Посилання
|ЗГРУПУВАТИ ПО
| Товари.Номенклатура
|ІНДЕКСУВАТИ ПО
| Номенклатура
|;
|////////////////////////////////////////////////////////////////////////////////
| ВИБРАТИ
| Номенклатура ЯК Номенклатура,
| Товари.Кількість ЯК Кількість

| Товари ЯК Товари";
Запит.ВстановитиПараметр("Посилання", Посилання);
РезультатЗапиту = Запит.Виконати();

// 2. Формування рухів-витрата регістру
Рухи.ВільніЗалишки.Очистити();
ВибіркаТовари = РезультатЗапроса.Вибрати();
Поки ВибіркаТовари.Наступний() Цикл
Рух = Рухи.ВільніЗалишки.ДодатиВитрата();
Рух. Період = Дата;
Рух.Номенклатура = ВибіркаТовари.Номенклатура;
Рух.Кількість = ВибіркаТовари.Кількість;
КінецьЦикл;

// 3. Запис рухів у БД
Рухи.ВільніЗалишки.Записувати = Істина;
Рухи.Записати();

// 4. Запит, який отримує негативні залишки з регістру
Запит.Текст =
"ВИБРАТИ
| Номенклатура ЯК Номенклатура,
| ПОДАННЯ ПОСИЛАННЯ(Залишки.Номенклатура) ЯК НоменклатураУявлення,
| -Залишки.КількістьЗалишок ЯК Дефецит

| РегістрНакопичення. Вільні Залишки.
| &Момент часу,
| Номенклатура В
| (ВИБРАТИ
| Номенклатура ЯК Номенклатура
| З
| Товари ЯК Товари)) ЯК Залишки
|ДЕ
| Залишки.< 0";

КордонКонтролю = Новий Кордон(Момент Часу(), ВидКороди.Включаючи);
Запит.ВстановитиПараметр("Момент Часу", КордонКонтролю);
РезультатЗапиту = Запит.Виконати();

// 5. Виведення повідомлень про нестачу товарів
Якщо не результат Запиту.Порожній() Тоді
Відмова = Істина;
ВибіркаПомилки = РезультатЗапроса.Вибрати();
Поки ВибіркаПомилки.Наступний() Цикл
Повідомлення = Новий ПовідомленняКористувачеві;
Повідомлення.Текст = "Товара "+ВибіркаПомилки.НоменклатураПредставлення+" недостатньо в кількості "+ВибіркаПомилки.Дефецит+" шт.";
Повідомлення.Повідомити();
КінецьЦикл;
КінецьЯкщо;

КінецьПроцедури

Розберемо ключові точки алгоритму.

1. Отримання запитом даних документа

Цей запит необхідний групування даних табличної частини документа.

Зверніть увагу, що у першому запиті пакета створюється тимчасова таблиця – вона використовуватиметься й у запиті. Це можливо завдяки менеджеру тимчасових таблиць, створеного для цього запиту.

2. Формування рухів-витрата регістру

У циклі записуються дані з документа до регістру – тобто виконується безумовне (без перевірки) списання товарів.

3. Запис рухів у БД

Щоб залишки у регістрі змінилися, рухи потрібно записати.

4. Запит, який отримує негативні залишки з регістру

А тепер простим запитом обираємо негативні залишки по товарах документа.

Саме тут використовується створена першому кроці тимчасова таблиця – накладається умова на номенклатуру (для цього ми не створюємо новий об'єкттипу "Запит", а використовуємо створений раніше).

Зверніть увагу, як передається час – використовується тип даних «Кордон». Залишки потрібно отримати на момент часу відразу після поточного документа.

Чи можна було отримати залишки без кордону, наприклад, додавши до дати документа 1 секунду?

Ні! Адже в одній секунді може бути велике числодокументів. Тому єдиний правильний варіант – використовувати вид кордону "Включаючи".

5. Виведення повідомлень про нестачу товарів

Якщо результат запиту не порожній, то є негативні залишки – у цьому випадку документ не проводиться і видаються повідомлення про всі помилки.

Переваги контролю залишків за новою методикою

Отже, обидва алгоритми вирішують те саме завдання.

Різниця між алгоритмами помітна, але переваги не очевидні.

Тому давайте підкреслимо їх:

  1. Немає необхідності очищати старі рухи документа. По суті, це операція запису в БД порожнього набору рухів і видалення існуючих рухів - це досить ресурсомісткі операції.
  2. Запит, який отримує дані щодо негативних залишків, звертається лише до однієї таблиці – немає необхідності робити ліве з'єднання з даними документа та застосовувати функцію «ЄСТЬNULL()»

Крім цього, при нормальному перебігу бізнес-процесів користувач вказує кількість, що не перевищує залишок на складі.

У цьому випадку другий запит не поверне жодних даних та проведення документа буде максимально швидким.

А чи так важливі ці мілісекунди?

На базах з невеликою кількістю даних та користувачів різниця буде непомітною. Але в навантажених системах із десятками користувачів ціна кожної мілісекунди висока.

Крім того, на іспиті 1С:Фахівець з платформи потрібно обов'язково використовувати новий спосібконтролю залишків, якщо це припускає конкретне завдання.

Ok, значить, потрібно завжди використовувати нову методику, правда?

Ні це не так!

Нова методика може використовуватися тільки в тому випадку, якщо для проведення документа є всі необхідні дані у самому документі.

Тобто для отримання даних не потрібно звертатися до регістрів, якими здійснюється контроль залишків.

Так, наприклад, якби в регістрі «Вільні залишки» враховувалася б і сума, то довелося б використати стару методику контролю.

До речі, у типовій «1С:Управління торгівлею 11» реалізовано контроль залишків за новою методикою, а в «1С:Бухгалтерії 8» – за старою методикою.

Але це ще не все!

Представлені вище алгоритми можна використовувати лише в навчальних цілях. Справа в тому, що в них не враховуються керовані блокування, які необхідно застосовувати, якщо в системі працює більше одного користувача.

Блокування для обох методик контролю залишків присвячена . Також у цій статті ми вирішуємо більш складне завдання - крім контролю залишків виконуємо розрахунок собівартості номенклатури, що списується. Рекомендуємо її вдумливо вивчити.

А для «затравки» лише скажемо, що встановлення блокування в новій методиці робиться дуже просто- І це ще одна перевага нового способу контролю залишків.

Підсумки

Підіб'ємо короткі підсумки.

Ми розглянули дві методики контролю залишків, кожна з яких застосовується у сучасних типових конфігураціях.

Ключова відмінність між методикамиу моменті контролю залишків:

  • Стара методика – контроль до запису рухів у регістри
  • Нова методика – контроль після запису рухів у регістри

У загальному випадку нова методика є більш ефективною, але застосовна вона не завжди.

Критерій застосування– якщо формування рухів немає необхідності звертатися до даних контрольованого регістру, можна використовувати нову методику.

Якщо говорити про контроль залишків за номенклатурою, то застосування нової методикиможливо, коли дані про собівартість та складські залишки зберігаються в різних регістрах.

І на завершення приклади з типових конфігурацій:

  • У УТ 11є 2 основних регістри для обліку номенклатури: Вільні залишки (кількість) та Собівартість товарів (дані про собівартість) – використовується нова методика
  • У БП 3.0дані про собівартість та залишки зберігаються в одному регістрі бухгалтерії - використовується стара методика контролю залишків.