8.х Обработка "Упаковочный лист" .Дополнить..

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем prog_22, 2 ноя 2012.

  1. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! Есть обработка "Упаковочный лист" запускается из Заказа Покупателя, но при частичной отгрузке, когда создается документ "Реализация товаров и услуг", в этом упаковочном из заказа покупателя отображаются все позиции.То есть нужно,чтоб при проведении реализации, связанной с заказом покупателя, в упаковочном листе не отображались те позиции,которые в связанной реализации. как то так) если есть что то похожее в темах,подскажите!

    Вот код:


    Тюрьма=Новый COMОбъект("Excel.Application");
    Тюрьма.Workbooks.Open(ИмяТюрьмы);

    ЛистДанных = Тюрьма.Worksheets(1);
    ОчиститьТаблицу(ЛистДанных);


    Если ТипДокумента ="Реализация Товаров" Тогда

    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | Реализация.Номенклатура как Ном,
    | Реализация.ЕдиницаИзмерения как Ед,
    | Реализация.Количество как Кол
    | ИЗ Документ.РеализацияТоваровУслуг.Товары как Реализация
    | ГДЕ Реализация.Ссылка=&ДокРеализации
    |
    |");
    КонецЕсли;
    Если ТипДокумента ="Заказ покупателя" Тогда
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | Реализация.Номенклатура как Ном,
    | Реализация.ЕдиницаИзмерения как Ед,
    | Реализация.Количество как Кол
    | ИЗ Документ.ЗаказПокупателя.Товары как Реализация
    | ГДЕ Реализация.Ссылка=&ДокЗаказа
    |
    |");
    КонецЕсли;

    Запрос.УстановитьПараметр("ДокРеализации", ЭтаФорма.ДокументРеализации);
    Запрос.УстановитьПараметр("ДокЗаказа", ЭтаФорма.ДокументЗаказа);

    ВыборкаSQL = Запрос.Выполнить().Выбрать();
    Пока ВыборкаSQL.Следующий() Цикл
    Номен=ВыборкаSQL.Ном;
    Кол=ВыборкаSQL.Кол;
    Ед=ВыборкаSQL.Ед;
    Если Номен.ВидНоменклатуры.Код="000000007" ИЛИ Номен.ВидНоменклатуры.Код="000000006" Тогда //Проверка на комплект
    СоставляющиеКомплекта = Новый Массив();
    КоэффициентУчастия = Новый Массив();
    КоличествоВКомплекте = Новый Массив();
    CформироватьСоставляющиеКомплекта(Номен,СоставляющиеКомплекта,КоэффициентУчастия,КоличествоВКомплекте);
    Размер=СоставляющиеКомплекта.Количество();
    Для П=0 по Размер-1 цикл
    НоваяСтрока=Этаформа.СписокТоваров.Добавить();
    НоваяСтрока.Артикул=СоставляющиеКомплекта[П].Артикул;
    НоваяСтрока.Номенклатура=СоставляющиеКомплекта[П];
    НоваяСтрока.ЕдиницаИзмерения=СоставляющиеКомплекта[П].ЕдиницаХраненияОстатков;
    НоваяСтрока.Количество=Кол*КоличествоВКомплекте[П];
    НоваяСтрока.Вес=СоставляющиеКомплекта[П].ЕдиницаХраненияОстатков.Вес;
    НоваяСтрока.Объем=СоставляющиеКомплекта[П].ЕдиницаХраненияОстатков.Объем;
    КонецЦикла;

    Иначе
    НоваяСтрока=Этаформа.СписокТоваров.Добавить();
    НоваяСтрока.Артикул=Номен.Артикул;
    НоваяСтрока.Номенклатура=Номен;
    НоваяСтрока.ЕдиницаИзмерения=Ед;
    НоваяСтрока.Количество=Кол;
    НоваяСтрока.Вес=Ед.Вес;
    НоваяСтрока.Объем=Ед.Объем;

    КонецЕсли;
    КонецЦикла;
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну вы запрос пишите к документам, а пишите к регистру ЗАказы Покупателей. и все будет ОК
    Документ Заказ делает приход в этот регистр, как только идет отгрузка или закрытие заказа - расход.
    Получайте остатки по заказу на дату и все.
    Т.е если не было реализации то все позиции будут если уже реализация прошла то остатки будут с учетом реализации.

    Для этого регистры и придумали. Запросы к документам - плохой тон.

    Аналогично отчету Анализ Заказа покупателя

    Он же не Тч документов смотрит
  3. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Если можно, приведите пример.. код не мой, только начал писать..
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну вот запрос, который получает остаки по заказу на дату


    Код:
    ВЫБРАТЬ
    ЗаказыПокупателейОстатки.Номенклатура,
    ЗаказыПокупателейОстатки.ЕдиницаИзмерения,
    ЗаказыПокупателейОстатки.КоличествоОстаток
    ИЗ
    РегистрНакопления.ЗаказыПокупателей.Остатки(КОНЕЦПЕРИОДА(&ДатаСреза, ДЕНЬ), ЗаказПокупателя = &СсылкаНаЗаказ) КАК ЗаказыПокупателейОстатки
  5. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Я сделал так:


    Если ТипДокумента ="Заказ покупателя" Тогда
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |ЗаказыПокупателейОстатки.Номенклатура,
    |ЗаказыПокупателейОстатки.ЕдиницаИзмерения,
    |ЗаказыПокупателейОстатки.КоличествоОстаток
    |ИЗ
    |РегистрНакопления.ЗаказыПокупателей.Остатки(КОНЕЦПЕРИОДА(&ДатаСреза, ДЕНЬ), ЗаказПокупателя = &СсылкаНаЗаказ) КАК ЗаказыПокупателейОстатки
    |");
    КонецЕсли;

    но при запуске выдает


    ВыборкаSQL = Запрос.Выполнить().Выбрать();
    по причине:
    {(6, 58)}: Не задано значение параметра "ДатаСреза"
    РегистрНакопления.ЗаказыПокупателей.Остатки(КОНЕЦПЕРИОДА(<<?>>&ДатаСреза, ДЕНЬ), ЗаказПокупателя = &СсылкаНаЗаказ) КАК ЗаказыПокупателейОстатки

    Как быть?
  6. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.174
    Симпатии:
    13
    Баллы:
    29
    ну так параметр то задать надо. перед выполнением запроса УстановитьПараметр()
  7. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Запрос.УстановитьПараметр("ДатаСреза", ЭтаФорма.ДокументЗаказа); так примерно? но выдает ошибку {(6, 58)}: Неверные параметры "КОНЕЦПЕРИОДА"
  8. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Вот полный код..Подскажите,где моя ошибка.Я уже запутался(


    ИмяТюрьмы="\\TERMSRV\LotsiaPrice\Таблицы 1с\Упаковочный лист.xls";

    Тюрьма=Новый COMОбъект("Excel.Application");
    Тюрьма.Workbooks.Open(ИмяТюрьмы);

    ЛистДанных = Тюрьма.Worksheets(1);
    ОчиститьТаблицу(ЛистДанных);


    Если ТипДокумента ="Реализация Товаров" Тогда

    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | Реализация.Номенклатура как Ном,
    | Реализация.ЕдиницаИзмерения как Ед,
    | Реализация.Количество как Кол
    | ИЗ Документ.РеализацияТоваровУслуг.Товары как Реализация
    | ГДЕ Реализация.Ссылка=&ДокРеализации
    |
    |");
    КонецЕсли;
    Если ТипДокумента ="Заказ покупателя" Тогда
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | Реализация.Номенклатура как Ном,
    | Реализация.ЕдиницаИзмерения как Ед,
    | Реализация.Количество как Кол
    | ИЗ Документ.ЗаказПокупателя.Товары как Реализация
    | ГДЕ Реализация.Ссылка=&ДокЗаказа
    |");

    КонецЕсли;

    Если ТипДокумента ="Заказ покупателя" Тогда
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |ЗаказыПокупателейОстатки.Номенклатура,
    |ЗаказыПокупателейОстатки.ЕдиницаИзмерения,
    |ЗаказыПокупателейОстатки.КоличествоОстаток
    |ИЗ
    |РегистрНакопления.ЗаказыПокупателей.Остатки(КОНЕЦПЕРИОДА(&ДатаСреза, ДЕНЬ), ЗаказПокупателя = &СсылкаНаЗаказ) КАК ЗаказыПокупателейОстатки
    |");
    КонецЕсли;





    Запрос.УстановитьПараметр("ДокРеализации", ЭтаФорма.ДокументРеализации);
    Запрос.УстановитьПараметр("ДокЗаказа", ЭтаФорма.ДокументЗаказа);
    Запрос.УстановитьПараметр("ДатаСреза", ЭтаФорма.ДокументЗаказа);
    ВыборкаSQL = Запрос.Выполнить().Выбрать();
    Пока ВыборкаSQL.Следующий() Цикл
    Номен=ВыборкаSQL.Ном;
    Кол=ВыборкаSQL.Кол;
    Ед=ВыборкаSQL.Ед;
    Если Номен.ВидНоменклатуры.Код="000000007" ИЛИ Номен.ВидНоменклатуры.Код="000000006" Тогда //Проверка на комплект
    СоставляющиеКомплекта = Новый Массив();
    КоэффициентУчастия = Новый Массив();
    КоличествоВКомплекте = Новый Массив();
    CформироватьСоставляющиеКомплекта(Номен,СоставляющиеКомплекта,КоэффициентУчастия,КоличествоВКомплекте);
    Размер=СоставляющиеКомплекта.Количество();
    Для П=0 по Размер-1 цикл
    НоваяСтрока=Этаформа.СписокТоваров.Добавить();
    НоваяСтрока.Артикул=СоставляющиеКомплекта[П].Артикул;
    НоваяСтрока.Номенклатура=СоставляющиеКомплекта[П];
    НоваяСтрока.ЕдиницаИзмерения=СоставляющиеКомплекта[П].ЕдиницаХраненияОстатков;
    НоваяСтрока.Количество=Кол*КоличествоВКомплекте[П];
    НоваяСтрока.Вес=СоставляющиеКомплекта[П].ЕдиницаХраненияОстатков.Вес;
    НоваяСтрока.Объем=СоставляющиеКомплекта[П].ЕдиницаХраненияОстатков.Объем;
    КонецЦикла;

    Иначе
    НоваяСтрока=Этаформа.СписокТоваров.Добавить();
    НоваяСтрока.Артикул=Номен.Артикул;
    НоваяСтрока.Номенклатура=Номен;
    НоваяСтрока.ЕдиницаИзмерения=Ед;
    НоваяСтрока.Количество=Кол;
    НоваяСтрока.Вес=Ед.Вес;
    НоваяСтрока.Объем=Ед.Объем;

    КонецЕсли;
    КонецЦикла;
  9. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.174
    Симпатии:
    13
    Баллы:
    29
    Запрос.УстановитьПараметр("ДатаСреза", ЭтаФорма.ДокументЗаказа);

    вместо ЭтаФорма.ДокументЗаказа - нужна ДАТА!!! а не ссылка на документ.

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