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

Хранилище

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

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



> Внешний счет на оплату , Добавление штрих-кода          
EvgenM Подменю пользователя
сообщение 13.10.14, 14:45
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0


Доброго времени суток.
1С: Предприятие 8.3
Конфигурация:
УТ 11.1

Возникла необходимость при печати "Счет на оплату" выводить и штрих-код.
Решил все сделать внешней обработкой, для этого согласно уроку прошелся по "Обработка" - "ПечатьСчетовНаОплату".
Выбрал все функции и процедуры, перенес их вместе с макетом во внешнюю обработку.
Все работает хорошо, кроме самого основного штрих-кода.

Пересматривая код, заметил, что данные не вытягиваются запросом, а берутся с табличной части формы .
Уже хотел сделать через функцию и всеодно ниче не вышло.

Процедура ЗаполнитьТабличныйДокументСчетаНаОплату

Процедура ЗаполнитьТабличныйДокументСчетаНаОплату(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, КомплектыПечати, ПараметрыПечати)
    
    Перем КомплектПечатиПоСсылке;
    
    ШаблоныОшибок = Новый Структура;
    ШаблоныОшибок.Вставить("Товары", НСтр("ru = 'В документе %1 отсутствуют товары. Печать счета на оплату не требуется'"));
    ШаблоныОшибок.Вставить("ЗаменяющиеТовары", НСтр("ru = 'В документе %1 отсутствуют заменяющие товары. Печать счета на оплату не требуется'"));
    ШаблоныОшибок.Вставить("Этапы", НСтр("ru = 'В документе %1 отсутствуют этапы оплаты. Печать счета на оплату не требуется'"));
    
    ИспользоватьРучныеСкидки         = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах");
    ИспользоватьАвтоматическиеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах");
    СтруктураИмяДопКолонки = Новый Структура("ИмяКолонкиКодов", ФормированиеПечатныхФорм.ИмяДополнительнойКолонки());    
    
    ДанныеПечати = ДанныеДляПечати.РезультатПоШапке.Выбрать();
    ЭтапыОплаты = ДанныеДляПечати.РезультатПоЭтапамОплаты.Выгрузить();
    Товары = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выгрузить();
    
    ЭтапыЗалоговойТары = ЭтапыОплаты.НайтиСтроки(Новый Структура("ЭтоЗалогЗаТару", Истина));
    ТолькоЗалогЗаТару = ЭтапыЗалоговойТары.Количество() = ЭтапыОплаты.Количество() И ЭтапыЗалоговойТары.Количество() > 0;
    
    Если Товары.Колонки.Найти("Содержание")=Неопределено Тогда
        ЕстьСодержание = Ложь;
    Иначе
        ЕстьСодержание = Истина;
    КонецЕсли;
    
    ПоказыватьНДС = Константы.ВыводитьДопКолонкиНДС.Получить();
    ПервыйДокумент = Истина;
    
    Пока ДанныеПечати.Следующий() Цикл
        
        Отказ = Ложь;
        
        ПодготовкаДляПечатиКомплектов(ДанныеПечати, КомплектыПечати, КомплектПечатиПоСсылке, Отказ);
        Если Отказ Тогда
            Продолжить;
        КонецЕсли;
        
        СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
        
        ТаблицаТовары = Товары.НайтиСтроки(СтруктураПоиска);
        ТаблицаЭтапыОплаты = ЭтапыОплаты.НайтиСтроки(СтруктураПоиска);
        
        ПроверкаЗаполненияДокумента(ДанныеПечати, ТаблицаТовары, ТаблицаЭтапыОплаты, ШаблоныОшибок, Отказ);
        Если Отказ Тогда
            Продолжить;
        КонецЕсли;
        
        Если ПервыйДокумент Тогда
            ПервыйДокумент = Ложь;
        Иначе
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
        
        ЗаголовокСкидки = ФормированиеПечатныхФорм.НужноВыводитьСкидки(ТаблицаТовары, ИспользоватьРучныеСкидки Или ИспользоватьАвтоматическиеСкидки);
        ЕстьСкидки = ЗаголовокСкидки.ЕстьСкидки;
        
        СуффиксОбласти = ?(ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару И ПоказыватьНДС, "СНДС", "") + ?(ЕстьСкидки, "СоСкидкой", "");
        
        Макет = Новый ТабличныйДокумент;
        ЗаполнитьРеквизитыШапкиСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, ТаблицаТовары);
        
        Если ДанныеПечати.ЧастичнаяОплата ИЛИ ТипЗнч(ДанныеПечати.ДокументОснование) = Тип("ДокументСсылка.ОтчетКомитенту") Тогда
            
            ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыЧастичнаяОплата");
            ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураИмяДопКолонки);
            ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
            
            ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыЧастичнаяОплата");
            ОбластьСтрокаТаблицы.Параметры.Заполнить(ДанныеПечати);
            ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);
            
            ОбластьИтого = Макет.ПолучитьОбласть("ПодвалТаблицыЧастичнаяОплата");
            СтруктураДанныхИтого = Новый Структура;
            СтруктураДанныхИтого.Вставить("Всего", ДанныеПечати.СуммаДокумента);
            ОбластьИтого.Параметры.Заполнить(СтруктураДанныхИтого);
            ОбластьИтого.Параметры.Заполнить(ДанныеПечати);
            ТабличныйДокумент.Присоединить(ОбластьИтого);
            
            // Вывести ИтогоНДС
            СоответствиеСтавокНДС = Новый Соответствие;
            Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда
                ОбластьИтогоНДС = Макет.ПолучитьОбласть("ПодвалТаблицыНДС");
                Для Каждого СтрокаТовара Из ТаблицаТовары Цикл
                    СуммаНДС = СоответствиеСтавокНДС[СтрокаТовара.СтавкаНДС];
                    Если СуммаНДС = Неопределено Тогда
                        СуммаНДС = СтрокаТовара.СуммаНДС;
                    Иначе
                        СуммаНДС = СуммаНДС + СтрокаТовара.СуммаНДС;
                    КонецЕсли;
                    СоответствиеСтавокНДС.Вставить(СтрокаТовара.СтавкаНДС, СуммаНДС);
                КонецЦикла;
                Для Каждого ТекСтавкаНДС Из СоответствиеСтавокНДС Цикл
                    СтруктураДанныхИтогоНДС = Новый Структура;
                    СтруктураДанныхИтогоНДС.Вставить("НДС", ФормированиеПечатныхФорм.ТекстНДСПоСтавке(ТекСтавкаНДС.Ключ, ДанныеПечати.ЦенаВключаетНДС));
                    Если ЗначениеЗаполнено(ТекСтавкаНДС.Значение) Тогда
                        СтруктураДанныхИтогоНДС.Вставить("ВсегоНДС", ФормированиеПечатныхФорм.ФорматСумм(ТекСтавкаНДС.Значение /100 * ДанныеПечати.ПроцентОплаты));
                    Иначе
                        СтруктураДанныхИтогоНДС.Вставить("ВсегоНДС","-");
                    КонецЕсли;
                    ОбластьИтогоНДС.Параметры.Заполнить(СтруктураДанныхИтогоНДС);
                    ТабличныйДокумент.Вывести(ОбластьИтогоНДС);
                КонецЦикла;
                ОбластьПодвалСНДС = Макет.ПолучитьОбласть("ПодвалТаблицыВсего");
                СтруктураДанныхПодвалСНДС = Новый Структура("ВсегоСНДС", ФормированиеПечатныхФорм.ФорматСумм(ДанныеПечати.СуммаДокумента));
                ОбластьПодвалСНДС.Параметры.Заполнить(СтруктураДанныхПодвалСНДС);
                ТабличныйДокумент.Вывести(ОбластьПодвалСНДС);
            КонецЕсли;
            
            // Вывести Сумму прописью
            ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописьюЧастичныйСчет");
            СуммаПрописью = НСтр("ru='Всего на сумму %СуммаПрописью%'");
            СуммаПрописью = СтрЗаменить(СуммаПрописью, "%СуммаПрописью%", РаботаСКурсамиВалют.СформироватьСуммуПрописью(ДанныеПечати.СуммаДокумента, ДанныеПечати.Валюта));
            СтруктураДанныхСуммаПрописью = Новый Структура("СуммаПрописью", СуммаПрописью);
            ОбластьМакета.Параметры.Заполнить(СтруктураДанныхСуммаПрописью);
            ТабличныйДокумент.Вывести(ОбластьМакета);
            
        Иначе
        
            // Таблица "Товары"
            ОбластьШапкаТаблицы          = Макет.ПолучитьОбласть("ШапкаТаблицы" + СуффиксОбласти);
            ОбластьСтрокаТаблицыСтандарт = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти);
            ОбластьПодвалТаблицы         = Макет.ПолучитьОбласть("ПодвалТаблицы" + СуффиксОбласти);
            ОбластьПодвалНДС             = Макет.ПолучитьОбласть("ПодвалТаблицыНДС");
            
            ИспользоватьНаборы = Ложь;
            Если Товары.Колонки.Найти("ЭтоНабор") <> Неопределено Тогда
                ИспользоватьНаборы = Истина;
                
                ОбластьСтрокаТаблицыНабор         = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти + "Набор");
                ОбластьСтрокаТаблицыКомплектующие = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти + "Комплектующие");
            КонецЕсли;
            
            ПустыеДанные = НаборыСервер.ПустыеДанные();
            ВыводШапки = 0;
            
            Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда
                СуффиксОбластиПодвал = "СНДС" + ?(ЕстьСкидки, "СоСкидкой", "");
                ОбластьПодвалСНДС = Макет.ПолучитьОбласть("ПодвалТаблицыВсего" + СуффиксОбластиПодвал);
            КонецЕсли;
            
            Если ЕстьСкидки Тогда
                СтруктураЗаголовокСкидки = Новый Структура("Скидка, СуммаБезСкидки",
                    ЗаголовокСкидки.Скидка,
                    ЗаголовокСкидки.СуммаСкидки);
                ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураЗаголовокСкидки);
            КонецЕсли;
            ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураИмяДопКолонки);
            ОбластьСуммаПрописью = Макет.ПолучитьОбласть(?(ДанныеПечати.СчетКВозврату, "СуммаПрописьюКВозврату", "СуммаПрописью"));
            
            МассивПроверкиВывода = Новый Массив;
            
            Сумма = 0;
            СуммаНДС = 0;
            ВсегоСкидок = 0;
            ВсегоБезСкидок = 0;
            НомерСтроки = 0;
            СоответствиеСтавокНДС = Новый Соответствие;
            Для Каждого СтрокаТовары Из ТаблицаТовары Цикл
                
                Если НаборыСервер.ИспользоватьОбластьНабор(СтрокаТовары, ИспользоватьНаборы) Тогда
                    ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыНабор;
                ИначеЕсли НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда
                    ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыКомплектующие;
                Иначе
                    ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыСтандарт;
                КонецЕсли;
                
                Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда
                    НомерСтрокиПечать = "";
                Иначе
                    НомерСтроки = НомерСтроки + 1;
                    НомерСтрокиПечать = НомерСтроки;
                КонецЕсли;
                
                Если НомерСтроки = 0 И ВыводШапки <> 2 Тогда
                    ВыводШапки = 1;
                КонецЕсли;
                
                ПрефиксИПостфикс = НаборыСервер.ПолучитьПрефиксИПостфикс(СтрокаТовары, ИспользоватьНаборы);
                
                Если ЕстьСодержание Тогда
                    Товар = ПрефиксИПостфикс.Префикс + НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
                        СтрокаТовары.НаименованиеПолное,
                        СтрокаТовары.Характеристика,
                    //    СтрокаТовары.Описание,
                        ,
                        , // Серия
                        СтрокаТовары.Содержание,
                        СтрокаТовары.ЭтоВозвратнаяТара) + ПрефиксИПостфикс.Постфикс;
                Иначе
                    Товар = ПрефиксИПостфикс.Префикс + НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
                        СтрокаТовары.НаименованиеПолное,
                        СтрокаТовары.Характеристика,
                    //    СтрокаТовары.Описание,
                        ,
                        , // Серия
                        , //Содержание
                        СтрокаТовары.ЭтоВозвратнаяТара) + ПрефиксИПостфикс.Постфикс;
                КонецЕсли;
                СтруктураДанныхСтроки = Новый Структура;
                СтруктураДанныхСтроки.Вставить("Товар", Товар);
    //////////////////////////////////            
                СтруктураДанныхСтроки.Вставить("ШтрихКод", ШтрихКодСервер(СтрокаТовары.Номенклатура));
    //////////////////////////////////                            
                СтруктураДанныхСтроки.Вставить("НомерСтроки", НомерСтрокиПечать);
                ОбластьСтрокаТаблицы.Параметры.Заполнить(СтрокаТовары);
                Если ЗаголовокСкидки.ЕстьСкидки Тогда
                    СтруктураДанныхСтроки.Вставить("СуммаСкидки",
                        ?(ЗаголовокСкидки.ТолькоНаценка,- СтрокаТовары.СуммаСкидки,СтрокаТовары.СуммаСкидки));
                КонецЕсли;
                
                Если ЗначениеЗаполнено(СтруктураИмяДопКолонки.ИмяКолонкиКодов) Тогда
                    СтруктураДанныхСтроки.Вставить("Артикул", СтрокаТовары[СтруктураИмяДопКолонки.ИмяКолонкиКодов]);
                КонецЕсли;
                
                ОбластьСтрокаТаблицы.Параметры.Заполнить(СтруктураДанныхСтроки);
                
                Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда
                    ОбластьСтрокаТаблицы.Параметры.Заполнить(ПустыеДанные);
                КонецЕсли;
                
                МассивПроверкиВывода.Очистить();
                МассивПроверкиВывода.Добавить(ОбластьСтрокаТаблицы);
                Если НомерСтроки = ТаблицаТовары.Количество() Тогда
                    МассивПроверкиВывода.Добавить(ОбластьПодвалТаблицы);
                    МассивПроверкиВывода.Добавить(ОбластьПодвалНДС);
                    МассивПроверкиВывода.Добавить(ОбластьСуммаПрописью);
                КонецЕсли;
                
                Если ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда
                    Если (НомерСтроки = 1 И ВыводШапки = 0) ИЛИ (НомерСтроки = 0 И ВыводШапки = 1) Тогда
                        ВыводШапки = 2;
                        ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
                    КонецЕсли;
                Иначе
                    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
                    ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
                КонецЕсли;
                
                ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);
                
                Если Не НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда
                    
                    Сумма = Сумма + СтрокаТовары.Сумма;
                    СуммаНДС = СуммаНДС + СтрокаТовары.СуммаНДС;
                    
                    Если ЕстьСкидки Тогда
                        ВсегоСкидок = ВсегоСкидок + СтрокаТовары.СуммаСкидки;
                        ВсегоБезСкидок = ВсегоБезСкидок + СтрокаТовары.СуммаБезСкидки;
                    КонецЕсли;
                
                    Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда
                        СуммаНДСПоСтавке = СоответствиеСтавокНДС[СтрокаТовары.СтавкаНДС];
                        Если СуммаНДСПоСтавке = Неопределено Тогда
                            СуммаНДСПоСтавке = 0;
                        КонецЕсли;
                        СоответствиеСтавокНДС.Вставить(СтрокаТовары.СтавкаНДС, СуммаНДСПоСтавке + СтрокаТовары.СуммаНДС);
                    КонецЕсли;
                
                КонецЕсли;
                
            КонецЦикла;
            
            СтруктураДанныхВсегоСкидки = Новый Структура;
            
            // Подвал таблицы "Товары"
            Если ЕстьСкидки Тогда
                СтруктураДанныхВсегоСкидки.Вставить("ВсегоСкидок", ?(ЗаголовокСкидки.ТолькоНаценка,-ВсегоСкидок, ВсегоСкидок));
                СтруктураДанныхВсегоСкидки.Вставить("ВсегоБезСкидок", ВсегоБезСкидок);
                Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда
                    СтруктураДанныхВсегоСкидки.Вставить("ВсегоСуммаНДС", СуммаНДС);
                КонецЕсли;
            КонецЕсли;
            СтруктураДанныхВсегоСкидки.Вставить("Всего", ФормированиеПечатныхФорм.ФорматСумм(Сумма));
            ОбластьПодвалТаблицы.Параметры.Заполнить(СтруктураДанныхВсегоСкидки);
            ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы);
            
            // Область "ПодвалТаблицыНДС"
            Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда
                
                Для Каждого ТекСтавкаНДС Из СоответствиеСтавокНДС Цикл
                    СтруктураДанныхПодвалНДС = Новый Структура;
                    СтруктураДанныхПодвалНДС.Вставить("НДС", ФормированиеПечатныхФорм.ТекстНДСПоСтавке(ТекСтавкаНДС.Ключ, ДанныеПечати.ЦенаВключаетНДС));
                    СтруктураДанныхПодвалНДС.Вставить("ВсегоНДС", ФормированиеПечатныхФорм.ФорматСумм(ТекСтавкаНДС.Значение, ,"-"));
                    ОбластьПодвалНДС.Параметры.Заполнить(СтруктураДанныхПодвалНДС);
                    ТабличныйДокумент.Вывести(ОбластьПодвалНДС);
                    
                КонецЦикла;
                СтруктураДанныхПодвалВсегоСНДС = Новый Структура;
                СтруктураДанныхПодвалНДС.Вставить("ВсегоСНДС", ФормированиеПечатныхФорм.ФорматСумм(Сумма + ?(ДанныеПечати.ЦенаВключаетНДС, 0, СуммаНДС)));
                ОбластьПодвалСНДС.Параметры.Заполнить(СтруктураДанныхПодвалНДС);
                ТабличныйДокумент.Вывести(ОбластьПодвалСНДС);
                
            Иначе
                СтруктураДанныхПодвалНДС = Новый Структура;
                СтруктураДанныхПодвалНДС.Вставить("НДС", НСтр("ru='Без налога (НДС)'"));
                СтруктураДанныхПодвалНДС.Вставить("ВсегоНДС", "-");
                ОбластьПодвалНДС.Параметры.Заполнить(СтруктураДанныхПодвалНДС);
                ТабличныйДокумент.Вывести(ОбластьПодвалНДС);
            КонецЕсли;
            
            // Вывести Сумму прописью
            СуммаКПрописи = Сумма + ?(ДанныеПечати.ЦенаВключаетНДС, 0, СуммаНДС);
            ИтоговаяСтрока = НСтр("ru='Всего наименований %Количество%, на сумму %Сумма%'");
            ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Количество%", НомерСтроки);
            ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Сумма%",      ФормированиеПечатныхФорм.ФорматСумм(СуммаКПрописи, ДанныеПечати.Валюта));
            
            СтруктураДанныхСуммаПрописью = Новый Структура;
            Если ДанныеПечати.СчетКВозврату Тогда
                
                СуммаКВозврату = ДанныеПечати.СуммаКВозврату;
                СуммаИтого = СуммаКПрописи-СуммаКВозврату;
                Если СуммаИтого < 0 Тогда
                    СуммаИтого = 0;
                КонецЕсли;
                СтруктураДанныхСуммаПрописью.Вставить("СуммаВозврата", ФормированиеПечатныхФорм.ФорматСумм(СуммаКВозврату, ДанныеПечати.Валюта));
                СтруктураДанныхСуммаПрописью.Вставить("СуммаИтогоКОплате", ФормированиеПечатныхФорм.ФорматСумм(СуммаИтого, ДанныеПечати.Валюта, "0"));
                СтруктураДанныхСуммаПрописью.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаИтого, ДанныеПечати.Валюта));
            Иначе
                
                СтруктураДанныхСуммаПрописью.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаКПрописи, ДанныеПечати.Валюта));
            КонецЕсли;
            
            СтруктураДанныхСуммаПрописью.Вставить("ИтоговаяСтрока", ИтоговаяСтрока);
            ОбластьСуммаПрописью.Параметры.Заполнить(СтруктураДанныхСуммаПрописью);
            ТабличныйДокумент.Вывести(ОбластьСуммаПрописью);
        КонецЕсли;
        ЗаполнитьРеквизитыПодвалаСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, СоответствиеСтавокНДС, ПараметрыПечати);
        
        ЗавершениеДляПечатиКомплектов(КомплектыПечати, КомплектПечатиПоСсылке, ТабличныйДокумент, НомерСтрокиНачало);
        
        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
        
    КонецЦикла;
    
КонецПроцедуры


Функция ШтрихКодСервер(ТоварП)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ШтрихкодыНоменклатуры.Штрихкод
        |ИЗ
        |    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
        |ГДЕ
        |    ШтрихкодыНоменклатуры.Номенклатура = &Товар";

    Запрос.УстановитьПараметр("Товар", ТоварП);

    РЗ = Запрос.Выполнить();

    Возврат РЗ;

КонецФункции


Как лучше всего сотворить чудо ?

Petre Подменю пользователя
сообщение 13.10.14, 14:57
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2903
Из: Київ, Україна
Спасибо сказали: 1145 раз
Рейтинг: 1225

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


Про запросы в цикле и вообще обход ТЧ вместо запроса к ТЧ пока промолчу.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

EvgenM Подменю пользователя
сообщение 13.10.14, 15:20
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Petre @ 13.10.14, 14:57) *
Про запросы в цикле и вообще обход ТЧ вместо запроса к ТЧ пока промолчу.

Согласен, самому стыдно было выкладывать код.
Но отчет нужен был как обычно на "вчера", а у меня только так получилось.
В дальнейшем конечно переделаю, ну во всяком случае хочется в это верить.


По совету - ошибку дает.
{ВнешняяОбработка.СчетНаОплатуЕЮ.МодульОбъекта(912)}: Значение не является значением объектного типа (Штрихкод)
        ШК = ВЗ.Штрихкод;

Petre Подменю пользователя
сообщение 13.10.14, 15:36
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2903
Из: Київ, Україна
Спасибо сказали: 1145 раз
Рейтинг: 1225

Это я погорячился.
Вместо:
ВЗ = РЗ.Выбрать().Следующий();

Правильно так:
ВЗ = РЗ.Выбрать();
ВЗ.Следующий();


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: EvgenM,

EvgenM Подменю пользователя
сообщение 13.10.14, 15:43
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Petre, СПАСИБИЩЕ !!!
Все получилось (правда пока на тестовой), но думаю на основной трабл не возникнет.

EvgenM Подменю пользователя
сообщение 14.10.14, 7:07
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

Petre, можно пару вопросов по самому коду ?
Тут как бы разобраться хочется . ))

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


Petre Подменю пользователя
сообщение 14.10.14, 8:43
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2903
Из: Київ, Україна
Спасибо сказали: 1145 раз
Рейтинг: 1225

ВЗ = РЗ.Выбрать();

Здесь мы из результата запроса получаем выборку запроса.

Цитата(EvgenM @ 14.10.14, 8:07) *
опять слегка не понятно, если мы запросом вытягиваем только значение штрих-кода
зачем тогда в переменной еще и указание на ШК ?


Вопрос не понятен.
Запросом мы вытягиваем записи из БД. Записи могут иметь от одного до нескольких полей. В данном случае запросом мы вытягиваем записи с одним полем. Вот к этому полю ("Штрихкод") мы и обращаемся.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: EvgenM,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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