-
Кто решил ?
-
Quote (pershinsergei)
жду комментариев по поводу решения.
Переделал отчет продажи
не скачивается Вот мое решение
Вложения:
1_3_u2006.dt
-
U2006 в отчёте продажи при использовании вложенных запросов ты не учитываеш тип движения. Должны быть только расходы.
-
Quote (petrov86)
U2006 в отчёте продажи при использовании вложенных запросов ты не учитываеш тип движения. Должны быть только расходы.
В смысле расходы?. Я беру данные из оборотного регистра продажи, там физически нет типа движений.
-
Сори. Был не прав.
-
Отчет, вроде, попроще получился. Хотя в его оптимальности я очень совневаюсь.
Вложения:
1.03.dt
-
Выкладываю свое решение этой задачи. Отчет сделал. Бывалые, если кто знает как сделать подобный отчет через наборы данных, выложите пожалуйста пример.
Меня удивляет почему у некоторых людей в решении 2 отчета? Ведь достаточно легко сделать один отчет с двумя вариантами - 1 продажи -2 второй остатки.
Вложения:
Task_1_3.dt
-
Danan, а на работу при нулевых остатках проверял? Вот это:
"ВЫБОР
КОГДА Вт.НоменклатураВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
И ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) > 0
ТОГДА Вт.Количество / ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) * ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0)
ИНАЧЕ 0
| КОНЕЦ КАК Стоимость," будет работать?
Добавлено (20.10.2010, 21:03)
---------------------------------------------
Danan,
И вместо "Номенклатура В (ВЫБРАТЬ Вт.Номенклатура ИЗ Вт) И Партия В (ВЫБРАТЬ Вт.Партия ИЗ Вт)" можно использовать такую конструкцию "(Номенклатура,Партия) В (ВЫБРАТЬ Вт.Номенклатура, Вт.Партия ИЗ Вт)"?
Добавлено (20.10.2010, 21:17)
---------------------------------------------
Я может глупую вещь сейчас скажу... Но, а зачем вообще нужен регистр Продажи?
-
Danan, это не один отчет и по смыслу они разные, поэтому и разделяют. Или сразу выбрать его из списка или выбрать твой плюс ещё искать его в вариантах, пользователь вообще не станет его искать и подумает что его нет
А я вот не понимаю почему все делают проверку заполненных данных в процедуре ПередЗаписью когда можно просто ограничить выбор неправильных данных.
Например Номенклатура, поставить реквизиту Параметры выбора так Отбор.Услуга(Ложь) и услугу уже не указать.
Для реквизита партия поставить проверку заполнения - "Выдавать ошибку"
-
Мое решение. Свои предыдущие комменты беру обратно. Видимо при первом взгляде на эту задачу я не понял ее сути. В предлагаемом варианте есть некоторые отличия от уже представленных решений, поэтому думаю стоит взглянуть.
Вложения:
_1_3.dt
-
Vlastmen,
1)Цитирую из сборника 3 редакции задача 1.3.:
"Необходимо построить отчет по анализу продаж товаров за период и остаткам товара на указанную дату". Это условие задачи можно по разному трактовать, но если мне не изменяет память то в требованиях к экзамену проверяется умение пользоваться вариантами отчета в скд. К тому же пользователи разные бывают, а варианты отчета очень полезная штука.
2) Опять же цитата из того же источника:
"И услуги и товары могут указываться в одной табличной части". По этому когда товар проверяется заполнение партии, а для услуг партии не нужны. Matcoder, Смотрел твое решение, вот мои комментарии:
1) Механизм списание, на мой взгляд два раза дергать таблицу остатков в запросе не целесообразно, если можно воспользоваться итогами.
2) Отчет по продажам класс! Если конечно работает(не проверял, смотрел только схему компоновки данных).
-
Matcoder,
не качается
-
Matcoder, не очень понял зачем в ОбработкеПроведения в расходной используется двойное соеденение таблиц, можно обойтись одним. В отчёте продажи можно использовать один набор данных (один набор данных - один запрос к базе данных)
Моё решение:
Вложения:
2762986.dt
-
Quote (Vlastmen)
Например Номенклатура, поставить реквизиту Параметры выбора так Отбор.Услуга(Ложь) и услугу уже не указать.
Для реквизита партия поставить проверку заполнения - "Выдавать ошибку"
услуг в табличной части документа не будет, или не так понял? можно базу с примером?
-
Quote (Gyd)
услуг в табличной части документа не будет, или не так понял? можно базу с примером?
Допустим у нас справочник номенклатура содержит реквизит Услуга типа булево, если истина то значит услуга, так вот в табличной части той же накладной к примеру, реквизиту Номенклатура устанавливаем Параметры выбора Отбор.Услуга(Ложь),
и при её выборе будут отображаться только та номенклатура у которой Услуга = Ложь
-
Quote (Vlastmen)
Допустим у нас справочник номенклатура содержит реквизит Услуга типа булево, если истина то значит услуга, так вот в табличной части той же накладной к примеру, реквизиту Номенклатура устанавливаем Параметры выбора Отбор.Услуга(Ложь),
и при её выборе будут отображаться только та номенклатура у которой Услуга = Ложь
Непрокатит, пользователь при выборе отменяет наш отбор и выбирает услугу, и вот услуга в списке номенклатуры
-
мой вариант задачи:
- проще (на мой взгляд) сделал отчет Продажи
- так и не понял как два отчета объединить в один
- в форме Расходной можно выбрать партию у услуги, не пойму как закрыть жду ваших замечаний
Вложения:
Gyd_1_3.dt
-
Gyd, вас не смущает, что услуга при проведении ПриходнойНакладной попадает в ОстаткиНоменклатуры?
Quote (AndreiPiter)
в форме Расходной можно выбрать партию у услуги, не пойму как закрыть
с формами не нужно заморачиваться (это вам в последний раздел задачника).
-
Quote (AndreiPiter)
Gyd, вас не смущает, что услуга при проведении ПриходнойНакладной попадает в ОстаткиНоменклатуры?
Да, вы правы. Думаю тут имеет смысл запретить в форме документа выбор услуги, а не при проведении, так как услуги упоминаются для продаж, а не для поступлений.
Quote (AndreiPiter)
с формами не нужно заморачиваться (это вам в последний раздел задачника)
да просто интересно как это сделать.
-
Quote (Gyd)
Да, вы правы. Думаю тут имеет смысл запретить в форме документа выбор услуги, а не при проведении.
Интересно как?! (не просто так спрашиваю
-
Quote (AndreiPiter)
Интересно как?! (не просто так спрашиваю wink
первое что приходит в голову: в процедуре ПриИзменении поля Номенклатура запрет на выбор услуг. Возможно есть решение более изящное через настройки формы.
-
Мой Вариант.
Вопрос:
Как правильней определять расчетные параметры отчёта "Продажи" срок и интервал, из регистра ПРодажи по полю период, или анализируя расходные накладные?
Вложения:
_1.03.dt
-
Gulf_Stream, На мой взгляд очень хорош отчет у Matcoder. На 2-й странице в первом комментарии я писал об этом.
Quote (Gyd)
- так и не понял как два отчета объединить в один
Использовать наборы данных и варианты отчета. У меня в решении отчет так и сделан.
-
Посмотел, действительно хорошо, только не понятно зачем разворачивать регистр по регистратору:
Code
РегистрНакопления.Продажи.Обороты(, , Регистратор, ) КАК ПродажиОбороты
Когда логичнее рабивать по дням. И зачем расчитываются некоторые поля в первом запросе, которые потом не используются.
-
На это не обратил внимание, я думаю что лучше узнать у автора.
-
Не помню. Давно дело было... Наверное косяк.
-
Добрый день.
Бывалые, посмотрите плиз мой вариант.
Вложения:
1.03.Lusmith.dt
-
Начал подготовку к экзамену. проверьте плиз как решил задачу.
Вложения:
Para_1987_1.03.dt
-
Зачем некоторые в проведении расходной накладной получают все остатки номенклатуры а не по конкретной партии? И потом проверяют больше ли количество в накладной, чем всего товара по всем партиям? Ведь в задаче сказано, что "в случае, если товара по указанной партии не хватает, документ не проводится и выводится соответствующее сообщение..."
Ещё не понятно зачем делать отбор по виду номенклатуры в ТЧ расходной накладной. Об этом не говорится в условии задачи. Для товаров указывайте партию и всё.
-
Сделал. Хотя, есть сомнения насчет отчета по продажам. Думаю, можно сделать проще. Но, для выбора правильного подхода в короткий интервал времени, нужно быть либо очень умным, либо очень опытным Или то и другое вместе
Добавлено (15.04.2011, 12:26)
---------------------------------------------
CHEBURASHKA, когда на эту задачу всего час, обычно на мелочи внимания не обращаешь. Хотя да, в некотором смысле решение не совсем оптимальным получается
Вложения:
Gr0ck_Task1_3.dt
-
И меня гляньте кто сможет. Буду ждать!
Вложения:
1-03_garden.dt
-
Прошу просмотреть мой вариант.
Заранее сердечное спасибо.
Вложения:
ikem_1_3.dt
-
Коллеги! Прошу посмотреть мое решение задачи 1.3. Лично мне задача понравилась, потребовалось освежить в памяти о функции как РАЗНОСТЬДАТ()
Добавлено (21.06.2011, 23:06)
---------------------------------------------
Ikem,
А зачем Вы пишите
Сообщение.Текст = "У номенклатуры "+ВыборкаДетальныеЗаписи.Номенклатура+" не указан параметр Партия."; ?
В регистре накопления ОстаткиНоменклатуры, для измерения Партия, поставьте флажок "Запрет незаполненных значений" и Проверка заполнения = ВыдаватьОшибку
И еще в отчете Продажи, я интервал округлял .. не знаю нужно это или нет
Вложения:
DoctorRoza_1_3.dt
-
Подскажите пожайлуста, если в конфигурации каркасной стоит режим управления блокировок - автоматический, надо писать код под это свойство, ну то есть НЕ писать БлокироватьДляИзменения() при считывании остатков или нужно поменять это свойство в самой конфигурации и блокировать в коде? Что правильнее? В видеолекции по разбору атестации в коде блокируют.
-
kravius,
режим управления блокировок нужно поменять на управляемый
http://forum.chistov.pro/index.php?topic=1310.msg13626#msg13626
http://forum.chistov.pro/index.php?topic=1310.msg14327#msg14327
-
Вот мое решение 1.3. После прочтения всех статей сделала вывод: что если нужно контролировать остатки и расчитывать себестоимость в одной ОбработкеПроведения НОВЫЙ механизм проведения использовать не стоит, поэтому сделала по "классике". Прошу написать отзывы, кому не лень
Вложения:
0785662.dt
-
Quote (kravius)
Прошу написать отзывы, кому не лень
Code
Если ВыборкаНом.Номенклатура.Услуга = истина Тогда
продолжить;
КонецЕсли;
Вот этого у вас в принципе не должно быть в выборке. Во-первых вы устанавливали фильтр на номенклатуру (искать в регистре НЕ услуги), во-вторых - у вас в регистре остатков врятли будут находится услуги.
-
Quote (Gyd)
Вот этого у вас в принципе не должно быть в выборке. Во-первых вы устанавливали фильтр на номенклатуру (искать в регистре НЕ услуги), во-вторых - у вас в регистре остатков врятли будут находится услуги.
Согласна. Запрос переделала немного после того, как написала обработчик. Исправила. А в целом как?
-
Gyd, kravius
По поводу услуг не все так просто, в Расходной услуги могут быть легко и их надо записывать в РН Продажи.
Если ВыборкаНом.Номенклатура.Услуга = истина Тогда
1. Ну лучше просто Если Выборка.Номенклатура.Услуга Тогда
2.Через точку к услуге не нужно обращаться (тк неявный запрос), выбирайте это поле в запросе.
Quote
Номенклатура В (ВЫБРАТЬ РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
ИЗ
Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры)
И
партия В (ВЫБРАТЬ РасходнаяНакладнаяСписокНоменклатуры.Партия
ИЗ
Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры)
Проще так:
Quote
Номенклатура, Партия В (ВЫБРАТЬ РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
РасходнаяНакладнаяСписокНоменклатуры.Партия
ИЗ
Документ.РасходнаяНакладная.СписокНомен клатуры КАК РасходнаяНакладнаяСписокНоменклатуры)
Почему по номенклатуре блокируешь Quote
ЭБ.ИсточникДанных = СписокНоменклатуры.Выгрузить(,"Номенклатура");
а по партии нет?
Quote
Если не отказ тогда
движения.ОстаткиНоменклатуры.Записывать = Истина;
движения.продажи.Записывать = Истина;
КонецЕсли;
Опять же можно просто
движения.ОстаткиНоменклатуры.Записывать = не отказ;
движения.продажи.Записывать = не отказ;
Добавлено (24.06.2011, 15:36)
---------------------------------------------
Quote
себестоимость = Выборка.СуммаОстПарт/Выборка.КолОстПарт;
Движение.Сумма = себестоимость*Выборка.Количество;
Тут проблема копеек...
-
Quote (SergTH000)
в Расходной услуги могут быть легко и их надо записывать в РН Продажи.
Согласен. Тут есть два варианта:
1. не включать в запрос услуги (что на мой взгляд правильно, запрос более оптимальный), но при этом не забыть их занести в регистр Продажи.
2. сделать запрос по табличной части документа (номенклатура+услуги), а потом в выборке разделить их.
Quote (SergTH000)
Почему по номенклатуре блокируешь
Code
ЭБ.ИсточникДанных = СписокНоменклатуры.Выгрузить(,"Номенклатура");
а по партии нет?
Дак ей же нужны все остатки номенклатуры, а не только по указанным в документе партиям. Или я неправильно понимаю механизм работы блокировок?
-
Gyd,
1. Quote
1. не включать в запрос услуги (что на мой взгляд правильно, запрос более оптимальный), но при этом не забыть их занести в регистр Продажи.
Так в запросе выбирается сначала сам документ и левым соединением аттачится к РН..Как потом записывать услуги, если ты их не выбрал? Заново перебирать ТЧ?
Quote
сделать запрос по табличной части документа (номенклатура+услуги), а потом в выборке разделить их.
Да просто выбрать доп. поле Номенлклатура.Услуга КАК Услуга. А в разных пакетах, если нужно делать отбор ГДЕ НЕ Услуга.
2.Quote
Дак ей же нужны все остатки номенклатуры, а не только по указанным в документе партиям. Или я неправильно понимаю механизм работы блокировок?
Я не знаю условия =), но в запросе отбор и соединение идут по Номенклатуре + Партии, значит и блокировать по ним надо
-
Quote (SergTH000)
Так в запросе выбирается сначала сам документ и левым соединением аттачится к РН..Как потом записывать услуги, если ты их не выбрал? Заново перебирать ТЧ?
Да, это быстро. Просто логика такая: зачем искать в базе данных то чего там нет. И при вариантах типа 100 услуг - 1 товар думаю это оправдано.
Quote (SergTH000)
но в запросе отбор и соединение идут по Номенклатуре + Партии, значит и блокировать по ним надо
Там нужно проверить общее кол-во по какой-то номенклатуре и кол-во этой номенклатуры в конкретной партии. Допустим мы заблокируем 3 партии из 5, а по оставшимся 2-м можно параллельно (другим пользователем) движения делать?
-
Quote
Да, это быстро. Просто логика такая: зачем искать в базе данных то чего там нет. И при вариантах типа 100 услуг - 1 товар думаю это оправдано.
Что быстро? Сначала запросом получить ТЧ документа (она по-любому нужна), обойти запрос, потом обойти ТЧ в явном виде? Ты итак уже обходишь запрос, и если выбрать доп. поле "услуга", обход будет произведен один раз.
Прежде чем писать, что это быстро сделай замер производительности.
Quote
Там нужно проверить общее кол-во по какой-то номенклатуре и кол-во этой номенклатуры в конкретной партии. Допустим мы заблокируем 3 партии из 5, а по оставшимся 2-м можно параллельно (другим пользователем) движения делать?
Еще раз тебе пишу в запросе, в регистре накопления установлены параметры на Номенклатуру и партию, значит общее количество номенклатуры (в итогах) будет количество номенклатуры всех указанных партий.
Мы не знаем при выполнении запроса, спишем с этих партий или нет, поэтому блокируем их. С других партий списывать не будем, другие пользователи могут получать по ним остатки.
-
Quote (SergTH000)
Что быстро? Сначала запросом получить ТЧ документа (она по-любому нужна), обойти запрос, потом обойти ТЧ в явном виде? Ты итак уже обходишь запрос, и если выбрать доп. поле "услуга", обход будет произведен один раз.
Прежде чем писать, что это быстро сделай замер производительности.
Возможно вы правы, спорить не буду. У меня нет под рукой базы с остатками по нескольким десяткам тысяч номенклатурных позиций, поэтому сделать замер производительности не смогу
Quote (SergTH000)
Мы не знаем при выполнении запроса, спишем с этих партий или нет, поэтому блокируем их.
Вроде бы понял. Спасибо.
-
Выкладываю свое решение этой задачи.
Коментарии
Вложения:
8178041.dt
-
Мой вариант решения. Если можно проведите анализ и тестирование не предвзятым взглядом. Мне кажется что учел все?
Вложения:
kow19761.3.dt
-
Моё решение. Прошу оценить.
Вложения:
1_3_Oliver.dt
-
Oliver,
1. Есть срок продажи в отчете, получается, что услуга у вас хранилась на складе 26 дней
2. У вас нет параметров виртуальной таблицы, а данные вы отсекаете на уровне связи. Это очень большое преступление для 1С
3. Нет индексации
Вложения:
s9866899.jpg
-
kow1976, большое спасибо за Ваши замечания.
Всё поправил. Особо ценное это про параметры в системе компоновки (я компоновку ещё не разбирал). Я смотрел параметры компоновки на Вашем примере - и там есть маленький недочёт.
1. В отчёте Остатки товаров - в округляете дату до конца дня. А сам параметр - значения дата,время.
Успехов в подготовке!
-
Спасибо
Действительно нужна дата, когда спешишь часто, упускаешь нюансы.
В решении, для меня, тяжелей всего понять задание (что нужно сделать) и как это сделать с позиции математики и имеющихся объектов в системе.
Параметры я имел в ввиду не в отчете, а в обработкепроведения расх. Нак (запросе).
-
kow1976
Вот теперь я понял о чём Вы мне толковали. Действительно, когда торопится забываешь очевидные вещи (но фатальные для сдачи) - это в моём случае. А я первоначально подумал об этом (см. рис.)
И у меня возник вопрос: необходимо ли явно указывать в компановке параметры виртуальных таблиц (рис. 1)?
Или это избыточно (рис. 2)?
Спасибо за внимание к моим вопросам.
Вложения:
s8195771.jpg
s1276526.jpg
-
Oliver,
Не могу вам ответить точно, считается это ошибкой на экзамене или нет. Но в задании написано так:
«Продажи с 01.01.2010 по 31.03.2010»
Нет не каких секунд и часов. Поэтому считаю надежнее указать функции параметров приводящих к концу секунды заданного дня.
-
Спасибо. Вопрос закрыт.
-
На сайте http://ax-online.ru описано решение данной задачи, в котором следующим образом используются блокировки:
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
Блокировка.Заблокировать();
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Движения.ОстаткиНоменклатуры.Записать();
К этому участку кода приведено такое описание:
"Перед тем как выполнить чтение данных из регистра ОстаткиНоменклатуры, мы стираем прежние движения этого документа, если они были, записывая пустой набор движений. Но ещё прежде мы указываем, что все остатки и обороты, на которые влияли наши прежние движения, следует БлокироватьДляИзменения. Это на тот случай, если по итогам проверки остатков в партиях, мы решимся отказаться от записи новых движений и вернуть прежние. Ведь пока мы производим проверки и формируем движения, другой документ может забрать то, что временно освободилось, когда мы стерли прежние движения. "
Подскажите пожалуйста, является ли правильным такое использование блокировок и, если да, то стоит ли его применять на экзамене?
-
Доброго времени суток, присутствующим!
Я буксую, почему в отчете продажи у меня поле Срок не доступно для использования в отчете?
... Вот только стоит задать вопрос, так тут же находишь ответ... в вычисляемых полях оно было
Есть у меня грубые нарушения устава 1С?
Вложения:
chilli_1_3.dt
-
Посмотрите, пожалуйста, есть ли косяки
Добавлено (13.10.2011, 13:35)
---------------------------------------------
Chilli
1. Излишняя строка
"Движения.Продажи.Записать(); "
ОстанкиНоменклатуры.Записать() - для того, чтобы при проведении документа мы не читали записи самого проводимого документа, этой командой мы записываем пустые записи.
Из регистра Продажи мы ничего не читаем, поэтому не нужно Записать(), новые записи лягут поверх старых.
2. Не понял зачем тебе столько ресурсов в отчете продажи, поясни плиз.
Если для того, чтобы порядок колонок был как требуемом отчете, то из-за отсутствия в нем итогов можно без ресурсов вообще сделать. Смысла суммировать(или другие операции) например Срок не вижу.
------------
3. Расчет Стоимости
Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;
думаю будет лучше
Движение.Стоимость = Выборка.Количество * Выборка.СтоимостьОстаток / Выборка.КоличествоОстаток;
т.е. сначала умножаем, а потом делим, чтобы не терять микроскопических копеек.
4. В приходной накладной можно делать запрос с группировкой дублей строк, не знаю насколько это важно, я делаю.
---------------
5. Из твоей работы вынесу для себя параметры виртуальной таблицы ОстаткиНоменклатурыОстатки, я что-то по партиям не отобрал
Вложения:
-3--.dt
-
Кенгуру
1. В свойствах конфигурации режим управления блокировкой данных установлен в "Автоматический", а нужно в "Управляемый".
2. Блокировка данных в процедуре проведения расходной накладной должна осуществляться перед чтением остатков, т.е. до выполнения запроса.
3.
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
БлокировкаДанных.Заблокировать();
В результате этих действий в регистре будут заблокированы записи, у которых значение измерения "Номенклатура" равно номенклатуре из ТЧ, либо "Партия" равна партии из ТЧ расходной накладной. А нужно блокировать по сочетанию "Номенклатура - Партия":
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура, Партия", "Номенклатура, Партия")
-
Quote (Кенгуру)
3. Расчет Стоимости
Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;
думаю будет лучше
Движение.Стоимость = Выборка.Количество * Выборка.СтоимостьОстаток / Выборка.КоличествоОстаток;
т.е. сначала умножаем, а потом делим, чтобы не терять микроскопических копеек.
А какая разница делишь в начале или в конце, если взять наобум числа
Выборка.Количество = 3
Выборка.КоличествоОстаток = 7
Выборка.СтоимостьОстаток = 8
Подставляем в обе формулы 3/7*8 = 3.42 или 3*8/7 = 3.42
-
aveego
Чтобы регистр всегда выходил в ноль, т.е. чтобы не зависали копейки лучше писать так:
Движение.Стоимость = ?(Выборка.Количество = Выборка.КоличествоОстаток, Выборка.СтоимостьОстаток, Выборка.Количество * Выборка.СтоимостьОстаток / Выборка.КоличествоОстаток);
-
Romdavid,
С последним согласен, если количество списываемого равно количеству в партии то списываем все количество и всю сумму партии.
Хотя тут тоже наверное лучше проверять не на равенство, просто если Выборка.Количество больше чем Выборка.КоличествоОстаток, то нужно тоже списывать все количество и всю сумму партии. Это как раз можно сделать если будет проверка на Выборка.КоличествоОстаток > Выборка.Количество, формула расчета будет применять только в том случаи когда Выборка.Количество меньше КоличествоОстаток, а если они равны или Выборка.Количество больше то будет списываться вся партия.
Выше постом я спросил в чем разница этих формул, что так что так получаются копейки
Quote (Кенгуру)
3. Расчет Стоимости
Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;
думаю будет лучше
Движение.Стоимость = Выборка.Количество * Выборка.СтоимостьОстаток / Выборка.КоличествоОстаток;
т.е. сначала умножаем, а потом делим, чтобы не терять микроскопических копеек.
-
Вот мое решение в нем учел замечания по предыдущем заданиям.
Вложения:
aveego_1_3.dt
-
aveego, зачем используешь итоги в запросе при проведении расходной накладной?
-
В документе реализации может быть несколько одинаковых номенклатур, но с разными партиями. А в регистре продаж мы не учитываем партию.
Если не использовать Итоги то обход будет по детальным записям, и в регистр продаж по одному регистратору попадут записи с одинаковой номенклатурой, а так я записываю только итоговые данные и записи не "задваиваются" по номенклатуреДобавлено (14.10.2011, 14:22)
---------------------------------------------
а еще нашел ошибку у себя же, нужно
ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных("Номенклатура, Партия", "Номенклатура, Партия");
в место
ЭлементБлокировкиДанных.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура", "Партия", "Партия");
-
aveego, логично, я на это внимание не обратил когда эту задачу решал.
-
Quote (aveego)
В документе реализации может быть несколько одинаковых номенклатур, но с разными партиями. А в регистре продаж мы не учитываем партию.
Если не использовать Итоги то обход будет по детальным записям, и в регистр продаж по одному регистратору попадут записи с одинаковой номенклатурой, а так я записываю только итоговые данные и записи не "задваиваются" по номенклатуре
Там нужно группировку делать во временной таблице
Выбрать
Номенклатура,
Партия,
Сумма(Количество) Как Количество,
Сумма(Сумма) Как Сумма
Поместить ТаблицаРасходнаяНакладная
Из Документ.РасходнаяНакладная
...
...
Сгруппировать По
Номенклатура, Партия
//////////////////////////////////
-
Кенгуру
Это при списании с регистра ОстаткиНоменклатуры. А когда формируешь движения в регистр Продажи нужно группировать по номенклатуре без учета партий.
-
Всем доброй ночи, выкладываю свой ночной вариант решения, хотелось бы услышать замечания и предложения. Сразу скажу, только начал готовиться))
З.Ы. Щас пошел зубы чистить думал какое лучше соединение использовать, так думал что свою зубную шетку мылом обычным помыл...
Вложения:
1Cv8_ErrorPro.dt
-
ErrorPro,
1. В свойствах конфигурации режим управления блокировками установлен в Автоматический, а нужно в управляемый.
2. Не нужно в обработке проведения приходной накладной выгружать в ТЗ результат запроса для формирования движений.
3. Движения.ОстаткиНоменклатуры.Очистить();
Движения.ОстаткиНоменклатуры.Записать();
Достаточно Записать().
4. В обработке проведения расходной накладной блокировать нужно не только по номенклатуре, но и по складу. Блокировку ты описал, а заблокировать забыл.
5. ЕСТЬNULL(ДОКТЧ.Количество, 0) КАК Количество,
ЕСТЬNULL(ДОКТЧ.Сумма, 0) КАК Сумма
Не надо здесь проверять на Null.
Номенклатура В
(ВЫБРАТЬ ДокТЧ.Номенклатура ИЗ ДокТЧ) И Партия В (ВЫБРАТЬ ДокТЧ.Партия ИЗ ДокТЧ КАК ДокТЧ), надо так: (Номенклатура, Партия) В (ВЫБРАТЬ ДокТЧ.Номенклатура, ДокТЧ.Партия ИЗ ДокТЧ КАК ДокТЧ).
ПО (Остатки.Номенклатура = ДОКТЧ.Номенклатура) И (Остатки.Партия = ДОКТЧ.Партия). Второе условие соединения таблиц является избыточным.
6. ВыборкаДетальная = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Можно просто Выборка.Выбрать()
7. В регистр Продажи услуги у тебя не попадут.
Отчеты не смотрел.
-
Romdavid Спасибо , но ответь тогда пожалуйста,
1.почему в приходной не нужно загружать движения через ТЗ, так ведь оптимальнее?
2. В задаче написано что складской учет не ведется, да и в Расходной даже склада нет, так как его тогда блокировать?
3. Лишняя проверка на Null плохо как-то повлияет?
4.ВыборкаДетальная = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - описал так как говорит Палев. Вдруг добавится еще один уровень группировки. Да и как-то это влиет на производительность?
5. с Услугами точно, отчет продажи не внимательно глянул.
Спасибо еще раз за рекомендации
-
ErrorPro,
1. Оптимальнее с точки зрения чего? На сколько я знаю, на выгрузку результата запроса в ТЗ и загрузку ТЗ в движения тратится больше времени, чем на аналогичные операции с использованием Выборки.
В списке ошибок к экзамену указывается :"Выгрузка результата запроса в промежуточную таблицу (например, в таблицу значений) без необходимости", за это снимают 1 балл.
2. По поводу складов извиняюсь, имел ввиду партии. По ним также блокировать нужно.
3. На работу программы плохо врядли повлияет, а вот на оценку преподавателя твоего понимания может повлиять негативно.
4. По-моему в данном случае "вдруг" неуместно. Есть конкретная задача, конкретные условия, никаких "вдруг". На счет производительности сказать не могу.
-
Romdavid ясно спасибо, а по поводу блокировки по партиям, смысл? Мы же блокируем по номенклатуре, этого не достаточно?
-
ErrorPro, дело в том, что списание происходит только с тех партий, которые указаны в табличной части и чтение остатков, соответственно, происходит только по этим партиям. А ты блокируешь всю номенклатуру без учета партий. Получается, что ты блокируешь те записи, которые тебе не нужны. А это не есть хорошо.
-
Romdavid точно, все исправил, спасибо. Седня выложу 1.04 очень буду ждать твоих замечаний
-
Мое решение
Отчеты (Интервал, Срок) не обычныеДобавлено (24.10.2011, 09:41)
---------------------------------------------
у себя неверно сделал блокировку
нужно было
....("Номенклатура,Партия","Номенклатура,Партия");
Вложения:
crabzzy_1.3.dt
-
Мое решение
Добавлено (24.10.2011, 14:10)
---------------------------------------------
Можно чуток критики?
Вложения:
Minotavrik_1.3.dt
-
Minotavrik, немного критики.
1. Очистить() - это лишнее, особенно в приходной. Вы очищаете набор движений, который и так пуст.
2. Блокировать для изменения - свойство набора данных. Блокировка по нему устанавливается в момент записи набора. А вам нужно блокировать до выполнения запроса, чтобы обеспечить неизменность данных. В этом случае должен использоваться объект БлокировкаДанных.
Отчеты не смотрел.
-
Quote (bonig)
1. Очистить() - это лишнее, особенно в приходной. Вы очищаете набор движений, который и так пуст.
Не согласен, по умолчанию в 8.2 в движениях используется - "Удалять автоматически при отмене проведения", а не удалять автоматически как было в 8.1 поэтому это программист берет на себя. Я где то в умной книжке читал. Народ кто еще сталкивался?
-
Minotavrik, ты сам попробуй, проверь как работают методы Очистить() и Записать() вместе и по отдельности. bonig, правильно говорит.
-
Добрый день!
Quote (Romdavid)
Номенклатура В (ВЫБРАТЬ ДокТЧ.Номенклатура ИЗ ДокТЧ) И Партия В (ВЫБРАТЬ ДокТЧ.Партия ИЗ ДокТЧ КАК ДокТЧ), надо так: (Номенклатура, Партия) В (ВЫБРАТЬ ДокТЧ.Номенклатура, ДокТЧ.Партия ИЗ ДокТЧ КАК ДокТЧ). ПО (Остатки.Номенклатура = ДОКТЧ.Номенклатура) И (Остатки.Партия = ДОКТЧ.Партия). Второе условие соединения таблиц является избыточным.
а в чем заключается избыточность!? если,например,добавить в расходную накладную строку с повторяющейся номенклатурой, но другой партией, и не поставить второе условие соединения таблиц,то результат запроса будет плачевным... или я что то не верно понял?
-
Sinhrofazatron, все правильно ты понял. Написав это, я не обратил внимание на тот факт, что партии указываются для каждой номенклатурной позиции, за что извиняюсь.
-
Ok,спасибо!
-
мой вариант решения, буду рад комментариям
Вложения:
kol118_task_1_3.dt
-
Мое решение задачи 1.3.
Вложения:
1.3.dt.zip
-
Исправил с учетом прочитанного в теме
Вложения:
1.3.dt
-
Не осилила всю ветку, просмотрела несколько вариантов отчетов продаж, сравнила со своим. Как-то у меня он проще получился. Может, я не вижу, в каком случае он не сработает?
("бантиков" в задаче не делала, типа пересчета суммы дока, проверки заполнения и т.д. Лишняя трата времени при подготовке, так что не судите за это строго)
Моя версия:
Вложения:
Klyacksa1.03.dt
-
Прочитал всю ветку, так и не нашел ответ на свой вопрос.
А вопрос вот в чем. Как уже тут говорилось в ТЧ мы можем указать одинаковую номенклатуру,
т.е. делать дубли строк и в каждой из строк необходимо указать из какой партии надо списать.
Все группируют по номенклатура,партия и в итоге получается одна строчка с какой-то партией,
а ведь партии мы можем указать все разные.
И какую из этих двух, трех партий сравнивать с ОстаткиНоменклатуры.Партия, непонятно.
Если возможно проясните...
-
У тебя будет не одна строчка, а столько, сколь уникальных комбинаций из данной номенклатуры и партий ты задал в табличной части документа. Т.е. например: Ручка, партия1 ; Ручка, партия2; Ложка, партия1; Ложка, партия3. И в остатках ты соответственно смотришь, хватает ли тебе количества данного товара в данной партии. Если хотя бы по какой то из комбинаций(Товар-партия) не хватает, не проводишь документ. Посмотри результат запроса в моей выгрузке, там все очень прозрачно. На некоторые недочеты внимание можно не обращать, т.к. 1с в глаза увидел неделю назад. Запрос в отчете по продажам получился довольно простым.
Вложения:
koladen1_3.dt
-
Обновленный вариант, так сказать "с высоты прожитых лет"
Принципиальных отличий от других решений нет.
Вложения:
0534737.dt
-
Мой вариант.
Добавлено (12.03.2012, 22:47)
---------------------------------------------
Quote (Gyd)
Обновленный вариант
Gyd, данный синтаксис не рабочий: ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура, Партия", "Номенклатура, Партия");
Вложения:
sv_mikh_01_03_2.dt
-
Quote (sv_mikh)
данный синтаксис не рабочий:
Поверил на слово Romdavid, сообщение: http://forum.chistov.pro/index.php?topic=1036.msg18327#msg18327
-
Не, точно не работает... Поле пространства блокировки не подразумевает перечисления. И недавно на курсе по опер.учету А.П.Габец такую же конструкцию обсуждал...
-
Quote (sv_mikh)
Поле пространства блокировки не подразумевает перечисления
Хоть бы ругнулось ради приличия Спасибо, учту.
-
Всем привет, вот попытка решения этой задачи - буду благодарен за комментарии и отзывы.
p.s.
Забыл учесть контроль копеек в расходной накладной ((
вместо
Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьОстаток*ВыборкаДетальныеЗаписи.Количество/ВыборкаДетальныеЗаписи.КоличествоОстаток;
нужно
//Контроль копеек
Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 0 Тогда
Движение.Стоимость = 0;
Иначе
Движение.Стоимость = ?(ВыборкаДетальныеЗаписи.Количество=ВыборкаДетальныеЗаписи.КоличествоОстаток,
ВыборкаДетальныеЗаписи.СтоимостьОстаток,
ВыборкаДетальныеЗаписи.СтоимостьОстаток*ВыборкаДетальныеЗаписи.Количество/ВыборкаДетальныеЗаписи.КоличествоОстаток);
КонецЕсли;
Вложения:
1Cv8-1_3-.dt
-
Quote (sv_mikh)
Мой вариант.
Прикрепления: sv_mikh_01_03_2.dt(152Kb)
Подскажите пожалуйста , а зачем в запросе добавлено два ПРЕДСТАВЛЕНИЯ Номенклатура и Партия. Они же и так у нас присутствуют.
| Список.Номенклатура,
| Список.Партия,
| ПРЕДСТАВЛЕНИЕ(Список.Номенклатура),
| ПРЕДСТАВЛЕНИЕ(Список.Партия)
-
Pavlyk, посмотрите вот здесь: http://pro1c.org.ua/index.php?showtopic=487
-
Отчет Продажи "подсмотрел" у DoctorRoza. Спасибо
Вложения:
RoMeL_1.3.dt
-
Мое решение
Вложения:
1-3_XilDen.dt
-
Кому не сложно, посмотрите мой вариант.
Заранее благодарю.
Вложения:
6671605.dt
-
Quote (Tsar)
Кому не сложно, посмотрите мой вариант.
Заранее благодарю.
Прикрепления: 6671605.dt(156Kb)
1) документ может проводиться ещё и будущей датой, так что эта конструкция не подходит. Думаю не стоит париться и надо всегда очищать
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиНоменклатуры.Записать();
КонецЕсли;
2) зачем 2 запроса при проведении расх накл? можно одним.
3) РН - блокировка не установлена
4)отчет продажи - интересно. одним запросом. если работает, то классно. но надо проверять наверное.
-
Начал готовиться. Просмотрев всю ветку решил выложить свое решение.
Прошу у кого есть время, проверьте пожалуйста.
Вложения:
0103.dt
-
IlgizVip
1. Полностью переделать модуль проведения ПриходнойНакладной. Это конечно хорошо что умеете пользоваться конструктором, но не оценят.
2. Модуль проведения РасходнаяНакладная:
2.1 Ну наверное хотелось бы чтобы было понятно по какой именно партии не хватает товара, а не по товару в целом.
2.2 Вот во втором пакете есть ЛЕВОЕ СОЕДИНЕНИЕ так не плохо бы проиндексировать соответствующие поля во временной таблице.
2.3 Вот так где установка параметра МоментВремени... что не очень хорошо... что Неопределено... всё-таки красивее было бы пустую дату передать,
да и при неоперативном проведении... всё-таки МоментВремени() не плохо бы загнать в Границу.
-
Подскажите пожалуйста!! А обязательно ли создавать 3-ий ресурс себестоимость в регистре накопления продажи? Ведь себестоимость по сути хранится в РН ОстаткиТоваров.
-
vadimugatu, Ресурс себестоимость добавляют в Регистр Продажи для того, чтобы легче строился Отчет по Продажам.Чтобы не приходилось для вывода Себестоимости в Отчете присоединять таблицу ОстакиТоваров.
-
Как облегчить построение отчета по продажам:
1. Чтобы легче считать количество отгрузок добавляем такой ресурс в РН Продажи и при построении отчета сразу получаем количествоОтгрузок по товару за анализируемый период.
2. Создаем РС ОтгрузкиНоменклатуры - Периодичность день. Делаем единственное измерение "Номенклатура".
При построении отчета соединяемся с этим РС и по полю Период Вычисляем последнюю продажу, а также легче рассчитать интервал отгрузок:
РазностьДат(Минимум( ОтгрузкиНоменклатуры.Период), Максимум( ОтгрузкиНоменклатуры.Период), день) / Продажи.КоличествоОтгрузок
-
alex7six, <b></b>мне кажется создавать регистр сведений для
Цитата (alex7six)
легче рассчитать интервал отгрузок
не совсем правильно. С помощью запроса можно получить все необходимые данные из регистра Продажи, как я успел посмотреть в базах решений текущей ветки, например: можно выбрать два поля Регистратор.Период и для них использовать Максимум и Минимум, по поводу . Цитата (alex7six)
Чтобы легче считать количество отгрузок добавляем такой ресурс в РН Продажи
здесь также можно с помощью запроса используя КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Регистратор), используя сортировку по получившимся полям, получить для каждого поля номенклатуры количество документов.
-
Решение задачи 1.3 , немного решил поэкспериментировать с получением поля Интервал функцией в общем модуле. Возможным замечаниям или вопросам буду очень рад, спасибо!
Вложения:
Odin777_1.3.dt
-
Odin777,
1. Перечисление "ВидыНоменклатуры" — правильно, но быстрее делать булев реквизит:
http://ax-online.ru/Exams/AttPlatf/Task-1.1.aspx
2. В РН не хватает конструкции "БлокироватьДляИзменения". Сама не до конца с ней разобралась, но поняла, что нужно её ставить как минимум тогда, когда в коде есть "Отказ=Истина"
http://forum.chistov.pro/index.php?topic=1999.msg1#msg1
3. Код
|ИТОГИ
| СУММА(Количество),
думаю, что нужно "Максимум". Или "Минимум". Без разницы. Но не Сумму.
4.
Код
Сообщение.Поле = "СписокНоменклатуры["+(ВыборкаДетальныеЗаписи.НомерСтроки-1)+"].Количество";
Сообщение.УстановитьДанные(ЭтотОбъект);
Хорошая конструкция, но на экзамене не тратьте время зря (если, конечно, Вам не попадётся 3 билет, где есть такая задача по упр.формам)
5. В отчётах, где есть период, обычно создают в параметрах переменную "Период" типа "СтандартныйПериод", посмотрите базы. Опять же, не знаю, зачем (кто-нибудь может объяснить?), но мне говорили так делать.
-
Karpikova, БлокироватьДляИзменения:
1. Если стоит галка РазрешитьРазделениеИтогов
2. Списание по новой методике
-
Odin777,
Цитата (Odin777)
Возможным замечаниям или вопросам буду очень рад, спасибо!
На мой взгляд напрасно тратится время на ОбработкуПроверкиЗаполнения, ты же все равно услуги не приходуешь
Зачем в приходной запрещаешь оперативное проведение?
ИспользоватьИзИсточникаДанных("Номенклатура, Партия", "Номенклатура, Партия"); не рабочая конструкция, каждое поле надо отдельно, уже обсуждалось в этой ветке.
В РН не вижу смысла группировать по номеру строки, так ничего у тебя не сгруппируется, только для того чтобы потом номер строки сообщить, не стоит, имхо.
В отчете по остакам не предусмотрено получение на конец дня; &Период в запросе указывать нет смысла.
В отчете по продажам как раз таки явно лучше указать период и сделать обязательным к заполнению иначе если юзер его не выберет - будет странный результат; не нужно соединяться с реальной таблицей, все в оборотах есть; насчет стандартного периода тебе уже писали ранее.
Выкладываю также свое решение. Буду рад любой критике.
Вложения:
fimanich_01_03.dt
-
fimanich, нет флага БлокироватьДляИзменения - это критично.
-
Oliver, спасибо что нашел возможность посмотреть мое решение.
Цитата (Oliver)
нет флага БлокироватьДляИзменения - это критично.
Позволю себе не согласиться . Читаем синтакс-помощник, статью про БлокироватьДляИзменения.
"Имеет смысл использовать, если проверка итогов регистра выполняется после записи и заблокировать нужно именно те комбинации, по которым записываются записи. В
этом случае можно не использовать объект БлокировкаДанных."
В моем решении используется БлокировкаДанных, следовательно данный флаг не нужен. То есть это как бы 2 варианта установки блокировок: вариант № 1 - с помощью объекта БлокировкаДанных, вариант № 2 взвести флаг БлокироватьДляИзменения (используется при "новой" методике контроля остатков - после записи в регистр). Использовать Вариант № 1 вместе с вариантом № 2 смысла нет, ведь как только я написал Блокировка.Блокировать(), так сразу она и произошла...Добавлено (15.03.2013, 22:03)
---------------------------------------------
Цитата (fimanich)
ведь как только я написал Блокировка.Блокировать(), так сразу она и произошла...
Поправлю: конечно, не как только я написал данный код, а как только он исполнился
-
Karpikova, по пунктам:
1) согласен, наверно получение значения будет проще;
2) Спасибо Oliver, за просвещение по этому пункту;
3)Цитата (Karpikova)
думаю, что нужно "Максимум". Или "Минимум". Без разницы. Но не Сумму.
в первом запросе по табличной части(ТЧ) документа я получал значения по двум разрезам(т.к. партии тоже наряду с номенклатурой указывались в строках ТЧ), поэтому для того чтобы можно было получить общее количество в итогов пакете запроса по номенклатуре я использовал >>Сумма<<
4) спасибо, учту.
Добавлено (17.03.2013, 00:41)
---------------------------------------------
fimanich, Цитата (fimanich)
На мой взгляд напрасно тратится время на ОбработкуПроверкиЗаполнения, ты же все равно услуги не приходуешь
скорее для общего развития, хотя в контексте вашей мысли все верно. Цитата (fimanich)
не нужно соединяться с реальной таблицей, все в оборотах есть
по логике построения запроса мне необходимы были значение некоторых полей(регистратор, период) из РН.
Из таблицы оборотов я к сожалению не имею представления как получить эти поля, поэтому таким не хитрым способом используя консоль запросов у меня получился такой запрос где все необходимые данные были получены.
По остальным пунктам соглашусь скорее с вами.
-
Odin777,
Цитата (Odin777)
по логике построения запроса мне необходимы были значение некоторых полей(регистратор, период) из РН.Из таблицы оборотов я к сожалению не имею представления как получить эти поля,
В параметрах виртуальной таблицы перидичность Авто, и получишь эти поля. Например, в моем решении можешь посмотреть...
-
Вот мой варинат решения, хотел бы услышать комментарии если что не так
Вложения:
4640151.dt
-
botokash, в отчете для вычисления полей "интервал" и "срок" лучше использовать механизмы СКД вот здесь можете глянуть http://ax-online.ru/Exams/AttPlatf/Task-1.3.aspx
-
Жду комментариев
Вложения:
Runner_01_03.dt
-
Цитата (runner1)
Жду комментариевПрикрепления: Runner_01_03.dt(156Kb)
Я сам только "въезжаю" в задачи по ОУ.
Мне не понравился твой запрос. Вернее, я не понял технологию. Зачем писать во временную таблицу поле "Услуга"? Для оптимизации условия "Номенклатура В (ВЫБРАТЬ ... )"?
Думаешь, за это снижают баллы?
Если так, то почему не использовал Представление(Номенклатура) в запросе, чтобы корректно выводить сообщение, это же целый доп.запрос?
Почему бы не добавить, кстати в догонку, и условие на партию, типа:
Номенклатура В (ВЫБРАТЬ ... )
И Партия В (ВЫБРАТЬ РАЗЛИЧНЫЕ Вт.Партия ИЗ Вт как Вт)
Еще не понятно зачем раздел ИНДЕКСИРОВАТЬ? У нас не так много номенклатуры например. Может быть я чего-то не учел?
Тип данных у реквизита Услуга, наверное, предполагался Перечисление.ВидыНоменклатуры. Даже не смотря на то что в запросе удобно писать конструкцию с НЕ.
Формулировка условия намекает на новую методику проведения
Формирование итоговой суммы документа - это роскошь
-
доработанная версия
Вложения:
6634039.dt
-
Я сейчас делаю задачку, подобную 1_3. Поняв, что получается не то, что надо, решила посмотреть работу _1_3.dt. Не пойму, почему в ней в конструкторе движения нигде не заполнены поля, и при этом в режиме 1С:Предприятие все регистры правильно заполняются? У меня же они заполняются, только когда все поля заполнены. Причем каждый раз я сохраняю все сделанные изменения в своей базе, потом выгружаю ее, а при каждой загрузке обнаруживаю, что регистры опять не заполняются. что я не так делаю?
-
Добавлено (09.09.2013, 22:34)
---------------------------------------------
krasota не совсем понятна ваша проблема, лучше выгрузку выложите, с пояснениями.
Вот моя )
Вложения:
3989655.dt
-
Мой вариант решения
Вложения:
spest1.3.dt
-
Очень важный вопрос по данной задаче: мне казалось что её надо решать используя новую методику проведения. Разве не так? Насколько я понимаю условие задачи это позволяет, поскольку идет прямое указание партий. Поясните пожалуйста.
P.S. во всех найденных решения данной задачи новая методика проведения не используется.
-
да, можно...Наверное просто потому что дольше....придется использовать 2 регистра, ОстаткивПартии, и ОстаткиСтоимость. Сказали что на экзамене требуют ПОНИМАНИЕ новой методики, вроде бы
возобновил подготовку тренировочно решил 1_3 : если тут кто живой есть - гляньте плиз)
Вложения:
zorky1_3-.dt
-
Прокомментируйте пожалуйста решение!
Вложения:
1Cv8__Kaiser_1..dt
-
SanjaKaiser, да, правильно один цикл в расходной использовать, комб. номенклатура-партия будет уникальна
Вроде всё правильно, мелочи кое какие, можно в параметры до кучи ещё Партию добавить, будет отбор по
Номенклатура-Партия
| Номенклатура, Партия В
| (ВЫБРАТЬ
| ТоварыДокумента.Номенклатура
| ТоварыДокумента.Партия
| ИЗ
| ТоварыДокумента КАК ТоварыДокумента))
у Павла где-то было написано перед Движения.ОстаткиНоменклатуры.Записать (в начале , пустой набор) - нужно Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина ставить, с галочкой режим разделения итогов ...?
про отсеивание Услуг - Неявный запрос в цикле, в приходной...если допустим будет 1000 позиций номенклатуры)
мелочи, наверняка, - но лучше отсеивать их в Параметрах выбора, на уровне реквизита Номенклатура ТЧ
-
1.03
Вложения:
3069122.dt
-
Добрый день! Начала готовиться к экзамену, прошу посмотреть мое решение, если тут кто-то есть. Со стороны кажется, что все верно, но, наверняка есть косяки!
Добавлено (02.12.2013, 10:06)
---------------------------------------------
Цитата Voyager (
)
1.03
По-моему правильно блокировать сразу вместе Номенклатура,Партия
Не
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
А
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура,Партия", "Номенклатура,Партия");
Вложения:
angelika08011_0.dt
-
JaneP, ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура,Партия", "Номенклатура,Партия");
поддерживается ли такой синтаксис ?
-
Цитата zorky (
)
поддерживается ли такой синтаксис
Ошибки не выдает, как я поняла, многие тут именно так и делали. Может быть кто-нибудь меня поправит...
-
JaneP, если еще актуально:
Мелочи, которые я бы сделал иначе:
1. В Номенклатуре реквизит Услуга сделать Булево, несмотря на имеющиеся
в каркасе Перечисление, так как это по моему будет экономить время.
2. По поводу Оперативного/Неоперативного проведения не стоит вроде замарачиваться.
3. В блокировках я и сам не силен пока, но блокировать регистр Продажи, по моему, не нужно.
4. Нет расчета Суммы в ТЧ документов.
5. Зачем в запросе Расходной накладной Итоги? И в следствии, лишний цикл.
6. Отчет по продажам: кое-что подсмотрел для себя полезного. Маленькие замечания - не нужно в СКД наверное выводить Ресурсы, и разобраться с Параметрами.
Поля Интервал и Срок Вы вычисляете в запросе, а я в СКД, интересно для экзамена какое решение правильнее? Или нет большой разницы?
7. Отчет по остаткам - тоже Ресурсы не нужны, и Параметры (только Дата и привести к концу дня). Группировка по партии лишнее.
Мое решение -Добавлено (06.01.2014, 03:39)
---------------------------------------------
Цитата JaneP (
)
НеЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
А
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура,Партия", "Номенклатура,Партия");
В Синтаксис-Помощнике отдельными строчками, видимо, так тоже допустимо.
Вложения:
Sadr_1_3.dt
-
Цитата Sadr (
)
Мелочи, которые я бы сделал иначе
Sadr,
3. Согласна, это лишнее:)
4. По-моему этого не было в задании, поэтому я не трачу время
5. Итоги для обхода по группировкам и чтобы на группировке по номенклатуре получить сумму остатка и в верхнем цикле вывести сообщение о недостатке (вроде бы, запрос делался в состоянии аффекта:)
6.Это не поняла...почему не выводить ресурсы?:)
По поводу вычисления Интервала и срока в вопросе - думаю, могут придраться, надо почитать отчеты сдававших, просто удобнее было сразу сделать в запросе, не очень люблю работу с вычисляемыми полями.
-
Цитата JaneP (
)
5. Итоги для обхода по группировкам и чтобы на группировке по номенклатуре получить сумму остатка и в верхнем цикле вывести сообщение о недостатке (вроде бы, запрос делался в состоянии аффекта:)
Нам не нужен остаток всей номенклатуры, а нужен остаток только конкретной партии, указанной в документе. Поэтому достаточно одного цикла.
Цитата JaneP (
)
6.Это не поняла...почему не выводить ресурсы?:)
Ресурсы нужны для вывода итогов в отчете, а этого в задании не требуется.
-
Sadr, почему, просто если нет в целом остатка - то и по партии нет смысла делать цикл.Вроде такая у меня была идея.
Почему не требуется?В примере отчета по остаткам есть итоги по номенклатуре - и по количеству, и по стоимости
-
Цитата JaneP (
)
Почему не требуется?В примере отчета по остаткам есть итоги по номенклатуре - и по количеству, и по стоимости
Прошу прощения, и правда, в отчете по остаткам итоги нужны - соответственно Ресурсы тоже. Не знаю куда я раньше смотрел...
-
Всем привет! Прошу проверить моё решение
Вложения:
Pro100KoT_1.3.dt
-
Привет всем. Посмотрите мое решение пожалуйста
Вложения:
2913814.dt
-
Люди, гляньте если есть кто живой
Скажу честно, отчет по продажам сделал не сам - затупил (((
Вложения:
CeHbKA_1.3.dt
-
Мужики, такой вариант вам как?(я про отчет по продажам)
Все расчетные поля вынес из запроса в вычисляемые.
Вложения:
Shooroopik_1_03.dt
-
Shooroopik111, посмотрел твое решение. Вот некоторые замечания:
1. В приходной накладной, чтобы при проведении не проверять вид номенклатуры достаточно позаботиться дабы в табличную часть попадали только товары. Это делается в пару кликов мышью (точнее 12).
2. Сообщение о нехватке товара коротковато.
3. Не знаю как отнесутся на экзамене, но я бы движения по регистру продаж сгруппировал.
4. В отчете по остаткам товаров недоступна дата формирования отчета.
Ну а так явных ошибок не видно.Добавлено (03.05.2014, 18:52)
---------------------------------------------
По 1-му пункту мне тут недавно сообщили, что мой метод можно обойти. Поэтому все равно придется делать проверку на услугу. Но обращение к вложенному свойству номенклатуры фактически порождает запрос, что не очень хорошо. Предлагаю делать проверку запросом в обработке проверки заполнения. Как кто к этому относиться?
Добавлено (03.05.2014, 19:44)
---------------------------------------------
Нашел более простое решение. Нужно во вкладке свойств номенклатуры установить свойство "Создание при вводе" в значение "не использовать" и в
форме убрать кнопку открытия в колонке номенклатуры.
-
Цитата Demy (
)
1. В приходной накладной, чтобы при проведении не проверять вид номенклатуры достаточно позаботиться дабы в табличную часть попадали только товары. Это делается в пару кликов мышью (точнее 12).
в табличной части должны быть и товары и услуги, только в движение услуги не должны попадать
-
Выкладываю свой вариант. Подсмотрел только отчет по продажам, хотя свой вариант отчета тоже оставил. Он, скорее всего, менее оптимален, но зато из одного запроса состоит.
Вложения:
_1-3.dt
-
АСБ, посмотрел твое решение. Вот несколько замечаний:
1. (важно) Расходная накладная. Использование вложенного свойства "Услуга" не приветствуется, т.к. производит запрос в цикле. Выбирай реквизит "Услуга" прямо в запросе;
2. (важно) Расходная накладная. Поговаривают что 1С при списании стоимости требует такую формулу:Код
?(ВыборкаДетальныеЗаписи.Количество = ВыборкаДетальныеЗаписи.КоличествоПродОстаток, ВыборкаДетальныеЗаписи.СтоимостьПродОстаток, ВыборкаДетальныеЗаписи.Количество/ВыборкаДетальныеЗаписи.КоличествоПродОстаток*ВыборкаДетальныеЗаписи.СтоимостьПродОстаток)
почему, никто сказать не может (поэтому просто имей ввиду). Кстати стоимость в этом задании можно рассчитать и в запросе;
3. (важно) Расходная накладная. Вывод сообщение об ошибке может стать неверным при определенных условиях, поэтому считаю первое сообщение излишним;
4. (важно) ПродажиОднимЗапросом. Тут не правильно, т.к. идет обращение к реальной таблице. Можно и отчет "Продажи" сделать одним запросом.
5. (желательно) Используй форматирование, а то код:Код
если Отказ Тогда Продолжить; КонецЕсли;
мне, например, тяжело воспринимать, думаю экзаменатор этому также не обрадуется.
Выкладываю свой вариант. Давно решал, поэтому могут быть ошибки.
-
Demy, спасибо за замечания. А вот по 3-му пункту - там же не только сообщение выводится, но и прерывается выполнение текущего шага цикла, если общее число к списанию превышает остаток, так производительнее по хорошему должно быть. 1с-ники, я так понял, помешаны на производительности при приёме экзамена. Кстати, решение ты не прикрепил.
-
Цитата АСБ (
)
Demy, спасибо за замечания. А вот по 3-му пункту - там же не только сообщение выводится, но и прерывается выполнение текущего шага цикла, если общее число к списанию превышает остаток, так производительнее по хорошему должно быть.
Это я увидел, но тут дело в другом. Зачем нужно 1-е, по ходу программы, сообщение? Оно сообщает только что какой либо номенклатуры не достаточно, но не производит детализацию по партиям. Тем более оно будет срабатывать при непонятных для пользователя условиях. Например, на складе следующая ситуация:
- Приходная накладная №1 Ковер 5 шт.
- Приходная накладная №2 Ковер 2 шт.
- Приходная накладная №3 Ковер 10 шт.
Создаем расходную накладную, где списываем с приходной №1 - 5 шт. ковров, и с приходной №2 - 5 шт. Программа выдаст сообщение, что ковров не хватает, но не уточняет по какой приходной накладной. Если же мы будем с приходной №1 списывать 2 шт. ковров, а с приходной №2 - так же 5 шт, то программа уже сообщит что товара не хватает именно по приходной №2. Т.е. при схожих ситуациях (а именно нехватке товара) программа выдает разные сообщения об ошибках.Цитата АСБ (
)
1с-ники, я так понял, помешаны на производительности при приёме экзамена.
Да, скоро из-за этого на ассемблере писать заставят. :)Цитата АСБ (
)
Кстати, решение ты не прикрепил.
Точно помню что прикреплял! Даже на рабочем столе dt-шка осталась. Наверное глюкануло что-то. Добавлено (25.06.2014, 09:14)
---------------------------------------------
Почему dt-шка не прикрепляется?
Добавлено (25.06.2014, 09:14)
---------------------------------------------
Еще раз!
Добавлено (25.06.2014, 09:17)
---------------------------------------------
Не могу прикрепить базу.
Добавлено (25.06.2014, 09:32)
---------------------------------------------
Откатил виртуалку.
-
Файл не прикрепляется.
Добавлено (25.06.2014, 09:34)
---------------------------------------------
Текстовый файл прикрепился, а dt-шка почему-то нет.
-
Хотя бы сообщение выдавалось что файл не пролазит.
Вложения:
Demy_1_03.dt
-
посмотрите пожалуйста. не знаю правильно ли я сделала, как ни как это первая моя задача). только про критикуйте пожалуйста, сообщение пользователю длинное лень было писать .
Вложения:
1.32014-06-27.dt
-
evil18, забавно, твое сообщение создано в аккурат после того как сборная России продула.
Посмотрел решение:
1. (важно) Расходная накладная. Регистр продаж будет формироваться неправильно, если в расходнике будет номенклатура, которую необходимо списать с двух и более партий;
2. (замечание) Расходная накладная. В запросе вид номенклатуры можно не передавать параметром, а указать непосредственно в запросе:Код
ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
хотя более правильно проверять не на неравенство "Услуга", а на равенство "Товар". Хотя в данной задаче это условие неверно см. п. 3;
3. (важно) Расходная накладная. Согласно условиям задачи услуги должны попадать в регистр "Продажи";
4. (замечание) Расходная накладная. Т.к. партии заранее известны, то себестоимость можно посчитать прямо в запросе.
5. (замечание) Расходная накладная. После первого сообщения о нехватке товара движения будут формироваться дальше.
Кажется это все.
-
Demy, так ты еще надеешься что она выиграет?
мне не понятно по 1. почему не правильно (там все схлопывается).
2. как я поняла нужно именно что бы услуга не попадала, а другое все можно
3. не заметила в задании (я косяк согласна)
4. еще один косяк
5. там все равно отказ = истина стоит (вроде записаться не должны). но лишние сточки кода пройдет тоже косяк (ну то если честно написать было лень)
-
Цитата evil18 (
)
Demy, так ты еще надеешься что она выиграет?
Да, я все еще верю в чудеса. :)Цитата evil18 (
)
мне не понятно по 1. почему не правильно (там все схлопывается).
Тут дело не в схлопывании, а в агрегатной функции. Попробуй в расходнике продать один и тот же товар из разных партий. Например из партии №1 5 шт. на сумму 50 и из партии №2 10 шт. на сумму 30. Согласно запросу в продажах на данный товар сформируется запись где указанно что продано 10 шт. на сумму 50. В качестве агрегатной функции нужно ставить не МАКСИМУМ, а СУММА.Цитата evil18 (
)
2. как я поняла нужно именно что бы услуга не попадала, а другое все можно
Это замечание относилось к расходной накладной.
-
Demy, косяк, спасибо) про услугу я поняла)
а сборною россии я вместе с тобой верить буду) только смотреть не хочуДобавлено (27.06.2014, 23:56)
---------------------------------------------
Demy, а еще я там связь забыла сделать по партиям. я исправлюсь) как ни как первый блин всегда комом
-
вот исправила
Вложения:
1.32014-06-28.dt
-
evil18, посмотрел твое решение. Ошибок нет, только несколько замечаний:
1. (замечание) Расходная накладная. Стоимость списания можно считать в запросе;
2. (замечание) Расходная накладная. При выводе сообщения о нехватке товара мне непонятен код:Код
продолжить;
Если отказ Тогда
возврат;
КонецЕсли;
Код после "продолжить" выполняться не будет.
3. (замечание) Расходная накладная. Лучше добавить код:Код
Если Отказ Тогда
Возврат;
КонецЕсли;
перед формированием движений по регистру продаж, тогда при возникновении ошибки лишние записи в регистре формироваться не будут.Цитата evil18 (
)
а сборною россии я вместе с тобой верить буду) только смотреть не хочу
Я тоже болею, но не смотрю. Не люблю ужастики на ночь смотреть.
-
Demy, спасибо)
-
Здравствуйте. Выкладываю своё решение. На мой скромный взгляд оно верное. Если кому интересно, просмотрите.
Вложения:
6633653.dt
-
Здравствуйте. Выкладываю своё решение. На мой скромный взгляд оно верное. Если кому интересно, просмотрите.
1. Вопрос такой: попробуй во второй расходной указать дату 19.07.2014. Документ не проведётся. Это из-за того, что движения при неоперативном перепроведении не очищаются, а МоментВремени() всё равно берёт движения текущего документа :-( Поэтому я в сомнениях, правилен ли такой код:
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиНоменклатуры.Записать();
КонецЕсли;
Либо же пустые движения по этому регистру надо записывать всегда??Добавлено (01.08.2014, 11:45)
---------------------------------------------
Здравствуйте. Выкладываю своё решение. На мой скромный взгляд оно верное. Если кому интересно, просмотрите.
2. Хорошее решение, только при списании партий не нужно усложнять решение ИТОГАМИ, т.к. партия указывается явно, а в рамках партии списание идёт по среднему так и так. То есть нужно вынести расчёт себестоимости в запрос.
3. Я делал ещё регистр ОстаткиТоваров. Это лишнее? По идее, хватает одного партионного регистра.
-
Вот еще одно решение,
https://yadi.sk/d/Eehk7-IQZ556s
-
Моё решение. Буду рад критике
-
Всем привет!
В общем, как я понял, Движения.СтоимостьТоваров.Очистить() применять на экзамене специалист совсем не нужно (а вообще нужно, так как метод очистить() очищает оперативную память).
Но там и не догнал, нужен ли этот метод при проведении приходной накладной?
И посмотрите реализации задачи...
Буду благодарен критике и указаниями на ошибки.
-
Привет всем!
Парочка вопросов:
1) В условии задачи указывается, что помимо товаров в ТЧ документа могут быть указаны услуги. Если дополнительно ничего не указано, означает ли это, что достаточно просто разделить номенклатуру на услуги и не услуги? Или нужно завязывать на этом факте алгоритмы. Просматривал некоторые решения не все подстраивают алгоритмы под это
2) И насколько важно разбивать в данной задачи количественные и стоимостные остатки по разным регистрам накопления. С одной стороны проще сделать на одном регистре накопления, с другой стороны в этом случае не будет использоваться новая методика оперативного проведения
--------------
По поводу Движения.СтоимостьТоваров.Очистить() - тут все довольно просто. Это некоторая подстраховка. Запись движений по умолчанию производится в режиме замещения, поэтому, если движения не считаны, то они затрутся и не продублируются. Но если вытащить движения на форму или выставить флаг использовать всегда, или если скажем осуществлять проведение из обычных форм(об это хорошо излагается в одной из статей владельца форума:)), тогда движения считаются, и когда ты в своей обработке проведения к уже считанным старым движениям добавишь новые, то они, так сказать, задвоятся. Значит лучше поставить на всякий пожарный, но это, мне кажется, не критично
-
Здраствуйте, пожалуйста можете посмотреть и мое решение, а также можете задавать вопросы, подискутируем
Вложения:
_3.dt
-
Здраствуйте, пожалуйста можете посмотреть и мое решение, а также можете задавать вопросы, подискутируем
Добрый день, Odin777!
Некорректное проведение расходной накладной, в случае, когда осуществляется продажа одинаковой номенклатуры из разных партий.
Какой смысл накладывать дополнительные условия на виртуальную таблицу (Номенклатура, Партия) если в данном случае вы делаете соединение с регистром остатков по всем наборам измерений? (Возможно я сам чего-то не понимаю)
Используйте каркасную конфигурацию: http://static.1c.ru/rus/partners/training/files/Conf_83.dt
-
Некорректное проведение расходной накладной, в случае, когда осуществляется продажа одинаковой номенклатуры из разных партий.
По коду вроде все нормально, отчего такие выводы?
Какой смысл накладывать дополнительные условия на виртуальную таблицу (Номенклатура, Партия) если в данном случае вы делаете соединение с регистром остатков по всем наборам измерений? (Возможно я сам чего-то не понимаю)
Для того чтобы не делать соединение со всей таблицей остатков, а только с заранее отобранными значениями.
Единственное что бросилось в глаза, отчет по РН Продажи вместо Продажи.Обороты
-
Добрый день, выкладываю своё решение, есть три вопроса:
1) Все ли правильно было сделано в движении "РасходнаяНакладная"?
2) Все ли правильно было сделано в отчете "Продажи"?
3) Есть ли ещё какие "стандартные ошибки"?
Для отчетов надо ли(обязательно ли?) делать дополнительный параметр для времени?
(т.е. для того чтобы в отчет входили документы которые провели только что)
И философский вопрос что затратнее: "левое соединение" или "сгруппировать"?
-
Андрей_
Посмотрел расходную. Во-первых "Партия" должна быть в табличной части "...для каждого товара пользователь указывает партию".
3 пакета в запросе перебор, остатки с можно сразу связать с ВТ документа, передав в параметры номенклатуру и партию.
При расчете себестоимости не решена проблема копеек.
Нет блокировок. Нет очистки движений.
Ну вообщем как-то так. Дальше не стал смотреть.
-
Спасибо ksandr!!!
Во-первых "Партия" должна быть в табличной части "...для каждого товара пользователь указывает партию".
Мой косяк, прочитал маленько по другому:"и указанной в документе (в шапке документа) партии." - видимо остались мысли от предыдущей второй задачи...
...остатки с можно сразу связать с ВТ документа, передав в параметры номенклатуру и партию.
РегистрНакопления.ОстаткиНоменклатуры.Остатки(
&МоментВремени,
Номенклатура В
(ВЫБРАТЬ
Таб.Номенклатура
ИЗ
Таб КАК Таб),
&Партия)
КАК ОстаткиНоменклатурыОстатки
Вот так что ли?
При расчете себестоимости не решена проблема копеек.
Не совсем понял, я же указал тип Число(длина=15, точность=2)...
Нет очистки движений.
А её обязательно надо делать?
(извиняюсь за все глупые вопросы)
-
(Номенклатура, Партия) В (Выбрать
(Таб.Номенклатура,
Таб.Партия
ИЗ Таб).
Не в типе дело, надо делать проверку если списывается весь остаток, при определенных условиях после вычисления может зависнуть пару копеек в регистре, я пишу так "Движение.Сумма = ?(Выборка.Количество = Выборка.КолОст, Выборка.СумОст, Окр(Выборка.Количество / Выборка.КолОст * Выборка.СумОст, 2));", правда есть мнение, что надо СумОст / КолОст * Количество, но тут как кто решит, на форуме есть где-то тема с обсуждением копеек.
Попробуйте смоделировать ситуацию, при КолОст = 10 продать более половины, 6 например, а потом перепровести документ еще раз, в регистре еще остаются старые движения документа.
Еще немного посмотрел Ваше решение, в свойствах РН по остаткам надо ставить галочку "Разделение итогов", в свойствах конфигурации "Режим управления блокировкой данных" - "Управляемый".
-
Еще у Вас не учтено условие по услугам в приходной накладной, да и вообще услуг в базе нет.
-
(Номенклатура, Партия) В (Выбрать
(Таб.Номенклатура,
Таб.Партия
ИЗ Таб).
С этим разобрался)
...тема с обсуждением копеек...
Это на экзамене как-нибудь проверяется, заостряется на это внимание?
Попробуйте смоделировать ситуацию...
Понял, исправляю)
...надо ставить галочку "Разделение итогов"...
Не совсем понял, для чего это...
...в свойствах конфигурации...
Это понял)
Еще у Вас не учтено условие по услугам в приходной накладной...
То есть проверки, что бы не смогли в приходной положить в регистр услугу и в расходной вычесть услугу из регистра?
...да и вообще услуг в базе нет.
Не совсем понял что вы имели в виду...
В Справочник.Номенклатура - Услуга есть.
И в движение Расходной парочка проверок тоже есть))
-
"Механизм разделения итогов делает очень полезную вещь, он позволяет параллельно записывать одинаковые значения по набору измерений в регистры накопления и бухгалтерии." В каркасной конфигурации эта галочка снята намеренно, типа проверки на внимательность.
Копейки на экзамене я думаю смотрят, так как без этого у Вас регистр на 0 не выйдет, а это не есть гуд, да и делается это за пару сек.
Услуги вообще не приходят и не уходят, по ним не может быть + или -, в приходной надо на уровне выбора отсекать услуги, чтобы их нельзя было выбрать, а в расходной у Вас правильно все сделано, единственно можно добавить в расходную услугу, чтобы было видно как они у Вас проходят, правда я делаю через уже существующее перечисление "ВидыНоменклатуры".
-
Большое спасибо ksandr, за хорошие объяснения!!!))
А можете ещё посмотреть отчёт по Продажам?)
-
Да в принципе все нормально с ним, единственно можно задать формат отображения "интервала", чтобы целые числа выводились.
И еще, забыл сразу сказать, если Вы используете данные из временной таблицы то поля, которые используются надо проиндексировать, в данном случае "номенклатура" и "партия", так как они используются дальше.
-
Трёхкратное спасибо, ksandr!!!
-
Попробовал для РН сделать так запрос что бы при обработке результата избавиться от вложенного цикла.
Прокомментируйте моё решение.
-
Всем привет!
Посмотрел несколько решений, есть несколько уточнений:
1. При выводе сообщений пользователю о нехватке товара по партии много где увидел что-то типо: "Нехватает: " + Выборка.Номенклатура (Номенклатура является ссылкой на справочник) производится неявное соединение с таблицей "Номенклатура" для получения представления в виде строки, запрос в цикле, за это разве не снижают балы?
2. При установке блокировки на таблицу "ОстаткиТоваров" в расходной накладной, мне кажется, лучше установить блокировку на партию тоже т.е.
"ЭлементБлокировки.ИспользоватьИзИсточника("Партия","Партия")"
т.к. блокировать только номенклатуру не круто, мы прямо указываем из какой партии списываем, а если мы заблокируем все партии то это заблокирует работу других пользователей, если они списывают ту же номенклатуру только с другой партией.
свое решение воткнул :)
-
Мое решение, просьба покритиковать
-
Мое решение, просьба покритиковать
Есть несколько замечаний.
1. Не хватает БлокироватьДляИзменения в проведении реализации.
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Движения.ОстаткиПартийТоваров.БлокироватьДляИзменения = Истина;
Движения.ОстаткиПартийТоваров.Записать();
Движения.ОстаткиНоменклатуры.Записывать=Истина;
КонецЕсли;
Прочти http://1c.chistov.pro/2013/07/blog-post_25.html
2. МенеджерВременныхТаблиц в реализации зачем?
3. Отчет Остатки товаров. Выводится общий итог, думаю это не совсем правильно так как отчет должен выглядеть как в примере, он без общего итога. Ну это так придирка.
Мое решение ниже, буду рад любому комментарию.
-
Буду рад комментариям. Вроде получилось коротко и красиво. Остался вопрос с моментом времени для контроля остатков.
В отчете так же добавил вычисляемое поле "прибыль", которое считается на сервере (нужно поставить просто галочку).
-
Буду рад комментариям. Вроде получилось коротко и красиво. Остался вопрос с моментом времени для контроля остатков.
В отчете так же добавил вычисляемое поле "прибыль", которое считается на сервере (нужно поставить просто галочку).
Полностью решение не проверял, посмотрел только отчет по продажам
Вы почему то за количество отгрузок берете количество проданного товара вместо количества документов продажи
И вопрос: почему вы добавляете день для вычисляемых полей Интервал и Срок?
-
Мое решение.
Сделал на 1 РН, с проверкой по остаткам и остаткам по партии.
Буду благодарен за просмотр и конструктивную критику варианта решения.
-
Сделал на 1 РН
Уже минус 2 балла, так как неверно спроектированы регистры и не используется методика оперативного проведения.
-
Сделал на 1 РН
Уже минус 2 балла, так как неверно спроектированы регистры и не используется методика оперативного проведения.
Павел, добрый день!
Т.е. во всех (или почти во всех, т.е. когда это возможно) задачах ОУ рекомендуется использовать 2 РН - для контроля остатков и учета себестоимости, и даже в том случае, когда контроль остатков и расчет себестоимости производится по одним и тем же измерениям?
(Посмотрел много вариантов, и в большинстве 1 РН на эти дела, и контроль остатков по "старой методике". Получается, что все эти решения методически неверны?)
-
Сделал на 1 РН
Уже минус 2 балла, так как неверно спроектированы регистры и не используется методика оперативного проведения.
Условие задачи:
В документе «Расходная накладная», в табличной части для каждого товара пользователь указывает партию, которую необходимо списать. В том случае, если товара по указанной партии не хватает, документ не проводится и выводится соответствующее сообщение о нехватке.
Я так понимаю, что партия должна быть указана обязательно и контроль остатков нужен в разрезе двух измерений: Номенклатура и Партия. Для чего в этом случае разбивать на два РН? Не посчитается ли это минусом как добавление лишнего регистра?
-
Буду рад комментариям. Вроде получилось коротко и красиво. Остался вопрос с моментом времени для контроля остатков.
Не используется оперативное проведение. Для чего запрашивать количество остатков по партии перед проведением? Можно списать как есть, а после проверить, не ушли ли остатки в минус
-
свое решение воткнул :)
Не используется "новая методика проведения", нет защиты против оперативного перепроведения документов (остатки считываются с учетом собственных движений, т.к. МоментВремени() каждый раз смещается)
-
Мое решение.
Сделал на 1 РН, с проверкой по остаткам и остаткам по партии.
Буду благодарен за просмотр и конструктивную критику варианта решения.
Индекс по ЭтоТовар - лишний. Во-первых, примитивного типа и смысла его индексировать нету, а во-вторых - отбор по ЭтоТовар в полученный составной индекс всё равно не попадает.
-
Выкладываю свой вариант, буду благодарен за критику
-
Все-таки как правильно делать блокировки по РН ОстаткиНоменклатуры?
1)Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
Блокировка.Заблокировать();
2)Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Движения.ОстаткиНоменклатуры.Записать();
Или 2 пункт не нужен??
-
Все-таки как правильно делать блокировки по РН ОстаткиНоменклатуры?
1)Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
Блокировка.Заблокировать();
2)Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Движения.ОстаткиНоменклатуры.Записать();
Или 2 пункт не нужен??
Вы нифига не понимаете в том что пишете.
-
Для GROOVY Павел подскажите лучше, почему в документе переоценка (если задача связана с валютой)
мы не ставим блокировку на Управленческий. (А ведь читаем остатки сначала запросом и только потом движения в зависимости от Разницы)
-
Все-таки как правильно делать блокировки по РН ОстаткиНоменклатуры?
1)Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
Блокировка.Заблокировать();
2)Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Движения.ОстаткиНоменклатуры.Записать();
Или 2 пункт не нужен??
Вы нифига не понимаете в том что пишете.
Хотелось бы разобраться, вот и спрашиваю
-
ak8647 не обижайся просто эта тема особенно для проведения документов в задачах по ОУ уже такая избитая
по твоему вопросу
контроль остатков сначала пишеш потом читаеш
поэтому сначала идет конструкция Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; (это только маркер)
блокировка будет когда Движения.Записать()
а потом нужно списать себестоимость
а там уже ты сначала читаеш потом пишеш
поэтому
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
Блокировка.Заблокировать();
это если ну ооочень кратко
-
ak8647 не обижайся просто эта тема особенно для проведения документов в задачах по ОУ уже такая избитая
по твоему вопросу
контроль остатков сначала пишеш потом читаеш
поэтому сначала идет конструкция Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; (это только маркер)
блокировка будет когда Движения.Записать()
а потом нужно списать себестоимость
а там уже ты сначала читаеш потом пишеш
поэтому
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
Блокировка.Заблокировать();
это если ну ооочень кратко
Спасибо большое! Я просто в ветке смотрел "Для тех кто сейчас в процессе подготовки", а там все обсуждают с чего начать. Мне кажет нужно брать и делать, а если что, спросить у тех кто с этим сталкивался. Еще раз спасибо.
-
ak8647 не обижайся просто эта тема особенно для проведения документов в задачах по ОУ уже такая избитая
по твоему вопросу
контроль остатков сначала пишеш потом читаеш
поэтому сначала идет конструкция Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; (это только маркер)
блокировка будет когда Движения.Записать()
а потом нужно списать себестоимость
а там уже ты сначала читаеш потом пишеш
поэтому
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Партия", "Партия");
Блокировка.Заблокировать();
это если ну ооочень кратко
Спасибо большое! Я просто в ветке смотрел "Для тех кто сейчас в процессе подготовки", а там все обсуждают с чего начать. Мне кажет нужно брать и делать, а если что, спросить у тех кто с этим сталкивался. Еще раз спасибо.
И еще, можно мне ссылку, где эту тему "избивают". Хотелось бы почитать.
-
Ну например здесь http://forum.chistov.pro/index.php?topic=1999.msg22182#msg22182 (http://forum.chistov.pro/index.php?topic=1999.msg22182#msg22182)
-
Я когда читал запутался насмерть
-
Ну например здесь http://forum.chistov.pro/index.php?topic=1999.msg22182#msg22182 (http://forum.chistov.pro/index.php?topic=1999.msg22182#msg22182)
спасибо
-
И еще, можно мне ссылку, где эту тему "избивают". Хотелось бы почитать.
А вот здесь всё четко разложено по полочкам
http://1c.chistov.pro/2013/07/blog-post_25.html
Имейте ввиду, что на экзамене можно запрещать оперативное проведение со всеми вытекающими (упрощающими) последствиями.
-
И еще, можно мне ссылку, где эту тему "избивают". Хотелось бы почитать.
А вот здесь всё четко разложено по полочкам
http://1c.chistov.pro/2013/07/blog-post_25.html
Имейте ввиду, что на экзамене можно запрещать оперативное проведение со всеми вытекающими (упрощающими) последствиями.
А в чем заключаются эти упрощающиеся последствия?
-
Все-таки в задаче должно быть 3 РН (ОстаткиТоваров, СтоимостьТоваров, Продажи), а не 2 (ОстаткиНоменклатуры, Продажи). ОстаткиНоменклатуры разбиваются на два (для демонстрации Методики оперативного проведения).
-
Все-таки в задаче должно быть 3 РН
откуда такая уверенность?
-
Все-таки в задаче должно быть 3 РН
откуда такая уверенность?
Ответ 179 и на него ответ 180
-
Выкладываю свой вариант, буду благодарен за критику
Отчет "Продажи" формируется не совсем правильно - если за один день было несколько отгрузок в поле "Интервал" выводится "разовая". По условию задачи "разовая" должно выводиться когда была только одна отгрузка.
-
На всеобщее обозрение ;)
-
Скажите пожалуйста какими измерениями и ресурсами должны обладать регистры накопления остатки, если решать эту задачу 2 регистрами! Как я понял, надо сделать регистр ОстаткиНоменклатуры с измерениями и ресурсами: Номенклатура, Партия и Количество. И сделать регистр СтоимостьНоменклатуры с измерениями и ресурсами: Номенклатура, Количество и Стоимость. Но если сделать так то себестоимость будет рассчитываться как средняя по номенклатуре, правильно ли это?
-
Скажите пожалуйста какими измерениями и ресурсами должны обладать регистры накопления остатки, если решать эту задачу 2 регистрами! Как я понял, надо сделать регистр ОстаткиНоменклатуры с измерениями и ресурсами: Номенклатура, Партия и Количество. И сделать регистр СтоимостьНоменклатуры с измерениями и ресурсами: Номенклатура, Количество и Стоимость. Но если сделать так то себестоимость будет рассчитываться как средняя по номенклатуре, правильно ли это?
не правильно, если хотите сделать двумя регистрами, тогда
надо сделать регистр ОстаткиНоменклатуры с измерениями и ресурсами: Номенклатура и Количество. И сделать регистр СтоимостьНоменклатуры с измерениями и ресурсами: Номенклатура,Партия, Количество и Стоимость
-
iipobaji, я над таким вариантом тоже думал но смысл тогда такой методики? Получается мы должны два раза контролировать остатки или я не так понял?
-
ну если мы изначально предполагаем что у нас данные по количеству в разных регистрах на любой момент времени совпадают, тогда можно контролировать остатки только по одному регистру... Я лично делал 1 регистр ОстаткиНоменклатуры, где Номенклатура, Партия И Количество, Стоимость, мы же и из этого регистра можем получить остатки номенклатуры без разреза Партий
-
ну если мы изначально предполагаем что у нас данные по количеству в разных регистрах на любой момент времени совпадают, тогда можно контролировать остатки только по одному регистру... Я лично делал 1 регистр ОстаткиНоменклатуры, где Номенклатура, Партия И Количество, Стоимость, мы же и из этого регистра можем получить остатки номенклатуры без разреза Партий
Спасибо за ответ!
-
Добрый вечер! посмотри пожалуйста базу и напишите комментарии, отчёт где-то подсмотрела , но тоже не знаю, правильно ли
-
Очень прошу покритиковать. Заранее спасибо.
-
Решение задания была попытка в скд отчет сделать описав нужные поля предварительно получив запросом сведения об оборотном регистре Продажи с параметром Периодичности равным ПоРегистратору. Но сделал в итоге в запросе. Остальное в базе.
Жду вопросов и замечаний.
-
Выкладываю свое решение. Буду очень признателен если посмотрите решение на наличие ошибок.
-
Всем привет! Поглядите на решение пожалуйста :)
Для использования "новой методики" контроля остатков решение основано на 3-х регистрах.
Если решать по "старой методике", то возможно всё реализовать на 2-х регистрах (поглядел в теме - кажется все решают на 2-х регистрах). Будет ли ошибкой такое "упрощение" через создание дополнительного регистра?
-
Здравствуйте! Скажите, надо ли считать срок у услуги? Просто в условии в отчете "Продажи" у "Доставка" стоит пустое значение, но пустое значение может быть при условии, что последняя отгрузка была сегодня
-
Посмотрите пожалуйста мое решение, возможно что то можно сделать проще или вообще что то нужно сделать по другому?
-
Всем привет! Поглядите на решение пожалуйста :)
Для использования "новой методики" контроля остатков решение основано на 3-х регистрах.
Если решать по "старой методике", то возможно всё реализовать на 2-х регистрах (поглядел в теме - кажется все решают на 2-х регистрах). Будет ли ошибкой такое "упрощение" через создание дополнительного регистра?
No Pasaran, не знаю точно будет ли ошибкой или нет, так как еще "граль" по методике не нашел))) Но он уже близко и мнение мое такое:
Есть смысл использовать новую методику, если данные для списания не надо тащить из регистров остатка, классически это "Остатки номенклатуры".
Например при списании партий в порядке фифо или лифо, чтобы там не намудрили в порядке чтения/запись, все равно надо лезть в "ОстаткиНоменклатуры", чтобы определить порядок партий и как их надо списывать по стоимости. А если лезем в остатки номенклатуры то и соответственно блокируем все явной управляемой блокировкой. Смысл что если мы туда лезем с блокировкой за ценами себестоимости и порядком партий, то и остаток мы проверим в этом случае. Менять смысла нет что то в "Пишем потом проверяем или наоборот проверяем потом пишем".
А вот есть ситуации другие.
У нас есть регистр сведений "Цены поставщиков" и есть "Расходная накладная". Нет партионного учета. Что нам надо чтобы сделать расход? А надо список номенклатуры и левым соединением регистр цен прикрутить и дальше сделать просто расход по регистру "Остатки номенклатуры". Тут то как раз и прокатит новая методика. Нам не надо лезть в Остатки предварительно, чтобы узнать цену себестоимости и мы не лочим предварительно "Остатки номенклатуры", мы просто туда пишем, делая расход с флагом "БлокироватьДляИзменения".
Ну вот как то так.
Если ошибаюсь, то с удовольствием выслушаю мнение других, но мне кажется я двигаюсь в верном направлении.
Считаю задачу надо делать старым методом. Так как нам надо лезть за остатками по партии и ценой партии.
-
Решил 1.3, тактика по такому типу задач вроде сформировалась. Но на сто процентов не уверен, посмотрите пожалуйста, может что то не учел.
-
Решил 1.3, тактика по такому типу задач вроде сформировалась. Но на сто процентов не уверен, посмотрите пожалуйста, может что то не учел.
Записать пустые движения расходной можно только при оперативном проведении, а не всегда. Напутано с моментом времени и режимом проведения.Приходная пишет услуги в регистр остатков. В запросе отчета по продажам не понятно, зачем проверять знак разности дат, конечная дата будет всегда меньше или равна концу периода. Ну и не оптимально будет продолжать заполнять движения, если уже встретилась нехватка. Себестоимость можно добавить в регистр продажи, тогда упростится запрос к отчету по продажам
-
Решил 1.3, тактика по такому типу задач вроде сформировалась. Но на сто процентов не уверен, посмотрите пожалуйста, может что то не учел.
Записать пустые движения расходной можно только при оперативном проведении, а не всегда. Напутано с моментом времени и режимом проведения.Приходная пишет услуги в регистр остатков. В запросе отчета по продажам не понятно, зачем проверять знак разности дат, конечная дата будет всегда меньше или равна концу периода. Ну и не оптимально будет продолжать заполнять движения, если уже встретилась нехватка. Себестоимость можно добавить в регистр продажи, тогда упростится запрос к отчету по продажам
Glow спасибо за комментарии!
1. Записать пустые движения расходной можно только при оперативном проведении, а не всегда.
Я думал об этом моменте и пришел к выводу что не нужно ставить здесь проверку. Пусть затирается всегда. Мое мнение основано на курсах 1С "Оперативный учет", там у них в методичке нет такой проверки.
А вот проверка в параметре запроса имеется и о этой проверке там явно написано. На основании этого решил не добавлять эту проверку для записи(очистки) движений.
2. Напутано с моментом времени и режимом проведения.
Тут согласен, немного перепутал. Поменял местами "Оперативный" и "Не оперативный" в условии
3. Приходная пишет услуги в регистр остатков.
Тут ответ аналогичен ответу в первом посте. Нет такого в методологии 1С. Я не встречал на курсах такой проверки и не видел в методичке. А раз требований к этому нет, то я решил не тратить время на эту проверку.
4. В запросе отчета по продажам не понятно, зачем проверять знак разности дат, конечная дата будет всегда меньше или равна концу периода.
Тут исправил. Действительно от этой проверки можно отказаться, поменяв параметры в функции РазностьДат.
5. Ну и не оптимально будет продолжать заполнять движения, если уже встретилась нехватка.
Тут я не согласен. Нам не только надо отменить проведение при нехватке хотя бы одного товара, но еще и показать пользователю "какого" товара не хватает. А это не обязательно будет только один товар. Их по накладной может быть несколько. Так пользователь попробовал провести и вылетел на первом товаре, потом исправил и вылетел на втором и т.д.... Оптимальнее как раз будет если он получит информацию по всем нехваткам сразу. Проверка и движения заполняются одним циклом, а поэтому я его и кручу до конца. Ну и опять же в методичке 1С такой алгоритм проведения используется.
6. Себестоимость можно добавить в регистр продажи, тогда упростится запрос к отчету по продажам
Я не слышал чтобы за такой прием как вы предлагаете, снимали балы или это являлось ошибкой, но так как вы говорите, это прием на мой взгляд не очень хороший. Как правило вы будете дублировать себестоимость в двух регистрах. Дублировать всегда плохо не только из за увеличения хранения данных, но и из за синхронизации дублированности. Методологи 1С так не делают.
Ну вот как то так, будут мысли велкам!
-
3. Это грубая ошибка не выведение регистра остатков в 0. Ну и по логике, как понять хранение доставки или сборки на остатках предприятия.
5. Имел ввиду лишние действия записи движений. Если появилась нехватка стоит сразу перейти к следующей итерации, создавать и заполнять движения при этом лишний труд. В реальных сильно нагруженных системах это может заметно тормозить проведение документов.
Я сам недавно начал готовится и думаю инфу стоит черпать не только из курсов
-
3. Это грубая ошибка не выведение регистра остатков в 0. Ну и по логике, как понять хранение доставки или сборки на остатках предприятия.
5. Имел ввиду лишние действия записи движений. Если появилась нехватка стоит сразу перейти к следующей итерации, создавать и заполнять движения при этом лишний труд. В реальных сильно нагруженных системах это может заметно тормозить проведение документов.
Я сам недавно начал готовится и думаю инфу стоит черпать не только из курсов
3. Это не ошибка. Не выведение в ноль это относится к структуре регистра целиком. У меня регистр позволяет закрыть в ноль, пожалуйста, спишите в расходной доставку, если решили приходовать ее в приходной.
А вот например добавьте в регистр остатков реквизит "СуммаПродажи". Вот тут ошибка, в ноль не спишется "СуммаПродажи".
В задании про приход нет ни слова про услуги, а в расходной четкий акцент на то что услуги не должны быть.
Теоретически можно запретить ввод услуг в форме, в ТЧ с помощью свойства "Параметры выбора" у номенклатуры.
Но опять же это время, причем никто не оценит.
5. Я так и не понял. Там есть цикл и есть условие в котором "Иначе". Если не хватает то в "иначе" не идем вообще и не заполняем движения.
Если имели ввиду регистр "Продажи", то теоретически можно проверить на "Отказ", но мне кажется этот код не имеет большой стоимости для производительности, так как выполняется в памяти.
-
Добрый день посмотрите решение.
-
Решил с использованием идеологии П.Чистова "число регистров всегда равно числу показателей учета". А их в этой задаче 3: остатки, себестоимость и продажа. При этой схеме появилась возможность использовать "новый" метод контроля остатков. Отчет вышел не слишком сложным вроде. Одним словом, кому надо, может покритиковать:)
-
покритикуйте пожалуйста
-
Отчет продажи - срок, интервал - на уровне запроса, прибыль - вычисляемое поле скд (демонстрация умения пользоваться). На основе таблицы Продажи. Есть вариант на основе Вирт.таблицы продаж, с периодичностью регистратор
Реализовано на 2 регистрах:
- ОстаткиНоменклатуры (Номенклатура, Партия), (Количество, Сумма)
- Продажи (Номенклатура), (Количество, Сумма, Себестоимость)
В док. реализация обрабатывается момент наличия одного товара 2 раза (списание по одной партии).
При попытке провести Реализацию с указанием еще не пришедшей партии - уведомляет о недостаче товара (расход 01.01., а поступление 01.02)
Критика принимается )
-
а где отчет "остатки"?
Решил с использованием идеологии П.Чистова "число регистров всегда равно числу показателей учета". А их в этой задаче 3: остатки, себестоимость и продажа. При этой схеме появилась возможность использовать "новый" метод контроля остатков. Отчет вышел не слишком сложным вроде. Одним словом, кому надо, может покритиковать:)
-
Подскажите, какая в отчете "Остатки" (в условии задачи) стоит "Стоимость"?
При проведении расходной накладной в Регистр Остатков мы ее пишем, но берем из строки ТЧ документа и понимается
под этим как просто "за сколько продали" ? или это рассчитанное значение по средней, например?
Посмотрел в решениях, кто как делает.
-
Подскажите, какая в отчете "Остатки" (в условии задачи) стоит "Стоимость"?
При проведении расходной накладной в Регистр Остатков мы ее пишем, но берем из строки ТЧ документа и понимается
под этим как просто "за сколько продали" ? или это рассчитанное значение по средней, например?
Посмотрел в решениях, кто как делает.
На мой взгляд, в отчете "остатки" стоимость оставшихся партий в ценах закупки, т.е. та стоимость, что была записана приходной накладной. При проведении расходной накладной эта стоимость уменьшается пропорционально количеству списываемого(продаваемого) от начальной стоимости партии.
Рассчитывать стоимость партии по средней или по ФИФО не нужно, ведь в условии сказано, что партия указывается в табл части, т.е. для каждой строки номенклатуры.
-
Моё решение. Буду рад критике.
-
Моё решение. Буду рад критике.
У вас идет обращение к реальной таблице регистра без крайней необходимости, что не приветствуется на экзамене.
Есть таблица оборотов - надо использовать ее.
Большинство решающих делают вот так
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
СУММА(ПродажиОбороты.СебестоимостьОборот) КАК Себестоимость,
СУММА(ПродажиОбороты.СуммаОборот) КАК Сумма,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор) КАК Регистратор,
МАКСИМУМ(ПродажиОбороты.Период) КАК ДатаПоследнейОтгрузки,
МИНИМУМ(ПродажиОбороты.Период) КАК ДатаПервойОтгрузки
ИЗ
РегистрНакопления.Продажи.Обороты(&ПериодНачало, &ПериодКонец, Регистратор, ) КАК ПродажиОбороты
СГРУППИРОВАТЬ ПО
ПродажиОбороты.Номенклатура
Это почти равносильно взятию данных из реальной таблицы. Потом еще система сворачивает все это агрегатными функциями.
На мой взгляд, самое правильное решение отчета по продажам у товарища Odin777. У других такого не увидел.
Он там отдельно получает во временную таблицу количество отгрузок, и даты первой и последней отгрузок.
Ресурсы он получает из виртуальной таблицы оборотов регистра - эта таблица специально создана для максимально эффективного извлечения данных.
Вот правда в формулировке задачи кое что непонятно.
Дата первой отгрузки, дата последней отгрузки и количество отгрузок имеется ввиду в заданном периоде отчета или вообще за всю историю ведения базы?
-
Моё решение. Буду рад критике.
У вас идет обращение к реальной таблице регистра без крайней необходимости, что не приветствуется на экзамене.
Есть таблица оборотов - надо использовать ее.
Большинство решающих делают вот так
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
СУММА(ПродажиОбороты.СебестоимостьОборот) КАК Себестоимость,
СУММА(ПродажиОбороты.СуммаОборот) КАК Сумма,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор) КАК Регистратор,
МАКСИМУМ(ПродажиОбороты.Период) КАК ДатаПоследнейОтгрузки,
МИНИМУМ(ПродажиОбороты.Период) КАК ДатаПервойОтгрузки
ИЗ
РегистрНакопления.Продажи.Обороты(&ПериодНачало, &ПериодКонец, Регистратор, ) КАК ПродажиОбороты
СГРУППИРОВАТЬ ПО
ПродажиОбороты.Номенклатура
Это почти равносильно взятию данных из реальной таблицы. Потом еще система сворачивает все это агрегатными функциями.
На мой взгляд, самое правильное решение отчета по продажам у товарища Odin777. У других такого не увидел.
Он там отдельно получает во временную таблицу количество отгрузок, и даты первой и последней отгрузок.
Ресурсы он получает из виртуальной таблицы оборотов регистра - эта таблица специально создана для максимально эффективного извлечения данных.
Вот правда в формулировке задачи кое что непонятно.
Дата первой отгрузки, дата последней отгрузки и количество отгрузок имеется ввиду в заданном периоде отчета или вообще за всю историю ведения базы?
за указанный период пользователем с и по
-
Подскажите, какая в отчете "Остатки" (в условии задачи) стоит "Стоимость"?
При проведении расходной накладной в Регистр Остатков мы ее пишем, но берем из строки ТЧ документа и понимается
под этим как просто "за сколько продали" ? или это рассчитанное значение по средней, например?
Посмотрел в решениях, кто как делает.
На мой взгляд, в отчете "остатки" стоимость оставшихся партий в ценах закупки, т.е. та стоимость, что была записана приходной накладной. При проведении расходной накладной эта стоимость уменьшается пропорционально количеству списываемого(продаваемого) от начальной стоимости партии.
Рассчитывать стоимость партии по средней или по ФИФО не нужно, ведь в условии сказано, что партия указывается в табл части, т.е. для каждой строки номенклатуры.
С отчетом понял, выводим просто ту стоимость, которая есть в строке ТЧ документа. Да и в задании не сказано что именно. Додумывать нет смысла.
При списании мы себестоимость считаем как? количество из ТЧ/количество из регистра остатки * стоимостьОстаток из Регистра. все верно?
-
Подскажите, какая в отчете "Остатки" (в условии задачи) стоит "Стоимость"?
При проведении расходной накладной в Регистр Остатков мы ее пишем, но берем из строки ТЧ документа и понимается
под этим как просто "за сколько продали" ? или это рассчитанное значение по средней, например?
Посмотрел в решениях, кто как делает.
На мой взгляд, в отчете "остатки" стоимость оставшихся партий в ценах закупки, т.е. та стоимость, что была записана приходной накладной. При проведении расходной накладной эта стоимость уменьшается пропорционально количеству списываемого(продаваемого) от начальной стоимости партии.
Рассчитывать стоимость партии по средней или по ФИФО не нужно, ведь в условии сказано, что партия указывается в табл части, т.е. для каждой строки номенклатуры.
С отчетом понял, выводим просто ту стоимость, которая есть в строке ТЧ документа. Да и в задании не сказано что именно. Додумывать нет смысла.
При списании мы себестоимость считаем как? количество из ТЧ/количество из регистра остатки * стоимостьОстаток из Регистра. все верно?
Да. Но лучше сначала умножить а потом делить, чтобы погрешность была меньше, т.е.
количество из ТЧ * стоимостьОстаток из Регистра / количество из регистра остатки
-
Моё решение. Буду рад критике.
У вас идет обращение к реальной таблице регистра без крайней необходимости, что не приветствуется на экзамене.
Есть таблица оборотов - надо использовать ее.
Большинство решающих делают вот так
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
СУММА(ПродажиОбороты.СебестоимостьОборот) КАК Себестоимость,
СУММА(ПродажиОбороты.СуммаОборот) КАК Сумма,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Регистратор) КАК Регистратор,
МАКСИМУМ(ПродажиОбороты.Период) КАК ДатаПоследнейОтгрузки,
МИНИМУМ(ПродажиОбороты.Период) КАК ДатаПервойОтгрузки
ИЗ
РегистрНакопления.Продажи.Обороты(&ПериодНачало, &ПериодКонец, Регистратор, ) КАК ПродажиОбороты
СГРУППИРОВАТЬ ПО
ПродажиОбороты.Номенклатура
Это почти равносильно взятию данных из реальной таблицы. Потом еще система сворачивает все это агрегатными функциями.
На мой взгляд, самое правильное решение отчета по продажам у товарища Odin777. У других такого не увидел.
Он там отдельно получает во временную таблицу количество отгрузок, и даты первой и последней отгрузок.
Ресурсы он получает из виртуальной таблицы оборотов регистра - эта таблица специально создана для максимально эффективного извлечения данных.
Спасибо!
-
Ребята. посмотрите решение.
1. Не могу разобраться с избитой проблемой. нашел ее. это при оперативном проведении расходной накладной у меня учитываются данные документа проводимого и расчет себестоимости неверный. при неоперативном все гуд.
Вот кусок кода.
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
Движения.СтоимостьТоваров.Записать();
Иначе
Time = МоментВремени();
КонецЕсли;
2. во вложении картинка отчета. не выводится вариант "разовая".
Помогите разобраться!
-
Ребята. посмотрите решение.
1. Не могу разобраться с избитой проблемой. нашел ее. это при оперативном проведении расходной накладной у меня учитываются данные документа проводимого и расчет себестоимости неверный. при неоперативном все гуд.
Вот кусок кода.
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
Движения.СтоимостьТоваров.Записать();
Иначе
Time = МоментВремени();
КонецЕсли;
2. во вложении картинка отчета. не выводится вариант "разовая".
Помогите разобраться!
1. Вообще ничего не понял. По моему бред вообще какой то.
2. При расчете интервала используйте КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СтоимостьТоваров.Регистратор) вы используете просто КОЛИЧЕСТВО. В ресурсе когда ставите Сумма(Интервал) - разовая исчезает. Нужно рассчитывать интервал в ресурсах
Выбор Когда Количество (Различные Регистратор)>1 Тогда РазностьДат (Минимум (Период), Максимум(Период), "День")/Количество (Различные Регистратор) Иначе "Разовая" Конец
Вот так решение freez1301 из ветки билет 2
-
Доброго времени суток, оцените решение
https://cloud.mail.ru/public/GSpn/2Huh8VHRa (https://cloud.mail.ru/public/GSpn/2Huh8VHRa)
-
Мое решение) Нуждаюсь в критике и оценке!)) Заранее большое спасибо)
P.S. Как вести учёт по услугам?
-
1. В спр Номенклатура реквизит Услуга должен иметь тип "Перечисления.ВидыНоменклатуры".
2. В ПрихНакл в ОбработкеПроведения нужно не создавать записи движения.ОстаткиНоменклатуры. А то остатки по услугам будут:
Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
Если ТекСтрокаСписокНоменклатуры.Номенклатура.ВидНоменкалтуры=Перечисления.ВидыНоменклатуры.Услуга Тогда
Продолжить;
КонецЕсли;
Движение = Движения.ОстаткиНоменклатуры.Добавить();
3. Рекомендуют записывать НаборыЗаписей не по отдельности:
Движения.ОстаткиНоменклатуры.Записывать=Истина;
Движения.ОстаткиНоменклатуры.Очистить();
Движения.ОстаткиНоменклатуры.Записать();
Движения.Продажи.Записывать=Истина;
Движения.Продажи.Очистить();
Движения.Продажи.Записать();
а все движения сразу. Но регистр продажи в данном случае записывать вообще не нужно. Мы ведь его не читаем и вообще ничего с ним не делаем. Если записывает вместе(а не по отделности каждый регистр) то взаимоблокировок не будет, но в данном конкретном случае их и там не было бы, потому как записываемые регистры записываются в той последовательности в которой они описаны в конфигурации. Т.е очередность совпадает. Так что я не уверен что за это могут снизить бал. Я бы сделал так:
Движения.ОстаткиНоменклатуры.Записывать=Истина;
Движения.ОстаткиНоменклатуры.Очистить();
Движения.Записать();
Движения.Продажи.Записывать=Истина;
Движения.Продажи.Очистить();
4. Блокировка должна идти перед записью. Только вот как именно я еще пока не разобрался или через БлокироватьДляИзменения у самого набора или Через блокировку данных. Или вообще и так и так. Многие пишут что нужно делать и так и так.
5. Параметры вертуальной таблицы остатки корректнее задавать не
Номенклатура В
(ВЫБРАТЬ
СписокНоменклатуры.Номенклатура
ИЗ
СписокНоменклатуры КАК СписокНоменклатуры)
И Партия В
(ВЫБРАТЬ
СписокНоменклатуры.Партия
ИЗ
СписокНоменклатуры КАК СписокНоменклатуры)
, а так
(Номенклатура, Партия) В
(ВЫБРАТЬ
СписокНоменклатуры.Номенклатура,
СписокНоменклатуры.Партия
ИЗ
СписокНоменклатуры КАК СписокНоменклатуры)
6. Когда заходите в цикл по партиям нужно проверять, а не услуга ли у Вас часом. Если услуга, то продолжить;. Так она в движения по Продажам попадет с 0 себестоимостью. По идее на остатках услуги быть не может и соответсвенноданных в регистры не будет. Поэтому хорошо что Вы проверяете в запросе на ЕстьNULL.
7. Так не надо делать. Потому как система сама строит мини-запрос для получения представления номенклатуры, когда вы так обращаетесь к ней.
Сообщение.Текст = "Номенклатуры "+ВыборкаДетальныеЗаписи.Номенклатура+" в партии "+ВыборкаДетальныеЗаписи.Партия
+" не хватает в количестве "+ Строка(ВыборкаДетальныеЗаписи.Количество-ВыборкаДетальныеЗаписи.КоличествоОстаток )+" ед.";
Нужно в запросе получить представление по номенклатуре и представление по партии, помимо самой номенклатуры и партии, а в тексте делать примерно так
Сообщение.Текст = "Номенклатуры "+ВыборкаДетальныеЗаписи.НоменклатураПредставление+" в партии "+ВыборкаДетальныеЗаписи.ПартияПредставление
+" не хватает в количестве "+ Строка(ВыборкаДетальныеЗаписи.Количество-ВыборкаДетальныеЗаписи.КоличествоОстаток )+" ед.";
8. Отчет мне Ваш очень понравился) Прям вообще) Все просто) Единственно что, наверно следует на вкладке ресурсы в СКД добавить показатели типо Себестоимость, количество, Интервал и срок, но при этом не упускать из вида что формула для них будет особенная, но судя по вычисляемому полю "Интервал" у Вас с этим проблем не возникнет). Ох что то я поторопился Вас хвалить(
РазностьДата(ПерваяОтгрузка,ПоследняяОтгрузка)
РазностьДат(ПерваяОтгрузка,ПоследняяОтгрузка, "День")
Чувствуете разницу? Как раз и поля Интервал...
9. Ну ту совсем чуток недоглядели:
МИНИМУМ(ПродажиОбороты.Регистратор.Дата) КАК ПоследняяОтгрузка
Максимум(ПродажиОбороты.Регистратор.Дата) КАК ПерваяОтгрузка
Нужно все таки Максимум и Минимум местами поменять.
Все это мое мнение, если кто-нибудь думает по другому) Прошу отписаться)
-
Мое решение) Нуждаюсь в критике и оценке!)) Заранее большое спасибо)
P.S. Как вести учёт по услугам?
Смотрите чуть Выше)
-
Добрый день, коллеги. Буду рад конструктивным отзывам.
-
Коллеги, добрый день!
По задаче непонятно:
Параграф 3. необходимо предупреждение о нехватке номенклатуры
Параграф 4. необходимо предупреждение о нехватке товара по конкретной партии указанной в в документе.
Получается, что нужно по два предупрепреждающих сообщения на каждую номенклатуру выводить. Есть ли в этом хоть какой-то смысл?
Допустим в документе указан одна номенклатура и партия в разных строках. Для привязки сообщения об ошибки к конкретной строке документа, как определить на какой строке документа партия закончилась? Походу никто кроме меня не обратил вниманиия на сей момент в постановке задачи.
Какие будут мысли???
Вместо того чтобы выкладывать базу привожу самое интересное по задаче, а именно сам запрос которым я получаю все данные для проведения по регистрам остаткитоваров и продажи:
ВЫБРАТЬ
Расходная.Номенклатура КАК Номенклатура,
Расходная.Партия КАК Партия,
СУММА(Расходная.Количество) КАК Количество,
СУММА(Расходная.Сумма) КАК Сумма,
МИНИМУМ(Расходная.НомерСтроки) КАК НомерСтроки,
МИНИМУМ(Расходная.Номенклатура.ВидНоменклатуры) КАК ВидНоменклатуры
ПОМЕСТИТЬ втДанныеДокумента
ИЗ
Документ.РасходнаяНакладная.СписокНоменклатуры КАК Расходная
ГДЕ
Расходная.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
Расходная.Номенклатура,
Расходная.Партия
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Партия
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Остатки.Номенклатура КАК Номенклатура,
Остатки.Партия,
ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК КоличествоПартии,
ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК СуммаПартии,
ДанныеДокумента.Количество КАК КоличествоДокумента,
ДанныеДокумента.Сумма КАК СуммаДокумента,
ДанныеДокумента.НомерСтроки КАК НомерСтроки,
ВЫБОР
КОГДА ДанныеДокумента.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ КАК Товар
ИЗ
втДанныеДокумента КАК ДанныеДокумента
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
&Момент,
(Номенклатура, Партия) В
(ВЫБРАТЬ
ДанныеДокумента.Номенклатура,
ДанныеДокумента.Партия
ИЗ
втДанныеДокумента КАК ДанныеДокумента)) КАК Остатки
ПО ДанныеДокумента.Номенклатура = Остатки.Номенклатура
И ДанныеДокумента.Партия = Остатки.Партия
ИТОГИ
СУММА(КоличествоПартии),
СУММА(КоличествоДокумента),
СУММА(СуммаДокумента),
МИНИМУМ(НомерСтроки),
МИНИМУМ(Товар)
ПО
Номенклатура
Говлюсь к сдаче осилил всю ветку. Походу так и нет единого мнения по методике проведения расходной и количеству регистров.
Хочу высказать свое мнение. Новую методику нужно использовать только в системах где используется метод допроведение документов неоперативно по себестоимости.
Использовать методику только для оперативного списания товара только по количественному учету в течении месяца. По концу месяца обработочкой проходимся и пишем среднюю взвешанную за месяц по документам. Как правило скользящая оценка стоимости искажает финансовые данные.
Из сказанного следует, что методику нового проведения нет нужды реализовывать на экзамене ибо таких задач на допроведение в задачнике нет.
-
Коллеги, добрый день!
По задаче непонятно:
Параграф 3. необходимо предупреждение о нехватке номенклатуры
Параграф 4. необходимо предупреждение о нехватке товара по конкретной партии указанной в в документе.
Получается, что нужно по два предупрепреждающих сообщения на каждую номенклатуру выводить. Есть ли в этом хоть какой-то смысл?
Допустим в документе указан одна номенклатура и партия в разных строках. Для привязки сообщения об ошибки к конкретной строке документа, как определить на какой строке документа партия закончилась? Походу никто кроме меня не обратил вниманиия на сей момент в постановке задачи.
Какие будут мысли???
Вместо того чтобы выкладывать базу привожу самое интересное по задаче, а именно сам запрос которым я получаю все данные для проведения по регистрам остаткитоваров и продажи:
ВЫБРАТЬ
Расходная.Номенклатура КАК Номенклатура,
Расходная.Партия КАК Партия,
СУММА(Расходная.Количество) КАК Количество,
СУММА(Расходная.Сумма) КАК Сумма,
МИНИМУМ(Расходная.НомерСтроки) КАК НомерСтроки,
МИНИМУМ(Расходная.Номенклатура.ВидНоменклатуры) КАК ВидНоменклатуры
ПОМЕСТИТЬ втДанныеДокумента
ИЗ
Документ.РасходнаяНакладная.СписокНоменклатуры КАК Расходная
ГДЕ
Расходная.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
Расходная.Номенклатура,
Расходная.Партия
ИНДЕКСИРОВАТЬ ПО
Номенклатура,
Партия
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Остатки.Номенклатура КАК Номенклатура,
Остатки.Партия,
ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК КоличествоПартии,
ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК СуммаПартии,
ДанныеДокумента.Количество КАК КоличествоДокумента,
ДанныеДокумента.Сумма КАК СуммаДокумента,
ДанныеДокумента.НомерСтроки КАК НомерСтроки,
ВЫБОР
КОГДА ДанныеДокумента.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ КАК Товар
ИЗ
втДанныеДокумента КАК ДанныеДокумента
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
&Момент,
(Номенклатура, Партия) В
(ВЫБРАТЬ
ДанныеДокумента.Номенклатура,
ДанныеДокумента.Партия
ИЗ
втДанныеДокумента КАК ДанныеДокумента)) КАК Остатки
ПО ДанныеДокумента.Номенклатура = Остатки.Номенклатура
И ДанныеДокумента.Партия = Остатки.Партия
ИТОГИ
СУММА(КоличествоПартии),
СУММА(КоличествоДокумента),
СУММА(СуммаДокумента),
МИНИМУМ(НомерСтроки),
МИНИМУМ(Товар)
ПО
Номенклатура
Говлюсь к сдаче осилил всю ветку. Походу так и нет единого мнения по методике проведения расходной и количеству регистров.
Хочу высказать свое мнение. Новую методику нужно использовать только в системах где используется метод допроведение документов неоперативно по себестоимости.
Использовать методику только для оперативного списания товара только по количественному учету в течении месяца. По концу месяца обработочкой проходимся и пишем среднюю взвешанную за месяц по документам. Как правило скользящая оценка стоимости искажает финансовые данные.
Из сказанного следует, что методику нового проведения нет нужды реализовывать на экзамене ибо таких задач на допроведение в задачнике нет.
Первые две задачи решаются по новой методике, в них мы можем записать движение в регистр остатки и проверить ушли в минус или нет.
В данной задаче мы не можем этого сделать, т.к после записи движения в регистр остатки мы можем в минус не уйти, а при списывании с партии указанной в табличной части, можно в минус уйти, т.е надо проверять остаток, а раз проверять надо будет все равно остаток, значит новая методика не подходит, используем старую.
-
Решение моей задачи. Должно быть идеально!
-
Решение моей задачи. Должно быть идеально!
Могу предложить не использовать в сообщалках Номенклатура ссылочного типа, в запросе выбери Номенклатура.Представление и используй его в сообщалках. В виде Чистова по подготовке к спецу по платформе говорилось что если этого не сделать то могут снять то ли пол бала то ли бал.
Вместо сообщалки что партия в табличной части не заполнена поставь в реквизит партия проверка заполнения "Выдавать ошибку".
И может не стоит писать дважды сообщение что не хватает по данной номенклатуре товара в целом и отдельно сообщение что по данной партии и данной номенклатуре. И ограничится только проверкой по детальным записям?
-
Добрый день, коллеги. Буду рад конструктивным отзывам.
Подкорректировал
-
Вместо сообщалки что партия в табличной части не заполнена поставь в реквизит партия проверка заполнения "Выдавать ошибку".
Все бы ничего, но у нас в одной ТЧ находятся и Номенклатура, и Услуги...
-
Все бы ничего, но у нас в одной ТЧ находятся и Номенклатура, и Услуги...
Ок. Согласен.
Ну тогда добавить в начале обработки проведения в Расходной код:
//Проверяем везде ли для товаров указаны партии
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Представление КАК НоменклатураПредставление,
| РасходнаяНакладнаяСписокНоменклатуры.НомерСтроки КАК НомерСтроки
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| НЕ РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга
| И РасходнаяНакладнаяСписокНоменклатуры.Партия = ЗНАЧЕНИЕ(Документ.ПриходнаяНакладная.ПустаяСсылка)
| И РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не указана партия для номенклатуры " + Выборка.НоменклатураПредставление;
Сообщение.Поле = "Объект.СписокНоменклатуры[" + (Выборка.НомерСтроки - 1) + "].Партия";
Сообщение.Сообщить();
КонецЦикла;
Отказ = Истина;
Возврат;
КонецЕсли;
-
Мое решение. Прошу оценить
-
Не уверен нужно ли делать РегистрыНакопления.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина; при очистке старых движений.
Я заблокирую пустой набор записей? Или набор записей до очистки, или тут вообще блокировка избыточна?
-
Здравствуйте! А эта тема еще жива? Очень хотелось бы узнать мнение о моем решении 3 задачи сборника :)
-
Всем привет. Мое решение на обозрение)
-
Что-то много запросов в модуле расходной накладной
Структурно их же два
1. формируем таблицу из расходной накладной и оборотов по регистру накопления
2. пишем в регистр попутно проверяя отрицательные значения или
3. проверяем отрицательные (хотя и при записи в первом можно их проверить)
+
блок записи в продажи
И в последнем запросе разве не "Обороты" надо использовать?
-
Пример запроса проверки остатков с партиями
Процедура ОбработкаПроведения (Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
// регистр ПроверкаОстатков Расход
Движения.ПроверкаОстатков.Записывать = Истина;
Движения.ПроверкаОстатков.Очистить();
Движения.ПроверкаОстатковПартии.Очистить();
Для Каждого ТекСтрокаСписокТоваров Из СписокТоваров Цикл
Движение = Движения.ПроверкаОстатков.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаСписокТоваров.Номенклатура;
Движение.Партия = ТекСтрокаСписокТоваров.Партия;
Движение.Количество = ТекСтрокаСписокТоваров.Количество;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РасходнаяНакладнаяСписокТоваров.Номенклатура КАК Номенклатура,
| РасходнаяНакладнаяСписокТоваров.Партия КАК Партия,
| СУММА(РасходнаяНакладнаяСписокТоваров.Количество) КАК Количество
|ПОМЕСТИТЬ ДокТч
|ИЗ
| Документ.РасходнаяНакладная.СписокТоваров КАК РасходнаяНакладнаяСписокТоваров
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокТоваров.Номенклатура,
| РасходнаяНакладнаяСписокТоваров.Партия
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПроверкаОстатковОстатки.Номенклатура КАК Номенклатура,
| ПроверкаОстатковОстатки.Партия КАК Партия,
| ПроверкаОстатковОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ПроверкаОстатковОстатки.Номенклатура.Представление КАК НоменклатураПредставление
|ИЗ
| РегистрНакопления.ПроверкаОстатков.Остатки(
| ,
| (Номенклатура, Партия) В
| (ВЫБРАТЬ
| ДокТч.Номенклатура,
| ДокТч.Партия
| ИЗ
| ДокТч КАК ДокТч)) КАК ПроверкаОстатковОстатки
|ГДЕ
| ПроверкаОстатковОстатки.КоличествоОстаток < 0";
РезультатЗапроса = Запрос.Выполнить();
Сообщение = Новый СообщениеПользователю;
//Если Не РезультатЗапроса.Пустой() Тогда
//
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщение.Текст = "Не хватает " + Выборка.НоменклатураПредставление + " " + Выборка.КоличествоОстаток + " из партии " + Выборка.Партия;
Сообщение.Сообщить();
КонецЦикла;
//
//
// КонецЕсли;
КонецПроцедуры