работа с нетиповым оборудованием

Тема в разделе "1C и всё что с ней связано", создана пользователем xopek160183, 5 янв 2010.

  1. xopek160183

    xopek160183 Гость

    Кто подскажет ответ или хотя бы направление подкопа на следующий вопрос!
    Есть автомобильные весы с терминалом CAS.
    Есть драйвер для 1С, который позволяет в 1С получать данные от весов.
    При установке драйвера есть конфигурашка для теста оборудования, в которой есть новые обработки, через которые данные от весов можно получить в 1С.
    Посоветуйте как прикрутить данный драйвер к типовой конфигурации, например торговля и склад 7. Причем должны обеспечиваться следующие функции. Взвешенный вес должен сохраняться и печататься в накладной ТОРГ-12 в разных форматах (т и кубах).

    PS. Я не проф программист 1С, но с основами программирования pascal и delphi знаком.
    Заранее спасибо! можно на xopek160183 собака mail.ru
     
  2. Hryv

    Hryv Гость

    Посмотрите код в тестовой конфе и по аналогии сделайте
    Если код тестовой конфы небольшой, выложите здесь
    или лучше .md в архиве
    подскажем куда конкретно смотреть
     
  3. xopek160183

    xopek160183 Гость

    Вот целиком упакованный пример для 7. Но одно но - может не работать должным образом, так как для него еще и hasp есть. Но все же обработчики видны!
    Заранее спасибо!
     

    Вложения:

    • 1c77.rar
      Размер файла:
      18,4 КБ
      Просмотров:
      14
  4. Hryv

    Hryv Гость

    Я тестить не буду, просто код посмотрю
    Сейчас некогда
    Завтра отвечу

    А может кто-нибудь и раньше ответит
     
  5. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    ТиС - типовая конфигурация Торговля и Склад, ну или береш любую другую...
    1. Запускаеш 1с в режиме конфигуратора
    2. Открываеш глобальный модуль этой конфигурации и глобальный модуль конфы ТиС(в которую хочеш внедрить данный драйвер);
    3. копируеш сначала все переменные в начало глобального модуля ТиС;
    4. ищешь в том же модуле процедуру: Процедура ПриНачалеРаботыСистемы();
    5. копируеш весь код этой процедуры в глобальный модуль в тело такой же процедуры в ТиС;
    6. копируеш процедуру в глобальный модуль но отдельно:
    Код (Text):
    Процедура Выполнить()
    конт1.форма.обновить();
    КонецПроцедуры
    7. В данной конфе есть обработки, которые выгружаеш:
    Действия -> ВнешнийОтчет(обработка) -> Сохранить как внешний отчет(обработку)
    8. В конфе ТиС:
    Действия -> ВнешнийОтчет(обработка) -> Вставить внешний отчет(обработку)
    9. Добавляеш эти обработки в интерфейс как меню
     
  6. xopek160183

    xopek160183 Гость

    Спасибо, я попробую, посмотрю, что получится!
     
  7. Hryv

    Hryv Гость

    В принципе TimeDontWait все правильно написал
    Могу добавить два небольших совета:

    1. В глобальном модуле тестовой конфы есть
    procedure ПриНачалеРаботыСистемы()
    ее код действительно можно просто добавить в код Процедура ПриНачалеРаботыСистемы() в вашей конфе
    но лучше перенести procedure ПриНачалеРаботыСистемы() именно как отдельную процедуру, переименовать например в ПодключениеВесов() и уже ее вызов подставить в ПриНачалеРаботыСистемы() в вашей конфе
    Потом будет проще что-то подправить или просто вспомнить что к чему через год

    2. Обработки можно не подключать как внешние, а просто копи/пастом прямо в дереве конфиругации скопировать/вставить

    PS сделайте архив рабочей базы прежде чем ее править
     
  8. xopek160183

    xopek160183 Гость

    Спасибо! Добавить у меня получилось. Но я не стал переименовывать процедуру, а добавил код прямо в основную.
    По поводу архивации базы вопроса нет, так как привинчивается к чистой, а потом уже будет заполняться. Комп настраивается в кабинете и подключить непосредственно к весам - это мягко сказать неудобно.
    После запуска конфигурации появляется "ошибка подключения к OLE-серверу!".
    И, прямо сказать, я в 1С не силен.
    Не могли бы вы хотя бы в общих чертах описать - как сделать, чтобы данные о взвешивании сохранялись в базе вместе с остальными данными и затем печатались в накладной.
    Я, например, подразумеваю, что например в форме "реализация" добавить кнопку, по которой будет выполняться считывание веса и данный вес будет присваиваться переменной "количество". :(
    Будьте снисходительны!
    Заранее благодарен!
     
  9. Hryv

    Hryv Гость

    Уберите строки
    ОткрытьФорму("Обработка.Новый1", конт1);
    ОткрытьФорму("Обработка.Управление_модулями", конт2);
    ОбработкаОжидания("Выполнить", 1);

    Если не поможет, то пройдите в отладчике начиная с
    Srv = CreateObject("TSHWMain.TSHWM");
    и посмотрите с какой строки переходит на
    Message("Ошибка подключения к OLE-серверу!");

    примерно так

    Хорошо если в накладной уже есть поле (переменная) для веса, которая уже выводится на печать, только не заполняется

    Тогда, как я понял, в форме (в диалоге) надо сделать кнопку, и на нее повесить процедурку с текстом

    Если ScSrv.Stable = 0 Тогда
    Иначе
    ВЕС = ScSrv.Weight();
    КонецЕсли;

    где "ВЕС" - это ваша переменная

    "ВЕС" будет меняться, если весы стабилизировались

    можно в процедуру написать просто
    ВЕС = ScSrv.Weight();

    тогда "ВЕС" будет полюбому меняться

    Если готовой переменной в вашей 1С нет, то все намного сложнее
    Тогда вам придется читать матчасть

    ЗЫ кстати обработки в вашей 1С вам в принципе не нужны
     
  10. xopek160183

    xopek160183 Гость

    Спасибо!
    Эти обработки поставлялись как пример использования драйвера. Я понимаю, что можно попробовать просто включить в тело код процедуры получения веса и все (дрова то стоят).
    А по поводу накладной! Я мельком просмотрел - при вводе данных "реализация" кроме контрагентов вводится соответственно товар и его количество. Я предполагаю попробовать использовать именно переменную количества не вводя новой. Просто при вводе количества данные предполагается вводить именно в автоматизированном режиме без возможности изменения их вручную. И все.
    Буду пробовать. Что получится - расскажу!
    Еще раз спасибо!
     
  11. xopek160183

    xopek160183 Гость

    По отладчику начал прогонять на строке
    Srv = CreateObject("TSHMain.TSHWM") (в главном модуле. Строки добавлены из тестового обработчика)
    вываливается на ошибку
    "Класс не зарегистрирован, ClassID {F070B14F-CC1B-4F5DB339-70FF7D99410C}
    далее переходит в конец процедуры, выдает "ошибка подключения к OLE-серверу" и переходит в "конецпроцедуры"
    А при выполнении обработки, вставленной из тестовой конфы (строки с MSRWSrv. xxxxx) вываливаются ошибки типа
    {Обработки.Новый.Форма.Модуль(хх):значение не представляет агрегатный объект (ххххх)}
    На сколько я понимаю - это из-за ошибки подключения к OLE-серверу.
    Система также не понимает, где взять значение ScSrv.weight.

    Может я что не так делаю?
     
  12. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Длл-ка не зарегестрирована - какая - это вопрос. Попробуйте дллки что в каталоге базы зарегить через regsvr32 каталогБазы\бла-бла.dll

    под вистой и 2008 проще написать батник и запустить его от имени администратора.
     
  13. xopek160183

    xopek160183 Гость

    Смысл в том, что тестовая конфа работает!
    соответственно возникает вопрос - как можно определить, какой объект присабачен к этой тестовой конфе?
     
  14. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Проверь - у тебя на всех ЗагрузитьВнешнююКомпоненту() стоит проверка на =1, а то может он пытается её грузануть, проверки нет и всё фурычит дальше. А как определить какая тебе нужна - глянь в тестовой конфе строки ЗагрузитьВнешнююКомпоненту() - там должны быть все нестандартные Длл-ки.
     
  15. xopek160183

    xopek160183 Гость

    Спасибо за помощь! Все! Дайвер прикручен, данные в 1С приходят. Оказалось, что ко всему прочему еще и библиотеки драйвера криво стали. Децл повоевал и все пошло.
    Теперь появился еще один вопрос. Правда он уже не совсем относится к данной теме.
    При печати накладной необходимо не просто печатать взвешиваемый вес, а рассчитывать чистый вес груза с учетом веса пустого транспорта.
    Я создал новый стравочник "Транспорт" с полями "Марка", "ГосНомер" и "Тара".
    Заполнение поля "Тара" осуществляется только посредством кнопки "Взвешивание".
    В глобальном модуле сделал процедурку:
    Процедура УстТранспорт(Конт) Экспорт
    СпрТранс = СоздатьОбъект ("Справочник.Транспорт");
    СпрТранс.Выбрать("Выберите взвешиваемый транспорт","");
    Если СпрТранс.Выбран()=1 Тогда
    Конт.Транспорт = СпрТранс.ТекущийЭлемент();
    КонецЕсли;
    КонецПроцедуры

    А в форме есть кнопка, которая вызывает данную процедуру.
    Но не получается присвоить значение полю ввода.
    Подскажите, что я не так делаю?
    Мне надо, чтобы в поле выводились марка и номер транспорта, а при расчете значения веса груза использовалось значение поля "Тара" из справочника "Транспорт".

    Добавлено: Как правильно организуется выбор значения из справочников?
    (не судите строго, я ведь не проф)
     
  16. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Процедура УстТранспорт(Конт) Экспорт
    СпрТранс = СоздатьОбъект ("Справочник.Транспорт");
    Если СпрТранс.Выбрать("Выберите взвешиваемый транспорт","ФормаСписка")=1 Тогда
    Конт.Транспорт = СпрТранс.ТекущийЭлемент();
    КонецЕсли;
    КонецПроцедуры

    примерно так для РЕКВИЗИТОВ документа

    а для элемента диалога который НЕ реквизит надо сделать

    Функция УстТранспорт(Конт) Экспорт
    СпрТранс = СоздатьОбъект ("Справочник.Транспорт");
    Если СпрТранс.Выбрать("Выберите взвешиваемый транспорт","ФормаСписка")=1 Тогда
    Возврат СпрТранс.ТекущийЭлемент();
    КонецЕсли;
    Возврат "";
    КонецФункции


    а на кнопке написать

    моеполеввода = УстТранспорт(ТекущийЭлемент());
     
  17. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Тип реквизита "Транспорт" на форме именно "Справочник.Транспорт" ?
    Тогда организуй заполнение поля примерно так : Поле = "Марка "+Транспорт.Марка+" № "+Транспорт.Номер (уточни имена реквизитов).
    Для выбора из справочника можно использовать диалог ввода "ВвестиЗначение" или метод "ОткрытьПодбор" совместно с "ОбработкаПодбора"

    2 Puh14
    Передавая контекст формы в процедуру глобальника, можно управлять через этот контекст и реквизитами формы
     
  18. xopek160183

    xopek160183 Гость

    Я чего-то не догнал!!!Уже мозги закипают!
    В форме Документ.Реализация есть Поле Ввода с идентификатором Транспорт. Тип этого поля - Справочник.Транспорт. На нее устанавливаю формулу: УстТранспорт(контекст)

    В глобальном модуле сделал функцию:
    УстТранспорт(конт) экспорт
    СпрТранс=СоздатьОбъект("Справочник.Транспорт");
    Если СпрТранс.Выбрать("Выберите вз........"."ФормаСписка")=1 Тогда
    Возврат СпрТранс.ТекущийЭлемент();
    КонецЕсли;
    Возврат "";
    КонецФункции

    На данном поле ввода установил функцию Транспорт=УстТранспорт(ТекущийЭлемент())
    Кстати, изначально при нажатии на кнопку вывода возможных значений (справа поля ввода) выводится
    <>
    <>
    <>
    Выбираю любую - появляется ошибка
    Транспорт=УстТранспорт(ТекущийЭлемент<<?>>())
    Функция не обнаружена (ТекущийЭлемент)

    Что я делаю не так, никак не могу понять принцип работы и почему не срабатывает!
    Все больше и больше начинаю запутываться, меня чего-то начинает клинить!
    Я понимаю, что что-то не то, а догнать не могу!
     
  19. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Я то думал ты из справочника процедуру вызываешь .. да и сам туплю - не нужен там контекст при таком написании нафиг

    Функция УстТранспорт(конт) экспорт
    СпрТранс=СоздатьОбъект("Справочник.Транспорт");
    Если СпрТранс.Выбрать("Выберите вз........"."ФормаСписка")=1 Тогда
    Возврат СпрТранс.ТекущийЭлемент();
    КонецЕсли;
    Возврат "";
    КонецФункции
    на кнопку - Транспорт=УстТранспорт(Контекст)

    функция отработает после выбора значения, правда непонятно - нафиг она тебе, если у поля ввода установлен тип Справочник.Транспорт - при таком раскладе у тебя и так будет выбираться нужный тебе реквизит из формы списка. Обычно функции и процедуры используют для того, чтобы ограничить выбор или скрыть как-то.
     
  20. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    А нельзя попроще, ВвестиЗначение и формулу в реквизит
     
Загрузка...

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