Тренинг по подготовке к аттестации.
Второй поток – Задача 9. “Ячейки”

Приветствую. Мы начинаем совместную работу в тренинге.

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

Сегодня я публикую текст первой бонусной задачи, в сквозной нумерации видеорешений ее номер 9 (с 1 по 8 Вы получили ранее). Что с ней делать? Решать!

Я не могу, и не собираюсь, заставлять Вас решать задачи, но послушайте несколько аргументов в пользу того что самостоятельно заниматься нужно:
1. Вы получаете опыт, и в анализе текста задачи, и в использовании объектов.
2. Вы понимаете свои “слабые места”.
3. Вы задаете мне вопросы! Анализируя вопросы я понимаю куда следует “дожать” для более классного результата. Ваши вопросы найдут отражение в следующих задачах и видеорешениях.
4. В конце концов скорость машинописи возрастает ;)

К сдаче аттестационного экзамена готовитесь именно ВЫ! Я только помогаю. Это ВАША работа!

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.

комментарий 81 на “Тренинг по подготовке к аттестации.
Второй поток – Задача 9. “Ячейки””

  1. SergeyKiyaev 29.07.2012 в 16:10

    Добрый день. Задачу я сделал. Но ни как не могу понять почему у меня движения по регистру Товары формируются при проведении со второго раза. Первый раз провожу – ничего, опять провожу – есть движения.

    • Видимо что-то перемудрили с удалением движений. Какие настройки у документа? Удалять автоматически? Записывать модифицированные?

  2. arnoldlayne 19.07.2012 в 14:54

    Приветствую!
    Не знаю в какой раздел добавить…
    Решил наконец-то задачу 1.6 и хотелось бы чтобы его посмотрели. поругали/похвалили.
    Файл с выгрузкой по ссылке: http://narod.ru/disk/57041209001.9a2f5760bd8104dd8474aa298700736d/1Cv8_task_1_6.zip.html 

  3. Вопросы по Вашему решению.
    1. Как быть с тем что для формирования движений документа Вы использовали данные из регистра. Не снизят ли бал?
    2. Если все-таки создать у документа еще одну табличную часть где зафиксировать из каких ячеек списался товар, не будет ли это ошибкой?
    3. Не проще ли было наложить блокировки в запросе. Если это было бы ошибкой, то насколько критична такая ошибка?

    • 1. А от куда их еще брать?
      2. Набор записей принадлежащий документу чем не устраивает?
      3. “Для ИЗМЕНЕНИЯ” ? Это будут не упр блокировки. Но при использовании этого способа (по слухам от коллег) балл не снижают. Главное блокировать. Ну и учтите что свойства конфигурации и объктов должны поддерживать такие блокировки.

      • Насчет первого пункта: возможно имелось ввиду, что данные брались из 
        физической таблицы регистра – правильно ли это? Может быть лучше будет 
        использовать таблицу оборотов? 

        • Если взять таблицу оборотов, то ее придется “развернуть” до записи. Как следствие система произведет выбор данных из все той же реальной таблицы регистра.

  4. Мария 29.06.2012 в 17:29

    А когда будет видеорешение  по 9 ой задаче?

    • Я передам видео для кодирования завтра. Завтра – послезавтра будет опубликовано.

  5. В задаче присутствует сумма и цена. Насколько снизят оценку если обойтись с ними по простому (например прямо в документе свернуть таб часть по номенклатуре просуммировав количество и сумму)?

    • Нет, так нельзя. В требованиях к сертификации явно сказано что при проведении документа следует учитывать наличие дублей строк.

      • Андрей Буравов 27.08.2012 в 18:41

        Такое требование распространяется на все задачи, но вы в первых задачах к этому курсу опускали “Цену” в табличной части. Значит если в самой задаче явно где то показано поле “Цена” – то его нужно добавлять, а если нет, то можно сделать только “Количество” и “Сумму”?

        • Я отвечал на комментарий “свернуть прямо в табличной части”. наличие или отсутствие реквизита “Цена” в табличной части никак не повлияет на требование к учету дублей строк.

  6. Александр Кононов 28.06.2012 в 17:56

    Вариант решения
    Создаем :
    -Независимый Регистр сведений :Измерения -стеллаж,ячейка ,Значение-номенклатура;
    -Справочник ХарактеристикиНоменклатуры подчиненный Справочнику
    Номенклатура.
    – План Видов Характеристик ,значения свойств -стеллаж,ячейка.
    -Регистр накопления: Измерения: Номенклатура,Характеристика Номенклатуры,показатель -количество;
    Вопрос :
    1.)возможно ли программное создание Характеристики Номенклатуры.
    2.)если да – то в обработке какого события-или это не принципиально.
    3.)где осуществлять контроль существует ли Характеристика для номенклатуры,есть нюансы  в приходе и расходе.
    4.) Сумму (стеллаж+ячейка) – записывать в справочнике (Характеристики Номенклатуры) или получать запросом
      Эффект вместо 3 измерений -2
    Остальное все Вы рассказали.

  7. сделал на одном регистре с измерениями: номенклатура (справочник), ряд, ячейка (числа). Процедура проведения: http://irc1c.ru/1297/ Печать сформировал конструктором и немного подправил.
    вопросы:
    стоит ли для блокировки создавать отдельный запрос по тч? (у вас в видео так сделано) или можно просто указать таб часть? как на это посмотрят?
    в регистре ОстаткиНоменклатуры выставил галки нидексации у всех измерений (не вполне понимаю какой должен быть порядок) это нормально для примитивных типов?

    • Можно указать и таб часть. Но у меня в задаче уже получена сгруппированная таб часть запросом, грех не воспользоваться.
      Индексация измерений которую Вы указали повлияет на скорость извлечения данных из реальной таблицы регистра (движений), в задачах нет в этом необходимости.

      • т.е. ещё один запрос выполнится быстрее,  чем блокировка по не свернутой тч?
        ещё в задаче ничего не было сказано про цены, так что у меня они задаются в расходной накладной. это нормально?

        • зависит от количества одинаковых товаров в ТЧ.

          У меня цены так же задаются в документе.

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

    • Блокировку нужно вставлять до чтения данных из регистра.
      Блокировку нужно использовать для того чтобы не допустить “грязное чтение” данных другими сеансами.

  9. Добрый день!
    В каркасную конфу добавил :
    РегистрНакопления ОстаткиНаСкладе( изм: Номенклатура, Ряд(число), Стеллаж(число); ресурс: Количество и Сумма).
    документ Приходная(табчасть: номенклатура,  ряд, стеллаж, количество, сумма). При проведении проверял есть ли в этой ячейке товар на данный момент.
    Документ Расходная(реквизит – Доставка; табчасть – номенклатура, артикул(в форме по запросу получал код), количество, сумма).  При проведении использовал материал из видео по второй задаче. Создавал временную таблицу, затем соединял с РегистромНакопленияОстатки(&МоментВремени, Ном из временной таблицы) , добавил поле СуммаЯчеек равное сумме ряд и стеллаж, затем всё  собрал в итогах по номенклатуре, упорядочивал по полю СуммаЯчеек.
    Указал два параметра, затем формировал движения.
    Затем в форме Расходной добавил команду, которая формирует ПФ. В модуль команды добавил процедуру, в которой с помощью конструктора запроса с обработкой результата получил данные для записи (все поля брал прям из таблицы движения РегистрНакопления с параметром по регистратору).
     
     

  10. А в этой задаче нужноиспользовать блокировки? Или ихиспользование зависит от варианта рещения?

    • В любой задаче надо использовать блокировки.

  11. нет в расходной вообще не будут отображаться поля стелаж и ячейка, только количество, а стелаж и ячейка проставятся после проведния.

  12. В расходной накладной ячейка и стелаж должны проставляться автоматически при изменении номенклатуры и способа доставки?

    • Нет. Они подбираются при проведении документа. Системой, а не пользователем.

  13. arnoldlayne 26.06.2012 в 16:43

    Печатная форма – это отдельный отчет с параметром Ссылка.РасходнаяНакладная? 

    • Не принципиально. Я делал с использованием команды документа.

  14. На мой взгляд нужен справочник  ЯчейкаСклада(реквизиты Стелаж, Ячейка).
    Контроль правильности заполнения склада возлагаем на кладовщика.
    Регистров – 2:
    1)Регистр остатков Размещение товаров (Измерения – ЯчейкаСклада, Номенклатура, Ресурсы -Количество) . Нужен для проверки – хватает или нет номенклатуры и определения приоритета при списании номенклатуры из ячеек.
    2) регистр ПродажиЯчеек(оборотный) (Измерения – Номенклатура, ЯчейкаСклада, Ресурсы – Количество и Сумма). Этот регистр будет нужен, чтобы печатать форму в любое удобное время.

  15. Всем доброго времени суток.

    Для решения задачи созданы справосники Номенклатура (Реквизит Артикул), Стелажи (код справоника числовой), Ячейки (код числовой). Предполагается для простоты, что все стелажи содержат одинаковое число ячеек. Создано перечисление СпособыОтгрузки (Доставка, Самовывоз). Создан РегистрНакопления остаточный ОстаткиСклада (Измерения: Номенклатура, Стелаж, Ячейка – типы соответствующие; Ресурсы: Количество и Сумма).
    Документ ПоступлениеНаСклад имеет табличную часть с реквизитами: Номенклатура, Стелаж, Ячейка, Количество, Сумма – создает движения прихода в РН.ОстаткиСклада. Документ РеализацияТоваров – по структуре реквизитов копия поступления, но добавлен реквизит документа СпособОтгрузки (тип ПеречислениеСсылка.СпособыОтгрузки)… примерно так.

    • Андрей 21.06.2012 в 10:39

      А зачем в Справочнике “Номенклатура” нужен реквизит “Артикул”? Чем Вам код не подходит? Какой смысл создавать доп реквизит?

      И затем: Если создавать явно справочники Стеллаж и Ячейка, то у Вас получается изначально сильно избыточная структура (да ещё и необходимость отслеживать, что не вылазите за границу созданных стеллажей и ячеек как элементов справочников).

      >Создан РегистрНакопления остаточный ОстаткиСклада
      >(Измерения: Номенклатура, Стеллаж, Ячейка – типы соответствующие; Ресурсы: Количество и Сумма).

      А как Вы в этой структуре различаете, что у нас “неделю назад” данная ячейка была занята таким-то количеством товара, а уже “вчера” иным товаром и иным количеством? Вы что итоги по ячейкам пересчитываете на каждый момент времени постоянно (для актуализации итогов)?

      • Можно, конечно, и кодом для упрощения обойтись, НО сработала привычка (долгая работа с ТиС… не более того… Часто Артикул разныхпоставщиков (да и одного и того же) отличаются из-за различный партий производящий предприятий.
        Ячейку – рассматривала как ряд на стелаже. Задание было понято, что одну ячейку можно сложить и разный товар… главное списать не более чем было положено в ячейку (ряд) на стелаже.

        • И идея двух справлчников (Стелажи и Ячейки) – просто чтобы получить сумму их кодов при отгрузке с доставкой и без.

          • Андрей 22.06.2012 в 10:32

            Я о там, что может вместо двух справочников использовать один регистр сведений (с измерениями Стеллаж и Ячейка. Просто какой смысл заморачиваться с объектными данными (элементами двух справочников) если тоже самое можно
            получить одной необъектной записью регистра сведений?

            Т.е. делаете запрос (срез последних на заданный МоментВремени) в данному регистру сведений и получаете нужное сочетания Стеллаж и Ячейка (измерения) для заданного товара (ресурс). Согласны?

            • Согласна, что лучше использовать одно измерение для ячейки, чем два…

              а вот справочник или регСведений это будет – на выбор… как нравится…

              про срез послдних – смысла не вижу… нам нужна сумма номпера ряда и стелажа ячейки – это просто сортировка прямая или обратная от призанака  споссоба отгрузки

    • Все решили уже задачу?

      • Думаю, что нет.
        Вы беспокоитесь по поводу видеорешения? Не беспокойтесь, на днях будет. Но я рекомендую примкнуть к дискуссии, это мегаполезно.

        • Подозрительная тишина в какой то момент воцарилась. Может я что то упустил?Дискуссия только в этой ветке идет? Посмотрел  решение первых 2 задач, после этого вроде никаких вопросов не должно быть по решению данной задачи, единственное,  отчет из документа как то вызывать надо и параметры инициализировать, но и это решилось

          • И какой вариант формирования отчета Вы выбираете? Я вот рекомендую с помощью СКД делать.

            • Я сделал на скд так:
              команда печать:
              &НаКлиенте
              Процедура Печать(Команда)
                  ПараметрыФормы    =    Новый Структура;
                  ПараметрыФормы.Вставить(“Регистратор”,Объект.Ссылка);
                  ПараметрыФормы.Вставить(“СформироватьПриОткрытии”,Истина);
                  ОткрытьФорму(“Отчет.Отчет1.Форма.ФормаОтчета”,ПараметрыФормы);
              КонецПроцедуры
              форма отчет:
              &НаСервере
              Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
                  
                  //Вставить содержимое обработчика

                  Если Параметры.Свойство(“Регистратор”) Тогда
                      Отчет.Регистратор    =    Параметры.Регистратор;
                  КонецЕсли;
                  
              КонецПроцедуры
              модуль отчет:
              Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
                  // Вставить содержимое обработчика.
                  пРегистратор = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“Регистратор”);
                  п_польз_Регистратор    =    КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(пРегистратор.ИдентификаторПользовательскойНастройки);
                  Если п_польз_Регистратор <> Неопределено и ЗначениеЗаполнено(Регистратор) Тогда
                      п_польз_Регистратор.Использование    =Истина;
                      п_польз_Регистратор.Значение    =    Регистратор;
                  КонецЕсли;
              КонецПроцедуры

  16. Игорь Грыша 20.06.2012 в 11:22

    1. Нужно ли вообще использовать склад? Вроде в тексте задачи ничего про складской учет не сказано. А я смотрю все почемуто его используют.
    2. Нужно ли создавать для хранения ряда/стеллажа справочник Ячейки(для упрощения заполнения поступления товаров, как в Вашем примере с ед. измерения), или можно просто задавать числа в табличной части документа поступления товаров

    • 1. Я тоже не вижу в задаче многоскладского учета.
      2. А как Вам удобнее. Я бы делал просто числами.

      • а как на аттестации посмотрят на решение с числами, а не справочником?

        • Нормально посмотрят. Что за миф такой что примитивные типы не могут быть в измерениях регистров?! Главное чтобы не составной включающий примитивный, тогда все плохо с индексацией.

      • Игорь Грыша 20.06.2012 в 18:59

        Ок, хорошо. Тогда еще вопрос. Зачем тогда в Вашем видеоуроке Вы делали подбор единицы измерения и заполнение реквизита коэффициент, если можно упростить и просто вводить число в поле “коэффициент”? Или есть какаято черта этого упращения?

        • В каком видео можно было сделать примитивным тип измерения?

  17. Vadim Kashirny 20.06.2012 в 10:31

    Сделал так:
    1. Создал справочник “Ячейки” с реквизитами “Номер стеллажа”, “Номер ряда”, “Сумма ячейки”. При записи вычисляется сумма ячейки и формируется наименование  (типа “Ячейка 2/18”).
    2. В регистре накопления “Остатки товаров” измерения:
       – Номенклатура
       – Ячейка 
    Ресурсы:
       – Количество
    Реквизиты:
       – Цена
    3. При оприходовании явно указывается ячейка.
    4. Списание происходит перебором выборки с обходом по группировкам
    5. Печатная форма формируется  на основании физической таблицы регистра, где регистратор = Ссылка.

    • Андрей 21.06.2012 в 10:13

      Вопрос был, но без ответа. Если (для ускорения, упрощения, чтобы не делать чего не просят в задаче) не делать форму документа “Продажи товаров”,  а в ней не делать подстановку коэффициента единицы измерения при выборе пользователем единицы измерения, то будет ли за это снижен балл на экзамене?

      • Не выдумывайте себе заданий. Не просят – не надо делать.

  18. Делать, конечно, буду… НО регистрация плейера пришла только 18 числа + было время потрачено на запуск его с изображением, поэтому не успела просмотреть все 8 разборов, тем более прорешать…

    • Достаточно просмотреть 2 первых серии. Я после 4 свернул просмотр и сел решать, пока в голове что-то держится об оперативном учете – лучше закреплять практикой. имхо, конечно.

      • помимо просмотра, хотелось бы эти задачи самостоятельно прорешать… ;)

  19. Здравствуйте, Павел. Исходя из Ваших замечаний, что не нужно ничего усложнять самому, вывод печатной формы реализовал с помощью конструктора выходной формы и макета типа “Табличный Документ”. Сформированный конструктором код перенес в ОбработкуПроведения, т.к. логика даных процедур очень похожа (два одинаковых цикла). Но мучает вопрос, может я слишком сильно всё упростил и печатную форму нужно было делать на СКД? :)

    • Можно и СКД. Там пара строк кода будет. Я в видеорешении покажу.

  20. Андрей 19.06.2012 в 16:27

    Добрый день! Очень плохо, если в регистре “ОстаткиНоменклатуры” измерения “Стеллаж” и “Ячейка” будут иметь числовой тип?

    • Добрый!

      Нет не плохо. Главное не составной с примитивным чтобы.

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

    • Андрей 20.06.2012 в 09:15

      Из формулировки задачи непонятно ведется учет разрезе складов-стеллажей-ячеек, или только в разрезе стеллажей-ячеек. Надо вводить измерение склад в регистр остатков, или можно обойтись без него? Как научиться правильно понимать такие формулировки?

      • Правило: Чем проще – тем лучше.

        Хотя в этой задаче все условия явно означены.

  22. VadimKashirny 19.06.2012 в 12:53

    Не ясно как быть, если в ячейке уже есть номенклатура? или такая ситуация не рассматривается?

    • Так пускай будет. Будет две штуки, три…

  23. Андрей 19.06.2012 в 11:35

    Для решения этой задачи решил задействовать:
    Регистр накопления “Остатки”  – для ведения учёта “свободности от товара” в той или иной заданной ячейки на указанном стеллаже на конкретном Складе;
    Регистр сведений с “подчинением регистратору” с периодичностью “По позиции регистратора” для ведения учёта где (на каком Складе, каком стеллаже, в какой ячейке) и какое количество того или иного Товара у нас храниться на указанный МоментВремени.

    Вопрос – а в данной задече нужно заморачиваться с оперативным и неоперативным проведением? Вести ли учёт границ последовательности?

    P.S. А можно ли прислать dt-файл с решением, чтобы получить более полную оценку по ошибкам и недочётам в решении?

    • Оперативное проведение нужно использовать.

      Если после видеоразбора задания останутся вопросы и мы не сможем их решить в формате мастер-группы то я сам попрошу Вас прислать базу. Но в целом давайте будем стараться решать вопросы в комментариях, так чтобы переписка была хорошим подспорьем и для остальных слушателей курса.

  24. Андрей 19.06.2012 в 09:25

    Уточните пожалуйста: “Каждой номенклатурной позиции присваивается уникальный артикул.” означает, что каждый товар имеет ещё и серию (то есть каждый товар может приниматься и продаваться в разрезе артикула/серии) ? Или тут речь идёт о кодификации товара в целом и каждый товар имеет только один единственный артикул?

    • 1 товар = 1 артикул (он же код)

      В задаче просто нужно продемонстрировать умение клепать управляемые формы.

  25. Андрей 19.06.2012 в 09:20

    Не понятна фраза – “Критерием удобства отгрузки (расстояние) служит сумма номера ряда и номера стеллажа”

    Так что тогда ближе:
     – портсигар  стеллаж 11 ячейка 1;
    – кинокамера стеллаж 2  ячейка 12;

    Если мы суммируем как сказано в условии, то портсигар ближе (расстояние 12 против 14). Но если мы суммируем с “весами”, то кинокамера ближе (расстояние 2*100 + 12 = 212 против 11*100 + 1=1101).

    • 11+1 = 12
      2+12 = 14

      итого портсигар лежит ближе чем кинокамера.

      • Александр Кононов 26.06.2012 в 18:56

        6+6=12
        8+6 =14
        этот вариант надо рассматривать

        • Простите, не понял ничего…

          • Александр Кононов 27.06.2012 в 00:42

            Как я понимаю,это поле в запросе является полем сортировки .Что делать при равенстве сумм

  26. Задание выполнил, но неудовлетворен выбранным вариантом вывода на печать. Обсудить можно сейчас, или дождаться Ваше видео-разбора .

    • Можно конечно и сейчас.

      • При проведении документа “Реализация товаров” происходит распределение количества по ячейкам (Ряд и Стеллаж у меня – измерения в регистре ОстаткиТоваров). Соответственно при формировании печатной формы делаю левое соединение к табличной части документа оборотов регистра “ОстаткиТоваров”:
         
        ВЫБРАТЬ
        ДокТЧ.Номенклатура КАК Номенклатура,
        ОстаткиНоменклатурыОбороты.КоличествоРасход КАК Количество,
        ОстаткиНоменклатурыОбороты.Ряд,
        ОстаткиНоменклатурыОбороты.Стеллаж,
        ДокТЧ.Цена,
        ОстаткиНоменклатурыОбороты.КоличествоРасход * ДокТЧ.Цена КАК Сумма
        ИЗ
        ДокТЧ КАК ДокТЧ
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Обороты(&МоментВремени, &МоментВремени, Регистратор, ) КАК ОстаткиНоменклатурыОбороты
        ПО ДокТЧ.Номенклатура = ОстаткиНоменклатурыОбороты.Номенклатура
        И (ОстаткиНоменклатурыОбороты.Регистратор В (&Ссылка))
         Мне кажется, что данное получение виртуальной таблицы регистра это не совсем удачный вариант с точки зрения производительности. Или указание Момента времени печатаемого документа в качестве границ периода гарантирует получение ВТ с движениями только этого документа?

        • Здесь быстрее движения выбрать с отбором по регистратору, чем обороты разворачивать.

  27. Не совсем понятна логика задания: ” отдельную ячейку, которая однозначно определяется своим рядом и стеллажом”, а в печатной форме отражены графы “Стеллаж” и “Ячейка”, а ряда нет. Т.е. подразумевается, что “Яч. 2/18” это 2-й стеллаж, 18-й ряд?

    • Это перепечатка из сборника. Да подразумевается именно так.

  28. Рустам 18.06.2012 в 16:19

    “помещается в отдельную ячейку, которая однозначно определяется своим рядом и стеллажом”, пользователь сам определяет стеллаж и ячейку?

    • Да. Автоматизировать складскую логистику не нужно.

  29. Способ отгрузки товара определяется в расходной для каждой номенклатуры отдельно или единый для всего документа?