-
Граждане,помогите покомпактней реализовать данное головоломко)))
Вложения:
1.08.dt
-
Это конечно хорошо, но:
1) Почему в запросах не используется соединение (связи)? Из-за этого у тебя абсолютно неправильно считаются остатки
2) В создаваемом документы хорошо-бы хранить ссылку на документ основание, для этого хорошо подходит ввод на основании. Тогда не прийдется каждый раз вводить кучу документов, а только лишь один и он-же, в случае чего, будет перепроводиться
-
Решение работает, но думаю можно сделать оптимальней.
Вложения:
1.8_Tolyas.dt
-
pershinsergei, выкладываю свое решение с отчетом.
Вложения:
1_08.dt
-
bk, в расходной, если товара в точке не хватает - не проверяется, а хватает ли в отделе закупки, а по заданию должно!
-
User67, в задании написано что нужно контролировать остатки по торговой точке и если их не хватает, то делать перемещение. При проведении в случае продажи я проверяю хватает ли товара в точке, если нет, то я добавляю строку в ТЗ_Перемещение в которой указываю сколько и чего нужно переместить из отдела закупок для проведения. Далее я пытаюсь сделать перемещение, если это не удается (в отделе закупок тоже нет остатков) тогда я взвожу флаг отказ и документ не проводится, помоему все верно
-
Вот как я решил
Вложения:
1.08_marku.dt
-
marku,
1) Совсем не используются блокировки
2) Перемещение должно проводиться документом "Расходная накладная" - по условию задачи.
-
Quote (AS)
Спасибо что посмотрел
1) Совсем не используются блокировки
Да нужно, но алгоритм один и тот же как во всех задачах.
2) Перемещение должно проводиться документом "Расходная накладная" - по условию задачи.
Перемещение делаю. а как же без него и провожу
Code
//..............
ДокПеремещение = Документы.Перемещение.СоздатьДокумент();
ДокПеремещение.Дата = Дата-1;
ДокПеремещение.ПодразделенияОтправитель = ПодразделениеОтделПоставки;
ДокПеремещение.ПодразделенияПолучатель = Подразделения;
СтрокаДокПеремещения = ДокПеремещение.СписокНоменклатуры.Добавить();
СтрокаДокПеремещения.Номенклатура = Выборка.Номенклатура;
СтрокаДокПеремещения.Количество =НадоСписать;
ДокПеремещение.Записать(РежимЗаписиДокумента.Проведение);
//.................
-
Решал билет на работе сегодня, посмотрел как сделал Bk,
считаю у него оптимальное решение.
Сам пытался уложиться в час с копейками, чтобы на экзамене успеть.
Вложения:
1.8..dt
-
А не кажется ли вам что в задании есть потенциальная мина связанная с блокировками и программым созданием и проведением другого документа?
При начале проведения документа продажи мы должны наложить блокировку на номенклатуру документа и два отдела закупки и тек. точки. Теперь после чтения остатков мы определяем, что нам нужно переместить часть товара с отдела закупок и в модуле проведения создаем новый документ и пытаемся его провести. Но у нас текущая транзакция не закончилась и действует блокировка - результат взаимные блокировки, новый ждет окончание текущего, текущий нового.
Теоритически можно не накладывать блокировку на отдел закупок при продаже и взаимных блокировок можно избежать в данном случае, но тогда есть вероятность что другой пользователь может провести списание с отдела закупок на другую точку и потенциально появятся минуса.
Кто что думает?Добавлено (22.11.2010, 13:03)
---------------------------------------------
Вопрос снимается, т.к. в описании к объекту БлокировкаДанных, написано "Предназначен для явной блокировки данных от чтения или изменения другими сессиями.". Т.е. взаимной блокировки в рамках одной сессии не будет...
-
моё решение
marku, вопрос: может так делать не очень правильно
ДокПеремещение.Дата = Дата-1;
это так мысли вслух, хотя мне тоже другие варианты в голову не приходят.
Вложения:
0025613.dt
-
Здесь вообще не нужен документ перемещение, по условию все делает расходная накладная, тогда и проблем с блокировками не будет.
-
Мое решение без отчета, вроде неплохо получилось.
Вложения:
1_08_mm.dt
-
Мой вариант
Вложения:
3732183.dt
-
to Gulf_Stream
1) Я считаю, что не лучший вариант хранить остатки отдела закупок на "пустом" складе(торговой точке), т.к. всегда нужно учитывать дальнеюшую адаптацию любой реализации под изменяемые требования.
2) Не выполняется проверка удалось выполнить перемещение недостающего товара с отдела продаж или нет.
3) По-моему не совсем корректно выводить сообщение "недостаточно товара в точке и отделе закупок, документ не будет проведён" не указав при этом, какого именно товара и в каком количестве.
4) Сам алгоритм проведения документа "Расходная накладная" в режиме реализации выполнен не оптимально. Сначала с помощью запроса определяются данные для перемещения, а затем снова производится обращение к остаткам для формирования движений документа.
5) Мелочь, но все же не понятно зачем в обоих процедурах "ДвиженияПеремещение" и "ДвиженияРеализация" размещать одинаковый для обоих процедур текст блокировки данных. Его можно было вынести в процедуру "ОбработкаПроведения"
Вложения:
01_08_02.dt
-
У bk решение хорошее, но при проведении расходной накладной во втором пакете первого запроса таблица ОстаткиНоменклатурыОстаткиЗакупка не соединяется ни по каким параметрам и получается, что номенклатура смешивается, суммируется количество и сумма.
-
Посмотрел решение у bk. Объясните почему так считается себестоимость?
Code
Движение.Сумма = МИН(Выборка.Количество, Выборка.КоличествоОстаток) /
?(Выборка.КоличествоОстаток = 0,
1,
Выборка.КоличествоОстаток) * Выборка.СуммаОстаток +
МАКС(Выборка.Количество - Выборка.КоличествоОстаток, 0) /
?(Выборка.КоличествоОстатокЗакупка = 0,
1,
Выборка.КоличествоОстатокЗакупка) * Выборка.СуммаОстатокЗакупка * Наценка;
-
Хорошая задача .. понравилась
Выложу свое решение. Использование новой методики проведения докуметов тут конечно забавно выглядит! Сплошь и рядом запросы на проверку минусов!
Вложения:
DoctorRoza_1_8.dt
-
мой вариант
Вложения:
1261707.dt
-
DoctorRoza, и lubja,
Есть сомнения по поводу правильности расчета стоимости списания
Пример
01.01.11 Прих.нак. №1 3ед 5грн.(3*5=15)
01.02.11 Расх нак. (перемещение)№1 3ед. 16,5грн.(15*(1+10/100=16,5)
01.03.11 Прих.нак. 8ед 6грн.(6*8=48)
01.04.11 Расх нак. (продажа)№1 10 ед.
Стоимость у вас
Стоимость=16,5/3*10=55грн. что, скорее всего не правильно.
Должно быть:
СтоимостьПеремещения=(10-3)*48/8(1+10/100)=46,2грн.
Стоимость=16,5+46,2=62,7грн.
-
kow1976, извините, но, у себя, я что то такой ошибки не нахожу! Добавил Ваши проводки и получилось .. как получилось (скриншот регистра накопления)! Тут, может, нужно обратить внимание, что себестоимость рассчитывается как средняя по складу. Поэтому при списании, себестоимость будет осредняться! Не знаю .. выложите свое решение .. обсудим!
Вложения:
s5747285.jpg
-
Проблема проявляется если реализовывать с торговой точки без перемещения недостающего товара
Вложения:
s3652502.jpg
-
Полностью с Вами согласен .. верно найдена ошибка! Получается, что эта задача решается только по методике 8.1. Ибо, чтобы провести списание, в случае недостачи, в начале нужно провести всю недостачу и только после списание!
-
Хорошее решение обидно пойматься на мелочи на экзамене.
Наверно можно и вашим методом только надо в начале делать перемещение записать его, а потом списывать.
-
Quote (kow1976)
Хорошее решение обидно пойматься на мелочи на экзамене.
Вы, наверное, шутите? Ну какая же это мелочь!? Это грубая ошибка!! 2/3 задачи решено не верно .. не реализована основная идея .. сразу выгонять с экзамена можно ..
-
Я имею ввиду, что если поставить часть создания документа перемещения перед списанием, то может все работать. А сама реализация не стандартна, а это всегда плюс.
-
kow1976, свое решение обязательно выложите .. очень полюбопытствую! )))
-
Если можно посмотрите, пожалуйста, зад.1.6 мне кажется, я её до ума не довел, но ошибок не вижу.
Эту задачу не решил, хочу привинтить к ней функциональные опции, но что то, знаний не хватает, чтоб реализовать.
-
Мое решение !!!!
Вложения:
1.8nik.dt
-
rnikinko,
Средняя, считается неправильно.
Прошу посмотреть и прокомментировать решение задачи.
Задача на первый взгляд кажется не сложной, но есть несколько подводных камней связанных с расчетом средней в разрезе склада.
За любые найденные ошибки спасибо.
Вложения:
kow19761.8.dt
-
kow1976, так-с ..
НовДок.Дата=Дата-1; а вот это не айс!! такое не приемлемо .. а если есть другие документы?
//////////////////////////////
Скрин .. ошибка ..
/////////////////////////////
Зачем в справочнике реквизит Перемещение???
Вложения:
s3581861.jpg
-
Quote (DoctorRoza)
НовДок.Дата=Дата-1; а вот это не айс!! такое не приемлемо .. а если есть другие документы?
С датой пробовал и границу и МоментВремени не получается сделать так чтобы продажа была позднее перемещения( первым создается продажа на оси потом перемещение, а надо наоборот). Но по идее номенклатура по складу в транзакции заблокирована и попасть, в эту секунду, чтобы списать только что, перемещенный товар не выйдет.
Я слышал, что можно останавливать в разных сеансах отладку на момент времени и проверять работу блокировок, но я толком не разобрался, как это делать.
Спасибо действительно косяк
Quote
Зачем в справочнике реквизит Перемещение???
В справочнике реквизит «перемещения» использую, чтобы в расходной совсем нельзя было выбрать ОтделЗакупок. Чтоб запретить продажу с отдела закупок.
В реквизите склад расходной накладной в свойстве
«Параметры выбора» Отбор.Перемещение(Истина)
-
Quote (kow1976)
С датой пробовал и границу и МоментВремени не получается сделать так чтобы продажа была позднее перемещения( первым создается продажа на оси потом перемещение, а надо наоборот). Но по идее номенклатура по складу в транзакции заблокирована и попасть, в эту секунду, чтобы списать только что, перемещенный товар не выйдет.
Забавно, в моем решении Вы как раз и указали на эту ошибку, но реализация решения не айс! В этом то и суть, что в начале должно быть перемещение, а уже потом списание!
Вложения:
5878232.dt
-
Посмотрите мое решение. По моему сделал очень оптимально...
Вложения:
_1.08.dt
-
Denov,
1.Средняя считается не правильно тестовые данные : http://forum.chistov.pro/index.php?topic=977.msg3#msg3
2. Блокируете всю номенклатуру по всем складам, а достаточно торг. точку и если надо склад закупки .
3. Два запроса можно решить одним
4. Накладную берете два раза из БД. Второй раз можно из ВТ
5. Уничтожать ВТ нет смысла. Все ВТ уничтожаются по КонецПроцедуры. Если я правильно понял назначение этого уничтожения.
6. Не уверен но думаю, что транзакция не нужна, так как Обработке проведения и так действует скрытая транзакция.
-
kow1976, Спасибо...
-
Прокомментируйте если не сложно !
Вопросы по оптимальности решения
1.Правильно отработают блокировки при установке списка значений в качестве источника значений ?
Code
Отделы = Новый СписокЗначений;
Отделы.Добавить(Справочники.Отделы.ОтделЗакупок);
Если Не ВнутреннееПеремещение Тогда
Отделы.Добавить(Отдел);
КонецЕсли;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.УстановитьЗначение("Отдел", Отделы);
2. Как скажется на быстродействии системы и оптимальности с точки зрения решения
строки в запросе
Code
СУММА(ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Отдел = ВТ_ТчДок.Отдел
ТОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0)
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоОстатокПоОтделу,
СУММА(ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Отдел = ВТ_ТчДок.Отдел
ТОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0)
ИНАЧЕ 0
КОНЕЦ) КАК СуммаОстатокПоОтделу,
СУММА(ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Отдел = ЗНАЧЕНИЕ(Справочник.Отделы.ОтделЗакупок)
ТОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0)
ИНАЧЕ 0
КОНЕЦ) КАК КоличествоОстатокПоОтделуЗакупок,
СУММА(ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Отдел = ЗНАЧЕНИЕ(Справочник.Отделы.ОтделЗакупок)
ТОГДА ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0)
ИНАЧЕ 0
КОНЕЦ) КАК СуммаОстатокПоОтделуЗакупок,
Или правильней для каждого отдела создать вложенный запрос ?
Спасибо !
Вложения:
Saipl_1.8.dt
-
Хотелось бы услышать комментарии к моему решению. Делала сама, поэтому ошибок может быть много, но вроде все работает.
Вложения:
garden_1-08.dt
-
В задаче сказано "необходимо программно создавать ДОКУМЕНТ по перемещению недостающего товара из отдела закупок"
я посмотрел несколько решений и не увидел реализации этого условия.. может я не прав... вот мой вариант решения
Вложения:
_1.8_Dim.dt
-
Буду очень благодарна за критику
Вложения:
1-8.dt
-
SEA,
Задачка действительно замороченная, у Вас решение получилось проще чем у меня и работает все вроде верно. Отчета только нет.
1.Немного не понятно зачем два реквизита в расходной: Склад и получатель, по-моему флаг перемещение и так говорит о том продажа это или перемещение, но это мне кажется не является ошибкой.
2. Если продавать или перемещать товар, которого вообще нет (прихода нет), то сообщение об отсутствии товара не выдается, (при этом и в регистр ничего не пишется, т.е. система ведет себя правильно)
Удачи!
-
garden, спасибо.Замечания учту
Добавлено (24.11.2011, 15:34)
---------------------------------------------
Quote (garden)
емного не понятно зачем два реквизита в расходной: Склад и получатель, по-моему флаг перемещение и так говорит о том продажа это или перемещение, но это мне кажется не является ошибкой.
.- Потому что этот вариант более приближен к реальности- если бы надо было б построить журнал с документами с отбором по ОтделуЗакупки - то в моем варианте не возникло никаких проблем или мало ли какие задачи еще нужно будет решить - всегда на будующее стараюсь продумать.А с помощьюФлага можно - автоматически открывать нужный справочник - а не выбирать сначала "Контрагенты"или "Склады". Это я в своем варианте не реализовала - но можно было. На данный момент только алгоритмы решения разбираю, а не красоту
-
Решение сырое, на доработку времени жалко так что выкладывать не буду.
Единственный совет, если кто не догадался, разнести Перемещение и Расход, при программном создании можно с помощью.
ПолучитьОперативнуюОтметкуВремени().
-
LEOON,
Интересная идея. Но функция дает на секунду больше а надо меньше. Это кроме оперативную отметку ставить в начале перемещению а потом переопределять дату текущего документа. Кроме этого придется отслеживать ситуацию перепроведения иначе документы будут все время перепрыгивать на оперативную отметку. А вреда от отнятой секунды вреда особо не видно.
-
Мой вариант
Добавлено (27.02.2012, 09:44)
---------------------------------------------
Quote (LepRiKonS)
Мой вариант
Прикрепления: Leprikons_1.33.dt(153Kb)
Только заметил что не то прикрепил
Как смогу, прикреплю свой вариант 1.08
-
Мое решение. Самое, что ломает в этой задаче, какой датой делать внутреннее перемещение? Сейчас делаю на секунду раньше документа продажи... Но вдруг это происходит в последнюю сек. дня, и к моменту Дата-1 может чего только не происходить...
Вложения:
sv_mikh_01_08.dt
-
реализовал обработку проведения Реализации и перемещения одним запросом, после чего результат запроса тупо записывается в регистр и все ))
выслушаю критику по этому поводу )
Вложения:
a_1.8.dt
-
Мой вариант решения. Вроде бы отличается от того, что я тут видел.
Выслушаю критику.
Вложения:
infactum_01-08.dt
-
Моё решение. Вот только после решения остался вопрос...
При проведении перемещения - накладываем исключительную блокировку на регистр.
При проведении списания - накладываем исключительную блокировку на регистр.
При проведении списания с нехваткой на данном складе - накладываем блокировку на регистр, из Обработки проведения (транзакция ещё не закончилась) создаём и проводим Перемещение - которое тоже накладывает блокировку, после проведения перемещения - возвращаемся в обработку проведения.
Рассматриваем третий случай.
Вопрос: почему когда я наложил исключительную блокировку при проведении реализации, последовательно вызывается создание дока перемещением с исключительной блокировкой - почему не происходит конфликт?
Проверял на Сервере.
Вложения:
Oliver_1_8.dt
-
Oliver, может быть потому что в одной транзакции делается?
А зачем у вас при списании используется Перемещение?
-
Quote
может быть потому что в одной транзакции делается?
- да делается в одной транзакции, но и блокировка действует до конца транзакции и внутри этой транзакции накладывается ещё одна блокировка (создаётся док Перемещение)... Но дело не в транзакциях а в сессии.
Объект Блокировка данных - Предназначен для явной блокировки данных от чтения или изменения другими сессиями.
Quote
А зачем у вас при списании используется Перемещение?
- условие: при продаже товара необходимо в первую очередь контролировать хватает ли товара в данной точке. Если нет - необходимо программно создать документ по перемещению недостающего товара из отдела закупок. - я понял это условие так, Вы как-то по другому?)
Вывод: Блокировка Данных действует в рамках транзакции, но на уровне сессии.
-
А зачем вот тут использовать "Попытку"
Попытка
Док.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
В каких случая вобще её используют и для чего? А то думаю на экзамене по любому спрашивать будутДобавлено (27.08.2012, 10:13)
---------------------------------------------
Oliver Ты имеешь виду то что нужно сначало делать проверку Если перемещение то Один блок ,иначе Два блока ? (только так как ты сделал нельзя вроде бы, нужно две различные блокировки писать с разными отделами)
-
Pavlyk,
Quote
В каких случая вобще её используют и для чего?
посмотри (в режиме 1С Предприятия) два варианта:
вариант второй:
Code
Попытка
а = 1/0;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Quote
Ты имеешь виду то что нужно сначало делать проверку Если перемещение то Один блок ,иначе Два блока ? (только так как ты сделал нельзя вроде бы, нужно две различные блокировки писать с разными отделами)
- не верно!
Можно неограниченное число блокировок в рамках одной транзакции (неважно явной или неявной) - и ошибки не будет. А вот срабатывать она/они (удерживать монопольный доступ на ресурсы) будет на все сессии (подключения к информационной базе) кроме той в которой в которой установлена блокировка.
-
Quote (Oliver)
- условие: при продаже товара необходимо в первую очередь контролировать хватает ли товара в данной точке. Если нет - необходимо программно создать документ по перемещению недостающего товара из отдела закупок. - я понял это условие так, Вы как-то по другому?)
Задачу не решал, видимо не входила в билеты... Условие понял так:
1. Перемещение делается тоже Расходной накладной.
2. Документ для перемещения может создаваться программно при продаже (то о чём вы говорили).
3. По идее расходная при продаже должна сразу блокировать остатки по торговой точке и по отделу закупок. Тогда имеет смысл создавать документ перемещения. Ибо если он будет создан позже и сам будет накладывать блокировку, уже товара может и не стать в отделе закупок. И как следствие проведение расходной "сломается" в неподходящий момент.
Ну как вы заметили я немного ушёл от темы, вы рассматриваете пересечение блокировок, я же предлагаю сделать по-другому.
-
Мой вариант
Вложения:
_1.8__Andy.dt
-
Интересный факт:
ВЫБРАТЬ
СУММА(ЕСТЬNULL(Т.СуммаОстаток, 0)) КАК СуммаОстаток
ИЗ
(ВЫБРАТЬ
ВзаиморасчетыОстатки.СуммаОстаток КАК СуммаОстаток
ИЗ
РегистрНакопления.Взаиморасчеты.Остатки(, ) КАК ВзаиморасчетыОстатки
ГДЕ
1 = 2) КАК Т
Даст СуммаОстаток = Null
ВЫБРАТЬ
ВзаиморасчетыОстатки.СуммаОстаток КАК СуммаОстаток
ИЗ
РегистрНакопления.Взаиморасчеты.Остатки(, ) КАК ВзаиморасчетыОстатки
ГДЕ
1 = 2
Этот запрос ничего не возвращает - ни строчки
а если ничего просуммировать то будет Null?
-
Большая часть решений некорректна поскольку в задачи сказано:
"При продаже товара необходимо в первую
очередь контролировать хватает ли товара в данной торговой точке. Если нет - необходимо программно создать документ по перемещению недостающего товара из отдела закупок
"
Из этого следуют что должен быть документ который можно создавать вручную или который создается программно при нехватки товара в проведении документа Расходная
Единственное что смущает так это:
1) Дата программно создаваемого документа Перемещение
2) Дата среза остаток в документе Расходная после созданного документа Перемещение
Вложения:
_1.08-ZolteR-.dt
-
ZolteR, в задаче явно указано, что перемещение должно отражаться документом Расходная а у вас отдельный документ. Кто мешает просто сделать 2 операции для расходной: Перемещение и Продажа?
Если НЕ Выборка.Количество() - можно было проверять результат запроса методом Пустой()
Вместо Сообщить в обработке провер. заполнения лучше СообщениеПользователю
Дата вновь создаваемого документа лучше Дата-1 чем при чтении остатков ВидГраницы.Включая
перед записью пустого набора нужно БлокироватьДляИзменения = Истина;
В обработке проведения в Расходной 2 запроса - вообще не айс, т.к. легко решается одним.
Блокировка устанавливается только перед вторым запросом, в то же время в первом запросе читаются остатки, следовательно, могут быть считаны неверно.
Оформление отчета не совсем как на картинке.
-
Прикрепляю свое решение. Критика и вопросы приветствуются.
Вложения:
fimanich_01_08.dt
-
Выкладываю свой вариант решения этой задачи, может кому будет интересно.
Вложения:
KTT_1_8.dt
-
Вроде даже не сложная была. Подскажите как сделать шапку правильную как в задании без макета?
Добавлено (12.06.2013, 13:13)
---------------------------------------------
Цитата (TuMyP1985)
Выкладываю свой вариант решения этой задачи, может кому будет интересно.
В блокировке у вас блокируется вся номенклатура. Между тем это ИМО неверно. Если просто продажа - надо блочить номенклатуру по отделу откуда идет продажа, если же еще перемещение будет - то оба отдела надо блокировать. Но точно не всю.
Вложения:
bilateral_upr_8.dt
-
С блокировками понял, спс.
С отчетом - вот предлагаю 2 варианта (2 схемы компоновки данных в отчете), думаю на экзамене первый вариант бы устроил.
Вложения:
___1_8_.erf
-
Цитата (TuMyP1985)
С отчетом - вот предлагаю 2 варианта
В том и другом варианте отчета шапка все равно не такая Там пустые места под названия ресурсов есть (всего три строки), а по заданию надо шапка с одной строкой. Макета при помощи сделать как это знаю. А вот без него как... ХЗ.
-
мой вариант решения, алгоритм рабоатет правильно, однако не удалось настроить отчет как у условии задачи, все сажусь изучать курс по СКД, кстати у bilateral в блокировках перепутаны местами параметры
Код
ЭлементБлокировки.УстановитьЗначение(Отдел,"Отдел");
ЭлементБлокировки.УстановитьЗначение(Справочники.Отделы.ОтделЗакупок,"Отдел");
Добавлено (20.06.2013, 20:08)
---------------------------------------------
Цитата (artfa)
все сажусь изучать курс по СКД
после изучения курса по СКД настроил отчет как в услвоии задачи, bilateral - кроме как с помощью макета настроить то же не смог
Вложения:
1_8.dt
-
исправленное решение
Вложения:
1.8.dt
-
Доброго времени суток) Выкладываю свое решение. Если у кого есть время, посмотрите пожалуйста. Хотелось бы, чтобы замечаний не было, но такое большая редкость, так что с удовольствием выслушаю критику
Вложения:
ReDvAlL_1.8.dt
-
ReDvAlL, ну давайте я рискну покритиковать :). Правда по мелочам
- зачем вы делаете группировку по номенклатуре - в процедуре ВыполнитьПеремещение. Соединение 1 в 1.
- при отработке исключения полезно в текст сообщения включать ОписаниеОшибки()
- себестоимость быстрее писать в запросе
- наценки по отделам лучше бы задавать через РС (IMHO)
А вот и не мелочь.
- сумма при перемещении считается не верно. Более того при последовательном проведении удалось выйти в минус. Попробуйте сами.
Купите 1 по 100, переместите в отдел 20
купите еще раз 100.
Теперь пробуем продать из отдела 10. Программа начинает просить отдел закупа. После установки отдела закупа и снятия галки на перемещение получаем расход из отдел 10 по 132 без перемещения.
- при Вашем подходе блокировки только на место отгрузки недостаточно, поскольку анализируются остатки не только там.
ну вот. как то так. Если что строго не судите - я первый раз делал анализ тут.
-
Alexander, спасибо за комментарии Да, есть такой косяк...Надо будет исправить
-
Мое решение. Сразу скажу, ветку не читал, другие решения не смотрел. Делал сам.
По моему полностью рабочее решение получилось. Задача показалась легкой по сравнению со всеми предыдущими.
Вложения:
YFred_1.8.dt
-
Наконец-то возобновил решение задач. Кто сможет посмотрите. Жду суровой критики.
Добавлено (26.04.2014, 16:27)
---------------------------------------------
YFred, посмотрел твое решение. Вот несколько замечаний:
1. Думаю блокировать весь регистр "ОстаткиНоменклатуры" только по номенклатуре очень жестоко. Ведь остальные торговые точки не должны ждать пока с этот документ не отработает. Думаю нужно блокировать по списку номенклатуры + подразделение.
2. Неправильно работает контроль остатков. Если у торговой точки запрашиваемого товара вообще нет, зато в отделе закупок его предостаточно, то документ перемещения не создается, а движения уходят в минус.
3. Полагаю неправильно контролировать остаток по отделу закупок в момент проведения документа, а создавать документ перемещения секундой раньше. Если например пройдет приходник, и в этой же секунде расходник, который потребует создать документ перемещения, а звезды сойдутся так что секундой раньше товара было недостаточно, то программа некрасиво ругается.
Пока вроде все.
Добавлено (26.04.2014, 16:36)
---------------------------------------------
Кстати, забыл спросить. В моем решении, если товара недостаточно, и документ перемещения повестись не может, то программа выдает сообщение: "В данной транзакции уже происходили ошибки". Это думаю приведет пользователя в восторг! Поэтому если кто знает подскажите как решить эту проблему.
Вложения:
Demy_1_8.dt
-
Мой вариант
Вложения:
Kain_1_8.dt
-
Цитата Demy (
)
YFred, посмотрел твое решение. Вот несколько замечаний: 1. Думаю блокировать весь регистр "ОстаткиНоменклатуры" только по номенклатуре очень жестоко. Ведь остальные торговые точки не должны ждать пока с этот документ не отработает. Думаю нужно блокировать по списку номенклатуры + подразделение. 2. Неправильно работает контроль остатков. Если у торговой точки запрашиваемого товара вообще нет, зато в отделе закупок его предостаточно, то документ перемещения не создается, а движения уходят в минус. 3. Полагаю неправильно контролировать остаток по отделу закупок в момент проведения документа, а создавать документ перемещения секундой раньше. Если например пройдет приходник, и в этой же секунде расходник, который потребует создать документ перемещения, а звезды сойдутся так что секундой раньше товара было недостаточно, то программа некрасиво ругается.
1. Думаю это верно, но тогда возникает вопрос как заблокировать регистр по номенклатуре и по 2м складам? Не понял как это сделать, подскажите.
2. Косяк исправил.
3. А если создавать документ перемещения датой документа, то он получается раньше документа продажи, что тоже не есть хорошо. Или я не прав?
Вложения:
4659047.dt
-
Решил задачу, вроде все работает, если кто-нибудь сможет проверьте пожалуйста.
Вложения:
ksandr_1_8.dt
-
Цитата ksandr
Решил задачу, вроде все работает, если кто-нибудь сможет проверьте пожалуйста.
Не наложены блокировки. Если сначала делаешь запрос к остаткам, а потом списываешь, то надо сначала наложить блокировку. Проблема копеек не решена. Запрос в цикле - супер ошибка. Дата документа, которым подгружаешь остаток с отдела закупа, скорее всего должна быть не равна дате документа, которым продаешь.
Вложения:
shlaev_1_8.dt
-
Прошу протестировать моё решение на предмет ошибок или неоптимальности кода.
https://yadi.sk/d/jAFnlmNSZLEAM
Заранее благодарю.Добавлено (09.08.2014, 18:01)
---------------------------------------------
Если кто подскажет, как наложить блокировку сразу на два подразделения при перемещении - буду очень признателен!
-
Решил своим способом. С помощью пакета запроса получил список нехватки товара и список для списания.
Блокировки на перемещение и продажу по разным отделам.
http://my-files.ru/u306ij
Буду презнателен за комментарии. Заранее благодарю.
-
Подскажите какую дату указать для программно создаваемого документа перемещения (когда на точке не хватат товара и требуется его переместить из закупок). Вариант типа ДокПеремещение.Дата = Дата-1 мне не нравиться, т.к. если есть еще документы продажи в эту же Дату, то будет нарушена последовательность документов и соответственно может измениться себестоимость продажи. Каким образом организовать запись документов по перемещению и продаже, чтобы не была нарушена последовательность документов на оси времени, т.е. чтобы сначала шло перемещение, а потом продажа, и между ними никогда не существовали другие документы????
-
вариант решения делал сам, правда предварительно просмотрел предложенные ранее варианты.
использовал при проведении РасходнойНакладной признак "Перемещение".
то есть из РасходнойНакладной для продажи, в случае недостатка товара на Точке создается
РасходнаяНакладная с признаком Перемещение=Истина и Дата=Дата-1, этот новый документ сохраняется и проводится.
после возвращаемся к Накладной на продажу и проводим и ее.
-
Попутно хочу ответить на вопрос по поводу "дата=дата-1"
мне такой вариант кажется допустимым в рамках задачи 1.08
Все же она довольно искуственно придуманная . И вариант с дата-1сек - практически спорных ситуаций не создаст.
-------
далее часто возникающий вопрос по поводу копеек - мне кажется формула
Движение.Сумма = Выборка.Количество/Выборка.КоличествоНаТочке*Выборка.СебестоимостьНаТочке;
эту проблему легко решает. Здесь важен именно порядок указанных полей.
вначале идет деление. И если оно дает 1, то списывается ВЕСЬ остаток
-
еще в Теме был вопрос по поводу "как наложить блокировку сразу на два подразделения"
попробовал в своем решении и его решить. использовал такой "корявый" вариант
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ТабСписЗначений = СписокНоменклатуры.Выгрузить( ,"Номенклатура");
ДобЗначТовара = ТабСписЗначений[0].Номенклатура;
ТабСписЗначений.Колонки.Добавить("Подразделение",,"Подразделение");
ТабСписЗначений.ЗаполнитьЗначения(Подразделение,"Подразделение"); /// реквизит в РасходнаяНакладная
НовСтр=ТабСписЗначений.Добавить();
НовСтр.Номенклатура=ДобЗначТовара;
НовСтр.Подразделение=ОтделЗакупок; //// это константа ОтделЗакупок = Константы.ОтделЗакупок.Получить();
ЭлементБлокировки.ИсточникДанных = ТабСписЗначений;
//ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Подразделение", "Подразделение");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
Блокировка.Заблокировать();
-
Не вижу смысла сразу ставить блокировку на 2 отдела. Все блокируется по мере необходимости. Единственно, что у меня не получилось, дак это убрать сообщение "В данной транзакции уже произошла ошибка" в случае, когда есть превышение остатков при программном создании Перемещения. На сколько это критично на экзамене?
-
Посмотрите пжл на мое решение задачи!
-
IMHO
-
Прощу оценить.
-
Господа, кому не сложно, проверьте мое решение пожалуйста. Буду рад конструктивной критике. Пытался сделать через "ПолучитьОперативнуюОтметкуВремени", но по итого все же пришел к варианту дата-1 (при не оперативном проведении документа много заморочек). Думаю, что на экзаменационной задаче это будет не критично.
-
Просьба посмотреть решение задачи.
-
Решаю задачу. У меня один регистр. ОстаткиНоменклатуры. Изм. - Номенклатура, Отдел. Рес. Количество, Стоимость. Я не совсем поняла что мы пишем в стоимость при продаже. Себестоимость по отделу или стоимость по которой продали? Я везде писала среднюю себестоимость. И теперь из-за этих наценок у меня регистр не выходит в ноль.. Подскажите, в чем моя ошибка?
Базу на всякий случай прикрепляю.
-
Если выполнять задания с учетом того, что такая задача должна отрабатываться на 100% во всех случаях в 1С не решаемая, так как нельзя передвигать моменты внутри секунды или я о способе двигать один документ относительно другого не знаю. Если я ошибаюсь то плиз скажите как решать задачу.
Причины:
1. Если мы используем ДатаПеремещения = ДатаРеализации -1. То данный способ у нас не учитывает возможность того, что в секунду ДатаРеализации в отдел закупок может поступить необходимый товар документом расположенным левее на оси времени, чем документ продажи. И естественно что док. перемещения не проведется так как он должен быть между док. поступления и реализации.
2. Если даты равны. то продажа не проведется так как она будет стоять левее документа перемещения на оси времени.
3. Если ДатаПеремещения = ДатаРеализации, а ДатаРеализации = ДатаРеализации + 1 то не учитываются документы проведенные в туже секунду, что и ДатаПеремещения и "ДатаРеализации + 1".
Но так как такая задача существует - то плиз кто сдал этот экзамен скажите какое решение приемлемо для сдачи.
Я больше склоняюсь к варианту 2. если документ перемещения будет проведен в ту же сек то и проверку остатков делать не надо в документе продажи а тупо его провести и отчет будет нормально выглядеть так как там период по секундам. Недостаток решения - если получать остатки на момент времени документа продажи то они будут "-" и невозможность нормально использовать последовательность.
Решаю задачу. У меня один регистр. ОстаткиНоменклатуры. Изм. - Номенклатура, Отдел. Рес. Количество, Стоимость. Я не совсем поняла что мы пишем в стоимость при продаже. Себестоимость по отделу или стоимость по которой продали? Я везде писала среднюю себестоимость. И теперь из-за этих наценок у меня регистр не выходит в ноль.. Подскажите, в чем моя ошибка?
Базу на всякий случай прикрепляю.
Себестоимость по отделу(торговой точке). В разрезе чего он не выходит в ноль, напишите подробнее.
Схема такая должна быть:
Приходный ордер: Приход ОтделЗакупок Утюг 10 шт 100 руб
Перемещение: Расход ОтделЗакупок Утюг 7 шт 70 руб; Приход торговая точка Утюг 7 шт 77 (70 + 7) (если наценка 10 проц)руб
Продажа: Расход торговая точка Утюг 7 шт 77 руб
ps покритикуйте, плиз, моё решение
-
Вот моё решение. Ни на чьём решении не основывалась, поэтому, может, чем-то от всех отличается)
Прокомментируйте/покритикуйте, пожалуйста.
З.Ы. Вопрос: возможно без макета сделать отчет точь-в-точь как в условии?? Конкретно касательно заголовков - например, чтобы было написано просто Приход, а не Приход, а под ним - Количество, Стоимость? И как сделать, чтобы поле, по которому группировка - в данном случае Склад - выводилась в отдельной колонке (как в условии)?
-
Прокомментируйте ребята пожалуйста, кому не сложно :) не уверен что с транзакционной блокировкой все верно ыы :-[
-
Если выполнять задания с учетом того, что такая задача должна отрабатываться на 100% во всех случаях в 1С не решаемая, так как нельзя передвигать моменты внутри секунды или я о способе двигать один документ относительно другого не знаю. Если я ошибаюсь то плиз скажите как решать задачу.
Причины:
1. Если мы используем ДатаПеремещения = ДатаРеализации -1. То данный способ у нас не учитывает возможность того, что в секунду ДатаРеализации в отдел закупок может поступить необходимый товар документом расположенным левее на оси времени, чем документ продажи. И естественно что док. перемещения не проведется так как он должен быть между док. поступления и реализации.
2. Если даты равны. то продажа не проведется так как она будет стоять левее документа перемещения на оси времени.
3. Если ДатаПеремещения = ДатаРеализации, а ДатаРеализации = ДатаРеализации + 1 то не учитываются документы проведенные в туже секунду, что и ДатаПеремещения и "ДатаРеализации + 1".
Но так как такая задача существует - то плиз кто сдал этот экзамен скажите какое решение приемлемо для сдачи.
Я больше склоняюсь к варианту 2. если документ перемещения будет проведен в ту же сек то и проверку остатков делать не надо в документе продажи а тупо его провести и отчет будет нормально выглядеть так как там период по секундам. Недостаток решения - если получать остатки на момент времени документа продажи то они будут "-" и невозможность нормально использовать последовательность.
Решаю задачу. У меня один регистр. ОстаткиНоменклатуры. Изм. - Номенклатура, Отдел. Рес. Количество, Стоимость. Я не совсем поняла что мы пишем в стоимость при продаже. Себестоимость по отделу или стоимость по которой продали? Я везде писала среднюю себестоимость. И теперь из-за этих наценок у меня регистр не выходит в ноль.. Подскажите, в чем моя ошибка?
Базу на всякий случай прикрепляю.
Себестоимость по отделу(торговой точке). В разрезе чего он не выходит в ноль, напишите подробнее.
Схема такая должна быть:
Приходный ордер: Приход ОтделЗакупок Утюг 10 шт 100 руб
Перемещение: Расход ОтделЗакупок Утюг 7 шт 70 руб; Приход торговая точка Утюг 7 шт 77 (70 + 7) (если наценка 10 проц)руб
Продажа: Расход торговая точка Утюг 7 шт 77 руб
ps покритикуйте, плиз, моё решение
Код не смотрел, но при проведении расходной накладной, с указанием количества большего, чем есть в точке продаж выскакивает сообщение: "Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.РасходнаяНакладная.МодульОбъекта(165)}: Ошибка при вызове метода контекста (Записать)
ДокументПеремещения.Записать(РежимЗаписиДокумента.Проведение);
по причине:
Не удалось провести: "Расходная накладная"!"
-
Здравствуйте! Скажите, где создавать документ перемещение? Как я понимаю можно сделать следующим образом: сначала мы делаем движение, затем проверяем остатки, если не хватает то создаем и проводим документ "перемещение", т.е. как я понимаю надо в цикле обхода выборки создавать новый запрос с контролем остатка в отделе "Закупка" и создавать и проводить документ? но ведь запрос в цикле не есть хорошо. Или каким то другим образом это можно реализовать?
Сам готовлюсь недавно, поэтому как правильно сделать сказать не могу, можно сделать так: получить остатки по точке продаже и отделу закупа (в сумме) и уже по ним принять решение проводить документ или нет; затем сформировать (по этому же запросу) список номенклатуры, по которой надо сделать перемещение и провести его, затем уже классическое формирование движений по текущему документу (через новый запрос).
-
Здравствуйте! Скажите, где создавать документ перемещение? Как я понимаю можно сделать следующим образом: сначала мы делаем движение, затем проверяем остатки, если не хватает то создаем и проводим документ "перемещение", т.е. как я понимаю надо в цикле обхода выборки создавать новый запрос с контролем остатка в отделе "Закупка" и создавать и проводить документ? но ведь запрос в цикле не есть хорошо. Или каким то другим образом это можно реализовать?
Сам готовлюсь недавно, поэтому как правильно сделать сказать не могу, можно сделать так: получить остатки по точке продаже и отделу закупа (в сумме) и уже по ним принять решение проводить документ или нет; затем сформировать (по этому же запросу) список номенклатуры, по которой надо сделать перемещение и провести его, затем уже классическое формирование движений по текущему документу (через новый запрос).
Я по новому методу списания делаю, т.е. сначала делаю движения, а затем новым запросом проверяю остатки, прохожу по каждой строке, если в какой то строке есть "нехватка"(это выбор из условия в запросе, когда количествоостаток меньше количества введеного в документе), то булевой переменной "нехватка" присваиваю "Истина", затем условие: если нехватка тогда... и вызываю функцию создания и записи нового документа.
-
Доделал) Посмотрите моё решение пожалуйста, скажите на что нужно было накладывать блокировки? Я совсем не давно начал изучение 1с с блокировками еще не разобрался)
-
Большое спасибо!!!
Не могли бы объяснить.
Если режим проведения не оперативный, почему не ставится блокировка?
Почему не ставится блокировка на отдел "Закупка" ведь возможно, что одновременно, кто то может списать товар до того как вы проведете документ?
-
Выкладываю свое решение задачи. По-моему учел все. Секунду у новой расходной отнимать не пришлось. Готов к критике.
-
Нашел ошибку во втором запросе. Добавил "левое" соединение таблицы документа с новой расходной, иначе получались лишние строки если превышение количества не по каждой номенклатуре.
-
мое решение
-
мое решение
Всё на мой взгляд новичка хорошо, кроме, разве что в модуле объекта Расходной накладной при вызове процедуры ВыполнитьПеремещение нужно было передавать менеджер временных таблиц, в вашем случае бедный Список формируется аж 3 раза: сначала из документа группируется, затем просто выбирается, затем (в процедуре ВыполнитьПеремещение) формируется из таблицы значений.
-
Жду критики.
-
Прошу покритиковать решение (я новичок, не знакомый ни с одной типовой конфиурацией, ковыряю платформу по книжкам), заранее прошу прощения, что без блокировок и отчета.
-
Всем привет. Сделано полностью вместе с отчетом.
Вопрос по отчету:
Уже не в первой задаче в поле "Начальный остаток"(например) нужно отобразить значения количества и суммы, причем заголовка этих ресурсов быть не должно(короче отчет как в книжке). Как это сделать?
-
Всем привет. Сделано полностью вместе с отчетом.
Вопрос по отчету:
Уже не в первой задаче в поле "Начальный остаток"(например) нужно отобразить значения количества и суммы, причем заголовка этих ресурсов быть не должно(короче отчет как в книжке). Как это сделать?
Делается через Макет. Создается одна область заголовка группировки. И по области группировки на каждую группировку таблицы.
Помимо этого следует в настройках отключить макет оформления, итогов, автопозицию ресурсов и фиксацию
-
Всем привет. Сделано полностью вместе с отчетом.
Вопрос по отчету:
Уже не в первой задаче в поле "Начальный остаток"(например) нужно отобразить значения количества и суммы, причем заголовка этих ресурсов быть не должно(короче отчет как в книжке). Как это сделать?
Делается через Макет. Создается одна область заголовка группировки. И по области группировки на каждую группировку таблицы.
Помимо этого следует в настройках отключить макет оформления, итогов, автопозицию ресурсов и фиксацию
Можешь скинуть свой вариант, как то плохо въезжаю ???
-
Всем привет. Сделано полностью вместе с отчетом.
Вопрос по отчету:
Уже не в первой задаче в поле "Начальный остаток"(например) нужно отобразить значения количества и суммы, причем заголовка этих ресурсов быть не должно(короче отчет как в книжке). Как это сделать?
Делается через Макет. Создается одна область заголовка группировки. И по области группировки на каждую группировку таблицы.
Помимо этого следует в настройках отключить макет оформления, итогов, автопозицию ресурсов и фиксацию
Можешь скинуть свой вариант, как то плохо въезжаю ???
Потренироваться можно, а на экз не стоит терять время на это, достаточно изменить заголовки.
-
Потренироваться можно, а на экз не стоит терять время на это, достаточно изменить заголовки.
Иначе не получится та форма отчёта, что предполагается. Шапка таблицы будет не такая. Хотя тут в каком настроении преподаватель будет. Так свой макет всего лишь +3 минуты добавляет
-
Можешь скинуть свой вариант, как то плохо въезжаю ???
Вариант из задачи 1.10.
-
Всем привет. Сделано полностью вместе с отчетом.
Вопрос по отчету:
Уже не в первой задаче в поле "Начальный остаток"(например) нужно отобразить значения количества и суммы, причем заголовка этих ресурсов быть не должно(короче отчет как в книжке). Как это сделать?
Подкорректировал
-
Мой вариант :)
Выбор продажа или перемещение - функциональные опции.
Движения нового документа записала сразу в регистр. Вроде все работает.
Критика приветствуется :) :)
-
Тут все минимально, аскетично. Пример Натальи очень перегружен. Вариант jonik_1.8.dt вовсе не работает (деление на ноль). Я не понял, почему блокировки регистров работают не пересекаясь при программном создании и проведения перемещения в обработке проведения реализации.
-
И я тоже)
-
И я тоже)
У вас не создается автоматически документ "расходная накладная" с видом "перемещение" по условию задачи. Вместо этого все требуемые движения создаются в одной расходной накладной. А зачем такая конструкция в запросе "1 + 0.01 * "? Видел такое еще у кого-то.
-
Всех приветствую.
Предлагаю свой вариант. За время экзамена навряд ли успел бы.
-
Всем привет. выкладываю свое решение, по критикуйте, с отчетом особо не заморачивался.