Имя: Пароль:
1C
1С v8
Внешняя обработка для выгрузки данных из 1с в блокнот
0 sashasasha89
 
09.12.15
09:46
Есть обработка. Она берют данные из 1с (Зарплата к начислению)и переносит их блокнот. Я её подредактировал, добавил нужные реквизиты.
Раньше она переносила данные в блокнот в таком виде:
Иванов Иван Иванович; 945784е5784589;5000
То есть фамилию имя отчество;№ счета; сумму.
Теперь пропал в этой строке № счета. Вроде в том коду ничего недалал.
    Для Каждого СтрокаТЗ из ЗарплатаКВыплате.Зарплата Цикл
                Физлицо = СтрокаТЗ.Физлицо;
                НомерЛицевогоСчета= ПолучитьЛицевойСчет(СтрокаТЗ.Физлицо,Банк);
                ТочкаЗапятая = Строка(Формат(СтрокаТЗ.Сумма, "ЧГ =0"));
                ТочкаЗапятая = СтрЗаменить(ТочкаЗапятая,",",".");
                СтрокаТекста=""+Физлицо+";"+СокрЛП(НомерЛицевогоСчета)+";"+ТочкаЗапятая+";";
                //СтрокаТекста=СтрокаТЗ.Физлицо+";"+СокрЛП(НомерЛицевогоСчета);
                //+";"+ТочкаЗапятая+";";
1 User_Agronom
 
09.12.15
09:47
(0) ...Переносит данные в блокнот...

И это пишет программист! Куда катится этот мир?
2 lxs
 
09.12.15
09:49
Счет не возвращает функция ПолучитьЛицевойСчет(СтрокаТЗ.Физлицо,Банк) скорее всего. Туда и смотри.
3 lxs
 
09.12.15
09:49
(1) Не занудствуй. С нашими банками и не такое бывает. Еще и на дискету попросят скинуть..
4 Web00001
 
09.12.15
09:51
(1)С чего ты взял, что ТС программист?
(3)(1)Не формат файла имел ввиду, а формат мозга ТС
5 User_Agronom
 
09.12.15
09:58
(4) ...Вроде в том коду ничего недалал...

Кто на сцену выходит, то завётся актёр,
А машину кто водит, тот, конечно, шофёр.
Программный код (а именно он в стартовом топике) пишет и редактирует программист.

(3) И что? На дискету можно скинуть файл. А записать напрямую в блокнот из 1С нельзя. Нужно
1. создать файл,
2. заполнить его,
3. записать,
4. а потом открыть блокнотом.

По коду ничего нельзя сказать, так как непонятно, что делает функция "ПолучитьЛицевойСчет".
6 sashasasha89
 
09.12.15
09:59
Функция ПолучитьЛицевойСчет(ФизЛицо,Банк) Экспорт
    
    ЗапросНаСуществование = Новый Запрос("
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ЛицевыеСчетаРаботниковОрганизации.ФизЛицо,
    |    ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета,
    |    ЛицевыеСчетаРаботниковОрганизации.Банк
    |ИЗ
    |    РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации
    |ГДЕ
    |    ЛицевыеСчетаРаботниковОрганизации.ФизЛицо = &ФизЛицо И ЛицевыеСчетаРаботниковОрганизации.Банк = &Банк");
    
    ЗапросНаСуществование.УстановитьПараметр("ФизЛицо", ФизЛицо);
    ЗапросНаСуществование.УстановитьПараметр("Банк", Банк);
    Выборка = ЗапросНаСуществование.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        Возврат Выборка.НомерЛицевогоСчета;
    Иначе
        Возврат Неопределено;
    КонецЕсли;

КонецФункции
7 Godofsin
 
09.12.15
10:03
(1) Может чувак пишет программу для роботизированной механической руки, которая ручкой/карандашом переписывает данные программы в блокнот. С листочками который.
8 Godofsin
 
09.12.15
10:04
(6) Ну и что говорит отладчик? Что возвращает функция?
9 Godofsin
 
09.12.15
10:05
+(8) ну и сразу проверить, что находится в переменной "банк".
10 Godofsin
 
09.12.15
10:06
+(9) И в  СтрокаТЗ.Физлицо
11 User_Agronom
 
09.12.15
10:10
(6) Ндя. На один пост сразу четыре вопроса (8) (9) (10)  и все по делу.

ТС, так ты слона не продашь.
12 Лефмихалыч
 
09.12.15
10:10
(1) это дереввенский диалект программистского языка, все нормально.
13 sashasasha89
 
09.12.15
10:13
Отладчиком ставил точку остановки на НомерЛицевогоСчета= ПолучитьЛицевойСчет(СтрокаТЗ.Физлицо,Банк); Обработка теже данные показывает, ошибок нет.
Переменная Банк отправляет в справочник Банки. А ФизЛицо в Справосник ФизЛица и к документу ЗарплатаКВыплатеОрганизации.
14 User_Agronom
 
09.12.15
10:16
(13) ФизЛицо в Справосник ФизЛица и к документу ЗарплатаКВыплатеОрганизации

А вот с этого места поподробнее. Что содержит в себе переменная ФизЛицо? Важен тип значения и само значение.
15 User_Agronom
 
09.12.15
10:19
(12) А не могли бы Вы перевести с деревенского диалекта фразу "Переменная Банк отправляет в справочник Банки".

Никак не могу понять, что обозначает))
16 DDwe
 
09.12.15
10:21
(0) Читать вопрос с таким количеством "апшибок", мозг можно сломать. Как пишет, так и мысли выражает.
17 sashasasha89
 
09.12.15
10:21
(15) Подхватывает данные со справочника Банки
18 DDwe
 
09.12.15
10:22
(17) Что означает "Подхватывает ". Вам в (15) задали вопрос о переводе.
19 User_Agronom
 
09.12.15
10:23
(17) Это как?

Переменная это именованая часть памяти: у неё нет рук, лап и т.д. Она не может хватеть.
20 DDwe
 
09.12.15
10:24
Нужно сразу подобные темы закрывать.
21 Гёдза
 
09.12.15
10:25
Какой мощный код:

ТочкаЗапятая = Строка(Формат(СтрокаТЗ.Сумма, "ЧГ =0"));
ТочкаЗапятая = СтрЗаменить(ТочкаЗапятая,",",".");
22 Godofsin
 
09.12.15
10:25
(21) Ага, я тоже оценил.
23 sashasasha89
 
09.12.15
10:27
Когда выбираю Банк и Перейти к определению он отправляет в Справочник Банки.
24 Godofsin
 
09.12.15
10:28
(23) Ты первый раз отладчиком пользуешься?
25 DDwe
 
09.12.15
10:29
(23) Ну иди, раз отправили.
26 sashasasha89
 
09.12.15
10:29
Почти. Я по инструкции из интернета делал внешнию печатную форму пользовался им.
27 Гёдза
 
09.12.15
10:30
Пройди курсы чтоли в начале какие
28 Godofsin
 
09.12.15
10:33
(23) Последний мой комментарий. Только из доброты душевной.

Поставь точку остановки на ТочкаЗапятая, в отладчике нажми Ctrl+Alt+W. Откроется Табло, в нем в первой колонке, но в разные строки напиши последовательно: НомерЛицевогоСчета, СтрокаТЗ.Физлицо, Банк.
После чего сделай скрин получившегося и через savepic.ru выложи этот скрин здесь.
Действуй.
29 Любопытная
 
09.12.15
10:34
Какая прелесть :)
30 User_Agronom
 
09.12.15
10:34
(23) Переменная это именованнная часть памяти. У неё есть
1. Имя
2. Тип
3. Значение.

Из того, что ты написал можно понять, что переменная имеет
1. Имя: Банк
2. Тип: предположительно, СправочникСсылка.Банки (а может и СправочникОбъект.Банки или ещё что-нибудь)
3. Значение совсем непонятно. Может оно пустая ссылка.
31 NcSteel
 
09.12.15
10:35
(29) Это среди недельная пятница.
32 User_Agronom
 
09.12.15
10:35
(30) Значение переменной можно только присвоить (мы не говорим о низких языках программирования). Подхватывать переменная ничего не может.
33 DDwe
 
09.12.15
10:36
(29) И нам нравится.
34 User_Agronom
 
09.12.15
10:36
Я предлагаю ТС поподробнее ознакомится с азами программирования, а потом создать новый  топик.
35 mehfk
 
09.12.15
10:37
(0) "Выгрузка в блокнот" это что? Распечатка?
36 User_Agronom
 
09.12.15
10:38
(35) Тут уже полфорума над этим голову ломает))
37 NcSteel
 
09.12.15
10:39
(35) Это бардак мозга ТС.
38 sashasasha89
 
09.12.15
10:42
(28) Я так уже пробывал делать. У меня почему то всегда тип и значения пусто.
39 DDwe
 
09.12.15
10:43
(38) Вот видимо ты и ответил на свой вопрос.
40 sashasasha89
 
09.12.15
10:46
(39) Я и с рабочей обработки табло пустые значания выдает.
41 lera01
 
09.12.15
10:47
(0) А может быть, злые бухи прознали, что ты все денюжки в блокнотик выгружаешь и перенесли счета сотрудников в другой банк, а ты все прежним пользуешься?
42 Asmody
 
09.12.15
10:47
Вот правильная внешняя обработка для выгрузки любых данных в блокнот:
43 DDwe
 
09.12.15
10:48
(40) Вот что ты сейчас написал - "Я и с рабочей обработки табло пустые значания выдает"?

Какое Я выдает? Что выдает? Кому? Какие "значАния"?
44 DDwe
 
09.12.15
10:49
(43) + Ты же походу сам не понимаешь, что несешь.
45 DDwe
 
09.12.15
10:49
(42) +100
46 Godofsin
 
09.12.15
10:52
(38) Ты хоть отладку запустил?
47 trdm
 
09.12.15
10:54
(1) Спесь непобедима?
48 Web00001
 
09.12.15
10:57
Кто нить подумал, что автор может не русскоговорящий и говорит через гуглтранслейт?
49 User_Agronom
 
09.12.15
10:59
(47) Это о чём?
50 DDwe
 
09.12.15
11:00
(48) Обычно люди предупреждают.
51 DDwe
 
09.12.15
11:01
(48) И потом, транслейт не делает орфографических ошибок.
52 Web00001
 
09.12.15
11:03
(51)может он и сам писать пробует? (40) очень на гуглтранслейт похоже
53 DDwe
 
09.12.15
11:05
(52) Если просмотреть другие темы ТС. То Ваша версия  начинает выглядеть несостоятельно.
54 sashasasha89
 
09.12.15
11:08
Наверно перестал выдовать банковский счет когда завел новую переменную  КоличествоРаспоряжений в цикле где как раз формируется мне нужная строка с банковским счетом.
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Если ЗначениеЗаполнено(ПутьКФайлу) Тогда
            Банк = ЗарплатаКВыплате.Банк;
            Сумма = Строка(Формат(ЗарплатаКВыплате.СуммаДокумента, "ЧГ =0"));
            Сумма = СтрЗаменить(Сумма,",",".");
            Текст = Новый ТекстовыйДокумент();
            Текст1 = Новый Массив(100);
            СтрокаТекста="MEMUMB";
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Номер организации: 746";
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Банк получатель: ;
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста=Формат(Дата(ЗарплатаКВыплате.Дата),"ДФ=дд.ММ.гггг");
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Номер распоряжения: "+Строка(Число(ЗарплатаКВыплате.Номер));
               Текст.ДобавитьСтроку(СтрокаТекста);
    
            КоличествоРаспоряжений=0;
            
            Для Каждого СтрокаТЗ из ЗарплатаКВыплате.Зарплата Цикл
                Физлицо = СтрокаТЗ.Физлицо;
                НомерЛицевогоСчета= ПолучитьЛицевойСчет(СтрокаТЗ.Физлицо,Банк);
                ТочкаЗапятая = Строка(Формат(СтрокаТЗ.Сумма, "ЧГ =0"));
                ТочкаЗапятая = СтрЗаменить(ТочкаЗапятая,",",".");
                СтрокаТекста=""+Физлицо+";"+СокрЛП(НомерЛицевогоСчета)+";"+ТочкаЗапятая+";";
                //СтрокаТекста=СтрокаТЗ.Физлицо+";"+СокрЛП(НомерЛицевогоСчета);
                //+";"+ТочкаЗапятая+";";    
                 КоличествоРаспоряжений=КоличествоРаспоряжений+1;
                Текст1[КоличествоРаспоряжений]=СтрокаТекста;
              
                            КонецЦикла;
            СтрокаТекста="Количество распоряжений: " +КоличествоРаспоряжений;
               Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Назначение платежа по реестру:"+НазначениеПлатежа ;
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Без налога (НДС)";
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Общая сумма:"+Сумма;
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="----------";
            Текст.ДобавитьСтроку(СтрокаТекста);
            Строка1="";
                    Для Каждого Строка1 из Текст1 Цикл
                
            Текст.ДобавитьСтроку(Строка1);
            КонецЦикла;

            
            Текст.ИспользуемоеИмяФайла = ПутьКФайлу;
            Текст.Записать(ПутьКФайлу,КодировкаТекста.Системная,);
            Сообщить ("Выгрузка успешно завершена. Выгружено: " + ЗарплатаКВыплате.Зарплата.Количество() + " строк документа");
    Иначе
            Отказ = Истина;
            Возврат;
    КонецЕсли
55 NcSteel
 
09.12.15
11:23
(52) Это не транслейт, это поток сознания. очень похоже что автор блондинка или блондин.
56 User_Agronom
 
09.12.15
11:26
(55) Код странный, но первый элемент массива Текст1 пустой.

Предположу, что нужно поменять строки местами:
вместо
   КоличествоРаспоряжений=КоличествоРаспоряжений+1;
   Текст1[КоличествоРаспоряжений]=СтрокаТекста;

написать
   Текст1[КоличествоРаспоряжений]=СтрокаТекста;
   КоличествоРаспоряжений=КоличествоРаспоряжений+1;

Но это так, на уровне телепатии.
57 Godofsin
 
09.12.15
11:29
(54) Дикий г*внокод конечно, но вроде должен быть рабочим..
58 Лохматые Уши
 
09.12.15
11:32
ТочкаЗапятая = СтрЗаменить(ТочкаЗапятая,",",".");

Как такое может работать? Запятая в имени переменной.
59 sashasasha89
 
09.12.15
11:35
(56) Поменял. Тоже самое осталось.
60 User_Agronom
 
09.12.15
11:47
(59) Без отладчика очень сложно сказать в чём проблема.
61 Мэс33
 
09.12.15
11:53
Мне название темы очень нравится.
Фантазия нарисовала - вызов приложения "Блокнот", программное заполнение его содержимым.
62 sashasasha89
 
09.12.15
13:34
Проблема в цикле. Когда я из цикла
Текст1[КоличествоРаспоряжений]=СтрокаТекста;
КоличествоРаспоряжений=КоличествоРаспоряжений+1;
удаляю и строку КоличествоРаспоряжений=0;  тогда банковский счет появляется, но тогда в Количество распоряжений: ничего нет.
63 sashasasha89
 
10.12.15
06:30
Всё заработало
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Если ЗначениеЗаполнено(ПутьКФайлу) Тогда
            Банк = ЗарплатаКВыплате.Банк;
            Сумма = Строка(Формат(ЗарплатаКВыплате.СуммаДокумента, "ЧГ =0"));
            Сумма = СтрЗаменить(Сумма,",",".");
            Текст = Новый ТекстовыйДокумент();
            СтрокаТекста="MEMUMB";
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Номер организации:726";
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Банк получатель:;
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста=Формат(Дата(ЗарплатаКВыплате.Дата),"ДФ=дд.ММ.гггг");
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Номер распоряжения:"+Строка(Число(ЗарплатаКВыплате.Номер));
               Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Количество распоряжений:"+ ЗарплатаКВыплате.Зарплата.Количество();
               Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Назначение платежа по реестру:"+НазначениеПлатежа ;
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Без налога (НДС)";
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="Общая сумма:"+Сумма;
            Текст.ДобавитьСтроку(СтрокаТекста);
            СтрокаТекста="----------";
            Текст.ДобавитьСтроку(СтрокаТекста);

            
            Для Каждого СтрокаТЗ из ЗарплатаКВыплате.Зарплата Цикл
                Физлицо = СтрокаТЗ.Физлицо;
                НомерЛицевогоСчета= ПолучитьЛицевойСчет(СтрокаТЗ.Физлицо,Банк);
                ТочкаЗапятая = Строка(Формат(СтрокаТЗ.Сумма, "ЧГ =0"));
                ТочкаЗапятая = СтрЗаменить(ТочкаЗапятая,",",".");
                СтрокаТекста=""+Физлицо+";"+СокрЛП(НомерЛицевогоСчета)+";"+ТочкаЗапятая+";";
                //СтрокаТекста=СтрокаТЗ.Физлицо+";"+СокрЛП(НомерЛицевогоСчета);
                //+";"+ТочкаЗапятая+";";    
                Текст.ДобавитьСтроку(СтрокаТекста);
            КонецЦикла;
            Текст.ИспользуемоеИмяФайла = ПутьКФайлу;
            Текст.Записать(ПутьКФайлу,КодировкаТекста.Системная,);
            Сообщить ("Выгрузка успешно завершена. Выгружено: " + ЗарплатаКВыплате.Зарплата.Количество() + " строк документа");
    Иначе
            Отказ = Истина;
            Возврат;
    КонецЕсли
КонецПроцедуры
64 ЧеловекДуши
 
10.12.15
06:36
(0) Ужас... Ажн писанину в текстовый файл, так назвать :)
65 ЧеловекДуши
 
10.12.15
06:36
(63) Кошмар, писать все на стороне Клиента :)
66 VladZ
 
10.12.15
06:54
Навеяло:

Вот код,
Который  грузит что-то в блокнот!

А вот процедура,
Которая в этом коде хранится,
Для выгрузки данных, которые так не желают грузиться!

А вот и наш автор,
Который активно стремится
Заставить эти данные грузиться
Кодом, которым что-то грузит в блокнот!

......


// не окончено. Концовку придумайте  сами.
67 Мэс33
 
10.12.15
07:17
Со словом "блокнот" только одна рифма у меня на уме )))
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший