[РЕШЕНО] Загрузка поступления из накладной прихода

Тема в разделе "Обмен данными в "1С:Предприятие 7.7"", создана пользователем Umptek, 3 мар 2014.

  1. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Добрый день.
    Имеется такая задача.
    Есть база с определенным товаром. Есть поставщик, который поставляет данный товар.
    Естественно наименование единицы товара в БД и в накладной поставщика различаются (каждый называет как ему удобнее).
    Нужно сделать, чтобы документ "Поступление" заполнялся сам, беря данные из накладной поставщика. Логично, что для этого нужна "таблица соответствий", то есть таблица, где будет храниться название товара по нашей БД и соответствующее название по накладной поставщика (или поставщикоВ, тогда столбцов в таблице будет больше), чтобы обработка знала какой наш товар подставлять при заполнении табличной части "Поступления". Можно тупо организовать хранение данной "таблица соответствий" в экселевском файле и не мучатся сильно. Но сильно хочется обойтись внутренними средствами 1С. Как создать и сохранить подобную таблицу в базе 1с?

    P.S. Вариант добавить реквизитов в справочник Номенклатура пока не рассматриваю. Надо что-то более гибкое и не менее эффективное.
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Самое простое - во внешнем файле.
    См. ЗначениеВФайл и ЗначениеИзФайла
    Umptek нравится это.
  3. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Сам понимаю, что еще проще хранить вэкселе. И доступ извне легче будет. Можно будет не включая 1с таблицу редактировать.
    Но не хочется, ибо слишком доступно будет для обывателя. Юзеры разные бывают.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) ЗначениеВФайл и ЗначениеИзФайла хранят данные во ВНУТРЕННЕМ формате 1с... Так что простой юзер без бутылки не разберется
    2) В XLS хранить менее удобно, т.к. придется заморачиваться с механизмом чтения/записи данных. Типовые средства позволяют получить/сохранить все одним оператором
    3) Вы можете ограничить доступ к таблице синхронизации средствами 1с....
  5. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Понял.
    Надо поподробнее почитать про ЗначениеВФайл.

    P.s. Из файла выгружать в таблицу значений?
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да. Можно напрямую выгружать/загружать. Один нюанс: есть ТЗ является таблицей формы и у вас параметры колонок (ширина) важны - после загрузки нужно заново проставлять. Не сохраняются свойства.
  7. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Если правильно понял суть задачи.... а почему не создать новый справочник соответствий? В нем будет 2 реквизита:
    1. Наименование (стандартный, текстовый) - содержит название поставщика
    2. Соответствие (Справочник.номенклатура) - конкретный элемент справочника номенклатуры.

    Когда выполняете загрузку, то ищете в данном справочнике по наименованию, если находите, то берете соответствующую номенклатуру своего справочника. Если не находите, то тут можно пользователя сразу попросить ввести соответствие или добавить новый элемент.
    Umptek нравится это.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Можно... Увеличивается надежность хранения данных + уменьшится вероятность потерянных объектов при удалении.
  9. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Тоже вариант. Но высока вероятность работы с несколькими поставщиками (у каждого свои наименования). Может тогда уже имеет смысл сделать два справочника.
    1) Справочник.НазванияПоставщиков
    Реквизит: Наименование (стандартный, текстовый) - содержит название фирмы-поставщика
    2) Справочник.Соответствия
    Реквизит: Наименование (стандартный, текстовый) - содержит название по прайсу поставщика
    НазваниеПоставщика (Справочник.НазванияПоставщиков) - содержит название фирмы-поставщика, по чьему прайсу смотрим
    И сделать второй справочник подчиненным справочнику номенклатуры.

    Как сделано с ценами и типами цен.
    Таким образом получим расширяемую таблицу соответствий. Со сколькими поставщиками человек будет работать,
    столько элементов справочника Соответствия буду подчинены каждому элементу справочника Номенклатуры.

    P.S. Только мне как начинающему программеру это сложнее реализовать...
    Потребуется больше вашей помощи.
    Последнее редактирование: 4 мар 2014
  10. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Зачем усложнять? Предложенной мной структуры вполне достаточно. Не нужно в справочнике соответствий делать разбивку по поставщикам.

    Допустим, есть три поставщика, все поставляют одну и ту же номенклатуру - метизы.

    Первый под названием болты, второй - винты, третий - шурупы.

    В справочнике соответствий заводим 3 элемента. Наименования болты, винты, шурупы, а значение - наш элемент метизы.

    Загружаем поступление (не важно, кто поставщик) в одной из строк встречаем наименование винты. Делаем поиск по справочнику, находим соответствие метизы, подставляем...
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вам в помощи никто не отказывает. Что не ясно - спрашивайте. Поможем
  12. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Тоже интересный вариант.
    Правда получиться менее гибкий в эксплуатации, а точнее, если пользователь захочет сам решать сколько поставщиков он будет использовать, и сам добавлять новых поставщиков и их соответствия, то ему придется самостоятельно лезть в конфигуратор и дописывать справочник.....
    А этого бы допустить не хотелось.
    Именно поэтому и привел аналогию со справочником цен, там можно задать сколько угодно типов цен и все это привязать к справочнику номенклатуры.
    Но я пока остановился на версии просто ТЗ в роли таблицы соответствий, которая храниться в файле. Реализую, чтобы все это пока хотя бы работало на практике, а потом буду усложнять и модифицировать. Данные из таблицы всего можно перекинуть в справочник, достаточно написать несложную обработку.
    P.S. А то замучился сам себе приходовать гигантские накладные...
  13. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Зачем лезть в конфигуратор? Зачем в этом справочнике вообще хранить информацию о поставщиках?
  14. jonsony
    Offline

    jonsony Опытный в 1С Заблокирован

    Регистрация:
    16 апр 2009
    Сообщения:
    224
    Симпатии:
    25
    Баллы:
    29
    а про реквизиты это зря, всего один нужен "Наименование поставщика", но!!! тут другие "глюки" (поставщика) возможны, его менеджеры тоже могут как угодно менять название, у самих это проблема была большая
    могут слова сократить (причём каждый по своему), изменить порядок пары слов в названии (про пробелы уже и не заикаюсь даже)
    самое оптимальное если поставщик на весь товар пользует артикулы, тут и реквизитов не надо никаких дополнительных

    а вообще для достоверности конфигурации назовите
    в последней "Торговля и склад" обычно заказ поставщику стартовый документ (если через заявки работаете)
    в УТ11 для подобного присутствует "Номенклатура поставщика" (не помню была она в УТ10 или нет)
  15. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Я это а тому, что если число поставщиков задается конечным пользователе , то и элементов в справочники соответствий может быть разное. Не хочется, чтобы юзер лез в справочник. В конфиге для себя могу и фиксированным справочники обойтись. Но для простых юзеров, хотелось бы предусмотреть гибкую на стройку и добавление сколько угодно поставщиков и соответствий.
  16. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Ну я не знаю, как другими словами объяснить, что в данной структуре нет смысла хранить информацию о контрагентах, и что достаточно всего два реквизита....

    Смотрите реализацию справочника "Аналоги" в типовых конфигурациях, например, ТиС. Будет всего одно отличие. В аналогах 2 реквизита типа "Справочник.Номенклатура". У вас один из них будет текстовый.
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вам никто не мешает ограничить их в правах
  18. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Извиняюсь, я понял ваше предложение. И оно вполне работоспособно. Моя вина в первоначальном объяснении задачи.
    Просто нужно уточнить, что в специфике нашей работы две разные запчасти (задача для мастерской по ремонту сотовых) из нашей номенклатуры у разных поставщиков называются одинаково. Поэтому алгоритм должен знать от какого поставщика загружаем номенклатуру, чтобы адекватно подставить наше наименование.
    Плюс в дальнейшем ставиться задача для сравнения цен по прайсам разных поставщиков, и тут опять же алгоритм должен распределять названия по поставщикам.
    А так ваша идея вполне проста и работоспособна, отмечаю ее гениальность.
  19. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    В данном случае достаточно в этот справочник добавить ещё один реквизит "контрагент"... Правда в этом случае у нас получается два ключевых поля. 1С индексирует только одно. Поэтому, или используем запрос и дополнительный индекс по конртрагенту, или выборку по одному реквизиту и дальнейший перебор до совпадения.
  20. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Заметил интересный нюанс.
    Происходит некий конфликт между загрузкой экселя и процедурой ЗначениеИзФайла.
    Пока не начали работать с экселем, ЗначениеИзФайла корректно работает. Как только прочитали Эксель-файл, данная процедура перестает возвращать ТаблицуЗначений из файла.
    Вот пример. Имеем форму и на ней две кнопки "Два" и "Сформировать" и элемент "ТаблицаЗначений", имеющий идентификатор ТабСоотв (чтобы наглядно видеть, что таблица соответствий загрузилась). По кнопке Два загружается таблица соответствий (ЗначениеИзФайла), сколько угодно раз и каждый раз корректно. Это же проверяется другой обработкой (там где таблица соответствий заполняется).
    Как только нажимаем кнопку Сформировать, открываем и считываем файл Эксель и находим все совпадения из загружаемой накладной и нашей таблицей, как после этого процедура ЗначениеИзФайла перестает возвращать (загружать) таблицу значений, причем не только в этой обработке, но в другой тоже. И так пока не перезапустишь 1С Предприятие. После перезапуска ЗначениеИзФайла адекватно работает сколько угодно раз, пока мы снова не откроем экселевский файл.
    Вот код:

    Код:
    Перем ИмяФайла, ИмяКаталога; // Для загрузки из экселевского файла
    
    
    //******************************************************************************
    Процедура ВыбратьФайл();
        Файл=СоздатьОбъект("ФС");
        Если Файл.ВыбратьФайл(0,ИмяФайла,ИмяКаталога,
            "Выберите файл, содержащий загрузку",
            "Файлы Microsoft Excel|*.xls", "xls") <> 1 тогда Возврат;
        КонецЕсли;
        ИмяФайла=ИмяКаталога+ИмяФайла;
    КонецПроцедуры //ВыбратьФайл()
    
    
    //******************************************************************************
    Функция ПолучитьЗначение(Excel,y,x)
        Cell=Excel.Cells(y,x);
        Возврат Cell.Value;
    КонецФункции  //ПолучитьЗначение()
    
    
    //******************************************************************************
    Процедура Два()   // По кнопке загружает таблицу соответствий
      
         ЗначениеИзФайла("ТаблицаСоответсвий",табСоотв);
       
    КонецПроцедуры
      
    
    
    
    //*******************************************
    Процедура Сформировать()
    
        //ТабСоотв=СоздатьОбъект("ТаблицаЗначений");
      
        Предупреждение("Привет!
        |Тут будут правила для загрузки из прихода
        |1 столбец - Артикул
        |2 стобец - Название поставщика
        |3 столбец - Количество
        |4 столбец - Цена за единицу");
      
        ВыбратьФайл();   // Загружаем исходный файл с приходом
      
        Excel=СоздатьОбъект("Excel.Application");       //создадим объект Рабочая книга Эксель
        РабочаяКнига=Excel.Workbooks;                  
        РабочаяКнига.Open(ИмяФайла,0,1);               //откроем рабочую книгу - выбранный файл эксель
      
        i=1;        // с первой строки начинаются данные в файле
        АртикулПоставщика=(СокрЛП(Строка(ПолучитьЗначение(Excel,i,1))));      // Получаем артикул из первой строчки
        Пока ПустаяСтрока(АртикулПоставщика)=0 Цикл                           // Пока непустые значения в ячейках - загружаем
            АртикулПоставщика=(СокрЛП(Строка(ПолучитьЗначение(Excel,i,1))));  // Получаем значение артикула из файла прихода
            Если ПустаяСтрока(АртикулПоставщика)=1 Тогда        // Проверка на конец таблицы
                Сообщить("Загрузка закончена ",i);
                Прервать;  
            КонецЕсли;
            КолвоПоставщика=(СокрЛП(Строка(ПолучитьЗначение(Excel,i,3))));    // Получаем значение количества из файла прихода
            ЦенаПоставщика=(СокрЛП(Строка(ПолучитьЗначение(Excel,i,4))));     // Получаем значение цены из файла прихода
            Для ном=1 По табСоотв.КоличествоСтрок() Цикл
                табСоотв.ПолучитьСтрокуПоНомеру(ном);
                Если табСоотв.Нск=АртикулПоставщика Тогда
                    ааа=ТабСоотв.Название;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
            Сообщить("Артикул: "+АртикулПоставщика+"   Наше наименование: "+ааа+"    Количество: "+КолвоПоставщика+"    Цена: "+ЦенаПоставщика);
            i=i+1;                       // Увеличиваем номер строки
        КонецЦикла;
      
    КонецПроцедуры // Сформировать()
    Кто подскажет, где свинья зарыта???

Поделиться этой страницей