Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 00:05
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Вопрос по блокировке данных.  (Прочитано 2831 раз)

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

Оффлайн DirecTwiX

  • ***
  • Сообщений: 185
  • РЕПУТАЦИЯ: 19
  • КПД: 10%
  • Регистрация: 2012-03-27
  • Сайт: 
  • Профессия: Программист 1С
Есть задача:
Цитировать
Компания занимается оптовой торговлей. Принята следующая схема работы: поступление товаров отражается документом «Приходная накладная». По предварительной договоренности с покупателем менеджер может оформить резерв (документ «Резервирование товара»), причем наличие товара в этот момент не важно, товар может отсутствовать. Непосредственно отгрузка товара покупателю отражается документом «Расходная накладная», при этом происходит снятие резерва.
Учет товаров ведется в разрезе складов. В документах «Приходная накладная» и Расходная накладная» склад только один (склад -- реквизит шапки).
При проведении расходной накладной необходимо проверить наличие товара на складе и «свободного» (будет описано далее) товара. В том случае, когда товара недостаточно, документ не проводится и выводится соответствующее сообщение об ошибке.
У каждого менеджера есть приоритет, чем больше приоритет, тем более ответственный менеджер и тем важнее его продажи. Таким образом, если два менеджера одновременно зарезервировали один и тот же товара, то менеджер с большим приоритетом может продать товар, зарезервированный менеджером с меньшим приоритетом. Менеджер с низким приоритетом продать чужой резерв не имеет права. Таким образом, «свободный» товар менеджера определяется как товар на всех складах минус резерв всех остальных менеджеров с приоритетом большим либо таким же, как и у текущего менеджера.
Приоритет устанавливается для каждого менеджера индивидуально и может меняться не чаще чем 1 раз в месяц. При продаже необходимо использовать приоритет менеджера, актуальный на дату продажи.
Себестоимость товара рассчитывается как средняя по складу.
Регистр ОстаткиНоменклатуры устроен так:
Измерения:
  Номенклатура
  Менеджер
  Склад
Ресурсы:
  Количество
  Сумма

При резервировании товаров склад пуст, а в менеджере - сотрудник. При проводке - менеджер пуст, а в склад пишу склад.
При проведении расходной блокирую склад и список номенклатуры из документа. Вопрос в том, стоит ли мне блокировать определённых сотрудников? Насколько я понимаю - нет - они и так все заблокируютс.

Если интересно, то вот обработка проведения. Был бы рад любой критике)
Цитировать
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   Движения.ОстаткиНоменклатуры.Записывать = Истина;
   
   Блокировка = Новый БлокировкаДанных;
   ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
   ЭлементБлокировки.УстановитьЗначение("Склад", Склад);
   ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
   
   ЭлементБлокировки.ИсточникДанных = Товары;
   ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
   Блокировка.Заблокировать();

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


Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Лучше разделить на 2 регистра - Остатки и Резервы.
Именно потому, что у вас происходят движения с разным набором измерений (в одном случае со складом, в другом - с менеджером), что плохо и считается одной из грубых ошибок, потому что в этом случае вы никогда не выйдете в ноль и ваши итоговые таблицы регистра будут неоправданно "распухать"...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн DirecTwiX

  • ***
  • Сообщений: 185
  • РЕПУТАЦИЯ: 19
  • КПД: 10%
  • Регистрация: 2012-03-27
  • Сайт: 
  • Профессия: Программист 1С
Почему в ноль не выйдут? Я ж резервы списываю и остатки. Вроде разбухнуть не получиться...

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
в любом случае лучше не смешивать...

к тому же вы не учитываете момент когда более старший менеджер "отбирает" резерв более младшего...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн DirecTwiX

  • ***
  • Сообщений: 185
  • РЕПУТАЦИЯ: 19
  • КПД: 10%
  • Регистрация: 2012-03-27
  • Сайт: 
  • Профессия: Программист 1С
Вот же:
Цитировать
                  |ВЫБРАТЬ
                  |   ВсеОстатки.Номенклатура,
                  |   СУММА(ВсеОстатки.КоличествоОстаток) КАК КоличествоОстаток
                  |ПОМЕСТИТЬ Резервы
                  |ИЗ
                  |   ВсеОстатки КАК ВсеОстатки
                  |ГДЕ
                  |   ВсеОстатки.Менеджер <> &Менеджер
                  |   И ВсеОстатки.Приоритет >= &Приоритет
                  |
                  |СГРУППИРОВАТЬ ПО
                  |   ВсеОстатки.Номенклатура
                  |;
Но за внимание спасибо)

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
конечно не претендует на истину, но примерно следующим образом (см. приложение).
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.


Теги:
 

Возможно ли получение эталонного файла конфигурации *.cf из измененной стандартной, например (УТ 11.1, БП 3.0) или вопрос о том как убрать лишние доработки и привести конфигурацию базы максимально к стандартной после варварских "доработок"?

Автор kostyaomskРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 9
Просмотров: 9197
Последний ответ 30 Дек 2015, 22:14
от 1Cnastroika
Вопрос по РИБ "ПоОрганизации"

Автор andi_xРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 5842
Последний ответ 15 Мар 2013, 21:38
от Besart
Вопрос по "Отчеты о Розничных продажах".

Автор GerCerberРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 3288
Последний ответ 26 Июл 2010, 16:06
от crow1983
Вопрос о действии кнопки "Записать"

Автор jenya1111Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 6
Просмотров: 3433
Последний ответ 06 Окт 2014, 15:23
от jenya1111
Вопрос по отчету "Материалы в эксплуатации".

Автор mitauskasРаздел Пользователям "1С - Предприятие 8"

Ответов: 3
Просмотров: 2360
Последний ответ 04 Мар 2015, 11:07
от Дмитрий@

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
170 Сообщений
ilyay ilyay
69 Сообщений
oleg-x
48 Сообщений
alex0402
44 Сообщений
andron81_81
38 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
29 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 208
  • Точка Скрытых: 0
  • Точка Пользователей: 3
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal