8.х Подбор серии номенклатуры

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем deman_ru, 28 май 2015.

  1. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Добрый день!
    Конфигурация УТАП 11.
    Есть следующая обработка:
    1.JPG

    Обработка загружает заказы покупателей за определенный период.
    В документе "Заказ покупателя", в табличной части "Товары" есть поле серии номенклатуры. 2.JPG
    В меню выбираем серии-> указать серии, появляется следующее окошко:
    3.JPG
    Мы проставляем количество, нажимаем на кнопку закрыть и серия присваивается позиции номенклатуры.

    Что нужно: чтобы в обработке, я выбрал документ и при нажатии на кнопку у меня в этом документе для каждой позиции номенклатуры проставилась серия, по методу ФИФО. Как это проще всего сделать? У меня пока что такая идея, что нужно из конфигурации весь механизм подбора серии переносить в обработку.
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Ну можно посмотреть где это и просто потом вызвать соответвующую функцию или процедуру
  3. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Там оказывается все проще, в документе есть табличная часть Серии, вот ее нужно заполнить необходимыми данными.
    Пытаюсь следующим образом:
    Код:
    &НаКлиенте
    Процедура СформироватьИРаспечатать(Команда)
       
        Серии(ТекДанные.Документ);
       
    КонецПроцедуры
    
    &НаСервере
    Функция Серии(Документ)
        ЗапросСерии = Новый Запрос;
        ЗапросСерии.Текст = "ВЫБРАТЬ
                            |    ЗаказКлиентаСерии.Ссылка,
                            |    ЗаказКлиентаСерии.НомерСтроки,
                            |    ЗаказКлиентаСерии.Серия,
                            |    ЗаказКлиентаСерии.Количество,
                            |    ЗаказКлиентаСерии.Номенклатура,
                            |    ЗаказКлиентаСерии.Характеристика,
                            |    ЗаказКлиентаСерии.Назначение,
                            |    ЗаказКлиентаСерии.Склад,
                            |    ЗаказКлиентаСерии.УказыватьСерии
                            |ИЗ
                            |    Документ.ЗаказКлиента.Серии КАК ЗаказКлиентаСерии";
        Результат = ЗапросСерии.Выполнить().Выгрузить();
       
        ДокЗаказ = Документ.ПолучитьОбъект();
        ТЧСерии = ДокЗаказ.Серии;
        ТЧСерии.Загрузить(Результат);
        ДокЗаказ.Записать();
    КонецФункции
    
    То есть из ТЧ обработки в функцию передается документ и там уже записывается результатом выборки, все поля совпадают, но после записи в таблице ничего не появляется! Почему не добавляются записи в табличную часть документа?
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    обновить табличную часть нужно на клиенте, что-то типа ОбновитьОтображениеДанных()
  5. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Да дело в том, что на клиенте эта табличная часть в принципе не отображается. Я даже через консоль запросов просматриваю, новой записи там нет!
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Вы слышите что я вам пишу? Вы изменили данные на сервере, но не обновили их на клиенте. Вот и не отображается. Разберитесь с клиент-серверным взаимодействием :)
  7. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Ну вот где я не прав, скажите пожалуйста?) все равно данные не появляются

    Код:
    &НаКлиенте
    Процедура СформироватьИРаспечатать(Команда)
       
        ТекДанные = Элементы.ЗаказыПокупателей.ТекущиеДанные;
        ВариантОбеспечения(ТекДанные.Документ);
    
        ПодборСерийНоменклатуры(ТекДанные.Документ);
       
        ЭтотОбъект.ОбновитьОтображениеДанных();
       
    КонецПроцедуры
    
    &НаСервере
    Функция ПодборСерийНоменклатуры(Документ)
       
        ДокЗаказ = Документ.ПолучитьОбъект();
        ТЧТовары = ДокЗаказ.Товары;
       
        Для Каждого Стр ИЗ ТЧТовары Цикл
            Номенклатура = Стр.Номенклатура;
            Количество   = Стр.Количество;
            ЗаполнитьСерии(Документ, Номенклатура, Количество);
        КонецЦикла;
    
    КонецФункции
    
    
    &НаСервере
    Функция ЗаполнитьСерии(Документ, Номенклатура, Количество)
       
        ЗапросСерии = Новый Запрос;
        ЗапросСерии.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                            |    СерииНоменклатуры.Ссылка КАК Ссылка,
                            |    СерииНоменклатуры.Наименование КАК Наименование,
                            |    МИНИМУМ(СерииНоменклатуры.ГоденДо) КАК ГоденДо,
                            |    СерииНоменклатуры.алкВладелец КАК алкВладелец
                            |ИЗ
                            |    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
                            |ГДЕ
                            |    СерииНоменклатуры.алкВладелец = &Номенклатура
                            |
                            |СГРУППИРОВАТЬ ПО
                            |    СерииНоменклатуры.Ссылка,
                            |    СерииНоменклатуры.Наименование,
                            |    СерииНоменклатуры.алкВладелец";
        ЗапросСерии.Параметры.Вставить("Номенклатура", Номенклатура);
        Результат = ЗапросСерии.Выполнить().Выбрать();
       
        ДокЗаказ = Документ.ПолучитьОбъект();
        ТЧСерии  = ДокЗаказ.Серии;
       
        НоваяСтрокаСерии = ТЧСерии.Добавить();
        НоваяСтрокаСерии.Серия          = Результат.Ссылка;
        НоваяСтрокаСерии.Количество     = Количество;
        НоваяСтрокаСерии.Номенклатура   = Номенклатура;
        НоваяСтрокаСерии.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
        НоваяСтрокаСерии.Назначение        = Справочники.Назначения.ПустаяСсылка();
        НоваяСтрокаСерии.Склад            = ВыбратьСклад(Результат.Ссылка);
        НоваяСтрокаСерии.УказыватьСерии = Истина;
       
        ДокЗаказ.Записать();
    КонецФункции
    
    Функция ВыбратьСклад(Серия)
        ЗапросСклад = Новый Запрос;
        ЗапросСклад.Текст = "ВЫБРАТЬ
                            |    ТоварыНаСкладах.Склад КАК Склад
                            |ИЗ
                            |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
                            |ГДЕ
                            |    ТоварыНаСкладах.Серия = &Серия
                            |
                            |СГРУППИРОВАТЬ ПО
                            |    ТоварыНаСкладах.Склад";
        ЗапросСклад.Параметры.Вставить("Серия", Серия);
        Результат = ЗапросСклад.Выполнить().Выбрать();
       
        Возврат Результат.Склад;
    КонецФункции
    
  8. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    по коду все правильно. В отладчике заполняет табличную часть ?
  9. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Да, в отладчике табличную часть заполняет, так как нужно.
  10. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Код я немного изменил, теперь он такой:
    Код:
    &НаКлиенте
    Процедура СформироватьИРаспечатать(Команда)
       
        ТекДанные = Элементы.ЗаказыПокупателей.ТекущиеДанные;
       
        ПодборСерийНоменклатуры(ТекДанные.Документ);
    
        ЭтотОбъект.ОбновитьОтображениеДанных();
       
    КонецПроцедуры
    
    &НаСервере
    Функция ПодборСерийНоменклатуры(Документ)
       
        ДокЗаказ = Документ.ПолучитьОбъект();
        ТЧТовары = ДокЗаказ.Товары;
        ТЧСерии  = ДокЗаказ.Серии;
        Для Каждого Стр ИЗ ТЧТовары Цикл
            Стр.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить;
            НоваяСтрокаТЧСерии = ТЧСерии.Добавить();
            НоваяСтрокаТЧСерии.Серия          = ВыбратьСерию(Стр.Номенклатура);
            НоваяСтрокаТЧСерии.Количество     = Стр.Количество;
            НоваяСтрокаТЧСерии.Номенклатура   = Стр.Номенклатура;
            НоваяСтрокаТЧСерии.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
            НоваяСтрокаТЧСерии.Назначение      = Справочники.Назначения.ПустаяСсылка();
            НоваяСтрокаТЧСерии.Склад          = ВыбратьСклад(ВыбратьСерию(Стр.Номенклатура));
            НоваяСтрокаТЧСерии.УказыватьСерии = Истина;
        КонецЦикла;
       
        ДокЗаказ.Записать();
       
    КонецФункции
    
    
    &НаСервере
    Функция ВыбратьСерию(Номенклатура)
       
        ЗапросСерии = Новый Запрос;
        ЗапросСерии.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                            |    СерииНоменклатуры.Ссылка КАК Ссылка,
                            |    СерииНоменклатуры.Наименование КАК Наименование,
                            |    МИНИМУМ(СерииНоменклатуры.ГоденДо) КАК ГоденДо,
                            |    СерииНоменклатуры.алкВладелец КАК алкВладелец
                            |ИЗ
                            |    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
                            |ГДЕ
                            |    СерииНоменклатуры.алкВладелец = &Номенклатура
                            |
                            |СГРУППИРОВАТЬ ПО
                            |    СерииНоменклатуры.Ссылка,
                            |    СерииНоменклатуры.Наименование,
                            |    СерииНоменклатуры.алкВладелец";
        ЗапросСерии.Параметры.Вставить("Номенклатура", Номенклатура);
        Результат = ЗапросСерии.Выполнить().Выбрать();
       
        Пока Результат.Следующий() Цикл
            Серия = Результат.Ссылка;
        КонецЦикла;
       
        Возврат Серия;
       
    КонецФункции
    
    Функция ВыбратьСклад(Серия)
       
        ЗапросСклад = Новый Запрос;
        ЗапросСклад.Текст = "ВЫБРАТЬ
                            |    ТоварыНаСкладах.Склад
                            |ИЗ
                            |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
                            |ГДЕ
                            |    ТоварыНаСкладах.Серия = &Серия";
        ЗапросСклад.Параметры.Вставить("Серия", Серия);
        Результат = ЗапросСклад.Выполнить().Выбрать();
       
        Пока Результат.Следующий() Цикл
            Склад = Результат.Склад;
        КонецЦикла;
        Возврат Склад;
       
    КонецФункции
    
    Смотрю в отладчике, и как только выполняется запись документа, таблица обнуляется.
  11. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Значит смотрите дальше, почему при записи обнуляется таблица.
  12. TopicStarter Overlay
    deman_ru
    Offline

    deman_ru Опытный в 1С

    Регистрация:
    27 дек 2011
    Сообщения:
    165
    Симпатии:
    1
    Баллы:
    29
    Разобрался, там оказывается в тч товары еще есть два ревизита: статус указания серий и указывать серии, вот их надо было выставить, и тогда сохраняются записи в таблице серии))
    Спасибо!
Похожие темы
  1. Funeral_YAR
    Ответов:
    1
    Просмотров:
    929
  2. E_lenka
    Ответов:
    7
    Просмотров:
    2.085
  3. sashadeo
    Ответов:
    2
    Просмотров:
    448
Загрузка...

Поделиться этой страницей