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

Обработка списка Excel

Автор maxxi, 19 июл 2023, 19:21

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

maxxi

Здравствуйте,есть внешняя обработка с ТабЗнач., в котором 5 колонок: "Номенклатура", "Количество",

"ЦенаПриход", "ПродажнаяЦена" и "СуммаПродаж".

Еще есть "НачДата" и "КонДата".

Цель обработки, заполнить данными из базы все колонки после импорта номенклатуры в колонку

"Номенклатура".

Данный момент заполняю колонку "Номенклатура" из Excel, а дальше не знаю куда двигаться.

Помогите пожалуйста, спасибо.


antoneus

Нужно найти в базе номенклатуру по наименованиям из excel и вытащить данные по приходам/продажам?

maxxi

antoneus, совершено верно.

antoneus

Ну, значит, если наименования в екселе и в базе совпадают до запятой, делаем как-то так: в тч должна быть еще колонка Ссылка, тип - СправочникСсылка.Номенклатура (хотя можно и без нее обойтись), колонка с наименованием не должна быть строкой неограниченной длины - ставим длину строки равную длине наименования номенклатуры в базе (скорее всего, 150).

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЧ.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ТЧ
|ИЗ
| &ТЧ КАК ТЧ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТЧ.Номенклатура КАК Номенклатура,
| спрНоменклатура.Ссылка КАК Ссылка
|ИЗ
| ТЧ КАК ТЧ
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура
| ПО ТЧ.Номенклатура = спрНоменклатура.Наименование";

Запрос.УстановитьПараметр("ТЧ", ТЧ.Выгрузить());
ТЧ.Загрузить(Запрос.Выполнить().Выгрузить());

Во второй запрос пакета можно добавлять уже выборку данных по ценам закупки и продажам, соединяться со спрНоменклатура.

maxxi

Вот мой код:

ВЫБРАТЬ
ТЧ.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_ТЧ
ИЗ
&ТЧ КАК ТЧ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВТ_ТЧ.Номенклатура КАК Номенклатура,
СУММА(Расход_В_МногоВалютаТовары.Количество) КАК Количество,
Расход_В_МногоВалютаТовары.Товар.Ссылка КАК ТоварСсылка
ИЗ
Документ.Расход_В_МногоВалюта.Товары КАК Расход_В_МногоВалютаТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТЧ КАК ВТ_ТЧ
ПО (ВТ_ТЧ.Номенклатура = Расход_В_МногоВалютаТовары.Товар)

СГРУППИРОВАТЬ ПО
ВТ_ТЧ.Номенклатура,
Расход_В_МногоВалютаТовары.Товар.Ссылка

но колонка "Номенклатура" пусто.

Максим75

maxxi, так у Вас связь подразумевается по ссылке, а скорее всего во временную таблицу просто строка в виде наименования залетает, вот и не связывается. Разные типы данных, понимаете?

antoneus

Надо как-то так:

ВЫБРАТЬ
    ВТ_ТЧ.Номенклатура КАК Номенклатура,
    СУММА(Расход_В_МногоВалютаТовары.Количество) КАК Количество,
    Расход_В_МногоВалютаТовары.Товар.Ссылка КАК ТоварСсылка
ИЗ
    ВТ_ТЧ КАК ВТ_ТЧ
ЛЕВОЕ СОЕДИНЕНИЕ
    Документ.Расход_В_МногоВалюта.Товары КАК Расход_В_МногоВалютаТовары       
        ПО (ВТ_ТЧ.Номенклатура = Расход_В_МногоВалютаТовары.Товар.Наименование)
СГРУППИРОВАТЬ ПО
    ВТ_ТЧ.Номенклатура,
    Расход_В_МногоВалютаТовары.Товар.Ссылка

Выбирать надо именно из ВТ_ТЧ, а к ней присоединять тч документа по наименованию, то есть на вкладке "Связи" ВТ_ТЧ должна быть в первой колонке.

maxxi

antoneus, спасибо бОльшое, полет нормальный.

maxxi

В консоле запросов все работает ок, но если перенести код внеш.обработку все ломается:

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

    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;


Максим75

maxxi, и в чем поломка?

Теги:

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

Рейтинг@Mail.ru

Поиск