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

Запись регистра значениями из двух таблиц

Автор qwedor, 28 мая 2014, 17:49

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

qwedor

Есть 2 таблицы Значений

ТЗ1 и ТЗ2
в ТЗ1 - цена, номенклатура и Количество
в ТЗ2 - Номенклатура Количество и Единиц. Измерения.

Как записать в регистр данные:

Номенклатура, Цена,  Количество, Единиц. Измерение?


Слить 2 таблицы в одну? 

Чето не работает функция. не могу понять что передавать в " КолонкаПоиска"
Функция ОбъединитьТаблицы(ТЗ, ТЗДокумента, КолонкаПоиска)

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

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

cska-fanat-kz

ТЗИтоговая = ТЗ2.Скопировать();
ТЗИтоговая.Колонки.Добавить("Цена",Новый ОписаниеТипов("Число"));
//Вариант 1
Для каждого СтрокаТЧ Из ТЗИтоговая Цикл
    НайденнаяСтрокаСЦеной = ТЗ1.Найти(СтрокаТЧ.Номенклатура, "Номенклатура");
    Если НайденнаяСтрокаСЦеной <> Неопределено Тогда
        СтрокаТЧ.Цена = НайденнаяСтрокаСЦеной.Цена;
    Иначе
        СтрокаТЧ.Цена = 0;
    КонецЕсли;
КонецЦикла;

//Вариант 2
Для каждого СтрокаТЧ Из ТЗИтоговая Цикл
    СтруктураОтбора = Новый Структура("Номенклатура, Количество", СтрокаТЧ.Номенклатура, СтрокаТЧ.Количество);
    МассивСтрокСЦеной = ТЗ1.НайтиСтроки(СтруктураОтбора);
    Если МассивСтрокСЦеной.Количество() <> 0 Тогда
        СтрокаТЧ.Цена = МассивСтрокаСЦеной[0].Цена;
    Иначе
        СтрокаТЧ.Цена = 0;
    КонецЕсли;
КонецЦикла;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

qwedor

сska-fanat-kz  - спасибо, и правда решение годное.
(может кому-то будет интересно)
но у меня уже вышло так:

Индекс = 0;
Для Каждого Строка Из ТЗ Цикл
Движение = Движения.Добавить();
Движение.Услуга = Строка.Номенклатура;
Движение.Цена = Строка.Стоимость / Строка.Количество;
Движение.Количество = Строка.Количество;
Движение.Сумма  = Строка.Стоимость;
Если Строка.Количество = ТЗ2[Индекс].Количество И Строка.Номенклатура = ТЗДокумента[Индекс].Номенклатура  Тогда
Движение.ЕденицаИзмерения = ТЗ2[Индекс].ЕденицаИзмерения;
КонецЕсли;
Движение.Период = Источник.Дата;
Индекс = Индекс +1;

КонецЦикла;

Теги:

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

Рейтинг@Mail.ru

Поиск