Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )



3 страниц V   1 2 3 >

>  Кнопка командной панели
EritikWoW
Отправлено: 28.04.17, 1:00


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Действие) Экспорт

     НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(ссылка)).Имя;
    Если НЕ ПустаяСтрока(Ссылка) тогда
        ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
        ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
        Форма = ссылка.ПолучитьФорму(ИмяФормы);
            Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда
            Выгрузка.ПриОткрытии(Ссылка);
        ИначеЕсли Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") <> Неопределено Тогда
            Выгрузка.Выгружать(Ссылка);
            ОбработкаПрерыванияПользователя();
        КонецЕсли;
   КонецЕсли;
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #126236 · Ответов: 9 · Просмотров: 6151
 

>  Кнопка командной панели
EritikWoW
Отправлено: 27.04.17, 21:54


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


УниверсальныеМеханизмы
    
Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Действие) Экспорт

        НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(ссылка)).Имя;
    Если НЕ ПустаяСтрока(Ссылка) тогда
        ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
        ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
        Форма = ссылка.ПолучитьФорму(ИмяФормы);
            Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда
            Выгрузка.ПриОткрытии(Ссылка);
        ИначеЕсли Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") <> Неопределено Тогда
            Выгрузка.Выгружать(Ссылка);
            ОбработкаПрерыванияПользователя();
        КонецЕсли;
    Иначе
        Ссылка.Выгрузка = Истина;
    КонецЕсли;


Свой модуль

Процедура ПриОткрытии (объект) Экспорт 
    
    НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(объект)).Имя;
    ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
    ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
    НД = ВРег(НазваниеДокумента);
    КолвоСим = СтрДлина(НазваниеДокумента);
    Форма = объект.ПолучитьФорму(ИмяФормы);
    КоличествоЭлементов = Форма.ЭлементыФормы.Количество();
    
    Для Каждого Док из Документы Цикл
    НазвДок = Прав(Док,КолвоСим);
    НазвДок = ВРег(НазвДок);
        Если НазвДок = НД ТОгда
            Форма1 = Док.ПолучитьФорму(ИмяФормы);
            КолЭлем = Форма1.ЭлементыФормы.Количество();
        КонецЕсли;        
    КонецЦикла;    
    
    
    
    Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда
        КП = Форма.ЭлементыФормы.ДействияФормы.Кнопки;    
        инд = КП.Количество();
        ДействиеКнопкиВыгружать = Новый Действие ("УстановитьКнопкиПодменюЗаполненияТЧ");
        Выгружать = КП.Вставить(инд,"Выгружать", ТипКнопкиКоманднойПанели.Действие,"Выгружать",ДействиеКнопкиВыгружать);
        Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
            
        Если Форма.Выгрузка Тогда
            Выгружать.Картинка = БиблиотекаКартинок.Галочка;
            Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
        Иначе
            Выгружать.Картинка = БиблиотекаКартинок.Крест;
            Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
        КонецЕсли;
        
    Иначе  
        Выгружать(Форма);        
    КонецЕсли;
    
КонецПроцедуры    

Функция Выгружать(Форма)Экспорт    
    НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(Форма)).Имя;
    ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
    ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
    Форма1 = Форма.ПолучитьФорму(ИмяФормы);
    Форма1.Выгрузка = Истина;
    КП = Форма1.ЭлементыФормы.ДействияФормы.Кнопки;
    КП.Выгружать.Картинка = БиблиотекаКартинок.Галочка;
    Форма1.Записать();
КонецФункции
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #126221 · Ответов: 9 · Просмотров: 6151
 

>  Кнопка командной панели
EritikWoW
Отправлено: 27.04.17, 16:34


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Прошу прощения.. нашел небольшой огрех в коде.... если документ новый то ругается что формы нет... так что пока не выкладываю... как доделаю выложу !
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #126212 · Ответов: 9 · Просмотров: 6151
 

>  Кнопка командной панели
EritikWoW
Отправлено: 27.04.17, 13:24


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Не совсем, просто как я уже сказал я подвязал кнопки к двум процедурам которые есть во всех документах... и которые обращаются к глобальным модулям, а я хочу уйти от этого в сторону обработки которая позволила бы либо назначить на кнопки свою процедуру, либо каким то образом отследить нажатие передать в переменную информацию и выполнить процедуры которые в зависимости от нажатой кнопки передали бы в реквизит "Истина или Ложъ"!
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #126200 · Ответов: 9 · Просмотров: 6151
 

>  Кнопка командной панели
EritikWoW
Отправлено: 27.04.17, 8:10


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Эх.... я так понимаю это проблемный вопрос да ? посоветуйте хотя бы может библиотеку какую то которая отслеживает нажатие кнопки на форме
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #126173 · Ответов: 9 · Просмотров: 6151
 

>  Кнопка командной панели
EritikWoW
Отправлено: 25.04.17, 14:25


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


1С:Предприятие 8.3 (8.3.6.2449)
"Управление торговлей для Украины" (2.3.25.1)

Сопсно задача создать 1 универсальную кнопку для всех документов которая изменяла бы данные общего реквезита тип булево на истину или ложъ
Создал свой общий модуль и вызываю процедуры в нем из общего модуля к которому обращаются все документы....
Теперь сама суть... если кнопке задать ту же процедуру то вылетает ошибка о том что данное имя не уникально.... я не хочу сильно грубить други модуля... хотел обойтись только вставкой одной строки на обращение к моей процедуре...

Что я хотел уточнить.... ну 1. Привести в порядок код (глазом человека который в этом шарит) что 2. Можно ли как кнопке КП передать процедуру не из формы а из моего модуля или хотя бы просто "Выгружать = Истина\ложъ" ?




Процедура ПриОткрытии (объект) Экспорт 
    
    НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(объект)).Имя;
    ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
    ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
    НД = ВРег(НазваниеДокумента);
    КолвоСим = СтрДлина(НазваниеДокумента);
    Форма = объект.ПолучитьФорму(ИмяФормы);
    КоличествоЭлементов = Форма.ЭлементыФормы.Количество();
    
    Для Каждого Док из Документы Цикл
    НазвДок = Прав(Док,КолвоСим);
    НазвДок = ВРег(НазвДок);
        Если НазвДок = НД ТОгда
            Форма1 = Док.ПолучитьФорму(ИмяФормы);
            КолЭлем = Форма1.ЭлементыФормы.Количество();
        КонецЕсли;        
    КонецЦикла;    
    
    
    
    Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда
    КП = Форма.ЭлементыФормы.ДействияФормы.Кнопки;    
    инд = КП.Количество();
    ПодМенюВыгружать = КП.Вставить(инд,"Выгружать", ТипКнопкиКоманднойПанели.Подменю, "Выгружать");
    ПодМенюВыгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
        
    ДействиеКнопкиДа = Новый Действие ("ПриОткрытии");
    ДействиеКнопкиНет = Новый Действие ("УстановитьКнопкиПодменюЗаполненияТЧ");


    индкн = ПодМенюВыгружать.Кнопки.Количество();
    ПодМенюВыгружать.Кнопки.Вставить(индкн,"Да", ТипКнопкиКоманднойПанели.Действие,"Да",ДействиеКнопкиДа);
    ПодМенюВыгружать.Кнопки.Да.Картинка = БиблиотекаКартинок.Галочка;
    ПодМенюВыгружать.Кнопки.Да.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
        
    ПодМенюВыгружать.Кнопки.Вставить(индкн+1,"Нет", ТипКнопкиКоманднойПанели.Действие,"Нет",ДействиеКнопкиНет);
    ПодМенюВыгружать.Кнопки.Нет.Картинка = БиблиотекаКартинок.Крест;
    ПодМенюВыгружать.Кнопки.Нет.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
    КонецЕсли;
    
КонецПроцедуры    

Процедура Выгружать(Форма)Экспорт
    
    НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(Форма)).Имя;
    ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
    ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
    Форма1 = Форма.ПолучитьФорму(ИмяФормы);                                                  
    
    Форма1.Выгрузка = Истина;
    КП = Форма1.ЭлементыФормы.ДействияФормы.Кнопки;
    КП.Выгружать.Картинка = БиблиотекаКартинок.Галочка;
    
КонецПроцедуры

Процедура НеВыгружать(Форма)Экспорт
    НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(Форма.ДокументОбъект.Ссылка)).Имя;
    ИндДок = Метаданные.Документы.Найти(НазваниеДокумента);
    ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя;
    Форма1 = Форма.ПолучитьФорму(ИмяФормы);
    Форма1.Выгрузка = Ложь;
    
    КП = Форма1.ЭлементыФормы.ДействияФормы.Кнопки;
    КП.Выгружать.Картинка = БиблиотекаКартинок.Крест;
    
    //Shell = Новый COMОбъект("WScript.Shell");
    //НажатиеМышки = shell.run("rundll32.exe user32.dll, mouse_event 1", 1, "true");

КонецПроцедуры
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #126073 · Ответов: 9 · Просмотров: 6151
 

>  УТП 8.2 Контактная Информация
EritikWoW
Отправлено: 24.05.16, 14:43


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


В обычном режиме в представление закинуть нельзя.. он не активен для записи.. (конфигурация 100% типовая, в демо тоже самое) там есть 2 варианта записи контактной информации... 1. когда все расписываешь по реквизитам и программа сама дает "представление", а есть когда когда текстом закидываешь адрес и выбираешь страну

Все уже решил !

Проблема была в моей ошибке... надо было сначала в представление закинуть адрес... а потом в "Поле1" закинуть страну, а я пытался на оборот из-за этого видимо и ругалась 1С так как в обычном режиме "Поле1" это индекс - "Строка Ввода"
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #112803 · Ответов: 3 · Просмотров: 2053
 

>  УТП 8.2 Контактная Информация
EritikWoW
Отправлено: 23.05.16, 19:32


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


День добрый ! Делаю импорт справочников из экселя... с заполнением соответствующих регистров, справочников и прочего... столкнулся с проблемой такого характера... Имею адрес в виде строки в ней Адрес целиком и индекс (хаотично расположенный) Нужно сделать запись в регистре "Контактная информация "Одной произвольной строкой"... но не могу выйти на нужные реквизиты ! Может кто то сталкивался... подскажите плз как обойти данную проблему !

            НЗ = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
            НЗ.Отбор.Объект.Установить(Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(СтрокаТаб.Наименование)).Ссылка);            
            НЗ.Отбор.Тип.Установить(Перечисления.ТипыКонтактнойИнформации.Адрес);            
            НЗ.Отбор.Вид.Установить(Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
            НЗ.Прочитать();
            
            
            Запись = НЗ.Добавить();            
            Запись.Объект = Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(СтрокаТаб.Наименование)).Ссылка;            
            Запись.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;            
            Запись.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;        
            
                        Запись.Строка1 = Справочники.КлассификаторСтранМира.НайтиПоНаименованию("Украина");
                        Запись.Представление = СокрЛП(СтрокаТаб.ЮрАдрес); //должно быть Запись.Представление1 = СокрЛП(СтрокаТаб.ЮрАдрес);

            
                Если НЕ НЗ.Выбран() Тогда
                    НЗ.Записать(Ложь);
                КонецЕсли;
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #112767 · Ответов: 3 · Просмотров: 2053
 

>  Отчет "СтоимостнаяОценкаСкладаВЦенахНоменклатуры"
EritikWoW
Отправлено: 23.04.16, 5:25


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


суть вопроса заключается в следующем:
1. Есть отчет "СтоимостнаяОценкаСкладаВЦенахНоменклатуры" в нем есть соответственно есть цены... (но товар покупался за ин.валюту), хотелось бы либо переделать этот отчет что бы он пересчитывал стоимость вещей на складах по тек.курсу
и вывести либо в тек. цену либо в новый столбец.... (отчет сделан на основе "Уневерсального отчета" и я не могу понять как получить шаблон текста запроса что бы передать ему доп текст с нужной) или же как дополнить таблицу т.к. при попытке обхода не могу подобрать "итератор" к ней
2. Есть второй вариант сделать свой отчет но что то пока не знаю как получить усредненную цену на тек. момент вот мой так сказать отчет (средняя нужна для получения текущей цены):

Процедура СформироватьНажатие(Элемент)
    ВыборкаДанных();    
КонецПроцедуры

Функция ВыборкаДанных()    
Условие = "    
               |ГДЕ";  

УсловиеСклад = "
               |    ТоварыНаСкладах.Склад = &Склад";
              
УсловиеСоединения = "
               |И";              
              
УсловиеНоменклатура = "
               |    ЦеныНоменклатуры.Номенклатура = &Номенклатура";
      
Запрос = Новый Запрос;
МВТаб = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МВТаб;
Запрос.Текст =  "ВЫБРАТЬ
                |    СУММА(ЦеныНоменклатуры.Цена) КАК Цена,
                |    ЦеныНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                |    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
                |    ЦеныНоменклатуры.Валюта КАК Валюта,
                |    ТоварыНаСкладах.Количество КАК Количество,
                |    ТоварыНаСкладах.Склад КАК Склад,
                |    ТоварыНаСкладах.Период КАК Период
                |ИЗ
                |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
                |        ПО ЦеныНоменклатуры.Номенклатура = ТоварыНаСкладах.Номенклатура";
                
Группировка =   "
                |СГРУППИРОВАТЬ ПО
                |    ЦеныНоменклатуры.Номенклатура,
                |    ЦеныНоменклатуры.ЕдиницаИзмерения,
                |    ЦеныНоменклатуры.Валюта,
                |    ТоварыНаСкладах.Количество,
                |    ТоварыНаСкладах.Период,
                |    ТоварыНаСкладах.Склад";
                            
Если НЕ Склад = Справочники.Склады.ПустаяСсылка() или НЕ Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
Запрос.Текст = Запрос.Текст + Условие;
КонецЕсли;

Если НЕ Склад = Справочники.Склады.ПустаяСсылка() и НЕ Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда
Запрос.Текст = Запрос.Текст + УсловиеСоединения;
КонецЕсли;

Если НЕ Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда              
Запрос.Текст = Запрос.Текст + УсловиеНоменклатура + Группировка;
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Запрос.УстановитьПараметр("Склад",Склад);
ИначеЕсли НЕ Склад = Справочники.Склады.ПустаяСсылка() Тогда              
Запрос.Текст = Запрос.Текст + УсловиеСклад + Группировка;
Запрос.УстановитьПараметр("Склад",Склад);
Иначе
Запрос.Текст = Запрос.Текст + Группировка;
КонецЕсли;

ТабНомен = Запрос.Выполнить().Выбрать();              

ВалютаUSD = Справочники.Валюты.НайтиПоНаименованию("USD");
    
ОтборВалют = Новый Структура;
ОтборВалют.Вставить("Валюта",ВалютаUSD);

Пока ТабНомен.Следующий() Цикл
НовСтрока                     = Результат.Добавить();
НовСтрока.Количество         = ТабНомен.Количество;
НовСтрока.Склад                = ТабНомен.Склад;
НовСтрока.Номенклатура         = ТабНомен.Номенклатура;
НовСтрока.Цена                 = ТабНомен.Цена;
НовСтрока.ЕдИзмерения         = ТабНомен.ЕдиницаИзмерения;
НовСтрока.Валюта             = ТабНомен.Валюта;
Если ТабНомен.Валюта        = Справочники.Валюты.НайтиПоНаименованию("USD") Тогда
НовСтрока.ЦенаВГрнТекущий          = ТабНомен.Цена*КурсДолКГрн;
Иначе НовСтрока.ЦенаВГрнТекущий    = ТабНомен.Цена;
КонецЕсли;
РСКурсДолКГрн = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТабНомен.Период,ОтборВалют);
НовСтрока.Курс = РСКурсДолКГрн.Курс / РСКурсДолКГрн.Кратность;
Если ТабНомен.Валюта        = Справочники.Валюты.НайтиПоНаименованию("USD") Тогда
НовСтрока.ЦенаВГрн          = ТабНомен.Цена*НовСтрока.Курс;
Иначе НовСтрока.ЦенаВГрн    = ТабНомен.Цена;
КонецЕсли;

КонецЦикла;
//ПолучитьСреднюю()
КонецФункции

//Функция ПолучитьСреднюю()
//    
//Запрос = Новый Запрос;
//МВТ = Новый МенеджерВременныхТаблиц;
//Запрос.МенеджерВременныхТаблиц = МВТ;
//Запрос.Текст ="ВЫБРАТЬ
//              |    ЦеныНоменклатуры.Номенклатура,
//              |    СУММА(ЦеныНоменклатуры.Цена) КАК Цена
//              |ПОМЕСТИТЬ Цена
//              |ИЗ
//              |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
//              |ГДЕ
//              |    ЦеныНоменклатуры.Номенклатура = &Номен
//              |
//              |СГРУППИРОВАТЬ ПО
//              |    ЦеныНоменклатуры.Номенклатура
//              |{ИТОГИ ПО
//              |    Цена}";
//Запрос.УстановитьПараметр("Номен",Номенклатура);

//ТЗ = Новый ТаблицаЗначений;
//ТЗ = Запрос.Выполнить().Выбрать();
//Пока ТЗ.Следующий() Цикл
//    
//КонецЦикла;    
//КонецФункции    

Процедура ПриОткрытии()
    
    ВалютаUSD = Справочники.Валюты.НайтиПоНаименованию("USD");
    
    ОтборВалют = Новый Структура;
    ОтборВалют.Вставить("Валюта",ВалютаUSD);
    Дата1С = ТекущаяДата();
    ДатаВалюты = ДатаВСтроку(Дата1С);
    ДатаВалюты = Дата(ДатаВалюты);
    
    РСКурсДолКГрн = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ДатаВалюты,ОтборВалют);
    КурсДолКГрн = РСКурсДолКГрн.Курс / РСКурсДолКГрн.Кратность;

КонецПроцедуры

Функция ДатаВСтроку(Дата1С)
                РезультатДата = Формат(Год(Дата1С),"ЧГ=0") + ?(СтрДлина(Строка(Месяц(Дата1С))) < 2,"0" + Строка(Месяц(Дата1С)) , Строка(Месяц(Дата1С)))
                + ?(СтрДлина(Строка(День(Дата1С))) < 2, "0" + Строка(День(Дата1С)), Строка(День(Дата1С)));
                
                
                Возврат РезультатДата;
КонецФункции


+ не пойму почему но не сворачивает данные либо нужно разносить запросы и сворачивать отдельно ?

Я так подумал что скорее всего нужно делать отдельно выборку остатков делать свертку по "Номенклатуре" потом отдельно по ценам... вот только как получить усредненную цену... количество в какой то временный реквезит помещать вместе с ценой а потом делить между собой ?

ладно кому не сложно направьте на правильную мысль ! =)
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #111881 · Ответов: 1 · Просмотров: 1050
 

>  редактирование таблицы НДФЛ в НачЗП
EritikWoW
Отправлено: 13.09.15, 18:43


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Кто может помочь со строками в таблице ? В ТабНДФЛ есть старые строки у сотрудников которых их нужно (либо удалить и добавить новую , либо помнять Результат, но тогда нужно будет добавить недостоющие)
Функция РасчетНДФЛ()
    
    Ставка = РегистрыСведений.СтавкиНДФЛ.Выбрать(Дата(01,01,0001),КонецГода(Дата));
    ТабНДФЛ = НДФЛПроводки.Выгрузить();
    ТабНач = НачисленияПроводки.Выгрузить();
    ТабВзнос = ВзносыПроводки.Выгрузить();
    ТабОтрВБУ = ОтражениеВРеглУчете.Выгрузить();
    
Для Каждого Строчка из ТабНач Цикл
Работник = Строчка.Сотрудник;        
Если Строчка.СчетКт.Ссылка =  ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда

    Для каждого Строка из ТабНДФЛ Цикл
                СумБоль         = 0;
                СумНДФЛ         = 0;
                СумВС             = 0;
                СуммВзн661        = 0;
                СуммВзн663         = 0;
                СуммНач         = 0;        
        Если Строка.Сотрудник = Работник Тогда
            Для Каждого Стр Из ТабВзнос цикл
                Если Стр.Сотрудник = Работник И НЕ Стр.Результат = 0 и
                    //Стр.СчетДТ.Ссылка =  ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда
                    Стр.СтатьяНалоговойДекларации.Ссылка = Справочники.СтатьиНалоговыхДеклараций.ЕСВ_Больничные.Ссылка Тогда
                    СумВзн663 = Стр.Результат;                                                                                                                
                    СуммВзн663 = СуммВзн663 + СумВзн663;                                                                                                            
                    СуммаВзн663 = СуммВзн663                                                                                                                        
                ИначеЕсли Стр.Сотрудник = Работник И НЕ Стр.Результат = 0 и
                    //Стр.СчетДТ.Ссылка =  ПланыСчетов.Хозрасчетный.РасчетыПоЗаработнойПлате.Ссылка Тогда
                    Стр.СтатьяНалоговойДекларации.Ссылка = Справочники.СтатьиНалоговыхДеклараций.ЕСВ_Работники.Ссылка Тогда
                    СумВзн661 = Стр.Результат;                                                                                                                
                    СуммВзн661 = СуммВзн661 + СумВзн661;                                                                                                            
                    СуммаВзн661 = СуммВзн661;                                                                                                                            
                КонецЕсли;                                                                                                                                  
            КонецЦикла;                                                                                                                                

            Для Каждого Строк из ТабОтрВБУ Цикл
                Если Строк.СубконтоКт1 = Работник Тогда                                                                                                
                    СумНач = Строк.Сумма;                                                                                                                   
                    СуммНач = СуммНач + СумНач;                                                                                                            
                    СуммаНач = СуммНач                                                                                                                      
                КонецЕсли;
            КонецЦикла;
        
            Для каждого Ст из ТабНач Цикл
                Если Строчка.СчетКт.Ссылка =  ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка и Ст.Сотрудник = Работник Тогда
                    СуммБоль = ст.Результат;
                    СумБоль = СумБоль + СуммБоль;
                    СуммаБоль = СумБоль;
                КонецЕсли;
                                
                Если Ст.Сотрудник = Работник Тогда
                    Если  НЕ Строка.ДоходНДФЛ.Ссылка = Справочники.ВидыДоходовНДФЛ.ВоенныйСбор.Ссылка Тогда
                        СуммНДФЛ = Строка.Результат;
                        СумНДФЛ = СумНДФЛ + СуммНДФЛ;
                        СуммаНДФЛ = СумНДФЛ;
                    КонецЕсли;
                    
                    Если  Строка.ДоходНДФЛ.Ссылка = Справочники.ВидыДоходовНДФЛ.ВоенныйСбор.Ссылка Тогда
                        СуммВС = Строка.Результат;
                        СумВС = СумВС + СуммВС;
                        СуммаВС = СумВС;
                    КонецЕсли;                
                КонецЕсли;            
            КонецЦикла;
            
            Если НЕ СуммаБоль = 0 И НЕ СуммаНДФЛ = 0 И НЕ СуммаВС = 0 И
                НЕ СуммаБоль = Неопределено и НЕ СуммаНДФЛ = Неопределено И НЕ СуммаВС = Неопределено Тогда
                
                СуммаНач661  = СуммаНач - СуммаБоль;
                СуммаНач663  = СуммаБоль;
                
                СуммаНачБезВзн663 = СуммаНач663-СуммаВзн663;
                СуммаНачБезВзн661 = СуммаНач661-СуммаВзн661;
                
                ПроцентБольничных = (СуммаНачБезВзн663*100)/(СуммаНачБезВзн661);
                
                СуммаНДФЛ663 = СуммаНДФЛ/ПроцентБольничных;
                СуммаНДФЛ661 = СуммаНДФЛ - СуммаНДФЛ663;                
                СуммаВС663 = СуммаВС/ПроцентБольничных;
                СуммаВС661 = СуммаВС - СуммаВС663;
            КонецЕсли;
            
    КонецЕсли;
    КонецЦикла;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            Если СуммаНДФЛ663 > 0 Тогда
            НовСтрока                        = ТабНДФЛ.Добавить();            
            НовСтрока.БазаВзноса            = Строка.БазаВзноса;
            НовСтрока.БазовыйПериодНачало     = Строка.БазовыйПериодНачало;
            НовСтрока.ВидРасчетаБазы        = Строка.ВидРасчетаБазы;
            НовСтрока.ДоходНДФЛ             = Справочники.ВидыДоходовНДФЛ.Код01.Ссылка;
            НовСтрока.НомерСтроки           = Строка.НомерСтроки;
            НовСтрока.Результат             = СуммаНДФЛ663;
            НовСтрока.РезультатТочный         = Строка.РезультатТочный;
            НовСтрока.Сотрудник             = Работник;
            НовСтрока.СубконтоДт1           = Работник;
            НовСтрока.СубконтоКт1           = Строка.СубконтоКт1;
            НовСтрока.СчетДт                = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка;
            НовСтрока.СчетКт                = Строка.СчетКт;
            КонецЕсли;

            Если СуммаВС663 > 0 Тогда
            НовСтрока                        = ТабНДФЛ.Добавить();            
            НовСтрока.БазаВзноса            = Строка.БазаВзноса;
            НовСтрока.БазовыйПериодНачало     = Строка.БазовыйПериодНачало;
            НовСтрока.ВидРасчетаБазы        = Строка.ВидРасчетаБазы;
            НовСтрока.ДоходНДФЛ             = Справочники.ВидыДоходовНДФЛ.ВоенныйСбор.Ссылка;
            НовСтрока.НомерСтроки           = Строка.НомерСтроки;
            НовСтрока.Результат             = СуммаВС663;
            НовСтрока.РезультатТочный         = Строка.РезультатТочный;
            НовСтрока.Сотрудник             = Работник;
            НовСтрока.СубконтоДт1           = Работник;
            НовСтрока.СубконтоКт1           = Строка.СубконтоКт1;
            НовСтрока.СчетДт                = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка;
            НовСтрока.СчетКт                = Строка.СчетКт;
            КонецЕсли;            
                        
            Если СуммаНДФЛ661 > 0 Тогда
            НовСтрока                        = ТабНДФЛ.Добавить();            
            НовСтрока.БазаВзноса            = Строка.БазаВзноса;
            НовСтрока.БазовыйПериодНачало     = Строка.БазовыйПериодНачало;
            НовСтрока.ВидРасчетаБазы        = Строка.ВидРасчетаБазы;
            НовСтрока.ДоходНДФЛ             = Справочники.ВидыДоходовНДФЛ.Код01.Ссылка;
            НовСтрока.НомерСтроки           = Строка.НомерСтроки;
            НовСтрока.Результат             = СуммаНДФЛ661;
            НовСтрока.РезультатТочный         = Строка.РезультатТочный;
            НовСтрока.Сотрудник             = Работник;
            НовСтрока.СубконтоДт1           = Работник;
            НовСтрока.СубконтоКт1           = Строка.СубконтоКт1;
            НовСтрока.СчетДт                = ПланыСчетов.Хозрасчетный.РасчетыПоЗаработнойПлате.Ссылка;
            НовСтрока.СчетКт                = Строка.СчетКт;
            КонецЕсли;

            Если СуммаВС661 > 0 Тогда
            НовСтрока                        = ТабНДФЛ.Добавить();            
            НовСтрока.БазаВзноса            = Строка.БазаВзноса;
            НовСтрока.БазовыйПериодНачало     = Строка.БазовыйПериодНачало;
            НовСтрока.ВидРасчетаБазы        = Строка.ВидРасчетаБазы;
            НовСтрока.ДоходНДФЛ             = Справочники.ВидыДоходовНДФЛ.ВоенныйСбор.Ссылка;
            НовСтрока.НомерСтроки           = Строка.НомерСтроки;
            НовСтрока.Результат             = СуммаВС661;
            НовСтрока.РезультатТочный         = Строка.РезультатТочный;
            НовСтрока.Сотрудник             = Работник;
            НовСтрока.СубконтоДт1           = Работник;
            НовСтрока.СубконтоКт1           = Строка.СубконтоКт1;
            НовСтрока.СчетДт                = ПланыСчетов.Хозрасчетный.РасчетыПоЗаработнойПлате.Ссылка;
            НовСтрока.СчетКт                = Строка.СчетКт;
        КонецЕсли;
        
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////        
КонецЕсли;
КонецЦикла;

НДФЛПроводки.Очистить();
НДФЛПроводки.Загрузить(ТабНДФЛ);

КонецФункции
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #102950 · Ответов: 0 · Просмотров: 1067
 

>  Расчет НДФЛ
EritikWoW
Отправлено: 11.09.15, 6:11


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Ребят кому не сложно помогите оптимизировать и решить проьлему зацикливания создания строк, а то я уже не соображаю ! За ранее ООООГРОМНОЕ СПАСИБО ! =)

Функция РасчетНДФЛ()
    Ставка = РегистрыСведений.СтавкиНДФЛ.Выбрать(Дата(01,01,0001),КонецГода(Дата));
    ТабНДФЛ = НДФЛПроводки.Выгрузить();
    ТабНач = НачисленияПроводки.Выгрузить();
    ТабВзнос = ВзносыПроводки.Выгрузить();
    ТабОтрВБУ = ОтражениеВРеглУчете.Выгрузить();
    НольОдин = Число("0,01");
Для Каждого Строчка из ТабНач Цикл
Если Строчка.СчетКт.Ссылка =  ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда
Работник = Строчка.Сотрудник;        

Для каждого Строка из ТабНДФЛ Цикл
    Если Строка.Сотрудник = Работник Тогда
    СуммНач = 0;
    СуммВзн = 0;
    СумБоль = 0;
    СумНДФЛ = 0;
    СумВС     = 0;
    СуммаВС663 = 0;
    СуммаНДФЛ663 = 0;
    СуммаВС661 = 0;
    СуммаНДФЛ661 = 0;
    
            Для Каждого Стр Из ТабВзнос цикл                                                                                                            //
                Если Стр.Сотрудник = Работник И НЕ Стр.Результат = 0 и
                Стр.СчетДТ.Ссылка =  ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда                                                                             //
                СумВзн = Стр.Результат;                                                                                                                 //
                СуммВзн = СуммВзн + СумВзн;                                                                                                             //
                СуммаВзн = СуммВзн                                                                                                                        //
                Иначе Продолжить                                                                                                                            //
                КонецЕсли;                                                                                                                                  //
            КонецЦикла;                                                                                                                                 //
            
            
            РазмерЛьготы = РегистрыСведений.РазмерыЛьготНДФЛ.ПолучитьПоследнее(ТекущаяДата());                                                          //
            Для Каждого Строк из ТабОтрВБУ Цикл                                                                                                         //
                Если Строк.СубконтоКт1 = Работник Тогда                                                                                                 //
                СумНач = Строк.Сумма;                                                                                                                   //
                СуммНач = СуммНач + СумНач;                                                                                                             //
                СуммаНач = СуммНач                                                                                                                      //
                КонецЕсли;
            КонецЦикла;                                                                                                                                 //
            
            
            Для каждого ст из ТабНач Цикл
                Если Строчка.СчетКт.Ссылка =  ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка и Ст.Сотрудник = Работник Тогда
                СуммБоль = ст.Результат;
                СумБоль = СумБоль + СуммБоль;
                СуммаБоль = СумБоль;
                КонецЕсли;
            КонецЦикла;
            
            Для каждого Стро из ТабНДФЛ цикл
                Если Стро.Сотрудник = Работник Тогда
                Если  НЕ Стро.ДоходНДФЛ.Ссылка = Справочники.ВидыДоходовНДФЛ.ВоенныйСбор.Ссылка Тогда
                СуммНДФЛ = Стро.Результат;
                СумНДФЛ = СумНДФЛ + СуммНДФЛ;
                СуммаНДФЛ = СумНДФЛ;
                КонецЕсли;
                Если  Стро.ДоходНДФЛ.Ссылка = Справочники.ВидыДоходовНДФЛ.ВоенныйСбор.Ссылка Тогда
                СуммВС = Стро.Результат;
                СумВС = СумВС + СуммВС;
                СуммаВС = СумВС;                
                КонецЕсли;
                КонецЕсли;
            
                Если НЕ СуммаБоль = 0 И НЕ СуммаНДФЛ = 0 И НЕ СуммаВС = 0 И
                НЕ СуммаБоль = Неопределено и НЕ СуммаНДФЛ = Неопределено И НЕ СуммаВС = Неопределено Тогда       
                ПроцентБольничных = (СуммаБоль*100)/СуммаНач;
                СуммаНДФЛ663 = (СуммаНДФЛ/100)*ПроцентБольничных;
                СуммаНДФЛ663 = Число(Формат(СуммаНДФЛ663,"ЧДЦ=2"));
                СуммаНДФЛ661 = СуммаНДФЛ - СуммаНДФЛ663;
                СуммаВС663 = (СуммаВС/100)*ПроцентБольничных;
                СуммаВС663 = Число(Формат(СуммаВС663,"ЧДЦ=2"));
                СуммаВС661 = СуммаВС - СуммаВС663;                
                КонецЕсли;        
            КонецЦикла;
            
            
            
            НовСтрока = ТабНДФЛ.Добавить();    
            
            НовСтрока.БазовыйПериодНачало     = Строка.БазовыйПериодНачало;
            НовСтрока.ДоходНДФЛ             = Строка.ДоходНДФЛ;
            Если СуммаНДФЛ661 > Число(0) Тогда
            НовСтрока.Результат             = СуммаНДФЛ661;
            СуммаНДФЛ661 = Число(0)
            КонецЕсли;
            Если СуммаВС661 > Число(0) И СуммаНДФЛ661 < Число(0)Тогда
            НовСтрока.Результат             = СуммаНДФЛ661;
            СуммаНДФЛ661 = Число(0)
            КонецЕсли;
            НовСтрока.Сотрудник             = Работник;
            НовСтрока.СубконтоДт1           = Работник;
            НовСтрока.СубконтоКт1           = Строка.СубконтоКт1;
            НовСтрока.СчетДт                = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка;
            НовСтрока.СчетКт                = Строка.СчетКт;
            
            Если СуммаНДФЛ663 > Число(0) Тогда
            Строка.Результат = СуммаНДФЛ663;
            СуммаНДФЛ663= Число(0)
            КонецЕсли;                            
            Если СуммаВС663 > Число(0) и СуммаНДФЛ663 < Число(0) Тогда
            Строка.Результат = СуммаВС663;
            СуммаВС663= Число(0)
            КонецЕсли;                
            Строка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка;
            СуммаНДФЛ663 = 0
            
        КонецЕсли;        
     КонецЦикла;
КонецЕсли;
КонецЦикла;
    НДФЛПроводки.Очистить();
    НДФЛПроводки.Загрузить(ТабНДФЛ);
КонецФункции
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #102871 · Ответов: 1 · Просмотров: 984
 

>  Получение ставки НДФЛ
EritikWoW
Отправлено: 09.09.15, 17:52


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Цитата(andr_andrey @ 09.09.15, 17:26) *
Слово "Цикл" два раза, а "КонецЦикла" 1 раз по причине того что в данный цикл загнано много чего =)
СоздатьНаборЗаписей()без присваивания результата - Это я случайно закинул =))


Я
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #102791 · Ответов: 2 · Просмотров: 1268
 

>  Получение ставки НДФЛ
EritikWoW
Отправлено: 09.09.15, 14:31


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Есть проблема... Подскажите решение (если не сложно) Как можно получить ставку расчета НДФЛ ?

    
Ставка = РегистрыСведений.СтавкиНДФЛ.Выбрать(Дата(01,01,0001),КонецГода(Дата));
ТабНДФЛ = НДФЛПроводки.Выгрузить(); //<===== Табличная часть из документа документ: "Начисление ЗП"

Для каждого Строка из ТабНДФЛ Цикл
    
     Пока Ставка.Следующий()Цикл
     РегистрыСведений.СтавкиНДФЛ.СоздатьНаборЗаписей()
     Вид = СтрЗаменить(Ставка.ВидСтавки,"","");
     Если Строка.СубконтоКт1.Наименование = Вид Тогда                                                                                                  
     СтавкаНДФЛ = Ставка.Ставка;                                                                                                                      
     КонецЕсли;
                                                                                                                                        
КонецЦикла;

Ставку по военному сбору так вытягивает... а вот ставку по НДФЛ нет !
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #102779 · Ответов: 2 · Просмотров: 1268
 

>  Разделение ВС с ЗП и Больничных
EritikWoW
Отправлено: 05.09.15, 11:35


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


1C 8.2 СХ Инагро Релиз 1.2.30.2

Ребят есть задача автоматизировать снятие ВС и НДФЛ с больничных с(663 счет) Решил сделать это так же как советают делать в интернете (ручками поправить) только что бы это попровлялось при нажатии на кнопку (Заполнить и расчитать) ....
Может кто то под сказать может я что то не так делаю... бо не как не могу выйти на базу вычесления из-за того что (начисления, и налоги) в коде находят с разной суммой... соответственно не могу сделать базу для расчета... а именно из Начисления(больничных) высчитать ЕСВ далее вычесть данный ЕСВ из начисления и остаток поделить на ставку налога ВС и НДФЛ и списать с 663счета вот код:

    Для каждого Строка из НачисленияПроводки Цикл         
        Если Строка.СчетКт.Ссылка = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда
            Работник = Строка.СубконтоКт1;
            ТабНДФЛ = НДФЛПроводки.Выгрузить();
            ТабЕСВ = ВзносыПроводки.Выгрузить();
            СтрокаНДФЛ = ТабНДФЛ.Найти(Работник,"Сотрудник");
            СтрокаЕСВ = ТабЕСВ.Найти(Работник,"Сотрудник");
            
            Шкалы = РегистрыСведений.ШкалаСтавокНалогов.Выбрать(Дата(01,01,0001),КонецГода(Дата));
            Пока Шкалы.Следующий()Цикл
            Если Шкалы.СтатьяНалоговойДекларации = СтрокаЕСВ.СтатьяНалоговойДекларации Тогда
            Ставка = Шкалы.Ставка;
            КонецЕсли;        
            КонецЦикла;
            СтрДоход = Строка.Результат * Ставка;
            СтрДоход = Число(Формат(СтрДоход, "ЧДЦ=2"));

            Для Каждого Стр из ТабЕСВ Цикл
                Если Стр.Сотрудник = Работник и Стр.Результат = СтрДоход Тогда
                СуммПосЕСВ = СтрДоход;
                Иначе Продолжить
                КонецЕсли;
            КонецЦикла;
            //Для Каждого Стр из ТабНДФЛ Цикл
            //    Если Стр.Сотрудник = Работник и Стр.Результат = СтрДоход Тогда
            //    НовСтр = ТабНДФЛ.Добавить();
            //    НовСтр = Стр;
            //    НовСтр.НомерСтроки = ""
            //    КонецЕсли;    
            //КонецЦикла;

            //РассчитатьНДФЛ()            
        КонецЕсли;    
            
    КонецЦикла;


Цитата(EritikWoW @ 05.09.15, 12:25) *
            СтрокаНДФЛ = ТабНДФЛ.Найти(Работник,"Сотрудник");
            СтрокаЕСВ = ТабЕСВ.Найти(Работник,"Сотрудник");

Вот этот кусок меня ооочень смущает но не знаю как более отимально выбрать строку для работы
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #102645 · Ответов: 0 · Просмотров: 1247
 

>  Счет контрагента СХ(инагро)
EritikWoW
Отправлено: 23.08.15, 12:39


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Цитата(vadim007 @ 23.08.15, 7:08) *
Какой вам нужно получить счет контрагента: бухгалтерский, банковский, счет-фактуру?


Мне нужен банковский счет

p.s. прошу прощения за столь долгий ответ... меня малость рубануло ! =)

Цитата(TipsyKID @ 23.08.15, 8:09) *
БанковскиеСчета.Ссылка = &Банк
&Банк <===== Здесь идет просто Наименования Банка а не ссылка на банк... по этому..


Банки и Валюта это Строки с наименованием полученными из загрузки xml файла
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #102298 · Ответов: 3 · Просмотров: 1899
 

>  Счет контрагента СХ(инагро)
EritikWoW
Отправлено: 23.08.15, 5:15


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Доброго всем времени суток !
Ребят подскажите по каким реквизитам можно сделать отбор что бы получить счет контрагента ?

Нужно вытянуть счет по которому пришел приход или расход

на основании документа:

    Если НЕ СтрокаДокумента.DOCSUBTYPESNAME = Неопределено тогда
        Если НРег(СтрокаДокумента.DOCSUBTYPESNAME) = "входящий документ" тогда            
        НовСтрок.СуммаПоступило = НовСтрок.СуммаДокумента;
        ИначеЕсли НРег(СтрокаДокумента.DOCSUBTYPESNAME) = "платежное поручение" тогда
        НовСтрок.СуммаСписано = НовСтрок.СуммаДокумента;
        КонецЕсли;
    Иначе
    Возврат
    КонецЕсли;


    
Если НЕ Контрагент = Неопределено И НЕ Контрагент.ОсновнойБанковскийСчет = "" Тогда
    Банки = СтрокаДокумента.BANKNAME;
    Валюта = Справочники.Валюты.НайтиПоКоду(СтрокаДокумента.CURRENCYID);
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |    БанковскиеСчета.Ссылка
                    |ИЗ
                    |    Справочник.БанковскиеСчета КАК БанковскиеСчета
                    |ГДЕ
                    |    БанковскиеСчета.ВалютаДенежныхСредств = &Валюта
                    |    И БанковскиеСчета.Ссылка = &Банк
                    |    И БанковскиеСчета.Владелец = &Контрагент";
    Запрос.УстановитьПараметр("Банк",Банки);     <==== название Банка (строка)
    Запрос.УстановитьПараметр("Валюта",Валюта);     <===== название Валюты (строка)
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() цикл
///////////////////////////////////////////////////////////////////////////////////////////////
    Счет = Выборка.Ссылка.ПолучитьОбъект();
    Если ВРег(Счет.Банк) = ВРег(Банки)
    И ВРег(Счет.ВалютаДенежныхСредств) = ВРег(Валюта)Тогда                    так работает но вытягивает много банков
    НовСтрок.СчетКонтрагента = Счет;
//////////////////////////////////////////////////////////////////////////////////////////////////
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;


Есть с загрузки 2 вида документов !
"входящий документ" и "платежное поручение" на основании этих 2ух документов нужно получить счет контрагенты присутсвует сам Контрагент, Банк, МФО Банка, Валюта
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #102292 · Ответов: 3 · Просмотров: 1899
 

>  Таблица значений СХ(инагро)
EritikWoW
Отправлено: 21.08.15, 20:01


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Доброго всем времени суток ! У меня просьба уже голова кипит =)
Есть 2 таблицы одна в форме одна с загрузки из xml нужно данные из временной ТЗ в ТЗ формы перекинуть...
Думаю реализовать это добавлением строки и заполнением ее из данных ВТЗ...
Но что то не как не могу въехать как реализовать это....
В ТЗ формы и в ВТЗ столбцы разные !
ДокументыКИмпорту.Очистить();
Для Каждого СтрокаДокумента из ТЗ Цикл
ДокументыКИмпорту.Добавить();
ЭлементыФормы.ДокументыКИмпорту.ДобавитьСтроку();
ЭлементыФормы.ДокументыКИмпорту.Значение = СтрокаДокумента.DOCUMENTDATE
КонецЦикла;
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #102268 · Ответов: 1 · Просмотров: 1413
 

>  Нужна помощь с ТЗ и выгрузкой из нее.
EritikWoW
Отправлено: 23.07.15, 11:41


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


ребят огромное спс ! Решил вопрос, исправлением запроса по совету "TipsyKID" и частичного совета "sava1" Большое спс !



ТБ.Колонки.Добавить("Документ"); // Удалил
НоваяСтрока.Документ = СтрокаТаблицы.Док;//--► идиотизм, одни и те же сущности называть по разному, где - то Документ а где - то Док. УДАЛИЛ
ТБ.Свернуть("ДатаПр,Док,КОнтрагент,ТМЦ","Количество,Сумма,СуммаНДС,СуммаСебестоимость");
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #101159 · Ответов: 5 · Просмотров: 2445
 

>  Нужна помощь с ТЗ и выгрузкой из нее.
EritikWoW
Отправлено: 23.07.15, 11:06


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Ребят я дико извиняюсь ! Просто:
1. Как я уже описал выше "Сам отчет писал не Я",
2. Я лишь пытаюсь его оптимизировать под себя с возможностью выгрузки результата в DBF и XML...
3. Ошибки в коде могут быть, бо работал с ним уже под утро, так что спасибо за подсказки =)

4. Может я не правильно описал... суть вопроса такова что после всех обработок из таблицы "ТБ" исчезает колонка "Документ" (оно и понятно), вот ток суть вопроса такова что могу я как то как мне сделать так что в обработку "Выгрузки" попала Эта самая колонка со всеми данными ?

p.s. не успел отредоктировать предыдущее сообщение !
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #101153 · Ответов: 5 · Просмотров: 2445
 

>  Нужна помощь с ТЗ и выгрузкой из нее.
EritikWoW
Отправлено: 23.07.15, 1:39


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Внешнаяя обработка: Отчет-выгрузка по продажам..
Брал за основу готовый "универсальный отчет по продажам"

Знаю что портянка но боюсь без нее суть будет не очень понятна...

Есть ТЗ по именем "ТБ" в нее я закинул заполнение Табличной части "Документ"
При сверте данный кусок таблицы пропадает... если прописать "Документ" в свертку... тогда не идет расчет "сумм,себестоимости,ндса и т.д.)
Может посоветует кто как решить данную проблему ?

// Настройка периода
Перем НП Экспорт;
Перем ТаблицаТД Экспорт;
Перем ТаблицаТБ Экспорт;


Процедура ПродажиПоКлиентам(ТабДок) Экспорт

    Макет = ПолучитьМакет("ПродажиПоКлиентам");
    
    
    Запрос = Новый Запрос;
    ТекстЗапроса =
     "ВЫБРАТЬ
     |    ХозрасчетныйДвиженияССубконто.Регистратор.Дата КАК ДатаПр,
     |    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент КАК Контрагент,
     |    ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК ТМЦ,
     |    ХозрасчетныйДвиженияССубконто.Регистратор КАК Док,
     |    СУММА(ХозрасчетныйДвиженияССубконто.Сумма) КАК СуммаСебестоимость
     |ИЗ
     |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
     |ГДЕ
     |    (ХозрасчетныйДвиженияССубконто.Регистратор.Дата >= &ДатаНач)
     |    И (ХозрасчетныйДвиженияССубконто.Регистратор.Дата <= &ДатаКон)
     |    И (ХозрасчетныйДвиженияССубконто.СубконтоДт1<>ХозрасчетныйДвиженияССубконто.СубконтоКт1)
     |    И (ХозрасчетныйДвиженияССубконто.СчетКт.Забалансовый=ЛОЖЬ)
     |";
    
    Условия="";
    Если Не ВыбТМЦ.Пустая() Тогда
        Запрос.УстановитьПараметр("ВыбТМЦ",ВыбТМЦ);
        Условия = Условия + " И (ХозрасчетныйДвиженияССубконто.СубконтоКт1 В ИЕРАРХИИ(&ВыбТМЦ)) ";        
    КонецЕсли;    
    Если Не ВыбКонтрагент.Пустая() Тогда
        Запрос.УстановитьПараметр("ВыбКонтрагент",ВыбКонтрагент);
        Условия = Условия + " И (ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент В ИЕРАРХИИ(&ВыбКонтрагент))";
    КонецЕсли;    
    
    ТекстЗапроса = ТекстЗапроса + Условия+ "        
     |
     |СГРУППИРОВАТЬ ПО
     |    ХозрасчетныйДвиженияССубконто.Регистратор.Дата,
     |    ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент,
     |    ХозрасчетныйДвиженияССубконто.Регистратор,
     |    ХозрасчетныйДвиженияССубконто.СубконтоКт1
     |
     |УПОРЯДОЧИТЬ ПО
     |  ДатаПр,
     |  Контрагент,
     |  Док,
     |    ТМЦ
     |";

    Запрос.Текст = ТекстЗапроса;
    
    Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
    Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
         
    РезультатСебестоимость = Запрос.Выполнить();
    
    Запрос = Новый Запрос;
    ТекстЗапроса =
     "ВЫБРАТЬ
     |    РеализацияТоваровУслугТовары.Номенклатура КАК ТМЦ,
     |    РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент,
     |    РеализацияТоваровУслугТовары.Ссылка.Дата КАК ДатаПр,
     |    РеализацияТоваровУслугТовары.Ссылка КАК Док,
     |    СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество,
     |    СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма,
     |    СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС
     |ИЗ
     |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
     |ГДЕ
     |    (РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач)
     |    И (РеализацияТоваровУслугТовары.Ссылка.Дата <= &ДатаКон)
     |    И (РеализацияТоваровУслугТовары.СчетУчетаБУ.Забалансовый=ЛОЖЬ)
     |";
    
    Условия="";
    Если Не ВыбТМЦ.Пустая() Тогда
        Запрос.УстановитьПараметр("ВыбТМЦ",ВыбТМЦ);
        Условия = Условия + " И (РеализацияТоваровУслугТовары.Номенклатура В ИЕРАРХИИ(&ВыбТМЦ)) ";        
    КонецЕсли;    
    Если Не ВыбКонтрагент.Пустая() Тогда
        Запрос.УстановитьПараметр("ВыбКонтрагент",ВыбКонтрагент);
        Условия = Условия + " И (РеализацияТоваровУслугТовары.Ссылка.Контрагент В ИЕРАРХИИ(&ВыбКонтрагент))";
    КонецЕсли;    
    
    ТекстЗапроса = ТекстЗапроса + Условия+ "        
     |
     |СГРУППИРОВАТЬ ПО
     |    РеализацияТоваровУслугТовары.Ссылка.Дата,
     |    РеализацияТоваровУслугТовары.Ссылка.Контрагент,    
     |    РеализацияТоваровУслугТовары.Ссылка,
     |    РеализацияТоваровУслугТовары.Номенклатура
     |
     |УПОРЯДОЧИТЬ ПО
     |    ДатаПр,
     |    Контрагент,    
     |  Док,
     |    ТМЦ
     |    ";
    
    Запрос.Текст = ТекстЗапроса;
    
    Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
    Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
    Запрос.УстановитьПараметр("РезультатСебестоимость",РезультатСебестоимость);
         
    Результат = Запрос.Выполнить();
    
    ОбластьЗаголовок    = Макет.ПолучитьОбласть("Заголовок");
    ОбластьТМЦ             = Макет.ПолучитьОбласть("ТМЦ");
    ОбластьИтог            = Макет.ПолучитьОбласть("Итог");
    
    ОбластьЗаголовок.Параметры.Период = ПредставлениеПериода(НачалоДня(ДатаНач),КонецДня(ДатаКон),"Л="+Локализация.ОпределитьКодЯзыкаДляФормат(Локализация.КодЯзыкаИнтерфейса())+"; ФП=Истина");
            
    ТабДок.Вывести(ОбластьЗаголовок);
    
    ИтНаценка = 0;
    ИтКоличество = 0;
    ИтСуммаСебестоимость = 0;
    ИтСумма = 0;
    
    ТБ = Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой);
    ТДСебестоимость = РезультатСебестоимость.Выгрузить(ОбходРезультатаЗапроса.Прямой);
    Массив = Новый Массив;
    Массив.Добавить(Тип("Число"));
    КЧ = Новый КвалификаторыЧисла(15,3);
    ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
    ТБ.Колонки.Добавить("СуммаСебестоимость",ОписаниеТиповЧ);
    Тб.Колонки.Добавить("Документ",Новый ОписаниеТипов("ДокументСсылка.РеализацияТоваровУслуг"),"Документ");
    Для каждого СтрокаТаблицы Из ТДСебестоимость Цикл
        Док = СтрокаТаблицы.Док;
        Если ТБ.Найти(Док,"Док")=Неопределено  Тогда
            продолжить;
        КонецЕсли;    
        ТМЦ = СтрокаТаблицы.ТМЦ;
        ТекСтр = ТБ.Найти(ТМЦ,"ТМЦ");
        Если ТекСтр=Неопределено  Тогда
            продолжить;
        КонецЕсли;
        Если (ТекСтр.Количество=0) И (ТекСтр.Сумма=0) Тогда
            продолжить;
        КонецЕсли;
        Массив = Новый Массив;
        Массив.Добавить(Тип("ДокументОбъект.РеализацияТоваровУслуг"));
        ОпТип = Новый ОписаниеТипов(Массив);
        
        
        НоваяСтрока = ТБ.Добавить();
        НоваяСтрока.ДатаПр = СтрокаТаблицы.ДатаПр;
        НоваяСтрока.Документ = СтрокаТаблицы.Док;
        НоваяСтрока.КОнтрагент = СтрокаТаблицы.КОнтрагент;
        НоваяСтрока.ТМЦ = СтрокаТаблицы.ТМЦ;
        НоваяСтрока.СуммаСебестоимость = СтрокаТаблицы.СуммаСебестоимость;
    КонецЦикла;
    
    Для каждого СтрокаТаблицы Из ТБ Цикл
        Если СокрЛП(Строка(СтрокаТаблицы.Док)) = "" Тогда
            Продолжить;
        КонецЕсли;    
        Если СтрокаТаблицы.Док.СуммаВключаетНДС = Истина Тогда
            СтрокаТаблицы.Сумма = СтрокаТаблицы.Сумма-СтрокаТаблицы.СуммаНДС;
        КонецЕсли;    
    КонецЦикла;    
    
    
    ТБ.Свернуть("ДатаПр,КОнтрагент,ТМЦ","Количество,Сумма,СуммаНДС,СуммаСебестоимость");        
    ТБ.Сортировать("ДатаПр,КОнтрагент,ТМЦ");
    
    Для каждого СтрокаТаблицы Из ТБ Цикл
        Если СокрЛП(Строка(СтрокаТаблицы.Контрагент)) = "" Тогда
            Продолжить;
        КонецЕсли;    
        Если СокрЛП(Строка(СтрокаТаблицы.ТМЦ)) = "" Тогда
            Продолжить;
        КонецЕсли;    
        
        СуммаСНДС = СтрокаТаблицы.Сумма + СтрокаТаблицы.СуммаНДС;
        СуммаБезНДС = СтрокаТаблицы.Сумма;
        
        ЦенаПродажи = ?(СтрокаТаблицы.Количество=0,СуммаСНДС,СуммаСНДС/СтрокаТаблицы.Количество);
        Себестоимость = ?(СтрокаТаблицы.Количество=0,СтрокаТаблицы.СуммаСебестоимость,СтрокаТаблицы.СуммаСебестоимость/СтрокаТаблицы.Количество);                    
        Наценка = СуммаБезНДС - СтрокаТаблицы.СуммаСебестоимость;
        
        ИтНаценка = ИтНаценка + Наценка;
        ИтКоличество = ИтКоличество + СтрокаТаблицы.Количество;
        ИтСуммаСебестоимость = ИтСуммаСебестоимость + СтрокаТаблицы.СуммаСебестоимость;
        ИтСумма = ИтСумма + СуммаСНДС;
        
        ОбластьТМЦ.Параметры.ДатаПр = СтрокаТаблицы.ДатаПр;
        ОбластьТМЦ.Параметры.КОнтрагент = СтрокаТаблицы.КОнтрагент;
        ОбластьТМЦ.Параметры.ТМЦ = СтрокаТаблицы.ТМЦ;
        ОбластьТМЦ.Параметры.Количество = СтрокаТаблицы.Количество;
        ОбластьТМЦ.Параметры.Сумма = СуммаСНДС;
        ОбластьТМЦ.Параметры.СуммаСебестоимость = СтрокаТаблицы.СуммаСебестоимость;        
        ОбластьТМЦ.Параметры.Себестоимость = Себестоимость;
        ОбластьТМЦ.Параметры.ЦенаПродажи = ЦенаПродажи;
        ОбластьТМЦ.Параметры.Наценка = Наценка;
        ТабДок.Вывести(ОбластьТМЦ);
    КонецЦикла;    
    
    ОбластьИтог.Параметры.ИтНаценка = ИтНаценка;
    ОбластьИтог.Параметры.ИтКоличество = ИтКоличество;
    ОбластьИтог.Параметры.ИтСуммаСебестоимость = ИтСуммаСебестоимость;
    ОбластьИтог.Параметры.ИтСумма = ИтСумма;
    ТабДок.Вывести(ОбластьИтог);
    ТаблицаТД = ТДСебестоимость;
    ТаблицаТБ = ТБ;
КонецПроцедуры


Процедура ВыгрузкаВDBF()Экспорт
        
    Кодировка = "DOS";
    ФайлВыгрузки = "C:\Base\Продажи\Sales.dbf";    
    ТекФайл = Новый Файл(ФайлВыгрузки);
    
    
    ФайлDBF = Новый XBase;
    
    ФайлDBF.Поля.Добавить("KLIENT","C",32,0);            //Внутренний идентификатор или уникальный номер, торговой - розничной точки контрагента далее (ТРТ) = (Klient.DBF поле «ID»)
    ФайлDBF.Поля.Добавить("DATE","D",32,0);              //Дата документа
    ФайлDBF.Поля.Добавить("DOCNOM","C",50,0);           //Номер документа
    ФайлDBF.Поля.Добавить("TOVAR","C",15,0);            //Штрих-код товара накладной
    ФайлDBF.Поля.Добавить("KOL","N",15,0);              //Количество товара накладной
    ФайлDBF.Поля.Добавить("SUM","N",15,2);              //Сумма по строке
    ФайлDBF.Поля.Добавить("MENEGER","C",50,0);          //Наименование торгового агента
    ФайлDBF.Поля.Добавить("P_MENEGER","C",50,0);        //Наименование руководителя торгового агента
    ФайлDBF.Поля.Добавить("OKPO_DISTR","N",15,0);       //ОКПО партньора (организации, которая формирует файл)
    
    
    //ФайлDBF.Поля.Добавить("ID","C",32,0);             //Внутренний идентификатор или уникальный номер, торговой - розничной точки контрагента, далее (ТРТ);
    //ФайлDBF.Поля.Добавить("NAME","C",50,0);          //Краткое наименование ТРТ в информационной базе;
    //ФайлDBF.Поля.Добавить("FULLNAME","C",200,0);    //Полное представление ТРТ, если нет, то равняется полю NAME.    
    //ФайлDBF.Поля.Добавить("REGION","C",250,0);      //Регион нахождения (Область/Город/Район)    
    //ФайлDBF.Поля.Добавить("P_ID","C",32,0);            //Внутренний идентификатор или уникальный номер Хозяина ТРТ, если нет детальной информации, то дублируется поле ID.     
    //ФайлDBF.Поля.Добавить("P_NAME","C",50,0);       //Краткое наименование Хозяина ТРТ, если нет детальной информации, то дублируется поле NAME.    
    //ФайлDBF.Поля.Добавить("OKPO","N",15,0);          //Код ОКПО Владельца служит для дополнительной идентификации владельца.
    //ФайлDBF.Поля.Добавить("ADRES","C",250,0);          //Фактический адрес. Месторасположение ТРТ.
    //ФайлDBF.Поля.Добавить("OKPO_DISTR","N",15,0);   //ОКПО партньора (организации, которая формирует файл
    

    Попытка
        ФайлDBF.СоздатьФайл(ФайлВыгрузки );
    Исключение
        Предупреждение("Ошибка создания файла " + ФайлВыгрузки);
        Возврат;
    КонецПопытки;
    

    Если НЕ ТаблицаТБ = Неопределено Тогда    
        Для каждого СтрокаТаблицы из ТаблицаТБ Цикл
            Если    НЕ СтрокаТаблицы = Неопределено
            И НЕ СтрокаТаблицы = ""
            Тогда    ФайлDBF.Добавить();
            Иначе Продолжить;    
            КонецЕсли;

            
            //Меняем символы
            СтрокаТаблицы.ТМЦ = СтрЗаменить(СтрокаТаблицы.ТМЦ,"і","i");
            СтрокаТаблицы.Контрагент = СтрЗаменить(СтрокаТаблицы.Контрагент,"і","i");
            Организация = СтрЗаменить(СтрокаТаблицы.Документ.Организация.Наименование,"і","i");

            
            ФайлDBF.KLIENT        = СтрокаТаблицы.Контрагент;
            ФайлDBF.DATE        = СтрокаТаблицы.ДатаПр;
            ФайлDBF.DOCNOM        = СтрокаТаблицы.Документ.Номер;
            
            

        Если Кодировка = "DOS" Тогда
                ФайлDBF.Кодировка = КодировкаXBase.OEM;
        Иначе
                ФайлDBF.Кодировка = КодировкаXBase.ANSI;
        КонецЕсли;
            
        ФайлDBF.Записать();
        
        КонецЦикла;
        
        ФайлDBF.ЗакрытьФайл();
        Попытка
                Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки);
        Исключение
            Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки);
        КонецПопытки;
        
    
    Возврат;
    
    Иначе
        Возврат
    КонецЕсли;
    
КонецПроцедуры

НП = Новый НастройкаПериода;
НП.УстановитьПериод(НачалоНедели(РабочаяДата),КонецНедели(РабочаяДата),Истина);

ДатаНач = НП.ПолучитьДатуНачала();
ДатаКон = НП.ПолучитьДатуОкончания();



  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #101139 · Ответов: 5 · Просмотров: 2445
 

>  Выгрузка в DBF
EritikWoW
Отправлено: 03.06.15, 15:52


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Всем спс ! За то что не отказали ! =)))
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #99659 · Ответов: 8 · Просмотров: 4758
 

>  Выгрузка в DBF
EritikWoW
Отправлено: 02.06.15, 18:41


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Цитата(logist @ 02.06.15, 18:02) *
Фамилия = "";
Имя = "";
Отчество = "";
КонецЕсли;



Хммм.... мне кажеться или такого быть не может т.к.

Цитата(logist @ 02.06.15, 18:02) *
Запрос.УстановитьПараметр("ФизЛицо", Строка.Сотрудник.Физлицо);

И если там не чего не будет то так и так будет ""... бо в регистре они же в строке и хроняться 0_о
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #99610 · Ответов: 8 · Просмотров: 4758
 

>  Выгрузка в DBF
EritikWoW
Отправлено: 02.06.15, 16:56


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Хотел что бы мне помогли оптимизировать "код" под стандарты программирования.... если я где то в нем сделал не так !
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #99608 · Ответов: 8 · Просмотров: 4758
 

>  Выгрузка в DBF
EritikWoW
Отправлено: 01.06.15, 3:37


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


Немного изменил обращение.. теперь Ф.И.О получаю через "регистр сведений"
Процедура ВыгрузитьНажатие(ДокументыНаЭкспорт)
    
    ФайлDBF = Новый XBase;
    
    ФайлDBF.Поля.Добавить("PROJ_REF","C",14,0);     //Номер
    ФайлDBF.Поля.Добавить("BRANCH","C",3,0);          //
    ФайлDBF.Поля.Добавить("ZPKOD","C",10,0);           //
    ФайлDBF.Поля.Добавить("CARD_NO","C",22,0);         //Номер карты
    ФайлDBF.Поля.Добавить("LSTBL","C",20,0);           //ИНН
    ФайлDBF.Поля.Добавить("FAM","C",50,0);             //фамилия
    ФайлDBF.Поля.Добавить("NAME","C",50,0);          //Имя
    ФайлDBF.Поля.Добавить("OT","C",50,0);              //Отчество
    ФайлDBF.Поля.Добавить("RLSUM","N",15,2);          //Сумма
    ФайлDBF.Поля.Добавить("INN","C",20,0);            //ИНН
    ФайлDBF.Поля.Добавить("RLKOD","C",30,0);         //
    ФайлDBF.Поля.Добавить("CARD_PR_S","C",4,0);       //
    ФайлDBF.Поля.Добавить("TYPE","C",4,0);             //Тип
    ФайлDBF.Поля.Добавить("CARDBRANCH","C",3,0);       //
    ФайлDBF.Поля.Добавить("SYBR_NAME","C",4,0);       //
    ФайлDBF.Поля.Добавить("FUND_REF","C",14,0);     //


    Попытка
        ФайлDBF.СоздатьФайл(ФайлВыгрузки );
    Исключение
        Предупреждение("Ошибка создания файла " + ФайлВыгрузки);
        Возврат;
    КонецПопытки;

       Если РаботникиОрганизации.Количество() > 0 Тогда
    ТабРабОрг = РаботникиОрганизации.Выгрузить();
        Для Каждого Строка Из ТабРабОрг Цикл
                Если  ЭтотОбъект.Проведен = Истина  Тогда
                ФайлDBF.Добавить();
            КонецЕсли;
            

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

                                                
                        Карта         = Строка.НомерКарточки;
                        Длина        = СтрДлина(Карта);
                        НомерКарты     = Лев(Карта, 4) + "********" + Прав(Карта,4);
                        ИНН         = Строка.Сотрудник.Физлицо.КодПоДРФО;
                        //Меняем символы
                        Фамилия        = СтрЗаменить(Фамилия,"і","i");
                        Фамилия        = СтрЗаменить(Фамилия,"І","I");
                        Имя            = СтрЗаменить(Имя,"і","i");
                        Имя            = СтрЗаменить(Имя,"І","I");
                        Отчество    = СтрЗаменить(Отчество,"і","i");
                        Отчество    = СтрЗаменить(Отчество,"І","I");
                        

                        
                        ////ФайлDBF.PROJ_REF
                        ФайлDBF.BRANCH      = "2F4";
                        ФайлDBF.ZPKOD       = "014";
                        Если Длина > 0 тогда
                        ФайлDBF.CARD_NO        = НомерКарты;
                        Иначе ФайлDBF.CARD_NO        = "";
                        КонецЕсли;
                        ФайлDBF.LSTBL       = ИНН;                        
                        ФайлDBF.FAM            = Фамилия;        
                        ФайлDBF.NAME        = Имя;        
                        ФайлDBF.OT            = Отчество;
                        //ФайлDBF.RLSUM                        
                        ФайлDBF.INN            = ИНН;
                        //ФайлDBF.RLKOD                        
                        ФайлDBF.CARD_PR_S   = "1";
                        ФайлDBF.TYPE        = "CARD";
                        //ФайлDBF.CARDBRANCH
                        //ФайлDBF.SYBR_NAME
                        //ФайлDBF.FUND_REF
                        
                        
                        Если Кодировка = "DOS" Тогда
                        ФайлDBF.Кодировка = КодировкаXBase.OEM;
                        Иначе
                        ФайлDBF.Кодировка = КодировкаXBase.ANSI;
                        КонецЕсли;        
                        ФайлDBF.Записать()                            
            КонецЦикла;
    КонецЕсли;
    
    ФайлDBF.ЗакрытьФайл();
    Попытка
        Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки);
    Исключение
        Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки);
    КонецПопытки;
    
    
    Возврат;    
    
КонецПроцедуры

  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #99568 · Ответов: 8 · Просмотров: 4758
 

>  Выгрузка в DBF
EritikWoW
Отправлено: 01.06.15, 1:23


Говорящий
***

Группа: Пользователи
Сообщений: 53
Регистрация: 30.12.12
Пользователь №: 23328


С.Х. Инагро 8.2

Доброго времени суток ! Ребят помогите оптимизировать код плз... под стандарты !
Это выгрузка в DBF "ИНАГРО_ЗарплатаКВыплатеОрганизаций"
Процедура ВыгрузитьНажатие(ДокументыНаЭкспорт)
    
    Если DOS = Истина
    Тогда ANSI = Ложь;
    Кодировка = "DOS"
    ИначеЕсли ANSI = Истина
    Тогда Dos = Ложь;
    Кодировка = "ANSI"
    КонецЕсли;

    ФайлDBF = Новый XBase;
    
    ФайлDBF.Поля.Добавить("PROJ_REF","C",14,0);     //Номер
    ФайлDBF.Поля.Добавить("BRANCH","C",3,0);          //
    ФайлDBF.Поля.Добавить("ZPKOD","C",10,0);           //
    ФайлDBF.Поля.Добавить("CARD_NO","C",22,0);         //Номер карты
    ФайлDBF.Поля.Добавить("LSTBL","C",20,0);           //ИНН
    ФайлDBF.Поля.Добавить("FAM","C",50,0);             //фамилия
    ФайлDBF.Поля.Добавить("NAME","C",50,0);          //Имя
    ФайлDBF.Поля.Добавить("OT","C",50,0);              //Отчество
    ФайлDBF.Поля.Добавить("RLSUM","N",15,2);          //Сумма
    ФайлDBF.Поля.Добавить("INN","C",20,0);            //ИНН
    ФайлDBF.Поля.Добавить("RLKOD","C",30,0);         //
    ФайлDBF.Поля.Добавить("CARD_PR_S","C",4,0);       //
    ФайлDBF.Поля.Добавить("TYPE","C",4,0);             //Тип
    ФайлDBF.Поля.Добавить("CARDBRANCH","C",3,0);       //
    ФайлDBF.Поля.Добавить("SYBR_NAME","C",4,0);       //
    ФайлDBF.Поля.Добавить("FUND_REF","C",14,0);     //


    Попытка
        ФайлDBF.СоздатьФайл(ФайлВыгрузки );
    Исключение
        Предупреждение("Ошибка создания файла " + ФайлВыгрузки);
        Возврат;
    КонецПопытки;

       Если РаботникиОрганизации.Количество() > 0 Тогда
    ТабРабОрг = РаботникиОрганизации.Выгрузить();
        Для Каждого Строка Из ТабРабОрг Цикл
                Если  ЭтотОбъект.Проведен = Истина  Тогда
                ФайлDBF.Добавить();
                КонецЕсли;
                        ФИОРаботника     = Строка.Сотрудник;                        
                        ПозицияФ        = Найти(ФИОРаботника," ");
                        ФамилияР        = Лев(ФИОРаботника,ПозицияФ-1);
                        //=//=//=//=//=//=//=//=//=//=//=//=//=//=//=//=///=//=//=//=//=//=//=///=//=//=//=//=//
                        ДлинаСтроки = СтрДлина(ФИОРаботника);
                        инд = 1;
                        Пока инд <= ДлинаСтроки и Найти(" ",Сред(ФИОРаботника,инд,1))=0 Цикл
                        инд = инд + 1;
                        КонецЦикла;
                        Если инд <= ДлинаСтроки Тогда
                        ИмяОтчество = Сред(ФИОРаботника,инд+1);
                        КонецЕсли;
                        ПозицияИ        = Найти(ИмяОтчество," ");
                        ИмяР         = Лев(ИмяОтчество,ПозицияИ);
                        //=//=//=//=//=//=//=//=//=////=//=//=//=//=//=///=//=//=//=//=//=//=///=//=//=//=//=//=//
                        ДлинаСтроки = СтрДлина(ИмяОтчество);
                        инд = 1;
                        Пока инд <= ДлинаСтроки и Найти(" ",Сред(ИмяОтчество,инд,1))=0 Цикл
                        инд = инд + 1;
                        КонецЦикла;
                        Если инд <= ДлинаСтроки Тогда
                        Отчество = Сред(ИмяОтчество,инд+1);
                        КонецЕсли;
                        ПозицияО        = Найти(Отчество," ");
                        ОтчествоР         = Прав(ИмяОтчество,ПозицияО);
                        //=//=//=//=//=//=//=//=//=////=//=//=//=//=//=///=//=//=//=//=//=//=///=//=//=//=//=//=//
                        Фамилия     = СтрЗаменить(ФамилияР," ","");
                        Имя         = СтрЗаменить(ИмяР," ","");
                        Отчество    = СтрЗаменить(ОтчествоР," ","");                         
                        Карта = Строка.НомерКарточки;
                        НомерКарты = Лев(Карта, 4) + "********" + Прав(Карта,4);
                        ИНН = Строка.Сотрудник.Физлицо.КодПоДРФО;
                        //Меняем символы
                        Фамилия        = СтрЗаменить(Фамилия,"і","i");
                        Имя            = СтрЗаменить(Имя,"і","i");
                        Отчество    = СтрЗаменить(Отчество,"і","i");

                        
                        //ФайлDBF.PROJ_REF
                        ФайлDBF.BRANCH      = "2F4";
                        ФайлDBF.ZPKOD       = "014";
                        ФайлDBF.CARD_NO        = НомерКарты;
                        ФайлDBF.LSTBL       = ИНН;                        
                        ФайлDBF.FAM            = Фамилия;        
                        ФайлDBF.NAME        = Имя;        
                        ФайлDBF.OT            = Отчество;
                        //ФайлDBF.RLSUM                        
                        ФайлDBF.INN            = ИНН;
                        //ФайлDBF.RLKOD                        
                        ФайлDBF.CARD_PR_S   = "1";
                        ФайлDBF.TYPE        = "CARD";
                        //ФайлDBF.CARDBRANCH
                        //ФайлDBF.SYBR_NAME
                        //ФайлDBF.FUND_REF
                        
                        
                        Если Кодировка = "DOS" Тогда
                        ФайлDBF.Кодировка = КодировкаXBase.OEM;
                        Иначе
                        ФайлDBF.Кодировка = КодировкаXBase.ANSI;
                        КонецЕсли;        
                        ФайлDBF.Записать()                            
            КонецЦикла;
    КонецЕсли;
    
    ФайлDBF.ЗакрытьФайл();
    Попытка
        Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки);
    Исключение
        Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки);
    КонецПопытки;
    
    
    Возврат;    
    
КонецПроцедуры
  Форум: Программирование обычных форм 1С 8.2 и не интер... · Просмотр сообщения: #99567 · Ответов: 8 · Просмотров: 4758
 

3 страниц V   1 2 3 >

Новые сообщения  Открытая тема (есть новые ответы)
Опрос  Опрос (есть новые голоса)
Нет новых сообщений  Открытая тема (нет новых ответов)
Нет новых голосов  Опрос (нет новых голосов)
Популярная тема  Горячая тема (есть новые ответы)
Закрыта  Закрытая тема
Нет новых  Горячая тема (нет новых ответов) Перемещена  Тема перемещена
 

RSS Текстовая версия Сейчас: 29.03.24, 15:39
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!