Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Создание нескольких заказов поставщику
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Fabri
Добрый день всем. Подскажите пожалуйста что правильней использовать в моем случае.
Написал обработку, суть её в том чтобы автоматически создавать заказы поставщикам если количество товара на складе ниже установленного.
Есть таблица Товары, с полями - Код, Номенклатура, Количество, Поставщик1, Поставщик2, Поставщик3.
Запросом выводятся все данные в таблицу с этим все ок.

Теперь создал кнопочку которая должна создать документы Заказ покупателю, но вывести строки с поставщиком в нужный документ.
Пример:
Код Номенклатура Количество Поставщик1 Поставщик2 Поставщик3
Строка1: Тесттовар1 2 Иванов Сидоров
Строка2: Тесттовар2 5 Сидоров
Строка3: Тестовар3 6 Василье Иванов

Необходимо чтоб создавались документы Заказ поставщику.
Получается у нас будет: документ с поставщиком Иванов, в котором будут 1 и 3 строка.
Документ с поставщиком Сидоров в котором будут 1 и 2 записи, и т.д.

// Здесь незнаю что использовать Массив, структуру, соответствие или список значений
    Для Каждого Строка ИЗ Товары Цикл
                
    КонецЦикла;


Возможно у кого-то были подобные наработки, подскажите как лучьше реализовать группировку номенклатуры по поставщику и вывести её в документ. Спасибо.
logist
Вам необходимо переписать запрос таким образом что бы колонка Поставщик была одна, т.е. на каждого поставщика была своя строка с номенклатурой, а дальше как-то так:
МассивПоставщиков = РезультатЗапросаТаблица.ВыгрузитьКолонку("Поставщик");
Для каждого Поставщик из массивпоставщиков цикл
СтрокиПоставщика = Товары.НайтиСтроки(Новый Структура("Поставщик",Поставщик));
Заказ = Документы.ЗаказПоставщику.Создать();
Заказ.Поставщик = Поставщик;
Для Каждого Строка Из СтрокиПоставщика
СтрокаЗаказа = Заказ.Товары.Добавить();
ЗаполнитьЗначениеСвойств(СтрокаЗаказа, Строка);
Конеццикла;
Конеццикла;
Fabri
Проблема в том что мне нужно выводить в таблицу данные именно в том виде как писал выше.
Юзер в таблице сможет менять количество для всей номенклатуры, а потом уже просто формируются заказы на каждого поставщика.

Вот код запроса:
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    УстановкаОстатковНоменклатурыСрезПоследних.Номенклатура.Код КАК Код,
        |    УстановкаОстатковНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
        |    УстановкаОстатковНоменклатурыСрезПоследних.Остаток КАК Количество,
        |    УстановкаОстатковНоменклатурыСрезПоследних.Номенклатура.ОсновнойПоставщик КАК Поставщик1,
        |    УстановкаОстатковНоменклатурыСрезПоследних.Номенклатура.ДопПоставщик1 КАК Поставщик2,
        |    УстановкаОстатковНоменклатурыСрезПоследних.Номенклатура.ДопПоставщик2 КАК Поставщик3
        |ИЗ
        |    РегистрСведений.УстановкаОстатковНоменклатуры.СрезПоследних КАК УстановкаОстатковНоменклатурыСрезПоследних
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        |        ПО УстановкаОстатковНоменклатурыСрезПоследних.Остаток > ТоварыНаСкладахОстатки.КоличествоОстаток";

    Результат = Запрос.Выполнить();
    Товары.Загрузить(Запрос.Выполнить().Выгрузить());
Ardi
В работе программиста есть один существенный недостаток. Чтобы что-нибудь напрограммировать, приходится программировать.
Fabri
Ardi, я считаю что Ваш ответ не имеет отношения к данной теме. Если Вас "задел" мой ответ в необходимо зарегистрироваться для просмотра ссылки, то я повторюсь что не хотел никого обижать, и не ставил под сомнения уровень квалификации кого-либо на данном форуме.
Возможно кто-то решал вопросы такого типа, буду рад помощи.
Ardi
Я когда-то тоже проходил этап когда необходимость сидеть и руками программировать казалось неразрешимой задачей. А так хотелось чтобы оно двумя строчками делалось.
Vofka
Не вижу никаких проблем. Для начала делаете функцию типа такой:

Функция ПолучитьТаблицуНоменклатуры()

   Таблица = Новый ТаблицаЗначений();
   Таблица.Колонки.Добавить("Номенклатура");
   Таблица.Колонки.Добавить("Количество");

   Возврат Таблица;

КонецФункции


Потом в том месте, где нужно обработать полученную из запроса таблицу пишем что-то вроде этого:

ДанныеДляЗаказов = Новый Соответствие;

Для Каждого Строка ИЗ ТаблицаТоваров Цикл // ТаблицаТоваров - это то, что получили по запросу

    Если ЗначениеЗаполнено(Строка.Поставщик1) Тогда
        Если ДанныеДляЗаказов.Получить(Строка.Поставщик1) = Неопределено Тогда
            ДанныеДляЗаказов.Вставить(Строка.Поставщик1, ПолучитьТаблицуНоменклатуры());
        КонецЕсли;
        НоваяСтрока = ДанныеДляЗаказов[Строка.Поставщик1].Добавить();
        НоваяСтрока.Номенклатура = Строка.Номенклатура;
        НоваяСтрока.Количество = Строка.Количество;
    КонецЕсли;

    Если ЗначениеЗаполнено(Строка.Поставщик2) Тогда
        // аналогично тому, что выше
    КонецЕсли;

    Если ЗначениеЗаполнено(Строка.Поставщик3) Тогда
        // аналогично тому, что выше
    КонецЕсли;

КонецЦикла;

// теперь формируем заказы

Для Каждого Строка ИЗ ДанныеДляЗаказов Цикл

    // Строка.Ключ - тут будет контрагент
    // Строка.Значение - тут будет таблица значений с товарами

КонецЦикла
Домовик
я в восмерке конечно турок (да и вообще), но можно ж вроде три запроса объединить (запросы будут отличаться только соответств измерением поставщика), обозвать одним полем Поставщик, потом в итоговом запросе Группировки по Поставщику, Номенклатуре..

ну на этапе еще запроса нельзя все укомплектовать?
Vofka
Домовик,
Цитата(Fabri @ 21.01.14, 16:03) необходимо зарегистрироваться для просмотра ссылки
Проблема в том что мне нужно выводить в таблицу данные именно в том виде как писал выше.

Егор Динин
Цитата(Fabri @ 21.01.14, 15:31) необходимо зарегистрироваться для просмотра ссылки
автоматически создавать заказы поставщикам если количество товара на складе ниже установленного.

Вообще-то в отчете по точке заказа в типовом функционале это реализовано...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.