Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 17:02

Одна реализация

Автор Chuchi, 05 июл 2011, 16:15

0 Пользователей и 1 гость просматривают эту тему.

Chuchi

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

        Если Выборка.Разница<0 Тогда
            Хватает=Ложь;
            //Прервать;

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

                            Хватает=Истина;
                         КонецЕсли;
                    КонецЦикла;
        КонецЕсли;
    КонецЦикла;   



       
На примере
Список номенклатуры для реализации покупателю
1. "Аленка" - 10 шт. (из них 9 есть на складе 1орг а 1 на складе 2 орг)
2. "Мишка на севере" - 15шт (из них на первой орг 10 на втрой - 5шт)

цикл проверяет построчно (и увы также формирует и документ реализации со второй на первую организацию)
т.е. в результате он мне выдает
1 реализация
Аленка - 1 шт
Мишка на севере - 1 шт

2 реализация
Аленка - 5 шт
Мишка - 5 шт


т.е. как я понимаю он просто весь список номенклатуры размещает в реализации с количеством не достающим по конкретной строке.
Как мне сделать ОДНУ ОБЩУЮ РЕАЛИЗАЦИЮ с количеством соответствующим каждой номенклатуре..

Chuchi

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

Chuchi

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

Шурыгин Иван Сергеевич

ну во первых насколько я помню реализация всегда по 1 организации идет. значит соотвественно надо либо создавать 2 реализации, либо менять конкретно реализацию.
но и в этом случае я бы не пологался на обработку которая это делает автоматически. есть такая загвоздка, а если пользователь решит списать по другому. я бы предложил создать обработку, которая имеет таблицу.
Номенклатура, ТребуетсяСписать, ОстатокСклад1, ОстатокСклад2, СписатьСклад1, СписатьСклад2.
причем 2 последних колонки предложить проверить пользователю и добавить возможность изменить значения. а далее на выходе этой обработки создавать 2 документа реализации.
===================================
жизнь надо прожить так, чтоб вверху посмотрели.
и сказали "А ну ка повтори"
===================================

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск