Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Действие) Экспорт
НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(ссылка)).Имя; Если НЕ ПустаяСтрока(Ссылка) тогда ИндДок = Метаданные.Документы.Найти(НазваниеДокумента); ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя; Форма = ссылка.ПолучитьФорму(ИмяФормы); Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда Выгрузка.ПриОткрытии(Ссылка); ИначеЕсли Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") <> Неопределено Тогда Выгрузка.Выгружать(Ссылка); ОбработкаПрерыванияПользователя(); КонецЕсли; КонецЕсли;
Функция ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Действие) Экспорт
НазваниеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(ссылка)).Имя; Если НЕ ПустаяСтрока(Ссылка) тогда ИндДок = Метаданные.Документы.Найти(НазваниеДокумента); ИмяФормы = ИндДок.Формы.ФормаДокумента.Имя; Форма = ссылка.ПолучитьФорму(ИмяФормы); Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда Выгрузка.ПриОткрытии(Ссылка); ИначеЕсли Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") <> Неопределено Тогда Выгрузка.Выгружать(Ссылка); ОбработкаПрерыванияПользователя(); КонецЕсли; Иначе Ссылка.Выгрузка = Истина; КонецЕсли;
Для Каждого Док из Документы Цикл НазвДок = Прав(Док,КолвоСим); НазвДок = ВРег(НазвДок); Если НазвДок = НД ТОгда Форма1 = Док.ПолучитьФорму(ИмяФормы); КолЭлем = Форма1.ЭлементыФормы.Количество(); КонецЕсли; КонецЦикла;
Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда КП = Форма.ЭлементыФормы.ДействияФормы.Кнопки; инд = КП.Количество(); ДействиеКнопкиВыгружать = Новый Действие ("УстановитьКнопкиПодменюЗаполненияТЧ"); Выгружать = КП.Вставить(инд,"Выгружать", ТипКнопкиКоманднойПанели.Действие,"Выгружать",ДействиеКнопкиВыгружать); Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
Если Форма.Выгрузка Тогда Выгружать.Картинка = БиблиотекаКартинок.Галочка; Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка; Иначе Выгружать.Картинка = БиблиотекаКартинок.Крест; Выгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка; КонецЕсли;
Не совсем, просто как я уже сказал я подвязал кнопки к двум процедурам которые есть во всех документах... и которые обращаются к глобальным модулям, а я хочу уйти от этого в сторону обработки которая позволила бы либо назначить на кнопки свою процедуру, либо каким то образом отследить нажатие передать в переменную информацию и выполнить процедуры которые в зависимости от нажатой кнопки передали бы в реквизит "Истина или Ложъ"!
1С:Предприятие 8.3 (8.3.6.2449) "Управление торговлей для Украины" (2.3.25.1)
Сопсно задача создать 1 универсальную кнопку для всех документов которая изменяла бы данные общего реквезита тип булево на истину или ложъ Создал свой общий модуль и вызываю процедуры в нем из общего модуля к которому обращаются все документы.... Теперь сама суть... если кнопке задать ту же процедуру то вылетает ошибка о том что данное имя не уникально.... я не хочу сильно грубить други модуля... хотел обойтись только вставкой одной строки на обращение к моей процедуре...
Что я хотел уточнить.... ну 1. Привести в порядок код (глазом человека который в этом шарит) что 2. Можно ли как кнопке КП передать процедуру не из формы а из моего модуля или хотя бы просто "Выгружать = Истина\ложъ" ?
Для Каждого Док из Документы Цикл НазвДок = Прав(Док,КолвоСим); НазвДок = ВРег(НазвДок); Если НазвДок = НД ТОгда Форма1 = Док.ПолучитьФорму(ИмяФормы); КолЭлем = Форма1.ЭлементыФормы.Количество(); КонецЕсли; КонецЦикла;
Если Форма.ЭлементыФормы.ДействияФормы.Кнопки.Найти("Выгружать") = Неопределено Тогда КП = Форма.ЭлементыФормы.ДействияФормы.Кнопки; инд = КП.Количество(); ПодМенюВыгружать = КП.Вставить(инд,"Выгружать", ТипКнопкиКоманднойПанели.Подменю, "Выгружать"); ПодМенюВыгружать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
ДействиеКнопкиДа = Новый Действие ("ПриОткрытии"); ДействиеКнопкиНет = Новый Действие ("УстановитьКнопкиПодменюЗаполненияТЧ");
В обычном режиме в представление закинуть нельзя.. он не активен для записи.. (конфигурация 100% типовая, в демо тоже самое) там есть 2 варианта записи контактной информации... 1. когда все расписываешь по реквизитам и программа сама дает "представление", а есть когда когда текстом закидываешь адрес и выбираешь страну
Все уже решил !
Проблема была в моей ошибке... надо было сначала в представление закинуть адрес... а потом в "Поле1" закинуть страну, а я пытался на оборот из-за этого видимо и ругалась 1С так как в обычном режиме "Поле1" это индекс - "Строка Ввода"
День добрый ! Делаю импорт справочников из экселя... с заполнением соответствующих регистров, справочников и прочего... столкнулся с проблемой такого характера... Имею адрес в виде строки в ней Адрес целиком и индекс (хаотично расположенный) Нужно сделать запись в регистре "Контактная информация "Одной произвольной строкой"... но не могу выйти на нужные реквизиты ! Может кто то сталкивался... подскажите плз как обойти данную проблему !
суть вопроса заключается в следующем: 1. Есть отчет "СтоимостнаяОценкаСкладаВЦенахНоменклатуры" в нем есть соответственно есть цены... (но товар покупался за ин.валюту), хотелось бы либо переделать этот отчет что бы он пересчитывал стоимость вещей на складах по тек.курсу и вывести либо в тек. цену либо в новый столбец.... (отчет сделан на основе "Уневерсального отчета" и я не могу понять как получить шаблон текста запроса что бы передать ему доп текст с нужной) или же как дополнить таблицу т.к. при попытке обхода не могу подобрать "итератор" к ней 2. Есть второй вариант сделать свой отчет но что то пока не знаю как получить усредненную цену на тек. момент вот мой так сказать отчет (средняя нужна для получения текущей цены):
Запрос = Новый Запрос; МВТаб = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МВТаб; Запрос.Текст = "ВЫБРАТЬ | СУММА(ЦеныНоменклатуры.Цена) КАК Цена, | ЦеныНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения, | ЦеныНоменклатуры.Номенклатура КАК Номенклатура, | ЦеныНоменклатуры.Валюта КАК Валюта, | ТоварыНаСкладах.Количество КАК Количество, | ТоварыНаСкладах.Склад КАК Склад, | ТоварыНаСкладах.Период КАК Период |ИЗ | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах | ПО ЦеныНоменклатуры.Номенклатура = ТоварыНаСкладах.Номенклатура";
Если НЕ Склад = Справочники.Склады.ПустаяСсылка() или НЕ Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + Условие; КонецЕсли;
Если НЕ Склад = Справочники.Склады.ПустаяСсылка() и НЕ Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + УсловиеСоединения; КонецЕсли;
Если НЕ Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + УсловиеНоменклатура + Группировка; Запрос.УстановитьПараметр("Номенклатура",Номенклатура); Запрос.УстановитьПараметр("Склад",Склад); ИначеЕсли НЕ Склад = Справочники.Склады.ПустаяСсылка() Тогда Запрос.Текст = Запрос.Текст + УсловиеСклад + Группировка; Запрос.УстановитьПараметр("Склад",Склад); Иначе Запрос.Текст = Запрос.Текст + Группировка; КонецЕсли;
+ не пойму почему но не сворачивает данные либо нужно разносить запросы и сворачивать отдельно ?
Я так подумал что скорее всего нужно делать отдельно выборку остатков делать свертку по "Номенклатуре" потом отдельно по ценам... вот только как получить усредненную цену... количество в какой то временный реквезит помещать вместе с ценой а потом делить между собой ?
ладно кому не сложно направьте на правильную мысль ! =)
Кто может помочь со строками в таблице ? В ТабНДФЛ есть старые строки у сотрудников которых их нужно (либо удалить и добавить новую , либо помнять Результат, но тогда нужно будет добавить недостоющие)
Для Каждого Строчка из ТабНач Цикл Работник = Строчка.Сотрудник; Если Строчка.СчетКт.Ссылка = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда
Для каждого Строка из ТабНДФЛ Цикл СумБоль = 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 И НЕ СуммаБоль = Неопределено и НЕ СуммаНДФЛ = Неопределено И НЕ СуммаВС = Неопределено Тогда
Ребят кому не сложно помогите оптимизировать и решить проьлему зацикливания создания строк, а то я уже не соображаю ! За ранее ООООГРОМНОЕ СПАСИБО ! =)
Функция РасчетНДФЛ() Ставка = РегистрыСведений.СтавкиНДФЛ.Выбрать(Дата(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; КонецЕсли; КонецЦикла;
Слово "Цикл" два раза, а "КонецЦикла" 1 раз по причине того что в данный цикл загнано много чего =) СоздатьНаборЗаписей()без присваивания результата - Это я случайно закинул =))
Есть проблема... Подскажите решение (если не сложно) Как можно получить ставку расчета НДФЛ ?
Ставка = РегистрыСведений.СтавкиНДФЛ.Выбрать(Дата(01,01,0001),КонецГода(Дата)); ТабНДФЛ = НДФЛПроводки.Выгрузить(); //<===== Табличная часть из документа документ: "Начисление ЗП"
Для каждого Строка из ТабНДФЛ Цикл
Пока Ставка.Следующий()Цикл РегистрыСведений.СтавкиНДФЛ.СоздатьНаборЗаписей() Вид = СтрЗаменить(Ставка.ВидСтавки,"",""); Если Строка.СубконтоКт1.Наименование = Вид Тогда СтавкаНДФЛ = Ставка.Ставка; КонецЕсли;
КонецЦикла;
Ставку по военному сбору так вытягивает... а вот ставку по НДФЛ нет !
Ребят есть задача автоматизировать снятие ВС и НДФЛ с больничных с(663 счет) Решил сделать это так же как советают делать в интернете (ручками поправить) только что бы это попровлялось при нажатии на кнопку (Заполнить и расчитать) .... Может кто то под сказать может я что то не так делаю... бо не как не могу выйти на базу вычесления из-за того что (начисления, и налоги) в коде находят с разной суммой... соответственно не могу сделать базу для расчета... а именно из Начисления(больничных) высчитать ЕСВ далее вычесть данный ЕСВ из начисления и остаток поделить на ставку налога ВС и НДФЛ и списать с 663счета вот код:
Для каждого Строка из НачисленияПроводки Цикл Если Строка.СчетКт.Ссылка = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда Работник = Строка.СубконтоКт1; ТабНДФЛ = НДФЛПроводки.Выгрузить(); ТабЕСВ = ВзносыПроводки.Выгрузить(); СтрокаНДФЛ = ТабНДФЛ.Найти(Работник,"Сотрудник"); СтрокаЕСВ = ТабЕСВ.Найти(Работник,"Сотрудник");
Шкалы = РегистрыСведений.ШкалаСтавокНалогов.Выбрать(Дата(01,01,0001),КонецГода(Дата)); Пока Шкалы.Следующий()Цикл Если Шкалы.СтатьяНалоговойДекларации = СтрокаЕСВ.СтатьяНалоговойДекларации Тогда Ставка = Шкалы.Ставка; КонецЕсли; КонецЦикла; СтрДоход = Строка.Результат * Ставка; СтрДоход = Число(Формат(СтрДоход, "ЧДЦ=2"));
Для Каждого Стр из ТабЕСВ Цикл Если Стр.Сотрудник = Работник и Стр.Результат = СтрДоход Тогда СуммПосЕСВ = СтрДоход; Иначе Продолжить КонецЕсли; КонецЦикла; //Для Каждого Стр из ТабНДФЛ Цикл // Если Стр.Сотрудник = Работник и Стр.Результат = СтрДоход Тогда // НовСтр = ТабНДФЛ.Добавить(); // НовСтр = Стр; // НовСтр.НомерСтроки = "" // КонецЕсли; //КонецЦикла;
Доброго всем времени суток ! Ребят подскажите по каким реквизитам можно сделать отбор что бы получить счет контрагента ?
Нужно вытянуть счет по которому пришел приход или расход
на основании документа:
Если НЕ СтрокаДокумента.DOCSUBTYPESNAME = Неопределено тогда Если НРег(СтрокаДокумента.DOCSUBTYPESNAME) = "входящий документ" тогда НовСтрок.СуммаПоступило = НовСтрок.СуммаДокумента; ИначеЕсли НРег(СтрокаДокумента.DOCSUBTYPESNAME) = "платежное поручение" тогда НовСтрок.СуммаСписано = НовСтрок.СуммаДокумента; КонецЕсли; Иначе Возврат КонецЕсли;
Если НЕ Контрагент = Неопределено И НЕ Контрагент.ОсновнойБанковскийСчет = "" Тогда Банки = СтрокаДокумента.BANKNAME; Валюта = Справочники.Валюты.НайтиПоКоду(СтрокаДокумента.CURRENCYID); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | БанковскиеСчета.Ссылка |ИЗ | Справочник.БанковскиеСчета КАК БанковскиеСчета |ГДЕ | БанковскиеСчета.ВалютаДенежныхСредств = &Валюта | И БанковскиеСчета.Ссылка = &Банк | И БанковскиеСчета.Владелец = &Контрагент"; Запрос.УстановитьПараметр("Банк",Банки); <==== название Банка (строка) Запрос.УстановитьПараметр("Валюта",Валюта); <===== название Валюты (строка) Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() цикл /////////////////////////////////////////////////////////////////////////////////////////////// Счет = Выборка.Ссылка.ПолучитьОбъект(); Если ВРег(Счет.Банк) = ВРег(Банки) И ВРег(Счет.ВалютаДенежныхСредств) = ВРег(Валюта)Тогда так работает но вытягивает много банков НовСтрок.СчетКонтрагента = Счет; ////////////////////////////////////////////////////////////////////////////////////////////////// КонецЕсли; КонецЦикла; КонецЕсли;
Есть с загрузки 2 вида документов ! "входящий документ" и "платежное поручение" на основании этих 2ух документов нужно получить счет контрагенты присутсвует сам Контрагент, Банк, МФО Банка, Валюта
Доброго всем времени суток ! У меня просьба уже голова кипит =) Есть 2 таблицы одна в форме одна с загрузки из xml нужно данные из временной ТЗ в ТЗ формы перекинуть... Думаю реализовать это добавлением строки и заполнением ее из данных ВТЗ... Но что то не как не могу въехать как реализовать это.... В ТЗ формы и в ВТЗ столбцы разные !
ДокументыКИмпорту.Очистить(); Для Каждого СтрокаДокумента из ТЗ Цикл ДокументыКИмпорту.Добавить(); ЭлементыФормы.ДокументыКИмпорту.ДобавитьСтроку(); ЭлементыФормы.ДокументыКИмпорту.Значение = СтрокаДокумента.DOCUMENTDATE КонецЦикла;
ребят огромное спс ! Решил вопрос, исправлением запроса по совету "TipsyKID" и частичного совета "sava1" Большое спс !
ТБ.Колонки.Добавить("Документ"); // Удалил НоваяСтрока.Документ = СтрокаТаблицы.Док;//--► идиотизм, одни и те же сущности называть по разному, где - то Документ а где - то Док. УДАЛИЛ ТБ.Свернуть("ДатаПр,Док,КОнтрагент,ТМЦ","Количество,Сумма,СуммаНДС,СуммаСебестоимость");
Ребят я дико извиняюсь ! Просто: 1. Как я уже описал выше "Сам отчет писал не Я", 2. Я лишь пытаюсь его оптимизировать под себя с возможностью выгрузки результата в DBF и XML... 3. Ошибки в коде могут быть, бо работал с ним уже под утро, так что спасибо за подсказки =)
4. Может я не правильно описал... суть вопроса такова что после всех обработок из таблицы "ТБ" исчезает колонка "Документ" (оно и понятно), вот ток суть вопроса такова что могу я как то как мне сделать так что в обработку "Выгрузки" попала Эта самая колонка со всеми данными ?
p.s. не успел отредоктировать предыдущее сообщение !
Внешнаяя обработка: Отчет-выгрузка по продажам.. Брал за основу готовый "универсальный отчет по продажам"
Знаю что портянка но боюсь без нее суть будет не очень понятна...
Есть ТЗ по именем "ТБ" в нее я закинул заполнение Табличной части "Документ" При сверте данный кусок таблицы пропадает... если прописать "Документ" в свертку... тогда не идет расчет "сумм,себестоимости,ндса и т.д.) Может посоветует кто как решить данную проблему ?
Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ | ХозрасчетныйДвиженияССубконто.Регистратор.Дата КАК ДатаПр, | ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент КАК Контрагент, | ХозрасчетныйДвиженияССубконто.СубконтоКт1 КАК ТМЦ, | ХозрасчетныйДвиженияССубконто.Регистратор КАК Док, | СУММА(ХозрасчетныйДвиженияССубконто.Сумма) КАК СуммаСебестоимость |ИЗ | РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто |ГДЕ | (ХозрасчетныйДвиженияССубконто.Регистратор.Дата >= &ДатаНач) | И (ХозрасчетныйДвиженияССубконто.Регистратор.Дата <= &ДатаКон) | И (ХозрасчетныйДвиженияССубконто.СубконтоДт1<>ХозрасчетныйДвиженияССубконто.СубконтоКт1) | И (ХозрасчетныйДвиженияССубконто.СчетКт.Забалансовый=ЛОЖЬ) |";
Условия=""; Если Не ВыбТМЦ.Пустая() Тогда Запрос.УстановитьПараметр("ВыбТМЦ",ВыбТМЦ); Условия = Условия + " И (ХозрасчетныйДвиженияССубконто.СубконтоКт1 В ИЕРАРХИИ(&ВыбТМЦ)) "; КонецЕсли; Если Не ВыбКонтрагент.Пустая() Тогда Запрос.УстановитьПараметр("ВыбКонтрагент",ВыбКонтрагент); Условия = Условия + " И (ХозрасчетныйДвиженияССубконто.Регистратор.Контрагент В ИЕРАРХИИ(&ВыбКонтрагент))"; КонецЕсли;
Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Номенклатура КАК ТМЦ, | РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент, | РеализацияТоваровУслугТовары.Ссылка.Дата КАК ДатаПр, | РеализацияТоваровУслугТовары.Ссылка КАК Док, | СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество, | СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма, | СУММА(РеализацияТоваровУслугТовары.СуммаНДС) КАК СуммаНДС |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | (РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач) | И (РеализацияТоваровУслугТовары.Ссылка.Дата <= &ДатаКон) | И (РеализацияТоваровУслугТовары.СчетУчетаБУ.Забалансовый=ЛОЖЬ) |";
Условия=""; Если Не ВыбТМЦ.Пустая() Тогда Запрос.УстановитьПараметр("ВыбТМЦ",ВыбТМЦ); Условия = Условия + " И (РеализацияТоваровУслугТовары.Номенклатура В ИЕРАРХИИ(&ВыбТМЦ)) "; КонецЕсли; Если Не ВыбКонтрагент.Пустая() Тогда Запрос.УстановитьПараметр("ВыбКонтрагент",ВыбКонтрагент); Условия = Условия + " И (РеализацияТоваровУслугТовары.Ссылка.Контрагент В ИЕРАРХИИ(&ВыбКонтрагент))"; КонецЕсли;
ТБ = Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой); ТДСебестоимость = РезультатСебестоимость.Выгрузить(ОбходРезультатаЗапроса.Прямой); Массив = Новый Массив; Массив.Добавить(Тип("Число")); КЧ = Новый КвалификаторыЧисла(15,3); ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ); ТБ.Колонки.Добавить("СуммаСебестоимость",ОписаниеТиповЧ); Тб.Колонки.Добавить("Документ",Новый ОписаниеТипов("ДокументСсылка.РеализацияТоваровУслуг"),"Документ"); Для каждого СтрокаТаблицы Из ТДСебестоимость Цикл Док = СтрокаТаблицы.Док; Если ТБ.Найти(Док,"Док")=Неопределено Тогда продолжить; КонецЕсли; ТМЦ = СтрокаТаблицы.ТМЦ; ТекСтр = ТБ.Найти(ТМЦ,"ТМЦ"); Если ТекСтр=Неопределено Тогда продолжить; КонецЕсли; Если (ТекСтр.Количество=0) И (ТекСтр.Сумма=0) Тогда продолжить; КонецЕсли; Массив = Новый Массив; Массив.Добавить(Тип("ДокументОбъект.РеализацияТоваровУслуг")); ОпТип = Новый ОписаниеТипов(Массив);
Для каждого СтрокаТаблицы Из ТБ Цикл Если СокрЛП(Строка(СтрокаТаблицы.Док)) = "" Тогда Продолжить; КонецЕсли; Если СтрокаТаблицы.Док.СуммаВключаетНДС = Истина Тогда СтрокаТаблицы.Сумма = СтрокаТаблицы.Сумма-СтрокаТаблицы.СуммаНДС; КонецЕсли; КонецЦикла;
Для каждого СтрокаТаблицы Из ТБ Цикл Если СокрЛП(Строка(СтрокаТаблицы.Контрагент)) = "" Тогда Продолжить; КонецЕсли; Если СокрЛП(Строка(СтрокаТаблицы.ТМЦ)) = "" Тогда Продолжить; КонецЕсли;
Кодировка = "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.Добавить(); Иначе Продолжить; КонецЕсли;
Если Кодировка = "DOS" Тогда ФайлDBF.Кодировка = КодировкаXBase.OEM; Иначе ФайлDBF.Кодировка = КодировкаXBase.ANSI; КонецЕсли;
ФайлDBF.Записать();
КонецЦикла;
ФайлDBF.ЗакрытьФайл(); Попытка Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки); Исключение Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки); КонецПопытки;
Возврат;
Иначе Возврат КонецЕсли;
КонецПроцедуры
НП = Новый НастройкаПериода; НП.УстановитьПериод(НачалоНедели(РабочаяДата),КонецНедели(РабочаяДата),Истина);
Попытка ФайлDBF.СоздатьФайл(ФайлВыгрузки ); Исключение Предупреждение("Ошибка создания файла " + ФайлВыгрузки); Возврат; КонецПопытки;
Если РаботникиОрганизации.Количество() > 0 Тогда ТабРабОрг = РаботникиОрганизации.Выгрузить(); Для Каждого Строка Из ТабРабОрг Цикл Если ЭтотОбъект.Проведен = Истина Тогда ФайлDBF.Добавить(); КонецЕсли;
ФИОРаботника = Строка.Сотрудник.Физлицо.Наименование; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Наименование", ФИОРаботника); ТекстЗапроса = "ВЫБРАТЬ | ФИОФизЛиц.Фамилия, | ФИОФизЛиц.Имя, | ФИОФизЛиц.Отчество |ИЗ | РегистрСведений.ФИОФизЛиц КАК ФИОФизЛиц |ГДЕ | ФИОФизЛиц.ФизЛицо.Наименование = &Наименование"; Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Фамилия = Выборка.Фамилия; Имя = Выборка.Имя; Отчество = Выборка.Отчество; КонецЦикла;
Карта = Строка.НомерКарточки; Длина = СтрДлина(Карта); НомерКарты = Лев(Карта, 4) + "********" + Прав(Карта,4); ИНН = Строка.Сотрудник.Физлицо.КодПоДРФО; //Меняем символы Фамилия = СтрЗаменить(Фамилия,"і","i"); Фамилия = СтрЗаменить(Фамилия,"І","I"); Имя = СтрЗаменить(Имя,"і","i"); Имя = СтрЗаменить(Имя,"І","I"); Отчество = СтрЗаменить(Отчество,"і","i"); Отчество = СтрЗаменить(Отчество,"І","I");
Если Кодировка = "DOS" Тогда ФайлDBF.Кодировка = КодировкаXBase.OEM; Иначе ФайлDBF.Кодировка = КодировкаXBase.ANSI; КонецЕсли; ФайлDBF.Записать() КонецЦикла; КонецЕсли;
ФайлDBF.ЗакрытьФайл(); Попытка Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки); Исключение Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки); КонецПопытки;
Если Кодировка = "DOS" Тогда ФайлDBF.Кодировка = КодировкаXBase.OEM; Иначе ФайлDBF.Кодировка = КодировкаXBase.ANSI; КонецЕсли; ФайлDBF.Записать() КонецЦикла; КонецЕсли;
ФайлDBF.ЗакрытьФайл(); Попытка Сообщить(НСтр("ru='Данные успешно выгружены в файл ';uk='Дані успішно вивантажені в файл '") + ФайлВыгрузки); Исключение Сообщить(НСтр("ru='Не удалось записать данные в файл. Возможно, отсутствует каталог.';uk='Не вдалося записати дані в файл. Можливо, відсутній каталог.'") + ФайлВыгрузки); КонецПопытки;
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!