Имя: Пароль:
1C
 
Конвертация данных из регистра в документ
0 vsgprog1c
 
13.10.20
11:36
Добрый день, уважаемые коллеги!
Стоит следующая задача. Мне нужно из регистра бухгалтерии выбрать запрос (остатки по счету склада), и загрузить это все в документ в УПП "Оприходование товаров". Подскажите пожалуйста последовательность действий. Я в конвертации разбираюсь, но вот с этим моментом никогда не сталкивался. То есть, беру до выгрузки из источника запросом нужные данные и заполняю после загрузки в приемнике новый документ.
1 MadJhey
 
13.10.20
12:15
В чем проблема посмотреть стандартные переносы тот же УТ в УПП.
2 MadJhey
 
13.10.20
12:23
СпрЦены = СоздатьОбъект("Справочник.Цены");
ТабТовары = СоздатьОбъект("ТаблицаЗначений");
ТабТовары.НоваяКолонка("Номенклатура");
ТабТовары.НоваяКолонка("Количество");
ТабТовары.НоваяКолонка("ЕдиницаИзмерения");
ТабТовары.НоваяКолонка("Коэффициент");
ТабТовары.НоваяКолонка("Цена");

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ДатаОстатков по ДатаОстатков;
|ЮрЛицо = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо;
|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
|Склад = Регистр.ОстаткиТМЦ.Склад;
|ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
|Количество = Регистр.ОстаткиТМЦ.Количество;
|Функция КоличествоКонОст = КонОст(Количество);
|Группировка ЮрЛицо без групп;
|Группировка Склад без групп;
|Группировка Номенклатура без групп;
|Условие(ЦенаПрод = 0);
|Условие(Количество > 0);
|";

ДатаОстатков = Параметры.ДатаВводаОстатков;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Сообщить("Не удалось выполнить запрос по остаткам на складах");
КонецЕсли;

Пока Запрос.Группировка(1) = 1 Цикл
    // Заполнение полей ЮрЛицо
    Пока Запрос.Группировка(2) = 1 Цикл
        // Заполнение полей Склад
        
        Склад = СоздатьОбъект("СписокЗначений");

        Склад.Установить("Наименование","Вспомогательный склад для конвертации (Опт.)");
        Склад.Установить("ВидСклада", "Оптовый");
        Склад.Установить("Розничный", 0);
        Склад.Установить("Комментарий","Вспомогательный склад для переноса остатков партий в опте");
        
        ТабТовары.УдалитьСтроки();
        
        Пока Запрос.Группировка(3) = 1 Цикл
            // Заполнение полей Номенклатура
            ТабТовары.НоваяСтрока();
            ТабТовары.Номенклатура = Запрос.Номенклатура;
            ТабТовары.Количество = Запрос.КоличествоКонОст;
            ТабТовары.ЕдиницаИзмерения = Запрос.Номенклатура.БазоваяЕдиница;
            ТабТовары.Коэффициент = Запрос.Номенклатура.БазоваяЕдиница.Коэффициент;
            
            ТабТовары.Цена = 0;
            Если Запрос.Склад.РозничныйСклад = 1 Тогда
                Если ПустоеЗначение(Константа.РозничныйТипЦен) = 0 Тогда
                    СпрЦены.ИспользоватьВладельца(Запрос.Номенклатура);
                    СпрЦены.ВыбратьЭлементыПоРеквизиту("ТипЦен", Константа.РозничныйТипЦен);
                    Пока СпрЦены.ПолучитьЭлемент() = 1 Цикл
                        Если (СпрЦены.Единица.Получить(Параметры.ДатаВводаОстатков) = Запрос.Номенклатура.БазоваяЕдиница) и
                            (СпрЦены.Цена.Получить(Параметры.ДатаВводаОстатков) > 0) Тогда
                            ТабТовары.Цена = СпрЦены.Цена.Получить(Параметры.ДатаВводаОстатков);
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЕсли;
            
        КонецЦикла;
        
        ВходящиеДанные = СоздатьОбъект("СписокЗначений");
        ВходящиеДанные.Установить("Организация", Запрос.ЮрЛицо);
        ВходящиеДанные.Установить("СкладОтправитель", Склад);
        ВходящиеДанные.Установить("СкладПолучатель", Запрос.Склад);
        ВходящиеДанные.Установить("Товары", ТабТовары);
        ВходящиеДанные.Установить("Дата", Параметры.ДатаВводаОстатков);
            
        ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ПеремещениеТоваров");
    КонецЦикла;
КонецЦикла;
3 MadJhey
 
13.10.20
12:23
Это из 7.7 но смысл думаю понятен
4 mistеr
 
13.10.20
13:04
(0) Создать ПКО с пустым источником и приемником - целевой документ.
Создать ПКС для нужных реквизитов и ТЧ. Все, что можно заполнять константами, заполнять в ПКС.
Создать ПВД. В нем:
Запрос по остаткам. Обходишь выборку, заполняешь ТЗ или сразу выгружаешь в ТЗ.
Создаешь Структуру соответствующую ПКО. В качестве ТЧ передаешь полученную ТЗ.
Вызываешь ВыгрузитьПоПравилу(), указав ПКО.
Всё.
5 vsgprog1c
 
19.10.20
11:10
(4) (2) Спасибо большое! Сработало!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший