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

Связать справочник и регистр накопления

Автор Tubog, 05 мая 2024, 23:49

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

Tubog

Приветствую всех. Прошу помощи, поскольку в 1С совсем недавно.
Коротко о задаче. Необходимо выгрузить в CSV файл информацию о поступивших товарах определенного производителя. В файл не выгружаются данные, поскольку возникает ошибка "Неоднозначное поле "Номенклатура.Ссылка". Как можно объединить две таблицы без изменения названий? 


Процедура ВыгрузитьНоменклатуру(ПараметрыВыгрузки)
   
   ТЗСписокЗакупки = ПолучитьСписокЗакупки();
   
   ИмяФайлаCSV = Каталог + "\ttt.csv";
   
   ТекстCSV = "";
   
   // заголовки для файла продаж
   ТекстCSV = ТекстCSV + "id дистрибьютера" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "Код продукта дистрибьютера" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "Название продукта" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "Штрихкод" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "Код продукта производителя" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "id единицы измерения продукта" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + Символы.ПС;
            
   // данные
   Для Каждого ТекСтрока Из ТЗСписокЗакупки Цикл
      Если ТекСтрока.Контрагент = "рога и копыта" Тогда // Истина
        // блок операторов
        ТекстCSV = ТекстCSV + ПараметрыВыгрузки.idДистрибьютера + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ПроверитьНаНедопустимыеСимволыCSV(ТекСтрока.НоменклатураКод) + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ПроверитьНаНедопустимыеСимволыCSV(ТекСтрока.НоменклатураНаименование) + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ПроверитьНаНедопустимыеСимволыCSV(ТекСтрока.Штрихкод) + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ПроверитьНаНедопустимыеСимволыCSV(ТекСтрока.КодПроизводителя) + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ТекСтрока.КодЕдиницыИзмерения + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + Символы.ПС;
      КонецЕсли;

   КонецЦикла;
         
    ЗаписатьCSV(ТекстCSV, ИмяФайлаCSV);
   
   Если ПараметрыВыгрузки.ПоказыватьСообщения Тогда
      Сообщить("Файл <" + ИмяФайлаCSV + "> сохранен.", СтатусСообщения.Внимание);
   КонецЕсли;
         
КонецПроцедуры

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


   | ГДЕ
   |   НЕ НоменклатураС.ЭтоГруппа
   |   И НЕ НоменклатураС.ПометкаУдаления
   |   И НоменклатураС.Ссылка В ИЕРАРХИИ(&Номенклатура)";

   

    
   
   Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   Возврат РезультатЗапроса.Выгрузить();
      
КонецФункции


Afinogen

  |      ПО НоменклатураС.Наименование = СписокЗакупки.Номенклатураво первых вот тут у вас ошибка: вы делаете связь между наименованием, т.е. строкой и значениемм ссылочного типа


Tubog

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

Максим75

Tubog, да просто связь сделайте по ссылке, а не по наименованию.
НоменклатураС.Ссылка = СписокЗакупки.Номенклатура

вот мне вообще непонятно, народ пользуется конструктором запросов или тупо руками текст запроса рисует.
в конструкторе сразу же предлагается правильная связь. зачем велосипед изобретать.

antoneus

Ну, очевидно, так же, как вы ниже делаете соединение с регистром штрих-кодов

|      ПО НоменклатураС.Ссылка = СписокЗакупки.Номенклатура

Tubog

Максим75, конструктор, как раз таки и ругается(

Tubog

antoneus, вечером попробую закинуть код, по результату отпишусь

Tubog

antoneus, по прежнему файл пустой(((
Процедура ВыгрузитьНоменклатуру(ПараметрыВыгрузки)
   
   ТЗСписокЗакупки = ПолучитьСписокЗакупки();
   
   ИмяФайлаCSV = Каталог + "\ttt.csv";
   
   ТекстCSV = "";
   
   // заголовки для файла продаж
   ТекстCSV = ТекстCSV + "id дистрибьютера" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "Код продукта дистрибьютера" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "Название продукта" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "Штрихкод" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "Код продукта производителя" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + "id единицы измерения продукта" + ПараметрыВыгрузки.Разделитель;
   ТекстCSV = ТекстCSV + Символы.ПС;
            
   // данные
   Для Каждого ТекСтрока Из ТЗСписокЗакупки Цикл
      Если ТекСтрока.Контрагент = "рога и копыта" Тогда // Истина
        // блок операторов
        ТекстCSV = ТекстCSV + ПараметрыВыгрузки.idДистрибьютера + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ПроверитьНаНедопустимыеСимволыCSV(ТекСтрока.НоменклатураКод) + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ПроверитьНаНедопустимыеСимволыCSV(ТекСтрока.НоменклатураНаименование) + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ПроверитьНаНедопустимыеСимволыCSV(ТекСтрока.Штрихкод) + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ПроверитьНаНедопустимыеСимволыCSV(ТекСтрока.КодПроизводителя) + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + ТекСтрока.КодЕдиницыИзмерения + ПараметрыВыгрузки.Разделитель;
      ТекстCSV = ТекстCSV + Символы.ПС;
      КонецЕсли;

   КонецЦикла;
         
    ЗаписатьCSV(ТекстCSV, ИмяФайлаCSV);
   
   Если ПараметрыВыгрузки.ПоказыватьСообщения Тогда
      Сообщить("Файл <" + ИмяФайлаCSV + "> сохранен.", СтатусСообщения.Внимание);
   КонецЕсли;
         
КонецПроцедуры
Функция ПолучитьСписокЗакупки()
   Запрос = Новый Запрос;                             
   Запрос.Текст =
   "
       |ВЫБРАТЬ
   |   СписокЗакупки.Контрагент КАК Контрагент,   
   |   НоменклатураС.Код КАК НоменклатураКод,
   |   НоменклатураС.НаименованиеПолное КАК НоменклатураНаименование,
   |   ЕСТЬNULL(ВТ_Штрихкоды.Штрихкод, """") КАК Штрихкод,
   |   """" КАК КодПроизводителя,
   |   1 КАК КодЕдиницыИзмерения
   |ИЗ
   |   Справочник.Номенклатура КАК НоменклатураС
   |       СОЕДИНЕНИЕ РегистрНакопления.Закупки КАК СписокЗакупки
   |      ПО НоменклатураС.Ссылка = СписокЗакупки.Номенклатура
   |      ЛЕВОЕ СОЕДИНЕНИЕ  РегистрСведений.Штрихкоды КАК ВТ_Штрихкоды
   |      ПО НоменклатураС.Ссылка = ВТ_Штрихкоды.Владелец          


   | ГДЕ
   |   НЕ НоменклатураС.ЭтоГруппа
   |   И НЕ НоменклатураС.ПометкаУдаления
   |   И НоменклатураС.Ссылка В ИЕРАРХИИ(&Номенклатура)";

   

    
   
   Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   Возврат РезультатЗапроса.Выгрузить();
      
КонецФункции

Что же не так на этот раз, мои знания на этом закончились, прошу помощи у более опытных!!!

Максим75

Tubog, вот здесь в условии
 Если ТекСтрока.Контрагент = "рога и копыта" Тогда

похоже, что у Вас Конрагент - это ссылка, а "рога и копыта" - это наименование, т.е. строка.
разные типы, они не сравниваются, условие не выполняется.

ТЗСписокЗакупки.ВыбратьСтроку() используйте и посмотрите, что возвращает запрос, т.е. что получаете в таблице значений. ну и дальше поймете, или запрос ничего не возвращает, или условие при обходе выборки не работает.

Tubog

Максим75, действительно типы переменных разные. Но как преобразовать ссылочный тип в вещественный и потом сджойнить со справочником не нашел. Попытался реализовать через временную таблицу, тоже не помогло. Файл либо пустой, либо 1С зацикливается и зависает(

Теги:

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

Рейтинг@Mail.ru

Поиск