1С 7.7 ТиС 9.2
Хочу поправить внешнюю печатную форму ПоступленияТМЦ - postup.ert так, чтобы на печать выводился Аналог (если но есть) или Номенклатура (если его нет).
Вставил ТекстЗапроса в печатную форму:
Соответственно, в Таблице СокрЛП(Докум.Номенклатура.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Докум.Номенклатура.Артикул), "") заменил на СокрЛП(ПечНоменклатура) и добавил колонку СокрЛП(ПечАртикул).
Ошибок не выдает, но и аналоги не печатает. Что-то не так с кодом. ПОДСКАЖИТЕ!!!!!!
Хочу поправить внешнюю печатную форму ПоступленияТМЦ - postup.ert так, чтобы на печать выводился Аналог (если но есть) или Номенклатура (если его нет).
Вставил ТекстЗапроса в печатную форму:
Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
Перем НачПовт, КонПовт;
Таблица = СоздатьОбъект("ТаблицаЗначений");
СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
Таблица.НоваяКолонка ("Номенклатура");
Таблица.Свернуть("Номенклатура","");
Таблица.Выгрузить(СписокНоменклатуры,,,"Номенклатура");
ТекстЗапроса =
"
|Номенклатура = Справочник.Аналоги.Владелец;
|Аналог = Справочник.Аналоги.ТекущийЭлемент;
|Поставщик = Справочник.Аналоги.Каталог.ВладелецКаталога;
|Артикул = Справочник.Аналоги.ИдентификаторВКаталоге;
|Группировка Номенклатура без групп;
|Группировка Аналог без групп;
|Условие(Номенклатура в СписокНоменклатуры);
|Условие(Поставщик = СокрЛП(Докум.Контрагент.ЮрФизЛицо.Наименование));
|Условие(Номенклатура = СокрЛП(Докум.Номенклатура.Наименование));
|"
;
Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
ТаблицаАналогов = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТаблицаАналогов,0,0);
Потом:
Пока Докум.ПолучитьСтроку() = 1 Цикл
НомСтроки = НомСтроки + 1;
Строчка = 0;
Если ТаблицаАналогов.НайтиЗначение(Докум.Номенклатура.Наименование,Строчка,"Номенклатура") = 1 Тогда
Аналог = ТаблицаАналогов.ПолучитьЗначение(Строчка,"Аналог");
ПечНоменклатура = Докум.Аналог.Наименование;
ПечАртикул = Докум.Аналог.ИдентификаторВКаталоге;
Иначе
ПечНоменклатура = Докум.Номенклатура.Наименование;
ПечАртикул = Докум.Номенклатура.Артикул;
КонецЕсли;
ПоказатьСоответственно, в Таблице СокрЛП(Докум.Номенклатура.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Докум.Номенклатура.Артикул), "") заменил на СокрЛП(ПечНоменклатура) и добавил колонку СокрЛП(ПечАртикул).
Ошибок не выдает, но и аналоги не печатает. Что-то не так с кодом. ПОДСКАЖИТЕ!!!!!!
По теме из базы знаний
- Печать прайс-листа с фото
- Экранная номенклатура
- Пример переноса справочников, документов и движений через Эксель и "Конвертацию данных 2" из оптовой учетной системы 1С 7.7 Комплексной 4.2 и розничной учетной системы Рарус Торговый комплекс -> в 1С 8.3 ЕРП 2.4 (расширение и дополнительные реквизиты)
- Управление ассортиментом в Комплексной 1С 7.7 (оптовая торговля). Анализ выполнения плана по ассортименту для Комплексной 1С 7.7
- Как мы адресный склад внедряли на КА 2
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Самоделкин,
а где заполнение Таблицы?
Таблица = СоздатьОбъект("ТаблицаЗначений");
СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
Таблица.НоваяКолонка ("Номенклатура");
Таблица.Свернуть("Номенклатура","");
Таблица.Выгрузить(СписокНоменклатуры,,,"Номенклатура");
а где заполнение Таблицы?
Главная ошибка в условиях запроса.
Во-первых, строка сравнивается с элементом справочника.
Во-вторых, пока Докум.Номенклатура имеет неопределенное значение вне цикла "Пока Докум.ПолучитьСтроку() = 1 Цикл"
В-третьих в (3) уже сказали.
|Условие(Поставщик = СокрЛП(Докум.Контрагент.ЮрФизЛицо.Наименование));
|Условие(Номенклатура = СокрЛП(Докум.Номенклатура.Наименование));
Во-первых, строка сравнивается с элементом справочника.
Во-вторых, пока Докум.Номенклатура имеет неопределенное значение вне цикла "Пока Докум.ПолучитьСтроку() = 1 Цикл"
В-третьих в (3) уже сказали.
(12) Самоделкин, чет такое штоль надо:
Но оно только первый попавшийся аналог возвращает.
Докум.ВыбратьСтроки();
Пока Докум.ПолучитьСтроку() = 1 Цикл
ТекНомен=Докум.Номенклатура;
СпрАналоги.ИспользоватьВладельца(ТекНомен);
СпрАналоги.ВыбратьЭлементы();
ТекНаимАналог="";
Если СпрАналоги.ПолучитьЭлемент()=1 Тогда
ТекНаимАналог=СокрЛП(СпрАналоги.ТекущийЭлемент().Наименование);
КонецЕсли;
ПечНоменкалатура=?(ПустаяСтрока(ТекНаимАналог)=0,ТекНаимАналог,СокрЛП(ТекНомен.Наименование));
Сообщить(ПечНоменкалатура);
КонецЦикла;
ПоказатьНо оно только первый попавшийся аналог возвращает.
(19) vcv, запросы это, конечно, хорошо. Но он попросил переделать уже имеющийся файл в котором попозициооный перебор дока имеется.
Изобразил то, что требует меньше телодвижений. И проще для понимания (ориентировался на изображенный код).
Ну и автор заявил что не критично сие...
Если со временем потребуется оптимизация - поднимет ветку и будет копать углубленно. :)
Изобразил то, что требует меньше телодвижений. И проще для понимания (ориентировался на изображенный код).
Ну и автор заявил что не критично сие...
Если со временем потребуется оптимизация - поднимет ветку и будет копать углубленно. :)
(12) Самоделкин,
Сначала правильно сформировать список номенклатуры, по которому фильтровать аналоги.
Потом сделать правильные условия в запросе:
Контрагент = Докум.Контрагент;
|Условие(Номенклатура в СписокНоменклатуры);
|Условие(Поставщик = Контрагент);
Проверить, что запрос вернул с аналоги с помощью
вставив эту строчку после Запрос.Выгрузить.
Строки с ПечНоменклатура и ПечАртикул заменить на
и
Где-то так...
Можно еще артикул аналога брать из результатов запроса, не зря же он там есть :)
vcv, не подскажите как поправить?
Сначала правильно сформировать список номенклатуры, по которому фильтровать аналоги.
Таблица = СоздатьОбъект("ТаблицаЗначений");
Докум.ВыгрузитьТабличнуюЧасть(Таблица,"Номенклатура");
Таблица.Свернуть("Номенклатура","");
СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
Таблица.Выгрузить(СписокНоменклатуры,,,"Номенклатура");
Потом сделать правильные условия в запросе:
Контрагент = Докум.Контрагент;
|Условие(Номенклатура в СписокНоменклатуры);
|Условие(Поставщик = Контрагент);
Проверить, что запрос вернул с аналоги с помощью
ТаблицаАналогов.ВыбратьСтроку()
вставив эту строчку после Запрос.Выгрузить.
Строки с ПечНоменклатура и ПечАртикул заменить на
ПечНоменклатура = СокрЛП(Аналог.ПолнНаименование);
ПечАртикул = Аналог.ИдентификаторВКаталоге;
ПечНоменклатура = СокрЛП(Докум.Номенклатура.ПолнНаименование);
ПечАртикул = Докум.Номенклатура.Артикул;
ПечАртикул = Докум.Номенклатура.Артикул;
Где-то так...
Можно еще артикул аналога брать из результатов запроса, не зря же он там есть :)
(18) vcv,
проверил, выдает все правильно.
Изначально было почти также
потом уже стал изгаляться.
Но все-равно не выводит на печать аналог.
ТаблицаАналогов.ВыбратьСтроку()
проверил, выдает все правильно.
Изначально было почти также
ПечНоменклатура = СокрЛП(Аналог.ПолнНаименование);
ПечАртикул = Аналог.ИдентификаторВКаталоге;
потом уже стал изгаляться.
Но все-равно не выводит на печать аналог.
(2) Frogger1971, ТаблицаАналогов ничего не ищет. СокрЛП(Докум.Номенклатура.Наименование) - работает.
немного переделал:
но все-равно не работает.
(3) Frogger1971, по этому пункту можно поподробней?
немного переделал:
Таблица = СоздатьОбъект("ТаблицаЗначений");
Докум.ВыгрузитьТабличнуюЧасть(Таблица,"Номенклатура");
Таблица.Свернуть("Номенклатура","");
СписокНоменклатуры = СоздатьОбъект("СписокЗначений");
Таблица.Выгрузить(СписокНоменклатуры,,,"Номенклатура");
но все-равно не работает.
(3) Frogger1971, по этому пункту можно поподробней?
(11) vcv, мне теперь тоже кое-что про автора припоминается, см. ниже.
(13) falcon,
Правда, с программированием такой подход не очень-то прокатывает.
(13) falcon,
объясни вот этот участок
Такие вещи объяснены давным-давно - у Николая Васильевича Гоголя в "Мертвых душах":
Видно, что повар руководствовался более каким-то вдохновеньем и клал первое, что попадалось под руку: стоял ли возле него перец - он сыпал перец, капуста ли попалась - совал капусту, пичкал молоко, ветчину, горох - словом, катай-валяй, было бы горячо, а вкус какой-нибудь, верно, выдет.
Правда, с программированием такой подход не очень-то прокатывает.
(0) объясни вот этот участок
если у тебя в Аналоге есть уже значение, зачем вся эта эпопея с запросом и поиском если нет, тогда почему для печати ты используешь то, что в документе, а не то что нашел да и зачем тогда Аналогв документе?
Аналог = ТаблицаАналогов.ПолучитьЗначение(Строчка,"Аналог");
ПечНоменклатура = Докум.Аналог.Наименование;
если у тебя в Аналоге есть уже значение, зачем вся эта эпопея с запросом и поиском если нет, тогда почему для печати ты используешь то, что в документе, а не то что нашел да и зачем тогда Аналогв документе?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот