Имя: Пароль:
1C
1С v8
Сделать запись в таблицу Штрих-М
0 Iceboy187
 
25.12.19
10:11
Необходимо из 1с, перезаписать строку в таблицу "Пароли кассиров и администраторов"  драйвера Штрих-М. Исходя из найденной информации интернета и справочника программиста для Штрих-м, пробовал выполнять следующий код:

Код:

ПодключитьВнешнююКомпоненту("AddIn.SMDrvFR1C22");
ФискальныйРегистратор = Новый ("AddIn.SMDrvFR1C22");
ФискальныйРегистратор.Password =30;  
ФискальныйРегистратор.TableNumber = 2;
ФискальныйРегистратор.RowNumber = 2;
ФискальныйРегистратор.FieldNumber = 30;
ФискальныйРегистратор.ValueOfFieldString = ЭтаФорма.ФИО;
ФискальныйРегистратор.GetFieldStruct();
ФискальныйРегистратор.WriteTable();


Объект AddIn.SMDrvFR1C22 создается. Но далее возникает ошибка


    {ВнешняяОбработка.ТестРаботыСДрайверомКассыККМ.Форма.Форма.Форма(145)}: Поле объекта не обнаружено (Password)
         ФискальныйРегистратор.Password =30;



Подскажите куда копать? Может есть пример кода для решения схожей задачи?

платформа: 8.3.13.1809
конфигурация: Розница, редакция 2.2 (2.2.11.16) (переписанная)
устройство: 028 ККМ ШТРИХ-ФР-К версия 01 14 217278
драйвер: 4.14.792
1 SSSSS_AAAAA
 
25.12.19
10:40
(0) Ставишь на проблемную строку точку останова и в отладчике внимательно по Shift-F9 изучаешь свой ФискальныйРегистратор
2 Iceboy187
 
25.12.19
11:52
3 Масянька
 
25.12.19
11:55
(0) ИМХО, пароли и имена кассиров не пишутся извне. По крайней мере, год назад было так.
Зайди в драйвер и запиши, что надо.
4 SSSSS_AAAAA
 
25.12.19
12:12
(3) Пишутся. И код для записи даже правильный. При условии полной прозрачности внешней компоненты. Но, вот только судя по тому, что пишет товарисч топикстартер, обертка над драйвером в виде внешней компоненты таки не все свойства драйвера обрататывает/реализует.
5 Галахад
 
гуру
25.12.19
12:42
Наверное нужно по старинке работать через драйвер Штриха.
ПодключитьВнешнююКомпоненту("AddIn.DrvFR");
ФискальныйРегистратор = Новый COMОбъект("AddIn.DrvFR");
6 SSSSS_AAAAA
 
25.12.19
12:54
(5) А вот очень даже может быть.
7 Iceboy187
 
25.12.19
14:18
(5) (6) Через AddIn.DrvFR дело пошло гораздо дальше. Но выполнение метода GetFieldStruct  вернуло 51. Исходя из инструкции программиста для штриха:
"Некорректные параметры в команде"

В самой инструкции к методу не указаны никакие параметры. Что это может значить?
8 Галахад
 
гуру
25.12.19
14:23
(7) Гм. А код?
9 Iceboy187
 
25.12.19
14:27
(8) Вот код
10 Iceboy187
 
25.12.19
14:27
ПодключитьВнешнююКомпоненту("AddIn.DrvFR");
         ФискальныйРегистратор = Новый ("AddIn.DrvFR");
      фискальныйРегистратор.COMпортЛУ = 4;
      фискальныйРегистратор.НомерCOMпорта = 4;
      ФискальныйРегистратор.Password =30;  
      ФискальныйРегистратор.TableNumber = 2;
      ФискальныйРегистратор.RowNumber = 2;
      ФискальныйРегистратор.FieldNumber = 30;
      ФискальныйРегистратор.ValueOfFieldString = ЭтаФорма.ФИО;
      ФискальныйРегистратор.GetFieldStruct();
      ФискальныйРегистратор.WriteTable();
      ФискальныйРегистратор.disconnect();
11 Галахад
 
гуру
25.12.19
14:30
Там, ИМХО еще и фискальныйРегистратор.Connect должно быть.
12 Масянька
 
25.12.19
14:39
(10) Попробуй:
ФискальныйРегистратор.ValueOfFieldString = СокрЛП(ЭтаФорма.ФИО);
13 Iceboy187
 
25.12.19
15:30
(11) CheckConnection() возвращает 0. Т.е соединение устанавливается. Но на всякий случай попробовал, не помогает

(12) Не помогает
14 SSSSS_AAAAA
 
25.12.19
15:31
(7) А зачем тебе эта команда?
Вот рабочий код из рабочей проги, правда на немного другом языке:

  Procedure SetCasher
  Lparameters lcCashier
***** Установка кассира в ККМ
  With This.Drv
    .Password = 30
    .TableNumber = 2                                && пароли кассиров
    .RowNumber = 1                                  && первый кассир
    .FieldNumber = 2                                && значение (макс. 64 симв.)
    .ValueOfFieldString = lcCashier
    .WriteTable()
  Endwith

Как можно увидеть никакая команда полчения структуры не используется.
15 Сияющий в темноте
 
26.12.19
00:23
getfieldstruct не обязательно,так как оно используется только для задания типа поля.
и,если вы его делаете,то запись строки делать после него.

из vbscript все прекрасно пишется.
и это,в начале команда Connect,которая должна вернуть ноль илм код ошибки.
16 SSSSS_AAAAA
 
26.12.19
11:09
(10) "ФискальныйРегистратор.FieldNumber = 30;"
Какое к черту поле с номером 30? Для кассира всегда второе поле было.
Закон Брукера: Даже маленькая практика стоит большой теории.